SEO frameworków JavaScript
SEO dla frameworków JavaScript — React, Next.js, Vue, Nuxt, Angular, Svelte i Astro. Jak tryb renderowania (SSR, SSG, CSR) decyduje o tym, co Google może indeksować, oraz które frameworki najlepiej obsługują SEO od razu po instalacji.
Języki
SEO frameworków JavaScript sprowadza się do trybu renderowania: SSG i SSR dają Googlebotowi gotowy HTML; CSR wymaga wykonania JavaScriptu, co może, ale nie musi się udać. Next.js i Nuxt mają najlepiej wbudowaną obsługę SEO (SSR, SSG, ISR, API metadanych). Czyste React i Vue w trybie CSR są najbardziej ryzykowne dla SEO. Architektura wysp Astro jest domyślnie świetna dla SEO. Angular wymaga SSR przez @angular/ssr (wcześniej Angular Universal), aby zapewnić niezawodne indeksowanie.
TL;DR — Większość frameworków JavaScript buduje strony w przeglądarce odwiedzającego (CSR). Działa to dobrze dla użytkowników, ale wyszukiwarki mogą nie uruchomić JavaScriptu i przeoczyć treść. Rozwiązanie: użyj trybu frameworka, który buduje strony na serwerze (SSR) albo podczas builda (SSG). Next.js i Nuxt to ułatwiają; czyste React i Vue w trybie CSR wymagają dodatkowej pracy.
Dlaczego frameworki JavaScript mają problemy z SEO
Google przetwarza JavaScript przez crawlowanie, renderowanie i indeksowanie, a zasoby zablokowane lub niedziałające mogą zmienić wyrenderowany wynik. Evidence for this claim Primary standard or official documentation supporting the adjacent article claim. Scope: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confidence: high · Verified: Google: JavaScript SEO basics Tryb renderowania i implementacja metadanych mają większe znaczenie niż sama marka frameworka. Evidence for this claim Primary standard or official documentation supporting the adjacent article claim. Scope: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confidence: high · Verified: web.dev: Rendering on the Web
Tradycyjne witryny wysyłają kompletny HTML z serwera. Crawlery wyszukiwarek pobierają ten HTML i od razu indeksują treść. Frameworki JavaScript często działają inaczej: serwer wysyła minimalny plik HTML, a następnie JavaScript uruchamia się w przeglądarce, aby zbudować właściwą treść strony.
Jeśli crawler wyszukiwarki nie uruchomi Twojego JavaScriptu (albo go uruchomi, ale coś się nie powiedzie), zobaczy pustą stronę. To problem SEO CSR.
Wyjaśnienie trybów renderowania
- SSG (static site generation) — strony są budowane jako HTML podczas wdrażania. Crawlery otrzymują kompletny HTML bez potrzeby JavaScriptu. Najlepsza opcja dla SEO.
- SSR (server-side rendering) — serwer buduje HTML od nowa dla każdego żądania. Crawlery otrzymują kompletny HTML. Również doskonała opcja dla SEO.
- CSR (client-side rendering) — JavaScript buduje stronę w przeglądarce. Crawlery muszą uruchomić JavaScript, aby zobaczyć treść. Google potrafi to zrobić, ale występują błędy, a odkrywanie jest wolniejsze.
Frameworki według bezpieczeństwa SEO od razu po instalacji
Najbezpieczniejsze:
- Astro — domyślnie generuje statyczny HTML; JavaScript tylko tam, gdzie świadomie go włączysz
- Next.js — oferuje SSG, SSR i ISR; pełne API metadanych; standard branżowy
- Nuxt — to samo dla ekosystemu Vue; doskonała obsługa SSR/SSG
Wymaga konfiguracji:
- Angular — domyślnie CSR; wymaga
@angular/ssr(wcześniej Angular Universal) dla bezpiecznego SEO - React — domyślnie CSR; wymaga Next.js lub React Router (tryb frameworka) dla SSR/SSG
- Vue — domyślnie CSR; wymaga Nuxt dla SSR/SSG
- Svelte — domyślnie CSR; SvelteKit dodaje obsługę SSR/SSG
TL;DR — Na poziomie technicznym SEO frameworków JS dotyczy: (1) architektury renderowania początkowego ładunku HTML, (2) wstrzykiwania metadanych do
<head>przed wysłaniem odpowiedzi, (3) sposobu, w jaki framework obsługuje hydratację i odkrywanie linków, oraz (4) nieaktualności pamięci podręcznej ISR. Next.js ma najbardziej kompletne wbudowane narzędzia SEO (API metadanych, wbudowaneapp/sitemap.ts, optymalizacja obrazów). Astro jest najbezpieczniejszy dla SEO ze względu na architekturę.
Tryb renderowania, API metadanych i obsługa ISR według frameworka
Możliwości i wartości domyślne frameworków zmieniają się zależnie od wersji; weryfikuj je w oficjalnej dokumentacji każdego frameworka. Evidence for this claim Primary standard or official documentation supporting the adjacent article claim. Scope: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confidence: high · Verified: web.dev: Rendering on the Web Żaden tryb renderowania nie gwarantuje indeksowania ani rankingów. Evidence for this claim Primary standard or official documentation supporting the adjacent article claim. Scope: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confidence: high · Verified: Google: JavaScript SEO basics Gdy porównujesz frameworki przed podjęciem decyzji, testuj dla każdego kandydata te same trasy, treść, cel wdrożenia i narzędzia — benchmark, który zmienia którykolwiek z tych elementów, nie mierzy frameworka, tylko różnicę w konfiguracji.
| Framework | Domyślne renderowanie | Wbudowane API metadanych | Obsługa SSR/SSG | Ekosystemowa obsługa SEO |
|---|---|---|---|---|
| Astro | SSG (islands) | Tak (<head> w plikach .astro, Content Collections dla danych strukturalnych) | Oba | Silna |
| Next.js | SSR/SSG (konfigurowalne) | Tak (API metadanych w App Router) | Oba + ISR | Doskonała |
| Nuxt | SSR domyślnie | Tak (useHead, useSeoMeta) | Oba + ISR | Doskonała |
| SvelteKit | SSR domyślnie | Tak (svelte:head) | Oba | Dobra |
| React Router (tryb frameworka) | SSR domyślnie | Tak (eksport meta) | SSR + Deferred | Dobra |
| Angular | CSR domyślnie | Przez usługi Angular Meta/Title | Przez @angular/ssr | Umiarkowana |
| React (bare) | CSR | Ręczne (react-helmet-async; react-helmet jest nieutrzymywany) | Przez Next.js/Gatsby | Zależy od wrappera |
| Vue (bare) | CSR | Ręczne (@unhead/vue; vue-meta jest nieutrzymywane) | Przez Nuxt | Zależy od wrappera |
Remix v2 i React Router v7 połączyły się — renderowanie po stronie serwera i model ładowania danych Remix są teraz dostarczane jako “framework mode” (tryb frameworka) React Router, a to jest stabilna ścieżka aktualizacji dla aplikacji Remix v2. Remix 3 to odrębna, eksperymentalna przebudowa bez Reacta (beta), a nie następca Remix v2 — nie traktuj go jako opcji SSR typu drop-in dla kodu React.
Moment wstrzykiwania metadanych, linki dostępne dla crawlerów i nieaktualność pamięci ISR
Moment wstrzykiwania metadanych — metadane (<title>, <meta>) muszą znajdować się w
odpowiedzi serwera, a nie być dodawane przez JavaScript po załadowaniu strony. API metadanych Next.js,
useSeoMeta Nuxt i komponent <head> Astro obsługują to prawidłowo.
document.title = '...' ani React Helmet w trybie CSR nie — działają po
dostarczeniu początkowego HTML.
Odkrywanie linków — Googlebot odkrywa linki, parsując HTML. Linki dodawane przez
JavaScript (onClick, dynamiczne routowanie bez tagów <a>) mogą nie zostać odkryte.
Używaj prawdziwych elementów <a href> dla ważnej nawigacji.
Hydratacja i zduplikowana treść — jeśli SSR i CSR renderują różną treść (niezgodność hydratacji), możesz otrzymać zaindeksowaną treść, która nie odpowiada temu, co widzą użytkownicy. Testuj błędy hydratacji w konsoli przeglądarki.
Miękkie 404 — routery po stronie klienta mogą po cichu wyrenderować interfejs “page not found” (nie znaleziono strony), podczas gdy zwracają kod statusu HTTP 200. Wyszukiwarki indeksują je jako prawdziwe strony. Upewnij się, że strona 404 zwraca rzeczywisty status 404, a przekierowania po stronie serwera zwracają 301.
Unieważnianie pamięci ISR — w konfiguracjach ISR Next.js i Nuxt nieaktualne strony mogą być
serwowane crawlerom w czasie ponownej walidacji. Ustaw interwał czasowy revalidate, a w przypadku treści,
która zmienia się według harmonogramu, nad którym nie masz kontroli (na przykład zapis w CMS), połącz go
z ponowną walidacją na żądanie wywoływaną z handlera trasy opartego na webhooku — zobacz przewodnik ISR Next.js
dla pełnego API.
// app/blog/[id]/page.tsx — time-based revalidation
export const revalidate = 3600 // re-check this page at most once an hour
// app/api/revalidate/route.ts — on-demand revalidation, called by a CMS webhook
import { revalidatePath } from 'next/cache'
import { NextRequest, NextResponse } from 'next/server'
export async function POST(request: NextRequest) {
const { path, secret } = await request.json()
if (secret !== process.env.REVALIDATE_SECRET) {
return NextResponse.json({ message: 'Invalid secret' }, { status: 401 })
}
revalidatePath(path) // e.g. '/blog/1' — next request regenerates fresh HTML
return NextResponse.json({ revalidated: true })
} SEO frameworków JavaScript zależy przede wszystkim od trybu renderowania. SSG (strony budowane jako statyczny HTML podczas wdrażania) i SSR (strony renderowane po stronie serwera dla każdego żądania) są bezpieczne dla indeksowania przez wyszukiwarki. CSR (strony renderowane w całości w przeglądarce za pomocą JavaScriptu) jest bardziej ryzykowne — Google potrafi wykonywać JavaScript, ale błędy i opóźnienia są częste, a odkrywanie jest wolniejsze.
Next.js (meta-framework React): najbardziej kompletna wbudowana obsługa SEO. API metadanych App Router, SSG/SSR/ISR, optymalizacja obrazów, wbudowane app/sitemap.ts (pakiet next-sitemap jest teraz potrzebny tylko do rozszerzeń, których nie obejmuje) oraz prefetching na poziomie linków. Standard branżowy dla aplikacji React wrażliwych na SEO.
Nuxt (meta-framework Vue): równoważne możliwości dla Vue. Wbudowane composable useSeoMeta() i useHead(), SSR/SSG/ISR oraz moduł Nuxt SEO. Doskonały dla witryn opartych na Vue.
Astro: architektura wysp domyślnie dostarcza zero JavaScriptu. Strony są statycznym HTML-em, a interaktywność dodaje się przez jawne “islands” (wyspy). Domyślnie zapewnia najlepsze bezpieczeństwo SEO spośród wszystkich frameworków JS. Świetny dla witryn z dużą ilością treści.
SvelteKit: domyślnie SSR, doskonała obsługa metadanych przez svelte:head. Solidne SEO przy minimalnej konfiguracji.
Angular: domyślnie CSR, wymaga @angular/ssr (wcześniej Angular Universal) dla niezawodnego indeksowania. Historycznie najbardziej problematyczny dla SEO spośród głównych frameworków.
React (bare): domyślnie CSR. Wymaga Next.js, React Router (tryb frameworka) lub Gatsby dla SSR/SSG. Uwaga: model renderowania po stronie serwera Remix v2 został połączony z React Router v7/v8 jako “framework mode” (tryb frameworka) — to utrzymywana ścieżka aktualizacji, a nie odrębna, eksperymentalna beta bez Reacta Remix 3. Nie używaj czystego CRA/Vite-React dla treści, która musi rankować.
Vue (bare): ten sam problem. Użyj Nuxt dla aplikacji Vue krytycznych dla SEO.
Svelte (bare): domyślnie CSR. Użyj SvelteKit dla SSR/SSG.
Lista kontrolna SEO frameworków JavaScript
Uniwersalne (dotyczy wszystkich frameworków)
- Zweryfikuj tryb renderowania:
curl -s URL | grep "<title>"— tytuł musi pojawić się w surowym HTML - Sprawdź, czy
<title>i<meta name="description">znajdują się w odpowiedzi serwera - Używaj prawdziwych tagów
<a href>dla wszystkich linków nawigacyjnych (nie tylko handlerów kliknięcia) - Upewnij się, że strony 404 zwracają HTTP 404, a nie 200
- Upewnij się, że przekierowania używają 301/302 po stronie serwera, a nie
window.location.href - Wygeneruj i prześlij sitemapę XML
- Dodaj
robots.txtdo publicznego katalogu
Next.js
- Używaj API metadanych App Router (
metadataexport lubgenerateMetadata()) - Wybierz SSG (
generateStaticParams) albo SSR (dynamic = 'force-dynamic') dla każdej trasy - Dodaj plik
app/sitemap.ts(wbudowana obsługa sitemap w App Router) dla większości witryn; sięgaj po pakietnext-sitemaptylko wtedy, gdy potrzebujesz sitemap między domenami lub innych rozszerzeń, których nie odwzorowuje wbudowany typMetadataRoute.Sitemap - Używaj
next/imagedla wszystkich obrazów (automatyczne WebP, dobór rozmiaru, lazy-load) - Zweryfikuj wartości
revalidateISR — ustaw krótkie okna dla często aktualizowanych stron
Nuxt
- Używaj
useSeoMeta()lubuseHead()w każdym komponencie strony - Zainstaluj moduł
@nuxtjs/sitemap - Używaj wbudowanego SSR Nuxt (albo
nuxt generatedla SSG) - Skonfiguruj
robots.txtprzez@nuxtjs/robots
Astro
- Przekazuj właściwości SEO do komponentu
<BaseHead>na każdej stronie - Używaj integracji
@astrojs/sitemapAstro - Ograniczaj wyspy JavaScript do minimum — unikaj przekształcania statycznych sekcji w wyspy
Angular
- Włącz SSR przez
ng add @angular/ssr - Używaj usług
MetaiTitledla metadanych - Dodaj transfer state, aby zapobiec podwójnemu pobieraniu API podczas hydratacji
Szczegółowe omówienia frameworków
Powiązane materiały
Dziennik zmian
Zaktualizowano 19 lip 2026.
Podsumowanie redakcyjne i zapisane szczegóły zmian.Szczegóły zmian
-
Szczegółowe uwagi dotyczące zmian są obecnie dostępne po angielsku.
-
Szczegółowe uwagi dotyczące zmian są obecnie dostępne po angielsku.
-
Szczegółowe uwagi dotyczące zmian są obecnie dostępne po angielsku.
-
Szczegółowe uwagi dotyczące zmian są obecnie dostępne po angielsku.
-
Szczegółowe uwagi dotyczące zmian są obecnie dostępne po angielsku.
-
Szczegółowe uwagi dotyczące zmian są obecnie dostępne po angielsku.
Pełne porównanie jest niedostępne — dla tej wersji nie zarchiwizowano wcześniejszej migawki.