Průvodce SEO pro Next.js: zvolte SSG, SSR nebo ISR, nastavte metadata a kanonické značky, vygenerujte sitemap.xml, provozujte blog napojený na webhook a zůstaňte čitelní pro AI crawlery.

Na této stránce
Stručně
Next.js je jeden z nejlepších frameworků Reactu pro SEO, protože crawlerům posílá kompletní HTML místo prázdné kostry. Aby se stránky umisťovaly, předrenderujte obsahové stránky (statické generování nebo ISR), definujte titulky, popisy a kanonické značky pomocí Metadata API, generujte sitemap.xml a robots.txt ze složky app, používejte skutečné odkazy a správné stavové kódy a hlavní obsah nedávejte do kódu, který běží jen na klientovi, protože většina AI crawlerů JavaScript nespouští.
Chcete jít dál? Zeptejte se
Rychlý kvíz
Hodí se vám SEO a jak začít?
Sorank odpovídá vašim odpovědím
Vyzkoušejte to 3 dny na svém webu a zjistěte, kde stojíte na Googlu, v ChatGPT a v ostatních AI.
Spustit 3denní bezplatnou zkušební verzi3 dny zdarma, poté můžete kdykoli přestat. Garance výsledků nebo vrácení peněz do 90 dnů.
SEO pro Next.js je z velké části o správné volbě pro každou trasu: co se vykresluje na serveru, co se cachuje a co se dostane do HTML dřív, než se spustí jakýkoli skript. Google ve své příručce Základy SEO pro JavaScript vysvětluje, že aplikace v JavaScriptu zpracovává ve třech fázích (procházení, vykreslení, indexace) a že „vykreslování na serveru nebo předrenderování je pořád skvělý nápad“. Next.js to dělá ve výchozím nastavení. Tento průvodce pokrývá App Router (Next.js 13 a novější) s poznámkami ke starší verzi Pages Router.
Ano. Obyčejná aplikace v Reactu s vykreslováním na straně klienta odešle téměř prázdný soubor HTML a stránku sestaví až v prohlížeči; vyhledávače ji musejí vykreslit a mnoho robotů to nikdy neudělá. Next.js vykresluje React na serveru, takže odpověď HTML už obsahuje nadpisy, text, odkazy a metadata. Náš průvodce SEO pro JavaScript vysvětluje, proč na tom při indexaci záleží.
V App Router jsou komponenty ve výchozím stavu Server Components. I komponenty označené 'use client' se předrenderují do HTML na serveru. Slabé místo jsou data: cokoli, co načtete uvnitř useEffect nebo co se načte až po kliknutí, v počátečním HTML chybí. Obsah načítejte v Server Components a klientské komponenty si nechte pro interaktivitu.
Next.js umožňuje kombinovat režimy po jednotlivých trasách. Volba ovlivňuje aktuálnost, rychlost a to, co dostanou crawlery.
| Režim | Kdy se HTML sestaví | Verdikt pro SEO | Vhodné pro |
|---|---|---|---|
| Statické generování (SSG) | Při sestavení | Nejlepší: úplné HTML, velmi rychlé | Úvodní stránky, dokumentace, nadčasové články |
| Inkrementální statická regenerace (ISR) | Při sestavení, pak obnoveno na pozadí nebo na vyžádání | Nejlepší pro velké nebo se měnící weby | Blogy, katalogy produktů, stránky z CMS |
| Vykreslování na serveru (SSR) | Při každém požadavku | Dobré: úplné HTML, závisí na rychlosti serveru | Personalizované nebo živé stránky |
| Vykreslování na straně klienta (CSR) | V prohlížeči | Slabé: obsah je neviditelný pro většinu robotů | Dashboardy za přihlášením |
Dokumentace Next.js k ISR uvádí přínosy: aktualizovat statický obsah „bez přestavění celého webu“ a zvládat velké množství stránek bez dlouhých časů sestavení. Trasa s export const revalidate = 3600 se obnoví nejvýš jednou za hodinu; pro přesnou kontrolu zavolejte revalidatePath nebo revalidateTag, když se obsah změní. Počítejte s tím, že ISR nefunguje se statickým exportem (output: 'export'). Pro aplikace, které musejí zůstat vykreslované na klientovi, popisuje náš průvodce SEO pro jednostránkové aplikace obcházení těchto omezení.
Tip
Zkontrolujte, co dostávají roboti, a ne to, co ukazuje váš prohlížeč: spusťte curl na URL nebo otevřete zobrazení zdroje a hledejte větu z článku. Pokud v surovém HTML není, závisí na JavaScriptu.
Metadata API v App Router nahrazuje next/head. Podle dokumentace Next.js k metadatům exportujete statický objekt metadata z layoutu nebo stránky, nebo funkci generateMetadata, když hodnoty závisí na datech, a Next.js vygeneruje značky v hlavičce. Obojí je podporováno jen v Server Components.
export async function generateMetadata({ params }) {
const { slug } = await params
const post = await getPost(slug)
return {
title: post.title,
description: post.excerpt,
alternates: { canonical: `/blog/${slug}` },
openGraph: { images: [post.cover] },
}
}Pět pravidel, která zabrání většině problémů:
U dynamických stránek Next.js streamuje metadata až po prvních bajtech, aby urychlil vykreslení. Dokumentace uvádí, že streamování je vypnuto pro roboty, které očekávají metadata v hlavičce, rozpoznané podle user agenta (mezi příklady patří Bingbot, Twitterbot a Slackbot), a že volba htmlLimitedBots přizpůsobuje seznam. Pokud vám záleží na crawleru, který v seznamu není, přidejte ho. U Pages Router je ekvivalentem komponenta Head z next/head s atributem key, aby se zabránilo duplicitním značkám.
Obojí jsou speciální soubory ve složce app. Soubor sitemap.ts, který exportuje funkci vracející URL adresy, se stane /sitemap.xml; soubor robots.ts se stane /robots.txt. referenční příručka k mapě webu uvádí, že soubor je ve výchozím stavu cachován a že limit Google je 50000 URL na jednu mapu webu; nad tuto hranici generateSitemaps rozdělí mapu do několika souborů.
import type { MetadataRoute } from 'next'
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
const posts = await getPosts()
return posts.map((p) => ({
url: `https://example.com/blog/${p.slug}`,
lastModified: p.updatedAt,
}))
}Zahrnujte jen kanonické, indexovatelné URL, které vracejí 200, a do lastModified uvádějte skutečné datum aktualizace. Mapa webu přijímá také alternates.languages pro vícejazyčné weby. V robots.ts odkažte na mapu webu a rozhodněte, které AI roboti smějí web procházet; náš článek o souboru robots.txt pro AI crawlery je uvádí. Více o formátu najdete v našem hesle ve slovníku o XML mapě webu.
| Problém | Co se stane | Oprava |
|---|---|---|
| Navigace přes onClick a router.push | Google sleduje jen prvky a s atributem href | Použijte komponentu Link z next/link, která vykreslí skutečný odkaz |
| Chybějící obsah vrácený jako stránka 200 | Soft 404 v Search Console | Zavolejte notFound(), aby trasa vrátila stavový kód 404 |
| Dočasná přesměrování u přesunutých stránek | redirect() odešle 307 | Použijte permanentRedirect() nebo permanent: true v next.config (308) |
| Smíšená lomítka na konci | Dvě URL pro stejnou stránku | Zvolte jednu pomocí volby trailingSlash a kanonické značky držte konzistentní |
| Náhledová nebo testovací nasazení indexovaná | Duplicitní kopie webu v Google | Pošlete noindex na domény mimo produkci |
| Obsah za záložkami načtený až po kliknutí | Text chybí v HTML | Vykreslete veškerý obsah na serveru a v případě potřeby ho skryjte pomocí CSS |
Všechny tyto problémy snižují procházitelnost: crawler musí být schopen objevit každou URL přes odkazy a dostat čistý stavový kód.
Dokumentace Next.js doporučuje vykreslovat JSON-LD jako značku script typu application/ld+json přímo v komponentě stránky nebo layoutu, sestavenou ze stejných dat jako stránka, a ošetřit znak < v serializovaném JSON, aby se zabránilo vložení nežádoucího kódu. Protože se vykresluje na serveru, vidí ho v surovém HTML jak Google, tak AI crawlery. Použijte Article (nebo BlogPosting) pro příspěvky, Organization v kořenovém layoutu, BreadcrumbList pro hluboké stránky a Product pro e-commerce. Generátor schema vám dá platný výchozí blok; stránku pak ověřte nástrojem Google Rich Results Test.
Next.js přináší komponenty, které řeší obvyklé příčiny špatných Core Web Vitals:
Měřte terénní data, ne jen laboratorní skóre: náš průvodce PageSpeed Insights ukazuje, jak číst obojí.
Blog v Next.js obvykle přijme jednu ze tří podob: soubory MDX nebo Markdown v repozitáři (jednoduché, ale každý příspěvek vyžaduje commit a nasazení), headless CMS (Sanity, Contentful, Strapi, Payload) načítané v Server Components, nebo publikační webhook, který přijímá články z externího nástroje. Ve všech třech případech je vzor SEO stejný: dynamická trasa app/blog/[slug] s generateStaticParams, generateMetadata, ISR, mapou webu napojenou na stejný zdroj a indexová stránka, která odkazuje na každý příspěvek.
Vzor s webhookem drží publikování mimo váš cyklus nasazení. Route Handler přijme článek, uloží ho a poté revalidní dotčené stránky:
// app/api/publish/route.ts
import { revalidatePath } from 'next/cache'
export async function POST(request) {
if (request.headers.get('authorization') !== `Bearer ${process.env.PUBLISH_SECRET}`) {
return new Response('Unauthorized', { status: 401 })
}
const article = await request.json()
await savePost(article)
revalidatePath('/blog')
revalidatePath(`/blog/${article.slug}`)
return Response.json({ ok: true })
}Pozor
Chraňte endpoint tajemstvím a revalidujte přesnou veřejnou cestu. Dokumentace ISR varuje, že u více serverových instancí s výchozí souborovou cache vyčistí on-demand revalidace jen instanci, která volání přijala; použijte sdílený handler cache.
Vykreslování na serveru je první podmínkou pro GEO (optimalizaci pro generativní vyhledávače). Analýza Vercel z prosince 2024 The rise of the AI crawler zjistila, že „žádný z hlavních AI crawlerů v současnosti nevykresluje JavaScript“, jmenovala GPTBot, ChatGPT-User, OAI-SearchBot, ClaudeBot a PerplexityBot a v jednom měsíci napočítala na své síti 569 milionů stažení GPTBot a 370 milionů stažení Claude. Stránka v Next.js, která předrenderuje text, nadpisy a JSON-LD, je pro všechny čitelná; stránka vykreslovaná na klientovi nikoli.
Druhou podmínkou je obsah, který stojí za citování: články, které odpovídají na jednu otázku v každé sekci, s zdroji, čísly a jasnými definicemi, publikované pravidelně. To je část, kterou automatizuje Sorank, náš produkt. Sorank je SEO a GEO software na autopilotu: najde vaše klíčová slova a jeho generátor článků pro blog napíše 20, 60 nebo 120 článků měsíčně se zdroji, interními odkazy a obrázky. Na webu v Next.js se připojí přes vlastní webhook popsaný na stránce instalace: váš Route Handler přijme každý článek, uloží ho a revalidne blog. Sledování zmínek v AI pak každý měsíc kontroluje, zda ChatGPT, Claude a Gemini citují vaši značku.

Stručně: předrenderujte každou stránku, kterou chcete nalézt, definujte metadata na serveru a napojte mapu webu na stejný zdroj jako obsah. Next.js vám dá nástroje; umístění a citace v AI pocházejí z toho, co s nimi publikujete. Chcete-li blog v Next.js pravidelně zásobovat články, podívejte se na tarify Sorank, od $49 měsíčně s 3denní bezplatnou zkušební verzí.
Next.js je postaven na Reactu, takže jde o srovnání přístupů k vykreslování. Běžná jednostránková aplikace v Reactu se vykresluje v prohlížeči a odešle téměř prázdné HTML, zatímco Next.js stránky předrenderuje na serveru nebo při sestavení. Crawlery, včetně AI robotů, které JavaScript nespouštějí, dostanou z Next.js úplný obsah bez dodatečného nastavení.
Ne sama od sebe. V App Router přidáte do složky app soubor sitemap.ts, který vrací vaše URL adresy, a Next.js ho zpřístupní na /sitemap.xml. U velkých webů generateSitemaps rozdělí seznam do několika souborů, protože Google přijme až 50000 URL na jednu mapu webu.
Oba mohou dobře fungovat, protože oba předrenderují HTML. App Router je doporučená volba pro nové projekty: Server Components snižují klientský JavaScript a Metadata API, sitemap.ts a robots.ts zvládají soubory SEO nativně. U stávajícího webu v Pages Router se migrace kvůli samotnému SEO zpravidla nevyplatí.
VYZKOUŠELI SORANK PŘED VÁMI
