Next.js SEO: SSG, SSR oder ISR wählen, Metadaten und Canonicals setzen, sitemap.xml erzeugen, einen Blog per Webhook befüllen und für KI-Crawler lesbar bleiben.

Kurz gesagt
Next.js gehört zu den besten React-Frameworks für SEO, weil es Crawlern vollständiges HTML statt einer leeren Hülle liefert. Für gute Rankings sollten Sie Inhaltsseiten vorab rendern (statische Generierung oder ISR), Titel, Beschreibungen und Canonicals mit der Metadata API festlegen, sitemap.xml und robots.txt aus dem app-Ordner erzeugen, echte Links und korrekte Statuscodes verwenden und den Hauptinhalt aus reinem Client-Code heraushalten, denn die meisten KI-Crawler führen kein JavaScript aus.
Möchten Sie mehr erfahren? Fragen Sie
Kurzes Quiz
Ist SEO das Richtige für Sie, und wie fangen Sie an?
4 kurze Fragen, um zu sehen, ob Google Ihnen Kunden bringen kann.
Unsere Empfehlung für Sie
Sorank ist die richtige Lösung für Sie
Menschen suchen nach dem, was Sie verkaufen, und Sie können ein paar Monate warten: Sorank findet die richtigen Suchanfragen, schreibt und veröffentlicht die Artikel und holt Ihnen Links.
Sorank passt zu Ihren Antworten
Testen Sie es 3 Tage lang auf Ihrer eigenen Website oder starten Sie mit einem kostenlosen Audit, um zu sehen, wo Sie stehen.
3 Tage kostenlos, danach beenden Sie jederzeit. 90-Tage-Geld-zurück-Garantie.
Bei Next.js SEO geht es vor allem um die richtige Entscheidung pro Route: Was wird auf dem Server gerendert, was gecacht, und was steht im HTML, bevor ein Skript läuft? Google erklärt in den Grundlagen zu JavaScript-SEO, dass JavaScript-Apps in drei Phasen verarbeitet werden (Crawling, Rendering, Indexierung) und dass serverseitiges Rendering oder Pre-Rendering „nach wie vor eine gute Idee“ ist. Next.js macht genau das standardmäßig. Dieser Leitfaden behandelt den App Router (Next.js 13 und neuer) mit Hinweisen zum älteren Pages Router.
Ja. Eine klassische React-App mit Client-Side-Rendering sendet eine fast leere HTML-Datei und baut die Seite im Browser auf; Suchmaschinen müssen sie rendern, und viele Bots tun das nie. Next.js rendert React auf dem Server, die HTML-Antwort enthält also bereits Überschriften, Text, Links und Metadaten. Unser Leitfaden zu JavaScript-SEO erklärt, warum dieser Unterschied für die Indexierung zählt.
Im App Router sind Komponenten standardmäßig Server Components. Selbst Komponenten mit 'use client' werden auf dem Server zu HTML vorgerendert. Die Schwachstelle sind Daten: Alles, was Sie in useEffect oder erst nach einem Klick laden, fehlt im initialen HTML. Holen Sie Inhalte in Server Components und nutzen Sie Client-Komponenten nur für Interaktivität.
Next.js erlaubt es, die Modi Route für Route zu mischen. Die Wahl beeinflusst Aktualität, Geschwindigkeit und das, was Crawler erhalten.
| Modus | Wann das HTML entsteht | SEO-Urteil | Geeignet für |
|---|---|---|---|
| Statische Generierung (SSG) | Beim Build | Am besten: vollständiges HTML, sehr schnell | Landingpages, Dokumentation, zeitlose Artikel |
| Incremental Static Regeneration (ISR) | Beim Build, danach im Hintergrund oder auf Abruf aktualisiert | Am besten für große oder sich ändernde Websites | Blogs, Produktkataloge, CMS-Seiten |
| Serverseitiges Rendering (SSR) | Bei jeder Anfrage | Gut: vollständiges HTML, abhängig von der Servergeschwindigkeit | Personalisierte oder Echtzeit-Seiten |
| Client-Side-Rendering (CSR) | Im Browser | Schwach: Inhalt für die meisten Bots unsichtbar | Dashboards hinter einem Login |
Die Next.js-Dokumentation zu ISR nennt die Vorteile: statische Inhalte aktualisieren, „ohne die gesamte Website neu zu bauen“, und große Seitenmengen ohne lange Build-Zeiten verwalten. Eine Route mit export const revalidate = 3600 wird höchstens einmal pro Stunde neu generiert; für exakte Kontrolle rufen Sie revalidatePath oder revalidateTag auf, wenn sich Inhalte ändern. ISR funktioniert nicht mit einem statischen Export (output: 'export'). Für Apps, die clientseitig gerendert bleiben müssen, beschreibt unser Leitfaden zu SEO für Single Page Applications die Lösungswege.
Tipp
Prüfen Sie, was Bots erhalten, nicht was Ihr Browser anzeigt: Rufen Sie die URL mit curl ab oder öffnen Sie view-source und suchen Sie einen Satz aus dem Artikel. Steht er nicht im rohen HTML, hängt er von JavaScript ab.
Die Metadata API ersetzt next/head im App Router. Laut der Next.js-Dokumentation zu Metadaten exportieren Sie ein statisches metadata-Objekt aus einem Layout oder einer Seite, oder eine Funktion generateMetadata, wenn die Werte von Daten abhängen, und Next.js erzeugt die Head-Tags. Beides wird nur in Server Components unterstützt.
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] },
}
}Fünf Regeln, die die meisten Probleme verhindern:
Auf dynamischen Seiten streamt Next.js die Metadaten nach den ersten Bytes, um das Rendering zu beschleunigen. Laut Dokumentation ist das Streaming für Bots deaktiviert, die Metadaten im Head erwarten und am User Agent erkannt werden (Bingbot, Twitterbot und Slackbot gehören zu den Beispielen); die Option htmlLimitedBots passt die Liste an. Fehlt ein Crawler, der Ihnen wichtig ist, ergänzen Sie ihn. Im Pages Router ist das Gegenstück die Head-Komponente aus next/head, mit einem key-Attribut gegen doppelte Tags.
Beide sind Spezialdateien im app-Ordner. Eine Datei sitemap.ts, die eine Funktion mit URLs exportiert, wird zu /sitemap.xml; eine Datei robots.ts wird zu /robots.txt. Die Sitemap-Referenz weist darauf hin, dass die Datei standardmäßig gecacht wird und Googles Grenze bei 50.000 URLs pro Sitemap liegt; darüber teilt generateSitemaps sie in mehrere Dateien auf.
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,
}))
}Nehmen Sie nur kanonische, indexierbare URLs mit Status 200 auf und tragen Sie in lastModified das echte Änderungsdatum ein. Für mehrsprachige Websites akzeptiert die Sitemap auch alternates.languages. In robots.ts verweisen Sie auf die Sitemap und legen fest, welche KI-Bots crawlen dürfen; unser Artikel zu robots.txt für KI-Crawler listet sie auf. Mehr zum Format im Glossareintrag zur XML-Sitemap.
| Problem | Folge | Lösung |
|---|---|---|
| Navigation per onClick und router.push | Google folgt nur a-Elementen mit href | Die Link-Komponente aus next/link verwenden, die einen echten Link erzeugt |
| Fehlender Inhalt als Seite mit Status 200 | „Soft 404“ in der Search Console | notFound() aufrufen, damit die Route den Status 404 liefert |
| Temporäre Weiterleitungen für verschobene Seiten | redirect() sendet einen 307 | permanentRedirect() oder permanent: true in next.config verwenden (308) |
| Gemischte Schrägstriche am URL-Ende | Zwei URLs für dieselbe Seite | Mit der Option trailingSlash eine Variante festlegen und Canonicals konsistent halten |
| Indexierte Vorschau- oder Staging-Deployments | Doppelte Kopien der Website bei Google | Auf Nicht-Produktionsdomains noindex senden |
| Tab-Inhalte, die erst per Klick laden | Text fehlt im HTML | Alle Inhalte auf dem Server rendern und bei Bedarf per CSS ausblenden |
All diese Probleme verringern die Crawlbarkeit: Ein Crawler muss jede URL über Links finden und einen sauberen Statuscode erhalten.
Die Next.js-Dokumentation empfiehlt, JSON-LD als script-Tag vom Typ application/ld+json direkt in der Seiten- oder Layout-Komponente zu rendern, aus denselben Daten wie die Seite, und das Zeichen < im serialisierten JSON zu maskieren, um Injektionen zu verhindern. Da es auf dem Server gerendert wird, sehen Google und KI-Crawler es im rohen HTML. Verwenden Sie Article (oder BlogPosting) für Beiträge, Organization im Root-Layout, BreadcrumbList für tiefe Seiten und Product im E-Commerce. Ein Schema-Generator liefert einen gültigen Startblock; danach prüfen Sie die Seite mit Googles Test für Rich-Suchergebnisse.
Next.js bringt Komponenten mit, die die üblichen Ursachen schlechter Core Web Vitals beheben:
Messen Sie Felddaten, nicht nur einen Laborwert: Unser Leitfaden zu PageSpeed Insights zeigt, wie Sie beides lesen.
Ein Next.js-Blog hat meist eine von drei Formen: MDX- oder Markdown-Dateien im Repository (einfach, aber jeder Beitrag braucht einen Commit und ein Deployment), ein Headless CMS (Sanity, Contentful, Strapi, Payload), das in Server Components abgefragt wird, oder ein Veröffentlichungs-Webhook, der Artikel von einem externen Tool empfängt. In allen drei Fällen ist das SEO-Muster gleich: eine dynamische Route app/blog/[slug] mit generateStaticParams, generateMetadata, ISR, einer Sitemap aus derselben Quelle und einer Übersichtsseite, die jeden Beitrag verlinkt.
Der Webhook entkoppelt das Veröffentlichen vom Deployment. Ein Route Handler empfängt den Artikel, speichert ihn und revalidiert die betroffenen Seiten:
// 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 })
}Achtung
Schützen Sie den Endpunkt mit einem Geheimnis und revalidieren Sie exakt den öffentlichen Pfad. Die ISR-Dokumentation warnt: Bei mehreren Serverinstanzen und dem Standard-Dateicache leert die Revalidierung auf Abruf nur die Instanz, die den Aufruf erhält; nutzen Sie einen gemeinsamen Cache-Handler.
Serverseitiges Rendering ist die erste Voraussetzung für GEO (Generative Engine Optimization). Die Analyse von Vercel aus dem Dezember 2024, The rise of the AI crawler, stellte fest, dass „keiner der großen KI-Crawler derzeit JavaScript rendert“, nannte GPTBot, ChatGPT-User, OAI-SearchBot, ClaudeBot und PerplexityBot und zählte in einem Monat 569 Millionen Abrufe durch GPTBot und 370 Millionen durch Claude in seinem Netzwerk. Eine Next.js-Seite, die Text, Überschriften und JSON-LD vorab rendert, ist für alle lesbar; eine clientseitig gerenderte Seite nicht.
Die zweite Voraussetzung sind zitierwürdige Inhalte: Artikel, die pro Abschnitt eine Frage beantworten, mit Quellen, Zahlen und klaren Definitionen, regelmäßig veröffentlicht. Diesen Teil automatisiert Sorank, unser Produkt. Sorank ist eine SEO- und GEO-Software im Autopilot: Sie findet Ihre Keywords, und ihr Blogartikel-Generator schreibt 20, 60 oder 120 Artikel pro Monat mit Quellen, internen Links und Bildern. Auf einer Next.js-Website verbindet sie sich über den individuellen Webhook, der auf der Installationsseite beschrieben ist: Ihr Route Handler empfängt jeden Artikel, speichert ihn und revalidiert den Blog. Das Tracking von KI-Erwähnungen prüft anschließend jede Woche, ob ChatGPT, Claude und Gemini Ihre Marke zitieren.

Kurz zusammengefasst: Rendern Sie jede Seite vorab, die gefunden werden soll, definieren Sie Metadaten auf dem Server und speisen Sie die Sitemap aus derselben Quelle wie die Inhalte. Next.js liefert die Werkzeuge; Rankings und KI-Zitate entstehen durch das, was Sie damit veröffentlichen. Um einen Next.js-Blog laufend mit Artikeln zu versorgen, sehen Sie sich die Sorank-Tarife an, ab 49 € pro Monat mit 3 Tagen kostenlosem Test.
Next.js basiert auf React, der Vergleich betrifft also die Art des Renderings. Eine Standard-React-Single-Page-App rendert im Browser und sendet fast leeres HTML, während Next.js Seiten auf dem Server oder beim Build vorab rendert. Crawler, auch KI-Bots ohne JavaScript-Ausführung, erhalten mit Next.js ohne Zusatzaufwand den vollständigen Inhalt.
Nicht von selbst. Im App Router legen Sie im app-Ordner eine Datei sitemap.ts an, die Ihre URLs zurückgibt, und Next.js liefert sie unter /sitemap.xml aus. Bei großen Websites teilt generateSitemaps die Liste auf mehrere Dateien auf, da Google bis zu 50.000 URLs pro Sitemap akzeptiert.
Beide können gut ranken, weil beide HTML vorab rendern. Für neue Projekte ist der App Router die empfohlene Wahl: Server Components reduzieren Client-JavaScript, und Metadata API, sitemap.ts und robots.ts erledigen die SEO-Dateien nativ. Bei einer bestehenden Pages-Router-Website lohnt sich eine Migration allein wegen SEO selten.
SIE HABEN SORANK VOR IHNEN AUSPROBIERT
