Przejdź do treści
2.6Ekspert8 min

Architektura SEO w Next.js 15: SSR, PPR i Server Components

Lucas BlochbergerZaktualizowano 28 października 2026
Definicja

Architektura SEO w Next.js 15 łączy App Router z React Server Components i Partial Prerendering (PPR), aby dostarczać treść po stronie serwera jako gotowy HTML. Server Components wysyłają do klienta zero JavaScriptu, a PPR serwuje statyczną powłokę z CDN i strumieniowo dosyła dynamiczne części jako HTML. Dzięki temu strony są czytelne zarówno dla Googlebota, jak i dla crawlerów AI, które nie wykonują JavaScriptu.

W skrócie

  • Żaden z dużych crawlerów AI nie renderuje JavaScriptu, dlatego HTML generowany po stronie serwera to podstawowy warunek GEO i widoczności w AI.
  • W nowych pracach nad SEO App Router z Server Components jest lepszym wyborem niż Pages Router, bo Server Components wysyłają do klienta zero JavaScriptu.
  • Świadomie wybieraj strategię dla każdej trasy: SSG/ISR dla stron z treścią, SSR/PPR tylko przy naprawdę dynamicznych lub spersonalizowanych treściach.
  • PPR serwuje statyczną powłokę z CDN, co daje niski TTFB/LCP, i strumieniowo dosyła dynamiczne części jako HTML, który odczytają także crawlery bez obsługi JS.
  • Metadata API generuje po stronie serwera title, canonical, hreflang (de-AT/de-DE/x-default) i Open Graph; metadataBase jest do tego obowiązkowe. JSON-LD trafia na stronę jako tag script bezpośrednio z Server Component.
  • sitemap.ts i robots.ts zastępują zewnętrzne wtyczki; przekierowania 301 należą do next.config albo do middleware (od Next.js 16 proxy.ts).
  • Obniżony do 2 MB na zasób limit Googlebota sprawia, że lekkie bundle z przewagą logiki po stronie serwera stają się obowiązkiem SEO.

W Next.js 15 wybór architektury renderowania decyduje o tym, czy strona jest czytelna zarówno dla klasycznych wyszukiwarek, jak i dla crawlerów AI. App Router z React Server Components i Partial Prerendering (PPR) przenosi generowanie treści na serwer. Od tego zależy, czy Googlebot, ChatGPT, Claude i Perplexity w ogóle uchwycą pełną treść strony. Ten artykuł porządkuje strategie renderowania i pokazuje, której strategii potrzebuje każda trasa.

Dlaczego architektura renderowania decyduje o widoczności

Kluczowe ustalenie pochodzi z analizy ruchu crawlerów w sieci Vercel: żaden z dużych crawlerów AI (GPTBot, ClaudeBot, Meta-ExternalAgent, PerplexityBot, Bytespider) nie renderuje JavaScriptu; w przypadku ChatGPT 11,50%, a w przypadku Claude 23,84% pobrań dotyczy plików JavaScript, ale nie są one wykonywane. W pełni renderują tylko Gemini (przez infrastrukturę Googlebota) i AppleBot. Dla każdej strony, której treść powstaje dopiero po stronie klienta w JavaScripcie, oznacza to, że crawlery AI widzą pustą skorupę.

Te crawlery AI nie są już zjawiskiem marginalnym. GPTBot, Claude, AppleBot i PerplexityBot generują łącznie około 1,3 mld pobrań miesięcznie, czyli nieco ponad 28% z 4,5 mld pobrań Googlebota w sieci Vercel. Jeśli chcesz być cytowany w odpowiedziach AI (Generative Engine Optimization, w skrócie GEO), musisz dostarczać treść po stronie serwera jako gotowy HTML.

Również klasyczny Googlebot karze renderowanie po stronie klienta, choć w subtelniejszy sposób. Googlebot renderuje JavaScript, ale w drugiej fali: strony wymagające renderowania trafiają oprócz kolejki crawlowania także do kolejki renderowania. Często cytowane międzynarodowe badanie określa skutki liczbowo: Google potrzebował 313 godzin na strony renderowane w JavaScripcie wobec 36 godzin na czysty HTML, czyli około dziewięciu razy dłużej. W dużych serwisach znacznie opóźnia to indeksowanie nowych i zaktualizowanych treści.

Do tego dochodzi twarda granica techniczna. Googlebot crawluje już tylko pierwsze 2 MB każdego zasobu zamiast wcześniejszych 15 MB, co oznacza spadek o 86,7%. Limit dotyczy każdego zasobu, czyli osobno HTML, bundla JavaScript i CSS. Przy rozdętych bundlach po stronie klienta istnieje więc ryzyko, że kluczowe skrypty zostaną obcięte.

Jak to działa: SSG, SSR, ISR i PPR w porównaniu pod kątem SEO

Next.js 15 oferuje cztery strategie renderowania. Wybór dla każdej trasy zależy od tego, jak dynamiczna jest treść i jak szybko musi być aktualna.

  • SSG (Static Site Generation): Strona jest generowana jako HTML podczas buildu i serwowana z CDN. Najlepszy możliwy TTFB i LCP, idealne dla crawlerów AI, bo pełna treść od razu znajduje się w HTML. Sprawdza się w artykułach bazy wiedzy, stronach usług i wpisach na blogu.
  • ISR (Incremental Static Regeneration): Jak SSG, ale strona jest generowana ponownie po upływie określonego czasu (revalidate) lub na żądanie przez trigger. Łączy statyczne serwowanie z aktualnością redakcyjną, np. w cennikach lub informacjach o stanach magazynowych.
  • SSR (Server-Side Rendering): Strona jest renderowana na serwerze przy każdym żądaniu. Niezbędne przy treściach zależnych od użytkownika lub żądania (geotargeting, testy A/B). Treść znajduje się w HTML, ale TTFB zależy od czasu pracy serwera.
  • PPR (Partial Prerendering, w Next.js 15 eksperymentalne): Łączy elementy statyczne i dynamiczne w obrębie jednej trasy. Statyczna powłoka jest prerenderowana podczas buildu i serwowana z CDN, a dynamiczne części są strumieniowo dosyłane jako HTML.

Z punktu widzenia architektury PPR to najciekawsze podejście dla SEO. Statyczna powłoka (nagłówek, główna treść, stopka) znajduje się od razu w początkowej odpowiedzi HTML i zapewnia niski TTFB oraz szybki LCP. Dynamiczne fragmenty umieszczone w granicach <Suspense> są strumieniowo dosyłane z serwera i również jako HTML wstawiane do tej samej odpowiedzi. Kluczowe dla crawlowalności: strumieniowana treść to HTML, a nie JavaScript doładowywany po stronie klienta. Crawler bez obsługi JS otrzymuje pełną treść, gdy tylko strumień się zakończy.

Server Components stanowią fundament tego wszystkiego. Renderują się wyłącznie na serwerze i dla własnej logiki wysyłają do klienta zero JavaScriptu. To drastycznie zmniejsza zakres hydratacji, co bezpośrednio przekłada się na INP (Interaction to Next Paint), i zmniejsza bundle JS w odniesieniu do limitu 2 MB. Interaktywność dodaje się celowo na obrzeżach przez Client Components ("use client"), a nie hurtowo dla całej strony.

Next.js 16, wydany 21 października 2025 roku, wprowadza dwie zmiany istotne dla tego artykułu. Flaga experimental.ppr zniknęła, a Partial Prerendering działa tam przez Cache Components (cacheComponents: true w next.config). Plik middleware zmienił się w proxy.ts, a middleware.ts uznaje się za przestarzały. Logika SEO tego artykułu pozostaje taka sama: statyczna powłoka i strumieniowane części docierają do crawlera jako HTML.

Dobre praktyki architektury SEO w Next.js 15

Świadomy wybór strategii renderowania dla każdej trasy

Standardowa zasada: tak statycznie, jak to możliwe, tak dynamicznie, jak to konieczne. Strony z treścią (baza wiedzy, blog, usługi) powinny korzystać z SSG lub ISR. Strony spersonalizowane lub działające niemal w czasie rzeczywistym używają SSR lub PPR z wąsko zakreślonymi granicami <Suspense>, tak aby istotna dla SEO powłoka pozostała statyczna, a strumieniowane były tylko naprawdę dynamiczne części.

Pełne wykorzystanie Metadata API po stronie serwera

App Router generuje metadane po stronie serwera przez obiekt metadata lub funkcję generateMetadata. Ważne:

  • Ustawienie metadataBase: Bez metadataBase Next.js uzupełnia względne ścieżki obrazów Open Graph i Twitter na podstawie wartości zastępczej, a poza Vercelem na podstawie localhost. Adresy URL obrazów są wtedy bezwzględne, ale wskazują adres, do którego nie dotrze żaden crawler. Dlatego zawsze ustawiaj bazowy URL na swoją domenę produkcyjną.
  • Canonical dla każdej trasy: ustawiaj przez alternates.canonical, aby uniknąć duplicate content wynikającego z wariantów parametrów lub ścieżek.
  • hreflang dla regionu DACH: podawaj przez alternates.languages z de-AT, de-DE i x-default. To częste źródło błędów: międzynarodowe badanie wykazało, że 31,02% wielojęzycznych witryn zawiera sprzeczne dyrektywy hreflang, a 16,04% klastrów hreflang nie ma samoodwołujących się tagów. Każda wersja językowa musi odwoływać się do siebie i do wszystkich pozostałych.
  • Osadzanie JSON-LD po stronie serwera: jako <script type="application/ld+json"> bezpośrednio w Server Component. Dane strukturalne są powszechne: w 2024 roku JSON-LD występuje na 41% wszystkich stron, o 7 punktów procentowych więcej niż 34% w 2022 roku. Renderowany po stronie serwera jest czytelny także dla crawlerów AI, które nie wykonują JS.

Dynamiczne generowanie obowiązkowych plików

Next.js 15 zastępuje zewnętrzne wtyczki SEO plikami opartymi na konwencjach:

  • sitemap.ts: programowo generuje mapę witryny XML, łącznie z lastModified dla każdego URL jako precyzyjnym sygnałem lastmod.
  • robots.ts: dynamicznie tworzy plik robots.txt, łącznie z odwołaniem do sitemap i regułami dla wybranych user agentów.
  • Przekierowania 301: stałe przekierowania należą do next.config (redirects()) albo, przy dynamicznej logice, do middleware (od Next.js 16 proxy.ts). Używaj kodu statusu 308/301, aby moc linków i sygnały indeksowania zostały przeniesione.

Edge, CDN i cache dla niskiego TTFB

Strony statyczne i ISR są serwowane z CDN z lokalizacji edge blisko użytkownika, co minimalizuje TTFB dla odwiedzających w całej Europie. Można tym sterować przez revalidate (interwał czasowy), nagłówki cache-control i rewalidację na żądanie za pomocą revalidatePath lub revalidateTag. HTTP/3 dodatkowo zmniejsza narzut związany z nawiązywaniem połączenia. Ponieważ Google ma w Austrii w maju 2026 roku 81,87% udziału w rynku, a Bing 9,01%, optymalizacja pod Googlebota pozostaje priorytetem, ale bez zaniedbywania Binga.

Wywoływanie IndexNow przy rewalidacji na żądanie

Gdy trigger redakcyjny rewaliduje stronę, w tym samym Route Handlerze można wysłać ping IndexNow do Binga i Yandexa. To wyraźnie przyspiesza indeksowanie w tych wyszukiwarkach: IndexNow odpowiada za 18% wszystkich klikniętych nowych adresów URL w wyszukiwaniu internetowym, przy ponad 3,5 mld URL zgłaszanych dziennie. W przypadku Google IndexNow nie zastępuje crawlowania, ale skutecznie uzupełnia widoczność w ekosystemie Binga.

Optymalizacja Core Web Vitals wbudowanymi narzędziami

Next.js 15 zawiera narzędzia na wszystkie trzy metryki CWV:

  • next/image na LCP i CLS: dostarcza nowoczesne formaty, responsywne rozmiary i zarezerwowane miejsce, które zapobiega przesunięciom układu.
  • next/font na CLS: hostuje fonty lokalnie i zapobiega przesunięciom układu spowodowanym podmianą fontów.
  • Streaming i Suspense na LCP: renderują najpierw kluczową treść, a wolne źródła danych przenoszą na później.
  • Server Components i code splitting na INP: zmniejszają ilość JS po stronie klienta, a tym samym czas przetwarzania interakcji.

Celowa obsługa crawlerów AI i GEO

Treść renderowana po stronie serwera to podstawowy warunek, aby ChatGPT, Claude i Perplexity mogły odczytać tekst. Dostęp poszczególnych botów AI reguluje robots.txt (przez robots.ts), a opcjonalny plik llms.txt może wskazywać kluczowe treści. Dla cytowalności w odpowiedziach AI liczą się konkretne fakty, liczby ze źródłami i jasne odpowiedzi na pytania bezpośrednio w HTML generowanym po stronie serwera.

Częste błędy

  • Doładowywanie treści po stronie klienta: pobieranie danych dopiero w kliencie przez useEffect/fetch sprawia, że treść jest niewidoczna dla dużych crawlerów AI, a Googlebot dociera do niej z opóźnieniem przez kolejkę renderowania.
  • Pominięcie metadataBase: poza Vercelem adresy URL obrazów OG wskazują na localhost zamiast na Twoją domenę i psują podglądy w social mediach, a częściowo także w narzędziach AI.
  • Niekompletny hreflang: brak samoodwołania lub brak x-default prowadzi do udokumentowanych błędów klastrów.
  • Zamiana wszystkiego w Client Component: globalne "use client" w korzeniu marnuje zalety Server Components i rozdyma bundle w kierunku limitu 2 MB.
  • Zbyt szerokie granice Suspense przy PPR: gdy zbyt wiele zostanie oznaczone jako dynamiczne, statyczna powłoka się kurczy, a przewaga w TTFB znika.
  • Łańcuchy przekierowań i soft redirecty: przekierowania po stronie klienta zamiast 301/308 nie przenoszą poprawnie sygnałów indeksowania.

Metryki i pomiar

Efekt architektury widać w konkretnych wskaźnikach:

Dalsze materiały

Architektura Next.js 15 ma ogromne możliwości, ale jest złożona. Odzwierciedla to postrzeganie wśród deweloperów: według międzynarodowej ankiety State of JavaScript 2025 z Next.js korzysta 59% ankietowanych; 21% ocenia go pozytywnie, a 17% negatywnie, przy czym rosnąca złożoność jest wielokrotnie krytykowana. Praktyczny wniosek: świadomie wybierać strategię renderowania dla każdej trasy, stosować PPR z wąsko zakreślonymi granicami Suspense i konsekwentnie generować obowiązkowe pliki SEO (sitemap.ts, robots.ts, Metadata API, canonical, hreflang) po stronie serwera. Tak powstaje serwis szybki dla Googlebota, w pełni czytelny dla crawlerów AI i wydajnie serwowany w całej Europie. Jako kolejne kroki warto przeprowadzić audyt renderowania (HTML vs DOM) i pomiar CWV na danych terenowych oraz podłączyć IndexNow do procesu rewalidacji.

Dane i statystyki

Żaden z dużych crawlerów AI (GPTBot, ClaudeBot, Meta-ExternalAgent, PerplexityBot, Bytespider) nie renderuje JavaScriptu; w przypadku ChatGPT 11,50%, a w przypadku Claude 23,84% pobrań dotyczy plików JavaScript, ale nie są one wykonywane

Vercel - The rise of the AI crawler [międzynarodowe] (2024)

GPTBot, Claude, AppleBot i PerplexityBot łącznie ~1,3 mld pobrań miesięcznie, nieco ponad 28% z 4,5 mld pobrań miesięcznie Googlebota

Vercel Blog - The rise of the AI crawler [międzynarodowe] (2024)

Google potrzebował 313 godzin na strony renderowane w JavaScripcie wobec 36 godzin na czysty HTML (około 9 razy dłużej)

Onely - Google Needs 9X More Time To Crawl JS Than HTML [międzynarodowe] (2022)

Googlebot crawluje już tylko pierwsze 2 MB każdego zasobu zamiast wcześniejszych 15 MB (spadek o 86,7%)

PPC Land - Google slashes web crawl limit by 86.7% as cost pressures mount [międzynarodowe] (2026)

31,02% wielojęzycznych witryn zawiera sprzeczne dyrektywy hreflang; 16,04% klastrów hreflang nie ma samoodwołujących się tagów

Search Engine Land - Study: 31% of international websites contain hreflang errors (Dan Taylor, SALT.agency) [międzynarodowe] (2023)

W 2024 roku JSON-LD występuje na 41% wszystkich stron, o 7 punktów procentowych więcej niż 34% w 2022 roku

Web Almanac 2024 (HTTP Archive) - Structured Data [międzynarodowe] (2024)

W maju 2026 roku Google ma w Austrii 81,87% udziału w rynku wyszukiwarek, a Bing 9,01%

StatCounter Global Stats - Search Engine Market Share Austria [Austria] (2026)

IndexNow odpowiada za 18% wszystkich klikniętych nowych adresów URL w wyszukiwaniu internetowym; ponad 3,5 mld URL zgłaszanych dziennie

Bing Webmaster Blog - IndexNow Expands Adoption Across Industries [międzynarodowe] (2024)

48% originów mobilnych i 56% desktopowych spełnia wszystkie trzy Core Web Vitals; na urządzeniach mobilnych LCP 62%, INP 77%, CLS 81% w zielonym zakresie (CrUX, lipiec 2025)

Web Almanac 2025 (HTTP Archive) - Performance [międzynarodowe] (2025)

W 2024 roku tylko 43% witryn mobilnych miało dobre CWV przy INP wobec 48% przy starym FID; INP zastąpił FID jako Core Web Vital (marzec 2024)

Web Almanac 2024 (HTTP Archive) - Performance [międzynarodowe] (2024)

Next.js używa 59% ankietowanych, przy 21% pozytywnych i 17% negatywnych opinii

InfoQ - State of JavaScript Survey 2025 [międzynarodowe] (2026)
Podsumuj z AIChatGPTClaudePerplexity

Otwiera czat z przygotowanym promptem.

Najczęściej zadawane pytania

Dlaczego Server-Side Rendering w Next.js 15 jest ważny dla crawlerów AI?
Ponieważ żaden z dużych crawlerów AI (GPTBot, ClaudeBot, Meta-ExternalAgent, PerplexityBot, Bytespider) nie wykonuje JavaScriptu. W przypadku Claude 23,84% pobrań dotyczy wprawdzie plików JavaScript, ale nie są one wykonywane. Tylko HTML renderowany po stronie serwera, jaki dostarczają SSG, SSR i PPR, jest dla tych crawlerów w pełni czytelny. Treść doładowywana po stronie klienta pozostaje dla nich niewidoczna.
Czym jest Partial Prerendering (PPR) i jak pomaga w SEO?
PPR łączy renderowanie statyczne i dynamiczne w jednej trasie. Statyczna powłoka jest prerenderowana podczas buildu i serwowana z CDN, co obniża TTFB i LCP. Dynamiczne części wewnątrz granic Suspense są następnie strumieniowo dosyłane z serwera jako HTML. Ponieważ strumieniowana treść to HTML, a nie JavaScript po stronie klienta, pełną treść otrzymują także crawlery AI, które nie wykonują JS.
App Router czy Pages Router dla SEO w Next.js 15?
W nowych projektach lepszym wyborem jest App Router. Zawiera React Server Components (zero JavaScriptu po stronie klienta dla ich logiki, co jest korzystne dla INP i crawl budgetu), typowane Metadata API oraz pliki oparte na konwencjach, takie jak sitemap.ts i robots.ts. PPR jest dostępne wyłącznie w App Routerze.
Jak poprawnie wdrożyć hreflang dla Austrii i regionu DACH (Niemcy, Austria, Szwajcaria) w Next.js?
Przez pole alternates.languages w Metadata API podajesz de-AT, de-DE i x-default. Ważne jest, aby każda wersja językowa odwoływała się do siebie i do wszystkich pozostałych. Międzynarodowe badanie wykazało, że 31,02% wielojęzycznych witryn ma sprzeczne dyrektywy hreflang, a 16,04% klastrów nie ma samoodwołujących się tagów, więc unikaj właśnie tych dwóch błędów.
Jakiej strategii renderowania potrzebuje dana trasa w Next.js 15?
Zasada podstawowa: tak statycznie, jak to możliwe, tak dynamicznie, jak to konieczne. Strony z treścią, takie jak artykuły bazy wiedzy, blog i strony usług, powinny korzystać z SSG lub ISR. Strony spersonalizowane lub działające niemal w czasie rzeczywistym używają SSR lub PPR z wąsko zakreślonymi granicami Suspense, tak aby istotna dla SEO statyczna powłoka została zachowana, a strumieniowane były tylko naprawdę dynamiczne części.
Dlaczego metadataBase jest tak ważne w Next.js?
Bez metadataBase Metadata API uzupełnia względne ścieżki obrazów Open Graph i Twitter na podstawie wartości zastępczej, a poza Vercelem na podstawie localhost. Adresy URL obrazów są wtedy wprawdzie bezwzględne, ale wskazują adres, do którego nie dotrze żaden crawler, i obrazy podglądu przestają działać. metadataBase ustala właściwy bazowy URL i dlatego jest obowiązkowe dla poprawnych tagów OG.
Jakie znaczenie ma dla Next.js limit crawlowania 2 MB w Googlebocie?
Googlebot crawluje już tylko pierwsze 2 MB każdego zasobu, czyli o 86,7% mniej niż wcześniejsze 15 MB. Limit dotyczy osobno HTML, JavaScriptu i CSS. Rozdęte bundle po stronie klienta mogą zostać obcięte. Server Components i code splitting utrzymują bundle w małym rozmiarze, a tym samym w granicach limitu.

Jak wypada Twoja strona?

Otrzymaj e-mailem bezpłatny raport SEO swojej strony, przygotowany z pomocą AI: SEO techniczne, on-page, słowa kluczowe i konkurencja. Bez zobowiązań.

Zamów bezpłatny audyt SEO →

Albo przejdź od razu na stronę: Agencja SEO w Wiedniu