Google Search Console i indeksowanie strony Next.js, SSR, 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
Schema FAQPage i rich results, kiedy Google pokazuje FAQ (2026)
5 min czytania
robots.txt w Next.js App Router, crawl budget i pułapki Disallow (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