Google widzi treść ładowaną przez JavaScript, bo Googlebot po pobraniu kodu HTML uruchamia skrypty w przeglądarce headless Chromium i indeksuje dopiero wyrenderowaną stronę. Dotyczy to sklepów, w których listę produktów wczytuje skrypt, stron zbudowanych na React, Vue lub Next.js i każdego elementu, który dopisuje tekst już po załadowaniu strony. Są jednak warunki: skrypty nie mogą być zablokowane, strona musi zwracać kod 200, a treść ma pojawiać się bez kliknięcia i przewijania. To, co z Twojej strony faktycznie trafiło do indeksu, sprawdzisz w Google Search Console.
Czym różni się renderowanie od pobrania strony przez Googlebota?
Pobranie strony, czyli crawlowanie, to ściągnięcie surowego kodu HTML z serwera. Renderowanie to wykonanie na tym kodzie skryptów JavaScript i zastosowanie arkuszy CSS, tak jak robi to przeglądarka; dopiero wynik tego kroku Google indeksuje. O tym, czym crawlowanie różni się od indeksowania i jak widać to w statusach Search Console, pisaliśmy we wpisie Crawlowanie a indeksowanie: czym się różnią?
Dokumentacja Google Search Central opisuje trzy fazy przetwarzania strony z JavaScriptem:
| Faza | Co się dzieje | Co Google widzi na tym etapie |
|---|---|---|
| Crawlowanie | Googlebot pobiera kod HTML z serwera i zbiera adresy z atrybutów href | Surowy HTML bez treści dopisywanej przez skrypty |
| Renderowanie | Strona z kodem HTTP 200 trafia do kolejki renderowania, gdzie headless Chromium wykonuje JavaScript | Stronę tak, jak widzi ją użytkownik po załadowaniu skryptów |
| Indeksowanie | Google zapisuje wyrenderowany HTML w indeksie i wyodrębnia z niego kolejne linki | Pełną treść, w tym tę wczytaną przez JavaScript |
Dla właściciela strony oznacza to, że jeśli opis oferty pojawia się dopiero po wykonaniu skryptu, Google zobaczy go w drugiej fazie, a nie w pierwszej.
Czy Googlebot wykonuje JavaScript i jak to robi?
Tak, Googlebot wykonuje JavaScript w przeglądarce headless Chromium, czyli w Chrome uruchomionym bez okna na serwerach Google. Zgodnie z dokumentacją Search Central do kolejki renderowania trafia każda strona z kodem HTTP 200, a Google indeksuje wyłącznie treść widoczną w wyrenderowanym HTML.
Renderowanie odbywa się w kolejce, więc między pobraniem HTML a wykonaniem skryptów mija jakiś czas. Dokumentacja Google nie podaje jego długości, bo zależy on od dostępnych zasobów wyszukiwarki; bywa to kilka sekund, a czasem więcej. W tym czasie w indeksie może być jeszcze poprzednia wersja strony albo może nie być jej wcale.
Do renderowania Googlebot pobiera także pliki JavaScript, arkusze CSS i obrazy, co zużywa limit pobrań opisany we wpisie Co to jest crawl budget? Każdy z tych plików musi być dostępny dla robota: skrypt zablokowany w pliku robots.txt nie zostanie wykonany, a treść, którą miał wczytać, nie wejdzie do indeksu.
Jak sprawdzić, co Google widzi na Twojej stronie?
W Google Search Console, w narzędziu Sprawdzanie adresu URL, zobaczysz zrzut ekranu wyrenderowanej strony i kod HTML po wykonaniu skryptów. Masz do wyboru dwie drogi: podgląd wersji zapisanej w indeksie albo test strony na żywo.
Otwórz narzędzie Sprawdzanie adresu URL
Podaj adres strony. Dowiesz się od razu, czy jest on w indeksie Google.
Jeśli strona jest już w indeksie
Kliknij „Wyświetl zindeksowaną stronę”. Zobaczysz wersję z ostatniego pobrania przez Googlebota, czyli to, co faktycznie jest w indeksie, nawet jeśli od tamtej wizyty strona się zmieniła. Pod „Więcej informacji” znajdziesz listę załadowanych zasobów i kod strony.
Jeśli chcesz sprawdzić aktualną wersję strony
Kliknij „Sprawdź URL wersji opublikowanej”, a po zakończeniu testu „Wyświetl przetestowaną stronę”. Google pobiera i renderuje stronę na bieżąco, więc w ten sposób zobaczysz efekt poprawki wdrożonej przed chwilą.
Porównaj kartę HTML z przeglądarką
Wyszukaj w wyrenderowanym kodzie fragment tekstu, który widzisz na stronie, np. nazwę produktu z listy albo pierwsze zdanie opisu usługi. Jeśli nie znajdziesz go w kodzie, Google nie wykonał skryptu, który ten tekst wczytuje.
Oba podglądy, z indeksu i z testu na żywo, pokazują ten sam zestaw danych: zrzut ekranu wyrenderowanej strony, zwrócony kod HTML, nagłówki HTTP, dane wyjściowe konsoli JavaScript i listę załadowanych zasobów. Konsola JavaScript wskazuje błędy skryptów, a lista zasobów pokazuje pliki, których Googlebot nie mógł pobrać.
Kiedy treść ładowana przez JavaScript nie trafia do indeksu?
Treść ładowana przez JavaScript nie trafia do indeksu, gdy Google nie może wykonać skryptu albo gdy po jego wykonaniu treści nie ma w wyrenderowanym HTML. Dokumentacja Search Central opisuje cztery typowe sytuacje, a w każdej z nich właściciel witryny może coś naprawić.
- Skrypt zablokowany w robots.txt. Google nie renderuje JavaScriptu z plików ani stron zamkniętych przed robotem, więc treść z takiego skryptu nie istnieje dla wyszukiwarki. Rozwiązanie: odblokuj w pliku robots.txt pliki JS i CSS potrzebne do wyświetlenia strony.
- Komunikat o błędzie zamiast kodu błędu. W aplikacji jednostronicowej (SPA) serwer odpowiada kodem 200 na każdy adres, a komunikat „nie znaleziono” wyświetla skrypt. Google trafia na stronę z kodem 200 i bez treści, czyli soft 404. Rozwiązanie zalecane przez Google: przekieruj skryptem na adres, dla którego serwer zwraca prawdziwy kod 404.
- Treść widoczna dopiero po interakcji. Opis, który ładuje się po przewinięciu strony lub kliknięciu „pokaż więcej”, może nie pojawić się przy renderowaniu, jeśli skrypt sam go nie wczyta. Rozwiązanie: wczytuj treść bez udziału użytkownika, zgodnie z wytycznymi Google dotyczącymi lazy loadingu; jak wdrożyć lazy loading, żeby Google widział treść, pokazujemy krok po kroku w osobnym wpisie.
- Nawigacja tylko przez fragment adresu. Adresy podstron w formie
/#/ofertaGooglebot odczytuje zawodnie (Google pisze wprost: „can’t reliably resolve the URLs”). Rozwiązanie: udostępnij osobne adresy obsługiwane przez History API, z pełnym linkiem w atrybuciehref.
W naszych audytach najczęściej spotykamy inny wariant: strony zbudowane na React, Vue lub Next.js bez renderowania po stronie serwera (SSR) ani generowania statycznego (SSG). W przeglądarce widać opis oferty i listę produktów, a po kliknięciu „Wyświetl zindeksowaną stronę” zostaje pusty szablon z nagłówkiem i stopką. Treść główna powstaje bowiem dopiero po stronie klienta, więc wejdzie do indeksu tylko wtedy, gdy skrypt wykonał się w renderowaniu Google bez błędów. Różnica między tym, co widzi właściciel, a tym, co jest w indeksie, wychodzi dopiero w narzędziu Sprawdzanie adresu URL, dlatego ten test jest stałym punktem audytu technicznego w ramach pozycjonowania stron.
Masz stronę na React, Vue albo Next.js?
Sprawdzimy renderowanie w Search Console i podpowiemy, co zrobić, żeby Google widział pełną treść.
Jakie pojęcia wiążą się z renderowaniem JavaScript przez Google?
- Crawlowanie: pobranie kodu HTML strony przez Googlebota, pierwsza z trzech faz; na tym etapie robot zbiera też adresy z atrybutów
href. - Indeksowanie: zapis wyrenderowanej strony w bazie Google; dopiero wtedy może ona pojawić się w wynikach wyszukiwania.
- Headless Chromium: przeglądarka Chrome bez interfejsu graficznego, w której Google wykonuje skrypty podczas renderowania.
- Crawl budget: liczba adresów i plików, w tym skryptów i arkuszy CSS, które Googlebot pobiera z witryny w danym czasie.
- Lazy loading: wczytywanie treści lub obrazów dopiero wtedy, gdy są potrzebne, np. po przewinięciu; jeśli skrypt nie wczyta ich sam, treść może nie trafić do indeksu.
- SSR i SSG: renderowanie po stronie serwera lub podczas budowania strony; treść jest w HTML już na etapie crawlowania, bez czekania na kolejkę renderowania.
- Raport Statystyki indeksowania: zestawienie żądań Googlebota do Twojego serwera w Search Console; omówiliśmy go we wpisie Jak czytać raport Statystyki indeksowania GSC.
Nie wiesz, czy Google widzi opisy i produkty na Twojej stronie?
Napisz do nas, sprawdzimy to i podpowiemy, co zrobić.
FAQ
Nie. Google opisuje obecnie proces jako trzy fazy w jednej kolejce: crawlowanie, renderowanie, indeksowanie. Starszy opis „dwóch fal indeksowania”, w którym skrypty wykonywano dużo później, niż pobierano HTML, nie pojawia się już w dokumentacji Search Central. Czas oczekiwania w kolejce renderowania jest zmienny, a Google nie podaje żadnej liczby sekund ani dni.
Tylko wtedy, gdy trafia ona do wyrenderowanego HTML. Google pisze wprost, że widzi wyłącznie to, co w nim jest, więc element w shadow DOM bez odpowiedniego slotu nie wejdzie do indeksu. Sprawdzisz to na karcie HTML po kliknięciu „Wyświetl przetestowaną stronę”.
Nie. Do kolejki renderowania trafiają wyłącznie strony z kodem HTTP 200. Adres, który zwraca 404 albo 500, nie jest renderowany, więc skrypty na nim nie wykonają się nawet wtedy, gdy w przeglądarce wyświetlają treść.
Tak, w fazie indeksowania Google wyodrębnia adresy z wyrenderowanego HTML, więc linki dopisane skryptem też są uwzględniane. Warunkiem jest pełny adres w atrybucie href; link, który zmienia tylko fragment po znaku #, Googlebot odczytuje zawodnie.
Źródła
- Google Search Central, „Understand JavaScript SEO basics”: developers.google.com
- Google Search Console, pomoc: „Narzędzie do sprawdzania adresów URL”: support.google.com/webmasters
- Google Search Console, pomoc: „Wyświetlanie wyrenderowanego źródła strony”: support.google.com/webmasters
