SEO techniczne / JavaScript24 min czytania

JavaScript SEO - jak przygotować stronę opartą o JS pod SEO?

JavaScript SEO sprawdza, czy strona oparta o JS przekazuje Google pełny dokument: główną treść, linki, status, canonical, meta robots i dane strukturalne. Problem nie zaczyna się od samego JavaScriptu, tylko od pustego HTML-a, zablokowanych zasobów, niestabilnego renderu albo sygnałów innych niż w widoku użytkownika.

Schemat JavaScript SEO pokazujący przejście od źródłowego HTML-a przez renderowany DOM do indeksowania w Google
Definicja w skrócie

JavaScript SEO to sprawdzenie i poprawa stron, w których JavaScript dostarcza treść, linki, routing albo sygnały techniczne. Strona jest przygotowana pod SEO wtedy, gdy Googlebot może pobrać URL, wyrenderować pełny dokument i odczytać główną treść, linki, canonical, meta robots oraz dane strukturalne bez dodatkowej interakcji użytkownika.

01 / ROLA

JavaScript SEO - rola i granice decyzji

JavaScript SEO odpowiada na jedno pytanie: czy publiczny URL oparty o JS jest dla Google pełnym dokumentem, czy tylko interfejsem, który dopiero po stronie klienta próbuje zbudować treść i sygnały SEO.

Zakres tej strony kończy się tam, gdzie render działa poprawnie. Gdy Google widzi pełną treść, linki i sygnały techniczne, dalsza diagnoza przechodzi do indeksowania, wyboru canonicala, jakości treści, linkowania wewnętrznego albo architektury informacji.

Najważniejsze rozróżnienie

JavaScript może być warstwą interakcji albo warstwą dostarczania treści. SEO staje się ryzykowne głównie wtedy, gdy tytuł, H1, opis produktu, cena, lista ofert, linki lub canonical istnieją dopiero po wykonaniu skryptów.

02 / GOOGLEBOT

Jak Google przetwarza JavaScript - crawl, render i indeks

Google przetwarza stronę opartą o JavaScript jako sekwencję: crawling, renderowanie i indeksowanie. Najpierw Googlebot pobiera HTML, sprawdza robots.txt, status HTTP, linki i zasoby, a dopiero później może uruchomić JavaScript w środowisku renderującym.

Pobranie HTML-a

Googlebot pobiera adres URL, sprawdza robots.txt, status HTTP, nagłówki i początkowy kod HTML.

Odkrywanie linków i zasobów

Z HTML-a odczytywane są linki w atrybutach href oraz zasoby potrzebne do renderowania, między innymi CSS i JavaScript.

Renderowanie

Google uruchamia stronę w Web Rendering Service, wykonuje JavaScript i analizuje wyrenderowany HTML.

Indeksowanie

Do indeksu może trafić treść widoczna po przetworzeniu strony, jeśli URL nie jest blokowany przez noindex, canonical, błędy lub niską wartość.

Według dokumentacji Google wyszukiwarka obsługuje JavaScript przy użyciu aktualnego Chromium, ale Googlebot nadal nie zachowuje się jak zalogowany użytkownik w przeglądarce. Nie zakładaj kliknięć, logowania, udzielania zgód, przewijania strony ani zachowania stanu między kolejnymi adresami. Dla większości witryn punktem odniesienia jest wersja mobilna, więc test renderu powinien obejmować mobile, a nie tylko desktop.

03 / RENDER

HTML źródłowy, renderowany DOM i widok użytkownika - co porównywać?

W JavaScript SEO nie wystarczy zobaczyć stronę w przeglądarce. Trzeba porównać trzy wersje: kod HTML zwrócony przez serwer, renderowany DOM po wykonaniu JavaScriptu oraz obraz strony, który widzi użytkownik. Każda różnica może być normalna, ale różnica w treści głównej, linkach i sygnałach SEO wymaga sprawdzenia.

WarstwaCo sprawdzasz?Co oznacza problem?
Źródłowy HTMLTitle, meta robots, canonical, H1, główną treść, linki i dane strukturalne.Jeśli HTML jest pustą powłoką, Google musi czekać na render i poprawne wykonanie JS.
Renderowany DOMTo, co zostaje po uruchomieniu JS, hydratacji, API i komponentów.Jeśli DOM nie zawiera treści, problem może leżeć w błędzie JS, API, blokadzie zasobów albo czasie ładowania.
Widok użytkownikaTreść widoczną na mobile, bez logowania, zgód i specjalnego stanu przeglądarki.Jeśli użytkownik widzi więcej niż Google, porównaj sesję, cookies, geolokalizację, API i lazy loading.
04 / ARCHITEKTURA

SSR, SSG, CSR i prerendering - jak dobrać renderowanie pod SEO?

Model renderowania powinien wynikać z typu URL-a i celu indeksacji. Im bardziej strona ma działać jako wynik Google, tym wcześniej powinna dostarczać treść, linki i sygnały techniczne. Widoki aplikacyjne bez celu indeksacji mogą zostać mocniej po stronie klienta.

ModelKiedy ma sens?Rola SEORyzyko
SSG
Static Site Generation
Treść generowana przed publikacją, np. blog, dokumentacja, landingi, kategorie z rzadkimi zmianami.Dobry wybór, gdy ważna treść może być w HTML-u od pierwszej odpowiedzi.Wymaga dobrego procesu odświeżania danych, żeby strona nie pokazywała nieaktualnych informacji.
SSR
Server-Side Rendering
Strony dynamiczne, produkty, oferty, widoki zależne od danych, które muszą być aktualne przy żądaniu.Ułatwia Google zobaczenie tytułu, H1, treści, linków i danych produktu bez czekania na pełny render po stronie klienta.Może pogorszyć TTFB, jeśli serwer, API albo cache są źle zaprojektowane.
CSR
Client-Side Rendering
Panele, aplikacje po zalogowaniu, narzędzia interaktywne albo sekcje, których Google nie musi indeksować.Może działać, ale wymaga testów renderu, dostępnych zasobów, crawlable links i stabilnego ładowania treści.Pusty app shell, opóźnione API, błędy JS i linki tylko na klik mogą ograniczyć odkrywanie oraz indeksowanie.
Prerendering
Wstępne renderowanie wybranych URL-i
Witryny CSR, w których nie da się szybko przebudować frontu, a część publicznych adresów ma wartość SEO.Może być sensownym pomostem, jeśli użytkownik i Google dostają równoważną treść.Trzeba pilnować aktualności, cache i zgodności treści, żeby nie tworzyć dwóch różnych wersji strony.
Dynamic rendering
Osobny render dla crawlerów
Wyjątkowe przypadki przejściowe, gdy serwis ma poważny problem z JS i nie może od razu wdrożyć SSR lub SSG.Według dokumentacji Google to obejście tymczasowe. Lepszym celem jest SSR, SSG albo hydratacja.Różnice między wersją dla użytkownika i bota mogą wprowadzać błędy diagnostyczne oraz ryzyko niezgodności.

W praktyce decyzja nie dotyczy całej domeny naraz. Ten sam serwis może mieć SSG dla artykułów, SSR dla produktów i CSR dla panelu użytkownika.

Typ URL-aCel SEOPreferowany modelCo musi być dostępne?
Artykuł, strona usługi, landingURL ma odpowiadać na konkretną intencję i pozyskiwać ruch z Google.SSG albo SSRTitle, H1, lead, główna treść, linki i canonical dostępne od pierwszego renderu.
Kategoria, produkt, lista ofertGoogle ma widzieć asortyment, ceny, dostępność, linki do detali i dane strukturalne.SSR, SSG z odświeżaniem albo hybrydaTreść listy, paginacja, status HTTP, self-canonical i schema zgodne z widokiem użytkownika.
Filtr SEO lub paginacjaTylko wybrane warianty mają być samodzielnymi URL-ami w indeksie.SSR/SSG dla wariantów indeksowalnychStały URL, link <a href>, unikalny zakres, canonical i brak zależności od samego scrolla.
Panel, koszyk, konto, konfiguratorWidok ma działać dla użytkownika, ale zwykle nie ma być wynikiem Google.CSR jest zwykle wystarczającyKontrola noindex, dostęp po logowaniu albo brak linkowania do technicznych URL-i.

Najmniej ryzykowny wzorzec dla publicznych stron SEO to dokument, który zawiera podstawową odpowiedź bez kruchej sekwencji skryptów, a JavaScript dopiero wzmacnia interakcję i doświadczenie użytkownika.

05 / ELEMENTY

Co musi być dostępne dla Google na stronie opartej o JS?

Google musi widzieć te elementy, które określają temat dokumentu, adres reprezentatywny, możliwość indeksowania i dalsze ścieżki crawlowania. Przy JavaScript SEO kontroluje się nie tylko treść, ale cały zestaw sygnałów przed i po renderowaniu.

ElementWymaganieDlaczego?
Title i meta descriptionPowinny być unikalne i zgodne z właściwym URL-em.To podstawowy opis dokumentu i kontekstu wyniku w Google.
H1 i główna treśćPowinny być dostępne w HTML-u albo stabilnie widoczne w renderowanym DOM.Bez nich Google może zobaczyć powłokę aplikacji zamiast strony o konkretnej intencji.
Linki wewnętrzneUżywaj elementów <a> z atrybutem href prowadzącym do prawdziwego URL-a.Google odkrywa adresy przede wszystkim z linków, a nie z samej obsługi kliknięcia w JavaScripcie.
CanonicalNajbezpieczniej umieszczać go w HTML head i nie zmieniać na inną wartość po renderze.Sprzeczny canonical utrudnia wybór reprezentatywnego adresu.
Meta robotsNoindex powinien być świadomą decyzją, a nie efektem błędu w szablonie lub API.Przypadkowy noindex w renderze może wykluczyć stronę z wyników.
Dane strukturalneSchema musi opisywać treść widoczną dla użytkownika i być obecna po renderowaniu.Google może odrzucić dane, które nie pasują do widocznej zawartości strony.
06 / LINKI

Linki i routing SPA - czyste URL-e zamiast widoków ukrytych za kliknięciem

Google może odkrywać adresy z elementów HTML <a href="/adres">. Dlatego ważne widoki w SPA nie powinny istnieć wyłącznie jako stan aplikacji, obsługa kliknięcia albo fragment URL-a po znaku #. Każda strona z intencją SEO powinna mieć stały, możliwy do pobrania adres.

// słabo dla odkrywania URL-i
<button onClick={() => router.push("/produkty")}>Produkty</button>

// lepiej dla użytkowników i crawlerów
<a href="/produkty">Produkty</a>

Routing po stronie klienta może działać, ale URL musi być realny. History API jest bezpieczniejsze niż hash routing dla ważnych widoków, bo adres można pobrać, odświeżyć, podlinkować i przeanalizować jako osobny dokument.

07 / SYGNAŁY

Status HTTP, canonical, noindex i schema - sygnały nie mogą zmieniać sensu po renderze

Status HTTP, canonical, noindex i schema powinny opisywać ten sam URL przed i po renderowaniu. JavaScript może zmieniać elementy head, ale najważniejsze sygnały nie powinny zależeć od niestabilnego API, opóźnionego komponentu albo błędu hydratacji.

  • Strona błędu w SPA nie powinna zwracać zwykłego 200 OK z komunikatem „nie znaleziono”.
  • Canonical w HTML-u i po renderowaniu powinien wskazywać ten sam reprezentatywny URL.
  • Noindex dodawany przez JS powinien być świadomym wyjątkiem, a nie domyślnym stanem ładowania.
  • Dane strukturalne powinny być zgodne z treścią widoczną dla użytkownika po renderowaniu.
  • Sitemap.xml powinna wzmacniać finalne, kanoniczne URL-e, a nie adresy aplikacyjne bez treści.

Jeśli problem dotyczy JSON-LD dodawanego przez aplikację, sprawdź, czy dane strukturalne zgodne z treścią po renderowaniu mają właściwy typ schema.org, widoczne pola, stabilne dane i poprawny wynik w Rich Results Test.

Jeżeli route w aplikacji pokazuje brak produktu, artykułu albo danych, ale serwer nadal zwraca 200 OK, diagnozuj go jako możliwy soft 404 w aplikacji SPA.

Jeśli problem dotyczy wyboru reprezentatywnego adresu, przejdź do przewodnika o canonicalu w SEO. Jeśli chodzi o listę URL-i zgłaszanych Google, właściwym miejscem jest sitemap.xml w SEO.

08 / LAZY LOADING

Lazy loading i infinite scroll - wydajność bez ukrywania treści

Lazy loading pomaga wydajności, ale w SEO jest poprawny tylko wtedy, gdy istotna treść ładuje się bez kliknięcia, ręcznego scrollowania albo zgody użytkownika. Krytyczna treść pierwszego widoku nie powinna być opóźniana bez powodu, a dalsze elementy powinny ładować się wtedy, gdy trafiają do viewportu.

Jeśli lazy loading, hydracja albo ciężki JavaScript pogarszają LCP lub INP, dalsza diagnoza należy do przewodnika Core Web Vitals - LCP, INP i CLS.

Infinite scroll wymaga osobnych, trwałych URL-i dla kolejnych fragmentów listy oraz linków, które pozwalają Google odkryć te adresy. Samo dogrywanie kolejnych elementów po scrollu nie tworzy jeszcze stabilnej architektury indeksowania.

09 / DIAGNOSTYKA

Jak sprawdzić, czy Google widzi treść renderowaną przez JavaScript?

Diagnoza JavaScript SEO zaczyna się od porównania tego, co wysyła serwer, z tym, co Google może wyrenderować. Jedno narzędzie zwykle nie wystarczy, bo GSC pokazuje perspektywę Google, crawler pokazuje skalę problemu, a logi pokazują realne żądania.

ObjawPrawdopodobna przyczynaCo poprawić?
Google widzi pusty ekran lub loaderTreść ładuje się dopiero po API, które zwraca błąd, timeout albo wymaga sesji.Przenieś treść krytyczną do SSR/SSG, dodaj fallback i sprawdź odpowiedzi API dla Googlebota.
W GSC brakuje linków do podstronNawigacja działa przez onClick, buttony, fragmenty URL albo elementy bez href.Zastąp je linkami <a href> i czystymi URL-ami obsługiwanymi przez History API.
Strona błędu zwraca 200 OKSPA obsługuje brak danych po stronie klienta, ale serwer nadal zwraca poprawny status.Zwróć prawdziwe 404/410 albo dodaj noindex dla widoku błędu, jeśli inaczej się nie da.
Google wybiera inny canonicalCanonical w HTML, canonical po renderze, sitemap i linkowanie wskazują różne adresy.Ujednolić self-canonical, linkowanie, sitemapę i wersję po renderowaniu.
Treść z lazy loadingu nie trafia do indeksuWczytanie zależy od kliknięcia, scrolla użytkownika albo niestabilnego mechanizmu.Ładuj treść, gdy pojawia się w viewportcie, i testuj ją w renderowanym HTML-u.
SygnałCo sprawdzić?Jak czytać wynik?
Render w Inspekcji URLSprawdź zrzut ekranu, HTML renderowany, załadowane zasoby i błędy JavaScript.Jeśli w renderze nie ma głównej treści, problem dotyczy dostępności lub wykonania JS.
Porównanie źródła i DOMPorównaj View Source, HTML po renderze i widok użytkownika.Duża różnica nie zawsze jest błędem, ale wymaga kontroli tytułu, H1, linków, canonicala i treści.
Test bez JavaScriptuWyłącz JS albo pobierz HTML narzędziem technicznym i sprawdź, co zostaje.Jeśli zostaje pusta ramka, architektura może wymagać SSR, SSG albo prerenderingu.
Crawl z renderowaniemPrzeskanuj witrynę crawlerem, który wykonuje JavaScript i porównaj wynik z crawlem bez JS.Różnice pokażą URL-e, linki i elementy, które zależą od działania frontu.
Logi serweraSprawdź żądania Googlebota, pobierane zasoby, statusy i częstotliwość wizyt.Logi pokazują realny crawl, a nie tylko deklaracje narzędzi.

W Google Search Console użyj Inspekcji URL, testu live URL, zrzutu ekranu i renderowanego HTML-u. Jeśli wynik pokazuje brak treści, błędy zasobów albo inną wersję niż użytkownik, JavaScript SEO jest głównym kierunkiem diagnozy. Pełny kontekst pracy z GSC opisuje artykuł Google Search Console - co to jest i do czego służy.

Po poprawce nie wystarczy sprawdzić, czy strona działa w przeglądarce. Trzeba sprawdzić, czy zmienił się sygnał, który blokował widoczność.

Co mierzyć?Gdzie sprawdzić?Jaka decyzja?
Kompletność renderowanego HTML-uInspekcja URL, test live URL, crawler z renderowaniemCzy po renderze widoczne są title, H1, główna treść, linki, canonical, noindex i schema?
Różnica między crawlem bez JS i z JSCrawler technicznyKtóre URL-e, linki albo sekcje istnieją tylko po wykonaniu JavaScriptu?
Błędy JavaScript i zasobówGSC, logi, monitoring błędów, narzędzia developerskieCzy błędy występują na pojedynczym URL-u, czy na całym szablonie?
Statusy indeksowania po poprawceGoogle Search ConsoleCzy problem nadal dotyczy renderu, czy przeszedł do canonicala, jakości treści albo linkowania?
10 / PROCES

Jak przygotować stronę opartą o JS pod SEO - proces wdrożenia

Proces wdrożenia JavaScript SEO powinien zaczynać się od klasyfikacji URL-i, nie od pojedynczego błędu w narzędziu. Najpierw ustal, które szablony mają być wynikami Google, a dopiero potem wybierz renderowanie, linki, statusy i testy.

KROK 01

Ustal, które treści mają być indeksowane

Oddziel publiczne strony SEO od paneli, koszyka, wyszukiwarki wewnętrznej i widoków po zalogowaniu.

KROK 02

Wybierz model renderowania dla szablonu

Dla bloga, kategorii, produktów i usług rozważ SSG, SSR albo prerendering. CSR zostaw tam, gdzie indeksacja nie jest celem albo jest dobrze przetestowana.

KROK 03

Umieść elementy krytyczne jak najwcześniej

Title, H1, główna treść, linki, canonical, meta robots i schema nie powinny zależeć od kruchej sekwencji skryptów.

KROK 04

Zaprojektuj crawlable links i czyste URL-e

Każdy ważny widok powinien mieć stały URL, link <a href> i odpowiedź serwera zgodną z rzeczywistym stanem strony.

KROK 05

Przetestuj render na reprezentatywnych URL-ach

Sprawdź stronę główną, kategorię, produkt, artykuł, filtr SEO, paginację i stronę błędu, a nie tylko jeden wygodny adres.

KROK 06

Monitoruj po wdrożeniu

Porównaj GSC, logi, crawl techniczny, błędy JS i statusy indeksowania po zmianie szablonu albo frontu.

11 / BŁĘDY

Najczęstsze błędy JavaScript SEO

Błędy JavaScript SEO rzadko są widoczne jako jeden komunikat „Google nie lubi JS”. Częściej są to rozproszone różnice między źródłem, renderem, statusem, linkami i wersją mobilną.

Zakładanie, że skoro użytkownik widzi treść, Google też ją widzi

Użytkownik może mieć aktywną sesję, szybkie API, inne cache i inny przebieg interakcji niż Googlebot.

Budowanie nawigacji jako zdarzeń kliknięcia

Button z onClick może działać w aplikacji, ale nie jest tym samym co link HTML prowadzący do indeksowalnego URL-a.

Zmiana canonicala dopiero po niestabilnym renderze

Jeśli canonical zależy od danych z API, błędu hydratacji albo wtyczki, Google może dostać sprzeczne sygnały.

Ukrywanie głównej treści za lazy loadingiem

Lazy loading jest dobry dla wydajności, ale nie powinien wymagać od Google kliknięcia lub manualnego scrollowania.

Diagnoza tylko na stronie głównej

Najczęściej problem siedzi w szablonie produktu, kategorii, filtrze, paginacji albo widoku błędu, nie na stronie głównej.

Mieszanie problemu JS z każdym problemem indeksowania

Brak indeksacji może wynikać z noindex, canonicala, robots.txt, jakości treści, duplikacji lub linkowania, nawet gdy render działa poprawnie.

12 / DECYZJA

Kiedy zmieniać sposób renderowania, a kiedy diagnozować dalej?

Zmiana renderowania ma sens, gdy problem powtarza się na ważnym szablonie i wpływa na treść, linki albo sygnały SEO. Jeśli Google widzi pełny render, nie zmieniaj architektury tylko dlatego, że strona używa JavaScriptu.

SytuacjaDecyzja
Treść SEO jest pusta w źródłowym HTML-u i pojawia się dopiero po kilku żądaniach APIRozważ SSR, SSG albo prerendering dla danego szablonu.
Strona ma wartościowy content, ale Google często widzi loader, błędy JS lub niepełny renderNie łataj wyłącznie pojedynczego błędu. Popraw architekturę ładowania danych.
Widok nie ma być w Google, bo jest panelem, koszykiem albo funkcją po zalogowaniuCSR jest zwykle wystarczający, a ważniejsze są noindex, dostęp i brak linkowania do URL-i technicznych.
Problem dotyczy tylko kilku publicznych URL-i, a przebudowa frontu potrwaPrerendering może być rozwiązaniem przejściowym, jeśli treść dla bota i użytkownika jest równoważna.
Google widzi treść, ale URL nadal nie jest indeksowanyPrzenieś diagnozę do indeksowania, canonicala, jakości treści i linkowania wewnętrznego.
13 / KONTEKST

Powiązane tematy techniczne

Powiązane tematy są tu dalszym krokiem diagnostycznym, nie drugim głównym tematem strony. Wybierz je dopiero po ustaleniu, czy problem dotyczy renderu, odkrywania URL-i, indeksacji albo blokady zasobów.

SEO techniczne

hub o crawl, renderowaniu, indeksowaniu, canonicalach, statusach i architekturze technicznej

Crawling w SEO

jak Google odkrywa URL-e, linki i zasoby potrzebne do renderu

Indeksowanie strony w Google

co sprawdzić, gdy render działa, ale URL nadal nie trafia do indeksu

Core Web Vitals

jak diagnozować LCP, INP i CLS, gdy JavaScript, obrazy lub hydracja pogarszają doświadczenie użytkownika

Robots.txt pod kątem SEO

kiedy blokada CSS, JS albo API utrudnia renderowanie strony

Audyt JavaScript SEO

Google widzi pełną stronę czy tylko powłokę aplikacji?

Sprawdzimy HTML źródłowy, renderowany DOM, Inspekcję URL w GSC, linki, routing SPA, canonicale, noindex, statusy HTTP, lazy loading, logi i crawl z renderowaniem, żeby ustalić, czy problem leży w JavaScripcie, indeksowaniu czy architekturze strony.

Audyt SEO strony
14 / FAQ

FAQ

01Co to jest JavaScript SEO?

JavaScript SEO to część SEO technicznego, która sprawdza, czy Google może pobrać, wyrenderować i zindeksować treść generowaną lub zmienianą przez JavaScript. Obejmuje między innymi SSR, SSG, CSR, linki, routing, lazy loading, canonicale, meta robots i diagnostykę renderu.

02Czy Google indeksuje strony z JavaScriptem?

Tak, Google może renderować JavaScript, ale nie warto zakładać, że każda ważna treść zostanie szybko i bezbłędnie odczytana po stronie klienta. Kluczowe informacje powinny być dostępne w HTML-u lub stabilnym renderowanym DOM.

03Jak sprawdzić, czy Google widzi treść renderowaną przez JS?

Użyj Inspekcji URL w Google Search Console, testu live URL, zrzutu ekranu i renderowanego HTML-u. Porównaj je ze źródłowym HTML-em oraz widokiem użytkownika. Dodatkowo sprawdź błędy JS, zablokowane zasoby i crawl z renderowaniem.

04Czy SSR jest zawsze lepszy od CSR pod SEO?

Nie zawsze. SSR lub SSG są zwykle bezpieczniejsze dla publicznych stron SEO, ale CSR może wystarczyć dla aplikacji, paneli i widoków bez celu indeksacji. Decyzja zależy od tego, czy Google musi widzieć treść, linki i sygnały strony.

05Czy dynamic rendering jest dobrym rozwiązaniem?

Według dokumentacji Google dynamic rendering jest obejściem tymczasowym, a nie docelowym standardem. Lepszym kierunkiem jest SSR, SSG albo hydratacja, które udostępniają równoważną, stabilną treść użytkownikom i robotom.

06Czy blokowanie JavaScriptu w robots.txt szkodzi SEO?

Może szkodzić, jeśli zablokowany plik jest potrzebny do renderowania treści, linków, danych produktu, canonicala albo danych strukturalnych. Zasoby krytyczne dla interpretacji strony powinny być dostępne dla Googlebota.

Źródła i dalsza lektura