Google Search Console i indeksowanie strony Next.jsSSR, SSG i sitemap w 2026

google search console5 min czytania20 lipca 2026

Autor: DevStudio.it

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

  1. Dodaj właściwość (domain example.com lub prefix URL https://www.example.com)
  2. Zweryfikuj DNS TXT lub plik HTML — rekord zostaje na stałe
  3. Submit /sitemap.xml w Sitemaps
  4. Sprawdź Pages → Indexed vs Not indexed (filtruj po powodzie)
  5. 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/image z 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”

  1. curl -I URL — 200, nie 403/401
  2. View source — czy H1 w HTML (nie tylko po hydracji)
  3. Search site:example.com — ile stron w indeksie
  4. GSC Coverage — dominujący powód exclusion
  5. noindex / X-Robots-Tag w headers
  6. Canonical wskazuje na inną domenę (staging leak)
  7. Sitemap zawiera URL-e z 404
  8. Redirect loop www/apex
  9. Treść <300 słów na kluczowych landingach
  10. 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?

Powiązane wpisy

Sitemap.xml i RSS feed w Next.js App Router — SEO techniczne 2026
6 min czytania
JSON-LD i Schema.org — SEO strony firmowej w Next.js (przewodnik 2026)
9 min czytania
Stripe Customer Portal — subskrypcje, webhooks i Next.js w 2026
5 min czytania

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.

Podoba Ci się nasze podejście? Zbudujmy coś razem.

Rozpocznij konfigurację projektu