W tym artykule pokażę Ci konkretne mechanizmy, dzięki którym Next.js może dać dużą przewagę Twojemu projektowi, pokrywając aspekt techniczny .
Framework pomaga w indeksacji, ale nie zastąpi decyzji o strukturze treści, intencji użytkownika i linkowaniu wewnętrznym.
Dlaczego klasyczny React ma problemy z SEO?
Dlaczego React nie jest optymalny pod SEO i warto rozważyć Next.js? Zanim przejdziemy do Next.js, warto zrozumieć, z czym mierzymy się w przypadku standardowych aplikacji React: działa w modelu () i oznacza to, że serwer wysyła do przeglądarki praktycznie pusty plik HTML z odwołaniem do JavaScript. Efekt? Treść strony pojawia się dopiero po załadowaniu i wykonaniu skryptów, co utrudnia pracę robotom indeksującym Google i innym crawlerom.
Googlebot potrafi renderować JavaScript, ale renderowanie bywa opóźnione i mniej przewidywalne niż analiza gotowego HTML. Dla prostych aplikacji to nie zawsze jest problem, ale przy stronach contentowych, landing page'ach, e-commerce i serwisach walczących o ruch organiczny nie warto utrudniać robotowi pracy bez powodu.
Server-Side Rendering (SSR) jako fundament SEO w Next.js
Next.js rozwiązuje ten problem przez renderowanie po stronie serwera i prerendering. W App Routerze komponenty są domyślnie Server Components, ale to nie znaczy, że każda strona jest renderowana dynamicznie przy każdym żądaniu. Strona może być statyczna, rewalidowana albo dynamiczna; z perspektywy SEO najważniejsze jest to, żeby główna treść, nagłówki, linki i metadane znalazły się w początkowej odpowiedzi HTML.
To, co widzisz powyżej, to standardowy komponent React, z tą różnicą, że Next.js może dostarczyć jego HTML bez czekania na wykonanie kodu w przeglądarce. Finalnie, robot Google dostaje gotowy HTML z główną treścią i nie musi odkrywać jej dopiero po hydracji.
Dodam jeszcze, że SSR sprawdza się szczególnie dobrze, gdy treść strony zmienia się dynamicznie lub wymaga personalizacji, a to dotyczy np. strony produktu w sklepie internetowym, która pobiera aktualne dane o dostępności z bazy danych.
Static Site Generation (SSG) i wydajność SEO w Next.js
Z kolei SSG jest rozwiązaniem Next.js dla treści, które nie zmieniają się często, jak wpisy blogowe lub strony informacyjne. Przy tego typu treściach nie każda strona wymaga renderowania przy każdym żądaniu. Strony są generowane podczas budowania aplikacji albo prerenderingu, a następnie serwowane z cache jako statyczny HTML. Otrzymujemy błyskawiczny czas ładowania i bardzo dobre wyniki Core Web Vitals.
Istnieje w Next.js jeszcze trzecia opcja: (ISR), która pozwala na regenerowanie statycznych stron w określonych odstępach czasu, bez konieczności przebudowywania całej aplikacji. Jest to rozsądny kompromis między wydajnością a świeżością treści.
Strategia renderowania w Next.js ma większe znaczenie niż framework
Wybór Next.js nie załatwia sprawy z góry, ponieważ nadal musisz dobrać właściwy model renderowania do konkretnej strony. Mamy 4 pozycje do wyboru:
- SSG: blog, dokumentacja, strony ofertowe, evergreen content,
- ISR: listingi, katalogi, strony zmieniające się co jakiś czas,
- SSR: strony zależne od sesji, lokalizacji, świeżych danych lub personalizacji,
- CSR wewnątrz strony SSR/SSG: interaktywne widgety, filtry, sortowanie, aplikacyjne.
To właśnie odpowiednie użycie tych opcji pomaga nam wybrać najlepszą strategię do swojego projektu.
| Podejście | Co dostaje crawler w pierwszym HTML | Kiedy ma sens pod SEO | Główne ryzyko |
|---|---|---|---|
| React SPA / CSR | App shell, treść po JavaScripcie | Aplikacje wewnętrzne, panele, narzędzia | Opóźnione renderowanie i zależność od JS |
| Next.js SSG | Gotowy statyczny HTML | Blog, dokumentacja, strony usług, landing page'e | Nieaktualna treść, jeśli build jest zbyt rzadki |
| Next.js ISR | Gotowy HTML z cache | Katalogi, content z CMS, produkty | Źle dobrana rewalidacja lub brak odświeżenia |
| Next.js SSR | HTML generowany przy żądaniu | Dane świeże, lokalne, zależne od sesji | Wyższy TTFB i większa zależność od backendu |
W praktyce przewaga Next.js nie wynika z samego logo frameworka, tylko z tego, że możesz dobrać strategię renderowania do typu strony. Strona kategorii może działać przez ISR, artykuł blogowy przez SSG, a panel klienta jako CSR wewnątrz zabezpieczonej części aplikacji.
Metadata API w Next.js i kontrola technicznego SEO
Next.js 13+ z App Routerem wprowadził elegancki sposób zarządzania metadanymi, więc zapomnij o zewnętrznych bibliotekach. Next.js ma to wbudowane we framework.
Metadata API obsługuje wszystko: title, description, Open Graph, Twitter Cards, kanoniczne URL-e, a nawet robots i verification tags. Każda podstrona może mieć własne metadane, a Next.js automatycznie zadba o ich poprawne umieszczenie w sekcji <head>.
Optymalizacja obrazów z next/image pod SEO i Core Web Vitals
Kolejny istotny aspekt technicznego SEO to obrazy, które często są najcięższym elementem strony i głównym winowajcą słabych wyników . Next.js rozwiązuje ten problem specjalnym komponentem next/image.
W telegraficznym skrócie, co robi next/image pod spodem?
- Serwuje nowoczesne formaty zależnie od konfiguracji i nagłówka
Accept, np. WebP lub AVIF, - Generuje różne rozmiary dla różnych urządzeń (srcset),
- Implementuje dla obrazów poniżej pierwszego ekranu,
- Rezerwuje miejsce, zapobiegając przesunięciom layoutu (CLS),
- Obsługuje blur placeholder dla lepszego .
W praktyce oznacza to, że nie musisz ręcznie optymalizować grafik, co jest naprawdę dużym ułatwieniem, jeśli posiadasz stronę mocno obłożoną obrazami. Next.js zrobi to za Ciebie, poprawiając jednocześnie Largest Contentful Paint i Cumulative Layout Shift.
Core Web Vitals w Next.js: gdzie framework daje przewagę?
Google oficjalnie potwierdził, że Core Web Vitals są czynnikiem rankingowym, a trzy kluczowe metryki to:
LCP (Largest Contentful Paint) — czas ładowania największego elementu i tutaj Next.js pomaga przez SSR/SSG i optymalizację obrazów.
(Interaction to Next Paint) — responsywność na interakcje, czyli automatyczny w Next.js minimalizuje ilość JavaScript blokującego główny wątek.
CLS (Cumulative Layout Shift) — stabilność wizualna poprzez komponent next/image i next/font eliminują przesunięcia layoutu.
W moich projektach migracja na Next.js regularnie przekłada się na skok z żółtych/czerwonych wyników PageSpeed do zielonych.
Sitemap, robots.txt i dane strukturalne w Next.js
Kompletna strategia SEO wymaga jeszcze kilku elementów, by zamknąć ten temat, a Next.js ułatwia ich implementację.
Sitemap, którą możesz wygenerować dynamicznie:
Robots.txt — analogicznie przez app/robots.ts.
Ważne: app/sitemap.ts i app/robots.ts są specjalnymi route handlerami. Next.js może przechowywać ich wynik w cache domyślnie, ale jeśli użyjesz API zależnego od żądania albo wymusisz dynamiczne zachowanie, odpowiedź nie będzie zwykłym plikiem wygenerowanym raz podczas buildu. Dla SEO to dobrze, bo możesz generować sitemapy z , ale nadal musisz pilnować stabilnych URL-i, poprawnych lastModified i braku stron z noindex w sitemapie.
Dane strukturalne (JSON-LD) — dodaj w komponencie strony:
Jak sprawdzić, co Google widzi w aplikacji Next.js?
Po wdrożeniu strony sprawdź, czy treść ważna dla SEO jest dostępna bez czekania na interakcję użytkownika.
Najprostsze testy:
view-source:https://twojadomena.pl/adres. Sprawdź, czy w źródle sąh1, treść, linki wewnętrzne i podstawowe metadane.DevTools → Network → dokument HTML. Zobacz faktyczną odpowiedź serwera, a nie tylko DOM po hydracji.
Google Search Console → Inspekcja URL. Sprawdź renderowany HTML i zrzut strony.
Rich Results Test. Zweryfikuj JSON-LD i dane strukturalne.
test z wyłączonym JavaScriptem, w którym nie musi działać cała aplikacja, ale główna treść contentowa powinna być czytelna.
Jeśli źródło HTML zawiera tylko pusty wrapper aplikacji, a kluczowe nagłówki, opisy produktów lub linki pojawiają się dopiero po fetchu w komponencie klienckim, Next.js nie daje Ci pełnej przewagi SEO. Wtedy trzeba przenieść pobieranie danych do komponentu serwerowego, użyć generateStaticParams(), generateMetadata(), ISR albo SSR.
Najczęstsze błędy SEO w Next.js
Treść ładowana dopiero po hydracji, kiedy crawler dostaje pusty HTML, ponieważ dane są pobierane w
useEffect().Metadane generowane client-side. Tytuł, opis lub link kanoniczny pojawiają się dopiero po wykonaniu JS zamiast przez Metadata API.
Przypadkowy
noindex. Zostaje po środowisku testowym albo jest dziedziczony z layoutu.Nieprawidłowe linki kanoniczne. Wszystkie warianty strony wskazują na zły adres albo link kanoniczny nie zgadza się z rzeczywistym URL-em.
Brak crawlable links, czyli linki są przyciskami z
onClick, więc robot nie widzi normalnych adresów whref.Hydration mismatch. Treść w HTML różni się od treści po hydracji, co potrafi ukryć realne problemy z indeksacją.
Źle dobrana strategia cache. Artykuły, ceny lub stany produktów są przestarzałe, bo rewalidacja nie pasuje do tempa zmian.
Obrazy bez właściwego LCP, czyli hero image nie ma poprawnego rozmiaru,
sizes, priorytetu ładowania albo stabilnego miejsca w layoucie.
Ten ostatni punkt jest szczególnie ważny po przejściu na Next.js 16. Dla głównego obrazu LCP możesz użyć preload, ale nie nadużywaj go dla wielu obrazów naraz. Dokumentacja Next.js zaleca preload wtedy, gdy obraz faktycznie jest elementem LCP i znajduje się nad pierwszym ekranem.
Dlaczego Next.js nie gwarantuje pozycji w Google?
Może pomóc w SEO, ale nie zastąpi podstaw, ponieważ jest kolejnym elementem układanki:
- Trafienia w intencję użytkownika, czyli jeśli treść nie odpowiada na zapytanie, SSR niewiele zmieni.
- Semantycznego HTML: dobry nagłówek, listy,
article,nav,main, opisowe linki. - Linkowania wewnętrznego: robot musi rozumieć, które strony są ważne i jak są ze sobą powiązane.
- Kontroli indeksacji: linki kanoniczne,
robots, paginacja, duplikacja treści, czasemnoindex. - Danych z realnych użytkowników: Core Web Vitals pomagają, ale nie zastąpią jakości treści i sensownej architektury informacji.
Kiedy Next.js to dobry wybór pod SEO?
Next.js sprawdzi się najlepiej wtedy, gdy SEO ma realne znaczenie dla biznesu, czyli budujesz sklep e-commerce, aplikację SaaS z publicznym frontendem albo serwis, gdzie zależy Ci na dobrych Core Web Vitals i elastyczności między SSR, SSG i ISR w jednym projekcie.
Kiedy może być przerostem formy nad treścią? Przy prostych aplikacjach wewnętrznych, dashboardach i narzędziach, gdzie SEO nie odgrywa większej roli — tam klasyczny React z Vite będzie lżejszym wyborem. Warto też wiedzieć, że przy stronach silnie zorientowanych na content (blogi, strony firmowe, landing page'e) coraz częściej lepszą alternatywą okazuje się Astro. Jest to popularny framework, który domyślnie wysyła minimalną ilość JavaScriptu i jest zoptymalizowany właśnie pod wydajność oraz SEO.
Potrzebujesz pomocy z Next.js lub optymalizacją SEO swojej aplikacji? Skontaktuj się ze mną — łączę doświadczenie frontendowe z wieloletnim doświadczeniem w marketingu internetowym.
