Dla developerów budujących strony marketingowe, blogi, landing page i serwisy content-driven zmiana ta uderza w trzy obszary naraz: wydajność mierzoną Core Web Vitals to zestaw metryk Google oceniających realne doświadczenie użytkownika: LCP (szybkość ładowania), INP (responsywność) i CLS (stabilność wizualna). Wpływają na ranking i konwersję. (a tym samym ranking SEO, czyli Search Engine Optimization, to optymalizacja strony pod widoczność w wynikach wyszukiwania.), dostępność treści dla crawlerów (w tym botów AI) oraz konwersje wynikające z szybszego ładowania i lepszego UX, czyli User Experience, opisuje całe doświadczenie użytkownika podczas korzystania z produktu..
Dlaczego server-first jest nowym domyślnym podejściem
Przez lata webowe aplikacje React przesuwały coraz więcej logiki na stronę klienta. Efektem były rosnące Bundle to paczka JavaScriptu lub innych zasobów wysyłana do przeglądarki jako część aplikacji. JavaScript, loading spinnery i strony, które bez JS były puste — niewidoczne dla botów wyszukiwarek i niedostępne na słabszych urządzeniach.
W 2026 roku wahadło wróciło na stronę serwera. Architektura server-first w Next.js App Router oznacza, że:
- Komponenty renderują się na serwerze domyślnie (Server Components)
- JavaScript trafia do przeglądarki tylko tam, gdzie jest faktycznie potrzebny (Client Components z dyrektywą
'use client') - Formularze i mutacje danych obsługuje serwer bezpośrednio (Server Actions)
- Strona jest natychmiastowo gotowa do indeksowania — bez czekania na Hydration to etap, w którym React podłącza logikę JavaScript do już wygenerowanego HTML-a w przeglądarce.
To nie egzotyczny feature dla laboratoriów R&D — to domyślne zachowanie Next.js App Router i najbezpieczniejszy punkt startu dla nowych stron content-driven w tym ekosystemie.
React Server Components — anatomia i wpływ na wydajność
Jak RSC działają pod maską
W tradycyjnym modelu React każdy komponent (nawet statyczna stopka czy lista benefitów) był częścią JavaScript bundle'a wysyłanego do przeglądarki. Przeglądarka musiała pobrać JS, zparsować go, wykonać i wyrenderować HTML — proces zwany hydratacją.
W modelu RSC:
- Server Component renderuje się na serwerze do HTML + specjalnego formatu RSC Payload
- Przeglądarka otrzymuje gotowy HTML (natychmiast widoczny) i payload opisujący strukturę
- Client Components (oznaczone
'use client') dołączają interaktywność tylko tam, gdzie jest potrzebna - Reszta strony — nagłówki, treść tekstowa, nawigacja, stopka — nie wymaga ani bajta JavaScriptu
Bezpośredni wpływ na Core Web Vitals
Core Web Vitals to zestaw metryk Google mierzących doświadczenie użytkownika, które bezpośrednio wpływają na ranking SEO:
Largest Contentful Paint (LCP, czyli Largest Contentful Paint, mierzy czas do wyrenderowania największego widocznego elementu — oznaczenie go preload przyspiesza jego załadowanie.) — czas do wyrenderowania największego elementu widocznego na ekranie. RSC dramatycznie poprawiają LCP, ponieważ HTML jest gotowy natychmiast, bez czekania na pobranie i wykonanie JavaScriptu. Cel Google: poniżej 2,5 sekundy.
Interaction to Next Paint (INP (Interaction to Next Paint) to Core Web Vital mierzący responsywność strony. Zastąpił FID i ocenia, ile czasu mija od interakcji użytkownika do najbliższego odrysowania ekranu, biorąc pod uwagę wszystkie interakcje w trakcie sesji.) — opóźnienie między interakcją użytkownika a wizualną reakcją. Mniejszy bundle JavaScript oznacza mniej pracy parsowania i wykonania, co przekłada się na szybszą responsywność. Cel Google: poniżej 200 milisekund.
Cumulative Layout Shift (CLS) — niestabilność layoutu podczas ładowania. Gdy HTML jest kompletny od początku (server-rendered), elementy nie „przeskakują" w trakcie hydratacji. Cel Google: poniżej 0,1.
Praktyczny przykład: sekcja blogowa
Rozważmy typową stronę blogową z listą artykułów i sidebarą z kategoriami. W tradycyjnym podejściu client-side:
Problem: bot wyszukiwarki widzi „Ładowanie..." zamiast treści. LCP jest wysoki, bo HTML jest pusty do momentu ukończenia fetch. Cały kod (React, useState, useEffect, logika fetch) trafia do bundle'a klienta.
W podejściu server-first z RSC:
Efekt: przeglądarka otrzymuje kompletny HTML z listą artykułów natychmiast. Jedynym JavaScriptem jest mały komponent formularza newsletter. LCP spada drastycznie, CLS jest zerowe, treść jest w pełni widoczna dla botów SEO i AI.
Server Actions — koniec z budowaniem API do formularzy
Server Actions to funkcje serwerowe oznaczone dyrektywą 'use server', które można wywoływać bezpośrednio z komponentów React. Eliminują potrzebę tworzenia endpointów API (/api/...) dla operacji takich jak zapis formularza, aktualizacja danych czy wysyłanie e-maili.
Dlaczego to istotne dla stron marketingowych
Typowa strona marketingowa zawiera liczne formularze: zapisy na newsletter, kontakt, pobieranie materiałów (lead magnety), rejestracja na webinar, kalkulatory z zapisem wyników. W tradycyjnym podejściu każdy z nich wymagał: endpointu API, obsługi CORS, walidacji po stronie klienta i serwera, zarządzania stanem ładowania.
Z Server Actions ten sam formularz kontaktowy wygląda tak:
Korzyści dla marketingu:
- Niezawodność — formularz działa nawet gdy JavaScript klienta się nie załaduje (progressive enhancement)
- Szybkość — brak round-tripu do API, serwer przetwarza dane w tym samym procesie
- Server-side tracking — zdarzenia konwersji wysyłane z serwera, niezależne od ad blockerów i ograniczeń przeglądarki
- Mniejszy bundle — logika walidacji i zapisu nie trafia do przeglądarki
Progressive Enhancement — formularz działa bez JS
Server Actions w Next.js działają z natywnym HTML <form action>, co oznacza, że formularz jest funkcjonalny nawet bez JavaScriptu. To nie tylko kwestia dostępności — ma bezpośredni wpływ na konwersje:
Użytkownik na wolnym łączu mobilnym wysyła formularz, zanim załaduje się JavaScript. Każda sekunda opóźnienia formularza to utracone leady.
Streaming i Suspense — natychmiastowy feedback
Next.js z RSC wspiera streaming HTML — serwer wysyła gotowe fragmenty strony w miarę ich renderowania, zamiast czekać aż cała strona będzie gotowa. W połączeniu z React Suspense pozwala to na natychmiastowe wyświetlenie szkieletu strony z progresywnym dociąganiem treści:
Z perspektywy SEO i UX:
- Użytkownik widzi treść natychmiast (główna sekcja produktu)
- LCP jest niski, bo najważniejszy element jest renderowany jako pierwszy
- Sekcje drugorzędne (recenzje, polecane) dociągają się płynnie
- Bot widzi kompletny HTML po zakończeniu streamingu
Partial Prerendering — hybryda statyczne + dynamiczne
Partial Prerendering (PPR) łączy statyczny HTML z dynamicznymi komponentami w jednym żądaniu HTTP. Statyczna „powłoka" strony (nawigacja, footer, layout) jest serwowana od razu, a dynamiczne fragmenty (personalizowany content, dane real-time) doładowują się przez streaming.
To bardzo naturalny kierunek dla stron marketingowych:
- Strony katalogowe — statyczny layout + dynamiczne ceny i dostępność
- Landing page z personalizacją — statyczna struktura + dynamiczny headline/CTA na podstawie UTM
- Blog z komentarzami — statyczny artykuł + dynamiczna sekcja komentarzy
Strategia doboru: Server Component vs Client Component
Kluczowa decyzja architektoniczna to określenie, co powinno być Server Component (domyślne), a co Client Component (oznaczone 'use client'). Zasada ogólna:
Server Component (domyślny) — używaj do:
- Treści statycznych (nagłówki, akapity, listy, karty artykułów)
- Pobierania danych (fetch z bazy, CMS, API)
- Renderowania markdown/MDX
- Komponentów, które nie wymagają interaktywności
- SEO-critical content (meta tagi, structured data, treść indeksowalna)
Client Component ('use client') — używaj do:
- Interaktywnych formularzy z walidacją real-time
- Stanowych komponentów (tabs, accordiony, modalne, dropdown)
- Komponentów korzystających z Browser API (localStorage, geolocation, clipboard)
- Animacji reagujących na interakcje użytkownika
- Widgetów third-party (mapy, chaty, embedy)
Zasada kciuka: jeśli komponent nie potrzebuje useState, useEffect ani obsługi zdarzeń przeglądarki — powinien być Server Component.
Wpływ na SEO — mierzalne wyniki
Przejście na architekturę server-first z RSC ma bezpośredni, mierzalny wpływ na metryki SEO:
Core Web Vitals
- LCP zwykle poprawia się, bo krytyczny HTML jest dostępny od pierwszego renderu, bez czekania na duży bundle JavaScript
- INP ma lepsze warunki, gdy do klienta wysyłasz mniej kodu i mniej pracy zostawiasz przeglądarce
- CLS łatwiej utrzymać w ryzach, gdy layout jest kompletny i przewidywalny od początku
Crawlability
- Treść jest w pełni dostępna w HTML źródłowym — nie wymaga wykonania JavaScript
- Boty wyszukiwarek i AI crawlery widzą kompletną treść natychmiast
- Structured data (JSON-LD) może być generowane po stronie serwera z pełnymi danymi
Czas indeksacji
- Strony z kompletnym HTML są indeksowane szybciej i pełniej
- Google nie musi „renderować" strony w oddzielnym kroku (JavaScript rendering)
- Nowe treści pojawiają się w wynikach szybciej
Migracja z Pages Router na App Router — praktyczne wskazówki
Jeśli masz istniejący projekt Next.js na Pages Router, migracja na App Router (i tym samym na RSC) jest procesem przyrostowym:
- Zacznij od nowych stron — nowe sekcje buduj w App Router (
app/directory), istniejące zostaw w Pages Router (pages/) - Migruj strony statyczne najpierw — blog, about, polityka prywatności — te strony najłatwiej konwertować na Server Components
- Wydziel Client Components — zidentyfikuj interaktywne fragmenty i wydziel je do osobnych plików z
'use client' - Zastąp API routes Server Actions — formularze kontaktowe, zapis na newsletter, proste mutacje
- Zmigruj data fetching —
getStaticProps/getServerSidePropszamień naasyncServer Components z bezpośrednimfetchlub dostępem do bazy
Next.js wspiera oba routery jednocześnie, więc migracja może być rozłożona w czasie bez ryzyka regresji.
Jeśli rozwijasz ten temat dalej, zobacz też App Router czy Pages Router — co wybrać?, Pobieranie danych w Next.js — fetch, cache i rewalidacja i React 19 Actions.
