TL;DR
Strona na Next.js wygląda dobrze w przeglądarce, ale Google nie indeksuje podstron — w 2026 najczęstsze przyczyny to brak sitemapy, noindex w metadata, renderowanie po stronie klienta bez HTML w pierwszej odpowiedzi oraz błędne canonical między locale. Poniżej: konfiguracja GSC, URL Inspection krok po kroku, sitemap.ts w App Router, checklista SSR/SSG i typowe błędy po deployu na DevStudioIT Cloud.
Dla kogo
- Marketingu widzącego „Discovered – currently not indexed” w Search Console
- Developerów Next.js (App Router) odpowiedzialnych za SEO techniczne
- Firm po migracji lub redesignie z spadkiem ruchu organicznego
- Właścicieli stron wielojęzycznych z problemem hreflang
Fraza (SEO)
google search console indeksowanie nextjs, url inspection sitemap, nextjs ssg ssr seo 2026, strona nie indeksuje się google
GSC — pierwsze kroki po deployu
- Dodaj właściwość (domain
example.comlub prefix URLhttps://www.example.com) - Zweryfikuj DNS TXT lub plik HTML — rekord zostaje na stałe
- Submit
/sitemap.xmlw Sitemaps - Sprawdź Pages → Indexed vs Not indexed (filtruj po powodzie)
- Dla kluczowych URL-i: URL Inspection → „Test live URL” → „Request indexing”
Nie spamuj „Request indexing” dla setek URL-i — Google ma limit dzienny. Priorytetyzuj: homepage, oferta, top blog, landingi kampanii.
URL Inspection — jak czytać wyniki
| Status | Znaczenie | Typowa akcja |
|---|---|---|
| URL is on Google | OK | Monitor CTR w Performance |
| Crawled – currently not indexed | Jakość / duplikat / thin content | Wzmocnij treść, canonical |
| Discovered – not indexed | Brak crawl budget / linków wewnętrznych | Linki z menu, sitemap |
| Excluded by ‘noindex’ | Tag w HTML | Usuń robots: { index: false } |
| Soft 404 | Pusta strona w oczach Google | Treść + 200, nie fałszywy 404 |
| Redirect error | Łańcuch redirectów | Max 1 hop 301 |
„View crawled page” → HTML tab: czy Google widzi treść H1 i akapity, czy tylko pusty <div id="root">?
Next.js App Router — metadata i indeksowalność
Server Components domyślnie renderują HTML po stronie serwera — dobrze dla SEO. Problemy zaczynają się przy 'use client' na całej stronie bez SSR fallback.
// app/pl/oferta/page.tsx
import type { Metadata } from 'next';
export const metadata: Metadata = {
title: 'Oferta — DevStudio.it',
description: 'Strony WWW i aplikacje Next.js dla firm.',
alternates: {
canonical: 'https://www.example.com/pl/oferta',
languages: {
pl: 'https://www.example.com/pl/oferta',
en: 'https://www.example.com/en/services',
de: 'https://www.example.com/de/leistungen',
},
},
robots: { index: true, follow: true },
};
export default function OfertaPage() {
return (/* server-rendered content */);
}Unikaj globalnego noindex na staging — env leak na produkcję to klasyk. Na DevStudioIT Cloud (devstudioit.cloud) staging ma osobną domenę z robots.txt Disallow all.
SSR vs SSG vs ISR — co wybiera Google
| Strategia | Next.js | Indeksowanie | Kiedy |
|---|---|---|---|
| SSG | generateStaticParams |
Najszybszy crawl, stabilny HTML | Blog, oferta, FAQ |
| SSR | dynamic = 'force-dynamic' |
OK, wolniejszy crawl | Panel, personalizacja |
| ISR | revalidate: 3600 |
OK, cache + świeżość | Listing case studies |
| CSR only | cały page client | Ryzyko pustego HTML | Unikać na SEO URL |
Blog i strony firmowe: SSG/ISR dla 95% URL-i. SSR tylko tam, gdzie treść zależy od sesji.
Sitemap w App Router
// app/sitemap.ts
import { MetadataRoute } from 'next';
import { getBlogPosts } from '@/lib/content';
import { locales } from '@/i18n';
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
const base = 'https://www.example.com';
const staticPaths = ['', '/oferta', '/kontakt'];
const entries: MetadataRoute.Sitemap = [];
for (const locale of locales) {
for (const path of staticPaths) {
entries.push({
url: `${base}/${locale}${path}`,
lastModified: new Date(),
changeFrequency: path === '' ? 'weekly' : 'monthly',
priority: path === '' ? 1 : 0.8,
});
}
}
const posts = await getBlogPosts();
for (const post of posts) {
entries.push({
url: `${base}/${post.locale}/blog/${post.slug}`,
lastModified: post.updated,
});
}
return entries;
}Submit w GSC: https://www.example.com/sitemap.xml. Po deploy ISR sitemap odświeża się przy buildzie — nie musisz ręcznie dopisywać wpisów (zgodnie z README projektu).
robots.txt
// app/robots.ts
import { MetadataRoute } from 'next';
export default function robots(): MetadataRoute.Robots {
return {
rules: { userAgent: '*', allow: '/', disallow: ['/api/', '/admin/'] },
sitemap: 'https://www.example.com/sitemap.xml',
};
}Sprawdź w GSC → Settings → robots.txt tester. Blokada /api/ OK; blokada /_next/ — tylko jeśli wiesz co robisz (Google potrzebuje JS/CSS).
Wielojęzyczność i hreflang
Ten sam translationId w frontmatter bloga (np. google-search-console-indexing-nextjs-2026) + alternates.languages w metadata = spójny hreflang. Błąd: PL strona wskazuje canonical EN — Google indeksuje jedną wersję, reszta „Duplicate without user-selected canonical”.
Dane dynamiczne (formularze) w Branchly (branchly.cloud) nie wpływają na crawl — ważne, by publiczne strony nie wymagały logowania.
Core Web Vitals a indeksowanie
CWV nie jest bezpośrednim „przełącznikiem indeksu”, ale wolny LCP na mobile obniża crawl efficiency. Po deployu na DevStudioIT Cloud:
next/imagez priority na LCP- Font
display: swap - Unikaj layout shift pod cookie banner
GSC → Experience → Core Web Vitals — napraw URL-e w „Poor” przed masowym request indexing.
Diagnostyka — 10 punktów gdy „nic nie wchodzi w indeks”
curl -I URL— 200, nie 403/401- View source — czy H1 w HTML (nie tylko po hydracji)
- Search
site:example.com— ile stron w indeksie - GSC Coverage — dominujący powód exclusion
noindex/X-Robots-Tagw headers- Canonical wskazuje na inną domenę (staging leak)
- Sitemap zawiera URL-e z 404
- Redirect loop www/apex
- Treść <300 słów na kluczowych landingach
- Brak linków wewnętrznych do nowych podstron
FAQ
Ile trwa indeksowanie po request?
Od kilku godzin do 2 tygodni — zależy od autorytetu domeny. Nowa domena wolniej niż refresh na starej.
Czy Google indeksuje JavaScript Next.js?
Tak — rendering queue. SSR/SSG daje szybszy i pewniejszy wynik niż pure CSR.
Osobna sitemap per locale?
Jedna sitemap z wszystkimi URL + hreflang w metadata wystarczy dla większości projektów.
Czy /api/ musi być w sitemap?
Nie — API nie indeksujemy. Tylko publiczne strony HTML.
Staging na DevStudioIT Cloud — jak nie zindeksować?
Basic auth, noindex w metadata, osobna subdomena + Disallow w robots. Nigdy ten sam canonical co produkcja.
CTA
Strona Next.js nie pojawia się w Google albo GSC pokazuje setki błędów?
- Audyt SEO techniczny — GSC, sitemap, SSR/SSG, DevStudioIT Cloud
- Audyt SEO techniczny — checklista — rozszerzona lista
O autorze
Budujemy szybkie strony WWW, aplikacje web/mobile, chatboty AI i hosting — z naciskiem na SEO i konwersję.
Przydatne linki
Od teorii do produkcji — Branchly, hosting i realizacje.
