Przejdź do treści
SEO Kraków
Podstawy SEO

SEO strony w JavaScript: co widzi Google przed i po renderowaniu?

Porównaj HTML źródłowy i renderowany DOM. Sprawdź treść, linki, canonical i wynik Inspekcji URL, zanim ocenisz SEO strony w JavaScript.

· 7 min czytania

SEO strony w JavaScript: co widzi Google przed i po renderowaniu?

SEO strony w JavaScript wymaga porównania odpowiedzi HTML serwera z kodem po wykonaniu skryptów. Google może renderować JavaScript, lecz widoczność treści zależy od dostępnych zasobów, poprawnych linków i sygnałów indeksowania. Sprawdź oba stany w narzędziach przeglądarki oraz w Inspekcji URL Search Console, zanim uznasz pusty HTML za błąd.

Jak Google przechodzi od odpowiedzi serwera do renderu?

Googlebot najpierw pobiera adres URL. Sprawdza zasady dostępu, status odpowiedzi i kod HTML, który serwer zwrócił bez udziału przeglądarki. Z tego dokumentu może już wyodrębnić standardowe linki. Stronę z odpowiedzią 200, jeśli nie blokuje jej reguła indeksowania, przekazuje do kolejki renderowania. Następnie mechanizm oparty na Chromium wykonuje dostępny JavaScript i analizuje powstały dokument. Dokumentacja Google o JavaScript SEO opisuje właśnie tę kolejność.

Nie ma jednej gwarantowanej liczby sekund między pobraniem a renderowaniem. Dlatego treść widoczna wyłącznie po uruchomieniu skryptu tworzy dodatkową zależność: skrypt, jego żądania sieciowe i komponent muszą zadziałać. Sam fakt użycia Reacta, Vue czy innej biblioteki nie rozstrzyga o problemie. Decyduje wynik dla konkretnego adresu URL i konkretnego zasobu. Dla strony usługowej szczególnie ważne są opis usługi, lokalizacja, cennik lub warunki oferty, nagłówek i link do kontaktu.

Pusty kod źródłowy nie oznacza automatycznie braku indeksacji. Google może zobaczyć treść po renderze. Z drugiej strony pełny widok w Twojej zalogowanej przeglądarce nie dowodzi, że robot otrzymał to samo: sesja, zgoda na cookies lub odpowiedź API mogą zmieniać wynik. W diagnozie trzeba oddzielić możliwości Google od tego, co rzeczywiście stało się z badanym URL-em.

HTML źródłowy i wyrenderowany DOM: porównanie na przykładzie

Poniższy przykład jest demonstracyjny. Nie pochodzi z audytu seo-krakow.pl ani z żadnego rzeczywistego klienta. Załóżmy stronę usługi w Krakowie, której serwer odsyła ogólny szkielet aplikacji. Po wykonaniu skryptu przeglądarka dodaje właściwy nagłówek, opis i link do formularza. Różnica jest sygnałem do badania, a nie gotowym werdyktem.

``html <!-- Odpowiedź serwera: przykład --> <title>Usługi | Firma</title> <div id="app"></div> <script src="/assets/app.js"></script> ``

``html <!-- DOM po poprawnym renderowaniu: przykład --> <title>Projektowanie ogrodów Kraków | Firma</title> <main><h1>Projektowanie ogrodów w Krakowie</h1> <p>Projektujemy ogrody przy domach i firmach w Krakowie.</p> <a href="/kontakt/">Zapytaj o projekt</a></main> ``

Element — zestawienie
ElementHTML odpowiedziDOM po renderzePytanie kontrolne
Tytuł i H1Ogólny tytuł, brak H1Tytuł usługi i H1Czy Google widzi wersję specyficzną dla URL-a?
Treść głównaBrakOpis usługiCzy wynik renderowania zawiera opis bez interakcji?
Link wewnętrznyBrakStandardowe hrefCzy adres jest odkrywany także przez inne strony?
Canonical i robotsDo sprawdzenia w obu stanachDo sprawdzenia po zmianach JSCzy skrypt nie zmienia intencji indeksowania?
Dane strukturalneMogą być w źródle lub DOMPowinny odpowiadać widocznej treściCzy test Google widzi zgodny obiekt?

Jeżeli po renderze brak opisu, trzeba znaleźć przyczynę: nieudane żądanie API, błąd skryptu, zasób zablokowany dla robota, wymóg logowania albo treść ładowaną dopiero po kliknięciu. Jeśli render zawiera opis, kolejnym pytaniem jest indeksowanie i wybór kanonicznego adresu. Tego nie rozstrzyga zrzut ekranu aplikacji. Użyj Inspekcji URL i sprawdź dane Google dla dokładnie tej strony.

Trzy pierwsze zagadnienia poradnika: JavaScript SEO
Schemat najważniejszych decyzji opisanych w poradniku.

Co porównać dla jednego adresu URL?

Zacznij od statusu HTTP i adresu końcowego po przekierowaniach. Strona usługowa powinna odsyłać sensowną odpowiedź dla robota bez wymogu zalogowania. Potem zapisz HTML odpowiedzi, otwórz ten sam URL w przeglądarce z włączonym JavaScriptem i porównaj dokument po renderze. W Search Console użyj testu bieżącego adresu, obejrzyj wyrenderowany HTML i zasoby strony. Pamiętaj, że test bieżący i stan w indeksie opisują inne momenty.

W obu stanach poszukaj title, opisu meta, H1, głównej treści, atrybutu canonical, dyrektywy robots, linków z href oraz danych strukturalnych. Zapisz różnice w tabeli, zamiast stwierdzać ogólnie, że „Google nie widzi strony”. Zwróć uwagę, czy skrypt nie podmienia canonicala na stronę główną albo nie dodaje noindex po błędzie. Nie zakładaj jednak, że każdy element musi być identyczny przed renderem i po nim. Istotna jest zgodność ostatecznego dokumentu z zamierzoną podstroną oraz możliwość jego uzyskania przez Google.

Narzędzia deweloperskie przeglądarki pomagają znaleźć błędy konsoli i nieudane żądania sieciowe. Crawler uruchomiony raz bez JavaScriptu i raz z renderowaniem pokaże skalę różnic w wielu adresach. To przydatne zwłaszcza dla powtarzalnego szablonu kategorii lub usługi. Sprawdź próbkę ręcznie, zanim zautomatyzowany wynik uznasz za dowód. Crawler i Google mogą mieć różny czas, dostęp do zasobów i kontekst, więc kontrola w Search Console pozostaje potrzebna.

Jak przeprowadzić test renderowania krok po kroku?

  1. Wybierz trzy reprezentatywne adresy: usługę, wpis blogowy i stronę kontaktu. Dodaj wariant o największej różnicy między widokiem a kodem źródłowym.
  2. Zapisz status HTTP, docelowy adres, HTML odpowiedzi i reguły dostępu dla strony oraz jej skryptów. Zaznacz, kiedy pobrano próbkę.
  3. Otwórz stronę bez logowania i uruchom JavaScript. Zapisz DOM po załadowaniu oraz błędy konsoli i sieci.
  4. Porównaj tytuł, H1, treść, linki, canonical, robots i dane strukturalne. Przypisz każdej różnicy wpływ na odkrywanie lub interpretację URL-a.
  5. W Inspekcji URL uruchom test na żywo, obejrzyj wyrenderowaną stronę i jej zasoby. Porównaj wynik z tym, co zapisano lokalnie.
  6. Jeśli elementu brakuje, napraw konkretną zależność i powtórz test. Następnie obserwuj stan indeksowania, bo pojedynczy test nie oznacza natychmiastowej aktualizacji indeksu.

Przykładowy protokół może mieć kolumny: URL, element, odpowiedź serwera, lokalny DOM, test Google, hipoteza, poprawka, data ponownego sprawdzenia. Wpis „brak” jest użyteczny tylko wtedy, gdy wiadomo, w której kolumnie wystąpił. Dzięki temu deweloper może odtworzyć błąd, a osoba odpowiedzialna za SEO może ocenić, czy poprawka dotyczy szablonu, pojedynczego adresu czy konfiguracji serwera. To także ułatwia rozdzielenie problemu renderu od opisanych osobno stanów indeksowania.

Kiedy wybrać SSR, generowanie statyczne lub render w przeglądarce?

Renderowanie po stronie serwera (SSR) oznacza, że odpowiedź zawiera już treść potrzebną na stronie. Generowanie statyczne przygotowuje taki HTML wcześniej, podczas budowy witryny. Renderowanie po stronie klienta (CSR) dostarcza szkielet i tworzy treść później w przeglądarce. Każdy model może współistnieć z interaktywnymi komponentami. Wybór zależy od tego, jak często zmieniają się dane, jak szybko trzeba odsyłać treść i czy aplikacja może stabilnie pobrać wszystkie zależności.

Dla strony usługi, kategorii lub artykułu warto zapewnić najważniejszy tekst, H1 i nawigację w HTML wysyłanym przez serwer, jeśli architektura projektu na to pozwala. To upraszcza odkrywanie treści przez różne roboty i zmniejsza liczbę warunków koniecznych do jej pokazania. Nie oznacza to automatycznej przewagi rankingowej samego skrótu SSR. Nadal liczą się jakość informacji, dostępność URL-i, linkowanie i techniczne sygnały indeksowania. Przebudowa architektury bez zdiagnozowanego problemu może kosztować więcej niż naprawa jednego endpointu API.

Jeśli pozostajesz przy CSR, utrzymuj zasoby publicznie dostępne, twórz standardowe linki z href, zapewnij stabilny stan po renderze i testuj konkretne szablony. Krytyczna treść nie powinna wymagać kliknięcia przycisku, podania zgody lub przewinięcia na określoną odległość. Lazy loading może obsługiwać obrazy i elementy dodatkowe, ale nie powinien ukrywać jedynego opisu produktu przed renderem. Część problemów jest też powiązana z wydajnością, dlatego po rozwiązaniu dostępu do treści warto sprawdzić Core Web Vitals.

Co zrobić po znalezieniu różnicy?

Najpierw nazwij brakujący element i ustal, czy problem jest powtarzalny. Jeśli wszystkie podstrony usług mają ten sam ogólny tytuł, przeanalizuj szablon. Jeśli tylko jeden wpis nie ma opisu, sprawdź dane wejściowe i odpowiedź API. Gdy dokument po renderze jest pełny, ale URL nie jest w indeksie, sprawdź canonical, noindex, jakość strony i linkowanie. Mieszanie tych przyczyn prowadzi do przypadkowych zmian, po których trudno ocenić wynik.

Poprawkę weryfikuj w trzech warstwach: odpowiedź serwera, renderowany dokument i odczyt Google. Zapisz datę wdrożenia, sprawdź URL ponownie po przetworzeniu i oceń, czy błąd zniknął także na innych stronach korzystających z komponentu. Przegląd całej witryny możesz rozpocząć od audytu technicznego SEO albo szerszego audytu SEO. Ten artykuł skupia się na renderowaniu, a ogólna lista obszarów kontroli jest w przewodniku po SEO technicznym.

Co sprawdzić dalej?

Temat łączy się z kolejnymi decyzjami w serwisie. Zobacz także mapa witryny xml, wykryto obecnie nie zindeksowano oraz kanoniczny url.

Przeczytaj też

FAQ

Pytania i odpowiedzi

Nie ma tu Twojego pytania? Napisz do nas.

Czy Google wykonuje JavaScript na stronie?

Tak, Google może renderować strony przy użyciu Chromium i analizować powstały HTML. Wynik zależy jednak od dostępności strony i zasobów, więc sprawdź konkretny URL w Search Console.

Czy pusty HTML źródłowy oznacza brak indeksowania?

Nie, sama pusta powłoka nie przesądza o wyniku. Jeżeli Google poprawnie wyrenderuje treść, może ją wykorzystać, lecz trzeba to potwierdzić dla badanej strony.

Czy widok w mojej przeglądarce wystarczy jako dowód?

Nie, przeglądarka może mieć sesję i dane niedostępne dla robota. Porównaj wynik bez logowania z testem bieżącego URL-a w Search Console.

Który dokument porównywać najpierw?

Najpierw zapisz odpowiedź serwera, aby wiedzieć, co jest dostępne bez skryptów. Następnie porównaj ją z DOM po renderze oraz wynikiem testu Google.

Czy link obsługiwany tylko przez kliknięcie jest bezpieczny dla odkrywania?

Nie zakładaj tego, bo robot wyszukuje przede wszystkim adresy w standardowych linkach. Dla ważnej nawigacji użyj elementu `a` z prawdziwym `href`.

Czy SSR jest wymagane przez Google?

Nie ma ogólnego wymogu stosowania SSR. Jest to przydatna metoda udostępnienia głównej treści już w odpowiedzi, zwłaszcza gdy render klienta jest zawodny.

Co zrobić, gdy treść pojawia się dopiero po kliknięciu?

Udostępnij ważną treść i linki bez wymagania tej interakcji. Potem przetestuj wynik w renderowanej wersji strony oraz w Inspekcji URL.

Czy dane strukturalne mogą być dodane przez skrypt?

Mogą, jeśli Google widzi je po renderowaniu i odpowiadają widocznej treści. Sprawdź ostateczny dokument i wynik testu dla konkretnego typu danych.

Dlaczego test bieżący różni się od stanu indeksu?

Test bieżący bada aktualną wersję, a indeks może zawierać wcześniejszy odczyt. Zapisz daty obu wyników i obserwuj stronę po kolejnym przetworzeniu.

Od czego zacząć naprawę wielu stron?

Wybierz reprezentatywny szablon i ustal wspólną przyczynę różnicy. Popraw komponent lub źródło danych, a potem sprawdź próbkę adresów z tej samej grupy.

Bezpłatny audyt SEO

Sprawdźmy, co blokuje Twoją stronę

Sprawdzimy indeksację, szybkość na telefonie, treści i wizytówkę Google. Omówimy wyniki na krótkiej rozmowie. Bez zobowiązań.

Nazwa
SEO Kraków
Obszar działania
Kraków i województwo małopolskie
Godziny odpowiedzi
pon.–pt., 9:00–17:00. Odpowiadamy w ciągu jednego dnia roboczego.
WhatsAppBezpłatny audyt