Join our community of websites already using SEOJuice to automate the boring SEO work.
See what our customers say and learn about sustainable SEO that drives long-term growth.
Explore the blog →TL;DR: Single-Page-Applications können ranken – vorausgesetzt, URLs, Statuscodes, Metadaten und der Hauptinhalt sind bereits in der ersten HTML-Antwort vorhanden. Google rendert JavaScript oft verspätet, die meisten KI-Crawler rendern es gar nicht. Wähle pro Route ein Rendering-Modell, liefere zuerst das Dokument, dann den App-State und lass JavaScript anschließend hydrieren. Unten findest du einen Field Guide 2026 für Teams, die mit Next.js, Nuxt, SvelteKit oder Astro arbeiten.
Die Einstiegsfrage für SPA-SEO lautet längst nicht mehr „kann Googlebot JavaScript rendern?“. Ja, kann es. Martin Splitt sagt das seit Jahren. Trotzdem debuggen viele ihre SPA, indem sie view-source: anschauen, als wäre das die Seite, die Google indexiert.
„Viele Leute schauen immer noch auf View Source. Das ist nicht das, was wir zum Indexieren verwenden. Wir nutzen das gerenderte HTML.“
Martin Splitt, Developer Advocate bei Google
Damit stirbt eine schlechte Gewohnheit. Wer nur den Initial-Source einer React-, Vue-, Angular-, SvelteKit-, Nuxt-, Remix- oder Next.js-App prüft, sieht nicht, was Google letztlich verarbeitet. Entscheidend ist der gerenderte DOM.
Für 2026 lautet die Frage nicht mehr, ob Google rendern kann, sondern ob das Dokument schnell genug ankommt, um für Googlebot, Social-Parser und die zunehmend dominierenden KI-Crawler nützlich zu sein.
Jahrelang hielt ich das für ein reines Google-Problem (lag damit jahrelang falsch). Dann tauchten KI-Crawler mit anderem Verhalten auf.
„Die Ergebnisse zeigen konsistent, dass keiner der großen KI-Crawler aktuell JavaScript rendert.“
Vercel Engineering
GPTBot, ClaudeBot, PerplexityBot, der Gemini-Fetch – sie alle holen nur Roh-HTML. Befindet sich dein wichtigster Inhalt erst hinter der Hydration, sehen diese Crawler nur eine leere App-Shell statt Preistabelle, Produkttext, FAQ oder Vergleichstabelle. Starte unseren AI Crawler Inspector gegen ein paar SPA-Seiten und du siehst, was sie sehen.
Die meisten Teams überspringen diesen Schritt und fragen, ob die ganze SPA SSR braucht. Das kostet unnötige Entwicklerzeit.
Eine echte SPA mischt zwei Dinge: crawlbare Seiten und private App-States. Preis-Seiten, Blogposts, Dokus, Templates, Integrationen, Vergleichs- und Produkt-Landing-Pages sind Seiten. Dashboards, Onboarding-Flows, Modals, Filter, Account-Screens und gespeicherte Reports sind States.
Starte mit der Klassifikation. Bitte die Entwickler nicht, „SEO für die App zu fixen“. Lass sie markieren, welche Routen Suchtraffic verdienen, und wähle erst dann Rendering, Indexierung, Canonicals und Statuscodes pro Route.
| Routen-Typ | Soll ranken? | Rendering-Wahl | Index-Regel |
|---|---|---|---|
| Blogpost | Ja | SSG oder SSR | Index, self-canonical |
| Produkt-Landing-Page | Ja | SSG oder SSR | Index, self-canonical |
| Interne Suchergebnisse | Meist nein | CSR oder SSR | Oft noindex |
| Dashboard-Route | Nein | CSR reicht | Hinter Auth oder noindex |
| Facettierte Filter-URL | Manchmal | SSR nur, wenn kuratiert | Canonical oder noindex |
Eine SPA mit 40 öffentlichen URLs und 4 000 Dashboard-States hat nicht 4 040 SEO-Seiten, sondern 40 Seiten plus Produkt-Interface. Öffentliche Routen brauchen feste URLs, Self-Canonicals, servergelieferte Metadaten, crawlbare Links, nützliches First-Byte-HTML und korrekte Statuscodes. Dashboard-Routen brauchen schnelle Interaktion, Auth und State-Management. Beide Gruppen in ein einziges Rendering-Modell zu pressen, verschlechtert meist beide.
Rendering-Strategie ist Architektur, kein Plugin-Schalter. Wählst du das falsche Modell, wird jedes spätere Ticket ein Workaround.
Client-Side-Rendering passt perfekt für authentifizierte Software-Screens. Muss sich der Nutzer einloggen, sollen Crawler die Route ohnehin nicht indexieren. Gefährlich wird CSR, wenn dieselbe App-Shell Preis-Seiten, Dokus, Artikel oder Produkt-Seiten bedient, deren Inhalt erst nach JavaScript-Ausführung und API-Calls erscheint.
Static-Site-Generation baut Seiten vorab als HTML. Für Blogs, Dokus, Changelogs, Glossare, Templates und die meisten Marketing-Inhalte ist SSG unschlagbar: schnell, cachbar, günstig, crawlerfreundlich. Astro 5 treibt das mit Islands-Architektur und Zero-JS-by-default am weitesten.
Server-Side-Rendering passt, wenn öffentlicher Content pro Anfrage, Region, Inventar, Berechtigung oder Aktualität variiert. Lee Robinson beschreibt das Next.js-Modell so:
„Next.js prerendert die Seite bei jeder Anfrage als HTML auf dem Server.“
Lee Robinson, VP Developer Experience bei Vercel
SSR liefert Crawlern HTML ohne Client-Bundle-Wartezeit und spiegelt trotzdem frische Daten.
Incremental-Static-Regeneration aktualisiert statische Seiten nach dem Veröffentlichen. Für programmatisches SEO, Dokus und große Template-Bibliotheken verhindert ISR Rebuild-Schmerzen ohne komplettes CSR. Next.js 15 hat Partial Prerendering (PPR) stabil gemacht: statische Shell, dynamische Löcher per Stream – näher an realen Produkt-Seiten.
Dynamic Rendering liefert eine Version an Crawler, eine an User. Es kann eine Legacy-SPA retten, wenn die Migration nicht fertig ist, aber niemals Basis einer neuen Strategie sein.
„Ich sehe das eher als temporären Workaround – temporär kann auch ein paar Jahre heißen – aber eben zeitlich begrenzt.“
John Mueller, Search Advocate bei Google
Nutz Dynamic Rendering als Brücke. Ersetze sie durch server- oder statik-gerenderte Public-Routen.
Das richtige Rendering-Modell ist auch Framework-abhängig. Defaults haben sich in den letzten zwölf Monaten verschoben – relevant für SPA-SEO.
fetch- und GET-Route-Handler standardmäßig nicht mehr gecacht. Die früheren Defaults verdeckten Stale-Content-Bugs; jetzt musst du Caching pro Route explizit setzen. Partial Prerendering ist das SEO-Highlight – statische Shell, gestreamte Deltas. Mehr Details im Next.js-, React- und Nuxt-SEO-Guide.app/. Separate TypeScript-Projekte für App, Server, Shared und Builder reduzieren Type-Bleed, der früher Server-Secrets in Client-Bundles leakte. Nuxt 4.4 (März 2026) bringt vue-router v5 und typisierte Layout-Props – kleine Gewinne für saubere Route-Metadaten.Das Framework ist weniger entscheidend als die Disziplin pro Route. Alle vier können eine crawlbare SPA ausliefern – oder eine unsichtbare, wenn du öffentliche Inhalte hinter Hydration versteckst.
Die harten SPA-SEO-Fails sind langweilig: Auslieferungs-Bugs, keine mysteriösen Penalties.
Falle 1: die Universal-Shell. Jede URL liefert denselben 200, dieselbe leere Root, dasselbe Bundle. Der Router entscheidet später, ob /pricing, /docs/api oder /totally-fake-url existiert. Das überfordert Crawler und führt zu Falle 2: Soft 404.
„Anstatt 404 zurückzugeben, antwortet die Seite mit 200 … und zeigt je nach JavaScript-Ausführung etwas an.“
Martin Splitt, Developer Advocate bei Google
Ungültige Routen müssen echte 404 oder 410 liefern. Eine schicke Client-Side-„Page not found“ mit 200 verschwendet Crawl-Budget und verwirrt Signale.
Falle 3: Navigation, die Crawler nicht folgen können. Buttons, Click-Handler und Router-Events sind prima für Nutzer, aber interne Discovery braucht Anker mit echtem href. Liegt deine wichtigste Seite nur hinter einem JS-Handler, ist Crawlability schwächer als gedacht.
Metadaten sind ein weiterer Klassiker. Viele SPAs aktualisieren Title, Description, Canonical, Robots, Open Graph und Schema erst nach Route-Wechsel. Im Browser sieht das gut aus, für Crawler scheitert es. Route-Metadaten müssen in der HTML-Antwort stehen.
Canonicals brauchen Extra-Aufmerksamkeit. Ich sah hydratisierte Apps, die ein korrektes Canonical mit einer Staging-Domain, der Root-URL oder der vorherigen Route überschrieben. Der Bug bleibt leise, bis Dubletten eskalieren oder falsche Seiten ranken.
Infinite Scroll versteckt Content hinter Client-State. Haben Seite 2, 3 und älter keine crawlbaren URLs, entdeckt die Suche sie nie. Nutze paginierte Fallback-URLs für wichtige Archive und Kategorien.
API-geladener Hauptinhalt ist fragil. Wenn H1, Fließtext, Produktdetails, Reviews oder interne Links erst nach Hydration per API kommen, hast du mehr Fehlerquellen: Bot-Traffic trifft Rate-Limits, APIs blocken unbekannte Agents, Timeouts lassen den Render-DOM dünn.
2026 ist das der Knackpunkt. Googles AI Overviews fassen Antworten über den organischen Treffern zusammen und zitieren die Quellen. Diese Zitate sind das neue Funnel-Top und folgen einer klaren HTML-Logik.
Das System greift auf statische Signale zu: sichtbarer Text, Überschriften, Listen, Tabellen, semantisches HTML in der ersten Antwort. Hydration wartet es nicht ab. Steht dein zitierfähiger Absatz erst nach useEffect, sieht ihn kein Overview.
Drei Dinge zählen für SPA-Seiten, die zitiert werden wollen:
<ul>, <ol> und <table> werden direkt extrahiert. Div-Pseudotabellen nicht.Dasselbe gilt für Perplexity-Zitate, ChatGPT-Browsing-Antworten und Claudes Web-Reads. Ihre Crawler holen Roh-HTML; fehlt die Antwort dort, fehlt das Zitat. Optimieren für AI Overview-Zitate erklärt mehr, unsere AIO-Impact-Analyse zeigt den Traffic-Schwund.
Die Regel: Verdient eine Route Suchtraffic, muss die erste Antwort wie eine Seite aussehen.
Jede öffentliche URL liefert also nützliches HTML mit allen Kernsignalen:
<title>
JavaScript kann danach Komponenten hydrieren, personalisieren, Events tracken, die UX anreichern – darf aber nicht nötig sein, damit der Crawler das Thema versteht.
Auch die Site-Architektur zählt. Eine öffentliche Route ohne crawlbare Links bleibt schwach – selbst wenn sie server-gerendert ist. Ein perfektes Dokument, das fünf Klicks tief hinter Client-Navigation steckt, performt nicht wie eines in einem klaren internen Link-System.
Testest du nur die Browser-Experience, prüfst du den Happy Path. SPA-SEO braucht härtere Tests.
curl -I https://example.com/missing-routeDer unangenehme H1-Test: Braucht Googlebot fünf Schritte und zwei API-Calls für die H1, ist die Seite fragil – selbst wenn sie irgendwann indexiert wird. Dasselbe gilt für GPTBot, ClaudeBot und PerplexityBot: Steht die H1 nicht im Roh-HTML, taucht die Route nicht als KI-Zitat auf.
Nutz sie pro Route. Ein Site-weiter „Pass“ kaschiert zu viele Fehler.
404 oder 410, nie 200.<a href="">.Search, AI-Antworten, Link-Previews und Discovery-Systeme hängen von Zugänglichkeit ab. Rankings kommen danach.
Würde ich 2026 eine moderne SPA mit Such-Fokus bauen, renderte ich nicht das ganze Produkt serverseitig. Ich würde splitten.
| Siten-Bereich | Empfohlener Ansatz |
|---|---|
| Marketing-Site | Static Generation |
| Blog & Doku | Static Generation oder ISR |
| Produkt-Pages | SSR, ISR oder Next.js PPR |
| Programmatic-SEO-Pages | Static Generation mit starkem Pruning |
| Dashboard | CSR hinter Auth |
| Such- & Filter-Pages | Noindex, außer manuell kuratiert |
| Ungültige Routen | Echte 404 oder 410 |
| Shared Layout | Server-gerenderte Metadaten & Navigation |
Marketing-Seiten und Artikel: HTML-first. Produkt-Flächen, die Frische brauchen: SSR, ISR oder PPR. Das Dashboard bleibt app-artig – Ranking wäre sinnlos. Programmatic-SEO-Pages brauchen Disziplin. Static Generation macht tausende Seiten leicht – auch tausende, die niemand indexieren sollte. Generiere nur Seiten mit echter Nachfrage, nützlichem Content und internen Links. Prune den Rest, bevor Google entscheiden muss.
Die gewinnende SPA ist nicht die, die beweist, dass Crawler JavaScript ausführen können. Es ist die, die Crawler nicht zu unnötiger Arbeit zwingt.
Ja. Eine SPA kann ranken, wenn indexierbare Routen crawlbaren Inhalt, korrekte Metadaten, interne Links und gültige Statuscodes bereits in der ersten HTML-Antwort liefern. Google kann JavaScript rendern, aber sich darauf zu verlassen macht die Site fragiler und unsichtbar für KI-Crawler, die gar nicht rendern.
Nicht für jede Route. SSR passt zu öffentlichen Seiten mit häufigem Content-Wechsel. Für stabilen Content sind SSG oder ISR oft besser. Next.js 15 bringt mit Partial Prerendering beides in eine Route. CSR ist ok für private Dashboards und States, die nicht indexiert werden sollen.
Für indexierbare Seiten ja. Sie funktionieren für On-Page-Fragmente, aber öffentlicher Content braucht saubere URLs, route-spezifische Metadaten und Server-Statuscodes.
Meistens nein. Interne Such- und Facetten-Seiten erzeugen oft dünne oder doppelte URLs. Kuratierte Filter-Seiten können indexiert werden, wenn echte Nachfrage, stabiler Content und klare Canonicals vorliegen.
Ruf eine Fake-URL auf und prüfe den Statuscode. Gibt /this-page-should-not-exist 200 mit einer Client-Side-Not-Found-Meldung zurück, riskierst du Soft 404 und verschwendetes Crawl-Budget.
Nur wenn der zitierte Inhalt im Roh-HTML vorhanden ist. Die meisten KI-Crawler führen kein JavaScript aus. Render oder prerender die Absätze, Listen und Tabellen, die du zitiert haben willst.
SEOJuice stärkt crawlbare interne Links und HTML-First-Signale auf den öffentlichen Seiten, die Suchtraffic verdienen. Hat deine SPA verwaiste Routen, versteckte Templates oder Seiten, die Google nie erreicht, kann automatisiertes internes Linking die Dokument-Schicht für Crawler und KI-Bots zugänglicher machen.
<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "Kann eine Single-Page-Application 2026 bei Google ranken?", "acceptedAnswer": { "@type": "Answer", "text": "Ja. Eine SPA kann ranken, wenn indexierbare Routen crawlbaren Inhalt, korrekte Metadaten, interne Links und gültige Statuscodes bereits in der ersten HTML-Antwort liefern. Google kann JavaScript rendern, aber sich darauf zu verlassen macht die Site fragiler und unsichtbar für KI-Crawler, die gar nicht rendern." } }, { "@type": "Question", "name": "Ist Server-Side-Rendering für SPA-SEO Pflicht?", "acceptedAnswer": { "@type": "Answer", "text": "Nicht für jede Route. SSR passt zu öffentlichen Seiten mit häufigem Content-Wechsel. Für stabilen Content sind SSG oder ISR oft besser. Next.js 15 bringt mit Partial Prerendering beides in eine Route. CSR ist ok für private Dashboards und States, die nicht indexiert werden sollen." } }, { "@type": "Question", "name": "Sind Hash-Routen schlecht für SEO?", "acceptedAnswer": { "@type": "Answer", "text": "Für indexierbare Seiten ja. Sie funktionieren für On-Page-Fragmente, aber öffentlicher Content braucht saubere URLs, route-spezifische Metadaten und Server-Statuscodes." } }, { "@type": "Question", "name": "Sollen SPA-Suchergebnisseiten indexiert werden?", "acceptedAnswer": { "@type": "Answer", "text": "Meistens nein. Interne Such- und Facetten-Seiten erzeugen oft dünne oder doppelte URLs. Kuratierte Filter-Seiten können indexiert werden, wenn echte Nachfrage, stabiler Content und klare Canonicals vorliegen." } }, { "@type": "Question", "name": "Woran erkenne ich Soft-404-Probleme in meiner SPA?", "acceptedAnswer": { "@type": "Answer", "text": "Ruf eine Fake-URL auf und prüfe den Statuscode. Gibt /this-page-should-not-exist 200 mit einer Client-Side-Not-Found-Meldung zurück, riskierst du Soft 404 und verschwendetes Crawl-Budget." } }, { "@type": "Question", "name": "Zitieren AI Overviews eine JavaScript-gerenderte SPA?", "acceptedAnswer": { "@type": "Answer", "text": "Nur wenn der zitierte Inhalt im Roh-HTML vorhanden ist. Die meisten KI-Crawler führen kein JavaScript aus. Render oder prerender die Absätze, Listen und Tabellen, die du zitiert haben willst." } } ] } </script>no credit card required