SvelteKit-Deployment-SEO: Adapter, Prerendering und Edge-Rendering
Die Adapter- und pro-Route-Prerender-Einstellungen von SvelteKit bestimmen, wo und wann Ihre Seiten gerendert werden – und das beeinflusst TTFB, LCP und Crawl-Budget. Ein deployment-fokussierter Deep Dive: Auswahl von adapter-static/node/vercel/cloudflare/netlify, prerender = true/false/'auto', Edge-Runtime-Einschränkungen und das Erstellen von sitemap.xml und robots.txt.
Sprachen
Die Adapter- und pro-Route-Prerender-Einstellung von SvelteKit bestimmt, wo und wann eine Seite gerendert wird – statisches HTML zur Build-Zeit, SSR auf einem Server oder SSR am Edge – und diese Entscheidung beeinflusst TTFB, was sich auf LCP und Crawl-Kapazität auswirkt. Wählen Sie adapter-static für reine Content-Seiten, einen node/vercel/cloudflare-Adapter mit pro-Route-Prerender für gemischte Content-plus-App-Seiten und einen Edge-Adapter, wenn globales TTFB wichtig ist (unter Akzeptanz von Cold Starts und ohne Node-fs). prerender = 'auto' ist das Werkzeug für gemischte Seiten. Edge-Runtimes können nicht auf das Dateisystem zugreifen. Und SvelteKit generiert keine sitemap.xml oder robots.txt – Sie erstellen diese als +server.js-Endpunkte, wobei die Strategie von Ihrem Adapter abhängt.
TL;DR — SvelteKit rendert Ihre Seiten bereits auf dem Server – dieser Teil ist erledigt. Auf dieser Seite geht es um die nächste Entscheidung: wie Ihre Website erstellt und bereitgestellt wird. Ein Adapter verpackt Ihre SvelteKit-App für einen Host (einen statischen Dateihost, einen Node-Server oder einen Dienst wie Vercel oder Cloudflare), und eine pro Seite festgelegte Prerender-Einstellung entscheidet, ob eine Seite im Voraus in eine einfache HTML-Datei umgewandelt oder bei jedem Besuch neu gerendert wird. Diese beiden Entscheidungen bestimmen, wie schnell Crawler Ihr HTML erhalten – und SvelteKit erstellt weder Ihre Sitemap noch robots.txt, daher müssen Sie diese selbst hinzufügen.
Was ein Adapter ist (in einfachen Worten)
Wenn Sie bereits eine SvelteKit-Website erstellt haben, wissen Sie, dass sie echtes HTML an den Browser sendet – der Inhalt ist vorhanden, bevor JavaScript ausgeführt wird. Gut. Das ist das schwierige SEO-Problem bereits gelöst (und falls es für Sie noch nicht gelöst ist, behandelt der Artikel zu den SvelteKit-Grundlagen in diesem Abschnitt die Rendering-Modi und die „Empty-Shell“-Falle, die Sie zuerst vermeiden sollten).
Ein Adapter ist das kleine Plugin, das Ihren fertigen SvelteKit-Build nimmt und in etwas verwandelt, das ein bestimmter Host ausführen kann. Evidence for this claim SvelteKit adapters transform a built application for deployment to a particular environment. Scope: SvelteKit adapters. Confidence: high · Verified: SvelteKit: Adapters Gleiche Website, anderes Paket:
adapter-staticverwandelt jede Seite in eine einfache HTML-Datei, die einmal erstellt wird. Großartig für einen Blog, Dokumentationen oder eine Marketing-Website, die sich nicht pro Besucher ändert.adapter-nodeverpackt Ihre App in einen Node.js-Server, den Sie selbst betreiben.adapter-vercel,adapter-netlify,adapter-cloudflareverpacken sie für diese Hosting-Dienste, die Seiten bei Bedarf rendern – manchmal auf Servern „am Edge“, physisch nahe bei Ihren Besuchern.
Der Inhalt ist in allen Fällen identisch. Was sich ändert, ist wann das HTML erstellt wird (im Voraus oder bei jeder Anfrage) und wo (ein Server oder ein globales Netzwerk).
Warum dies eine SEO-Entscheidung ist, nicht nur eine technische
Das Wichtigste: Geschwindigkeit. Eine Seite, die bereits eine statische Datei ist, lädt fast sofort. Eine Seite, die auf dem Server erstellt werden muss, braucht einen Moment. Und Google hat klar gesagt, dass, wenn Ihre Website “responds quickly for a while, the limit goes up, meaning more connections can be used to crawl. If the site slows down… the limit goes down and Google crawls less.” (Übersetzung) „Wenn die Website eine Weile schnell reagiert, steigt das Limit, was bedeutet, dass mehr Verbindungen zum Crawlen genutzt werden können. Wenn die Website langsamer wird … sinkt das Limit und Google crawlt weniger.“ Eine langsame Bereitstellung ärgert also nicht nur Benutzer – sie kann bedeuten, dass Google weniger von Ihrer Website liest.
Die einfache Version der Entscheidung
- Eine Content-Website (Blog, Dokumentation, Marketing) → verwenden Sie
adapter-staticund prerendern Sie alles. Schnellstmöglich, nichts kann kaputtgehen. - Eine Content-Website mit einigen dynamischen Elementen (Suche, Kommentare) → verwenden Sie einen Server-
Adapter (
node/vercel/cloudflare) und markieren Sie Ihre Inhaltsseiten mitprerender = true, während die dynamischen Elemente bei Anfrage gerendert werden. - Eine App oder ein Dashboard mit angemeldeten, personalisierten Seiten → auf dem Server rendern (SSR), nur die öffentlichen Marketing-Seiten prerendern.
Vergessen Sie nicht die zwei Dateien, die SvelteKit nicht für Sie erstellt
SvelteKit generiert keine sitemap.xml oder robots.txt automatisch. Sie
fügen sie selbst hinzu – normalerweise als kleine Endpunktdatei (sitemap.xml/+server.js)
und entweder eine Datei in Ihrem static/-Ordner oder einen weiteren Endpunkt für
robots.txt. Evidence for this claim SvelteKit can serve static assets from its static directory and create custom responses with +server route files. Scope: Mechanisms for robots.txt and sitemap.xml; files are not generated automatically. Confidence: high · Verified: SvelteKit: Project structure SvelteKit: Routing Es ist leicht zu vergessen, weil die meisten Frameworks, die HTML für
Sie rendern, sich „vollständig“ anfühlen. Diese beiden sind es nicht.
Möchten Sie die tiefere Version – was jeder Adapter mit dem Rendering macht, wie
prerender = 'auto' eine gemischte Website behandelt, warum Edge-Funktionen keine Dateien lesen können,
und wie sich die Sitemap-Strategie mit Ihrem Adapter ändert? Wechseln Sie zum
Erweitert-Tab.
TL;DR — Der Adapter ändert nicht was SvelteKit rendert – er ändert wo und wann: zur Build-Zeit statisch (
adapter-static), zur Anfragezeit auf einem von Ihnen betriebenen Server (adapter-node) oder zur Anfragezeit auf Serverless-/Edge-Funktionen (adapter-vercel/-netlify/-cloudflare). Pro-Routeprerender = trueerstellt statisches HTML und entfernt die Route aus dem dynamischen Manifest;prerender = 'auto'prerendert und behält sie im Manifest – das Werkzeug für gemischte/blog/[slug]-Websites. Edge-Runtimes laufen auf V8-Isolaten: kein Node-fs, und Kaltstarts schaden dem TTFB, was LCP und (laut Googles Crawl-Budget-Dokumentation) die Crawl-Kapazität beeinflusst. SvelteKit generiert keine sitemap.xml oder robots.txt – erstellen Sie sie als+server.js-Endpunkte, und beachten Sie, dass die Strategie vom Adapter abhängt. Dies ist ein engerer, deployment-fokussierter Begleitartikel zum SvelteKit-SEO- Grundlagenartikel in diesem Abschnitt; ich gehe davon aus, dass Sie bereits wissen, dass SvelteKit standardmäßig SSR verwendet, und werde das hier nicht erneut aufrollen.
Die eine Idee, die das alles verständlich macht
Der Adapter ändert nicht, was gerendert wird. Er ändert wo und wann.
Das ist die ganze Sache. Die SvelteKit-Dokumentation formuliert es präzise: Adapter „nehmen die
gebauten App als Eingabe und generieren Ausgabe für die Bereitstellung.“ Evidence for this claim SvelteKit adapters take the built application as input and generate deployment-specific output. Scope: Deployment output; adapter choice can still constrain supported runtime features. Confidence: high · Verified: SvelteKit: Adapters Ihre Komponenten, Ihre
load-Funktionen, Ihre <svelte:head>-Metadaten – identisch über alle Adapter hinweg.
Was sich unterscheidet, ist:
- Wann das HTML erzeugt wird: zur Build-Zeit (statisch/prerendert) oder zur Anfragezeit (SSR auf einem Server, einer Serverless-Funktion oder einer Edge-Funktion).
- Wo es erzeugt wird: auf einem einzelnen Ursprungsserver, auf einer regionalen Serverless- Funktion oder auf einem Edge-Netzwerk in der Nähe des Besuchers.
Alles unten ist eine Konsequenz dieser beiden Achsen.
Warum Deployment-Entscheidungen SEO-Entscheidungen sind
Die Kette ist kurz und gut dokumentiert: TTFB → LCP → Crawl-Kapazität.
Time to First Byte ist die Zeit, die der Host benötigt, um mit dem Senden der Antwort zu beginnen. Eine prerenderte Datei, die aus einem CDN-Cache ausgeliefert wird, hat ein nahezu null TTFB. Ein Server, der die Seite rendern muss, hat ein höheres. Eine kaltstartende Serverless- oder Edge-Funktion kann beim ersten Aufruf ein viel höheres haben. TTFB ist ein direkter Eingangswert für Largest Contentful Paint – Sie können nicht malen, was Sie nicht empfangen haben – und LCP ist ein Core Web Vitals-Signal.
Die Crawl-Seite ist dort, wo Google am explizitesten ist. Aus der Crawl-Budget- Dokumentation: „Wenn die Website eine Weile schnell antwortet, steigt das Limit, was bedeutet, dass mehr Verbindungen zum Crawlen verwendet werden können. Wenn die Website langsamer wird oder mit Serverfehlern antwortet, sinkt das Limit und Google crawlt weniger.“ Und die Best-Practice-Zeile: „Machen Sie Ihre Seiten effizient ladbar. Wenn Google Ihre Seiten schneller laden und rendern kann, können wir möglicherweise mehr Inhalte von Ihrer Website lesen.“ Eine kaltstartende Edge-Funktion, die langsam antwortet, unterliegt derselben Dynamik wie ein langsamer Ursprungsserver.
Ein Hinweis zur Ehrlichkeit vorab: Google veröffentlicht keine SvelteKit-spezifischen Leitlinien.
Es gibt kein Dokument oder keine Search-Off-the-Record-Folge, die SvelteKit-Adapter,
prerender = 'auto' oder Edge-Kaltstarts nennt. Was ich hier tue, ist, Googles
allgemeine Rendering- und Crawl-Budget-Leitlinien auf SvelteKits spezifische
Mechanik anzuwenden – nicht, einen Vertreter zu zitieren, der sich zu SvelteKit geäußert hat, denn keiner hat das getan. Die
Google-Formulierung, dass „Server-seitiges Rendering oder Pre-Rendering immer noch eine großartige Idee ist, weil
es Ihre Website für Benutzer und Crawler schneller macht und nicht alle Bots JavaScript ausführen können“ ist der nächste offizielle Anker, und er ist framework-agnostisch.
Auswahl eines Adapters für SEO-Ergebnisse
adapter-auto – die Null-Konfigurations-Standardoption und ihre Grenzen
Neue SvelteKit-Projekte werden mit adapter-auto ausgeliefert. Er erkennt die Plattform –
Vercel, Netlify, Cloudflare Pages, Azure, AWS – und installiert den passenden Adapter
zur Build-Zeit. Das ist ein guter Ausgangspunkt, aber es gibt eine harte Grenze, die
man kennen sollte: adapter-auto akzeptiert keine Optionen. Sobald Sie
{ edge: true }, Cloudflare-Bindings, Vercel ISR oder eine andere plattformspezifische
Konfiguration benötigen, installieren Sie den zugrunde liegenden Adapter (adapter-vercel,
adapter-cloudflare usw.) direkt. Behandeln Sie Auto als Gerüst, nicht als
Produktionsentscheidung.
adapter-static – volles SSG, für inhaltsorientierte Websites
adapter-static rendert Ihre gesamte Website zur Build-Zeit in statische Dateien. Es läuft
kein Server; ein Host liefert flaches HTML aus. Evidence for this claim adapter-static prerenders a SvelteKit site as static files. Scope: Routes must be prerenderable; performance outcomes depend on hosting and page design. Confidence: high · Verified: SvelteKit: Static site generation Für eine inhaltsorientierte Website ist dies das
stärkste SEO-Profil, das Sie haben können – niedrigste TTFB, keine Cold Starts, nichts,
was ausfallen kann. Die eine Anforderung ist die Falle, die im Grundlagenartikel ausführlich
behandelt wird: SSR muss während des Builds aktiv bleiben, sonst erhalten Sie leere Hüllen
statt gerendertem HTML. Ich werde das hier nicht erneut erklären, sondern nur darauf hinweisen.
Der Haken ist die Starrheit. Alles, was wirklich Serverlogik pro Anfrage benötigt (echte Suche, benutzerspezifische Inhalte, Formularverarbeitung ohne Drittanbieter-Endpunkt), kann nicht auf einem rein statischen Build leben – genau dafür sind die nächsten Adapter da.
adapter-node – ein Server, den Sie kontrollieren
adapter-node erzeugt einen eigenständigen Node.js-Server. Sie betreiben ihn, Sie skalieren ihn, Sie
besitzen die TTFB. Dies ist die flexibelste Option und die mit den wenigsten Laufzeit-
überraschungen – volle Node-APIs, einschließlich fs. Sie ist eine gute Wahl, wenn Sie bereits
Infrastruktur haben, Node-Bibliotheken benötigen, die Edge-Runtimes nicht ausführen können, oder
vorhersehbare (nicht kaltstartende) Antwortzeiten von einem warmen Server wünschen. Der Kompromiss ist
operativ: Sie betreiben einen Server, und dessen Geschwindigkeit und Verfügbarkeit sind jetzt Ihre
Crawl-Kapazität.
adapter-vercel – serverless, Edge und ISR
adapter-vercel stellt standardmäßig auf Vercels Serverless-Funktionen bereit, mit mehreren
SEO-relevanten Hebeln, die pro Route über export const config gesetzt werden:
runtime: 'edge'verschiebt diese Route in Vercels Edge-Runtime (mehr dazu unten).regionssteuert, wo Serverless-Funktionen ausgeführt werden – näher an Ihren Benutzern (oder Ihrer Datenbank) bedeutet geringere Latenz.isrermöglicht Incremental Static Regeneration:isr: { expiration: 60 }liefert ein gecachtes statisches Asset und regeneriert es nach dem Fenster, was “die Leistungs- und Kostenvorteile von vorgerenderten Inhalten mit der Flexibilität von dynamisch gerenderten Inhalten” bietet. ISR ist ein echter vierter Weg zwischen rein statisch und rein SSR – aber beachten Sie den eigenen Hinweis der Dokumentation: “Die Verwendung von ISR auf einer Route mitexport const prerender = truehat keine Auswirkung, da die Route zur Build-Zeit vorgerendert wird.” ISR und Prerendering sind Alternativen, nicht stapelbar.
adapter-cloudflare – Workers/Pages, globales Edge
adapter-cloudflare zielt auf Cloudflare Workers und Pages – SSR in einem globalen Edge-
Netzwerk, oft die niedrigste TTFB für ein geografisch verteiltes Publikum. Die wichtige
Einschränkung ist die Runtime: Workers laufen auf V8-Isolaten, nicht auf Node. Aus der Dokumentation:
“Sie können fs in Cloudflare Workers nicht verwenden.” Einige Node-APIs funktionieren nur hinter dem
nodejs_compat-Kompatibilitätsflag, und selbst dann ist die Unterstützung nicht eins zu eins. Wenn Sie
zur Anfragezeit Dateien gelesen haben (eine Redirect-Map, eine Datendatei, benutzerdefinierte OG-Bild-
Eingaben), muss dieser Code überdacht werden – behandelt im Edge-Abschnitt unten.
(Der ältere adapter-cloudflare-workers ist veraltet; neue Projekte verwenden
adapter-cloudflare, das sowohl Workers als auch Pages abdeckt. Wenn Sie den alten
verwenden, ist die Migration der empfohlene Weg.)
adapter-netlify – Funktionen oder Edge Functions (Deno)
adapter-netlify stellt standardmäßig auf Netlifys Node-basierten Funktionen bereit, oder auf Deno-basierten Edge Functions mit edge: true. Gleiche Struktur wie Vercel: Standard-Serverless mit Edge-Opt-in. Eine SvelteKit-spezifische Fußnote – Netlify Forms erfordern, dass die Seite des Formulars prerendert wird, damit Netlify das Formular-Markup zur Build-Zeit erkennen kann, was eine kleine „Prerender diese Route“-Anforderung zusätzlich zur Adapter-Wahl darstellt.
Die Entscheidung, jeweils in einem Satz
- Reine Content-Site →
adapter-static, alles prerendern. - Content-Site mit dynamischen Bereichen →
adapter-node/-vercel/-cloudflare,prerender = trueauf Content,false/'auto'auf den dynamischen Routen. - App/Dashboard mit Personalisierung → SSR-first (Node oder Edge), nur die statische Hülle prerendern (Marketing, Login).
- Globale, TTFB-kritische Zielgruppe → ein Edge-Adapter für die dynamischen Routen, mit Akzeptanz der Node-API-Einschränkungen und der Cold-Start-Realität.
(Der Decision-Tree-Tab führt dies als Verzweigungsfluss aus.)
Prerendering-Strategie für gemischte Sites
Was true / false / 'auto' tatsächlich bewirken
export const prerender ist eine Seitenoption pro Route (oder pro Layout), und die drei
Werte sind nicht nur an/aus:
true— diese Route zur Build-Zeit als statisches HTML bauen. Entscheidend ist, dass sie “von den Manifests für dynamisches SSR ausgeschlossen ist, wodurch Ihr Server (oder Serverless-/Edge-Funktionen) kleiner wird.” Einmal prerendert, kann die Route nicht auf dynamisches Rendering zurückfallen – sie ist statisch, Punkt.false— immer bei Anfrage rendern. Keine statische Datei.'auto'— das Werkzeug für gemischte Sites. Es prerendert die Route und behält sie im dynamischen Server-Manifest, sodass dieselbe Route für bekannte Pfade statisch und für den Rest servergerendert ausgeliefert werden kann. Dies ist genau für den Fall gebaut, den die Doku beschreibt: eine Route wie/blog/[slug]“wo Sie Ihre neuesten/populärsten Inhalte prerendern, aber den Long Tail serverrendern möchten.”
Da prerenderte Routen das Server-Bundle verkleinern, stellt eine größtenteils prerenderte Site
mit einigen 'auto'/false-Routen eine kleinere, günstigere, schnellere Funktion bereit –
ein Effizienzgewinn unabhängig von SEO.
Dynamische Routen benötigen eine entries-Funktion
Der Prerender-Crawler entdeckt Seiten, indem er <a>-Links von Ihren Einstiegspunkten folgt.
Das funktioniert für statische Routen, aber eine dynamische Route wie /blog/[slug] hat keine
feste URL, die der Crawler finden kann. Wenn nichts auf einen bestimmten Slug verlinkt, weiß
SvelteKit nicht, dass er existiert – und Sie stoßen auf den klassischen Build-Fehler, dass Routen
“als prerenderbar markiert, aber nicht prerendert wurden.”
Die Lösung ist eine explizite entries-Funktion (oder config.kit.prerender.entries), die
die Parameterwerte aufzählt:
// src/routes/blog/[slug]/+page.server.js
export const prerender = true;
export function entries() {
return [
{ slug: 'hello-world' },
{ slug: 'sveltekit-deployment-seo' },
];
}In der Praxis generieren Sie diese Liste aus Ihrem CMS oder Inhaltsverzeichnis. Ohne sie umfasst das Prerendering nur die Slugs, die der Link-Crawler zufällig findet.
Das /blog/[slug]-Muster in der Praxis
Setzen Sie beides zusammen und Sie haben das kanonische Setup für gemischte Sites: prerender = 'auto' plus eine entries-Funktion, die Ihre neuesten und populärsten Beiträge zurückgibt.
Diese erhalten zur Build-Zeit statisches HTML; alles, was nicht in der Liste ist, fällt bei Bedarf
auf SSR zurück. Neue Beiträge werden dynamisch gerendert, bis der nächste Build sie prerendert.
Es ist der pragmatische Mittelweg zwischen “alle 40 000 Beiträge bei jedem Build prerendern” und
“jeden Beitrag bei jeder Anfrage rendern.”
Edge-Runtime-Einschränkungen, die SEO beeinflussen
config.runtime = 'edge' ist pro Route (auf Vercel)
Edge ist kein Alles-oder-nichts-Schalter. Auf Vercel ist es eine Seitenoption pro Route:
// +page.server.js or +server.js
export const config = { runtime: 'edge' };Das bedeutet, Sie können stark frequentierte, cachebare Routen an den Edge pushen für niedrigen TTFB, während Sie Node-abhängige Routen auf der Standard-Serverless- (Node-) Runtime in derselben Bereitstellung halten. Bewusst mischen.
Kein fs, keine beliebigen Node-APIs
Die Edge-Runtimes – Cloudflare Workers, Vercel Edge Functions, Netlify’s Deno Edge
Functions – bieten kein Node-fs. Cloudflares Doku: “You can’t use fs in
Cloudflare Workers.” Vercels: “You can’t use fs in edge functions.” Beide
verweisen auf dieselben zwei Auswege: Nutzen Sie den read-Helper aus $app/server, um
gebündelte Assets zu erreichen, oder “prerender the routes in question”, sodass der Dateizugriff
zur Build-Zeit statt zur Request-Zeit erfolgt.
Die SEO-nahen Fälle, in denen das zwickt: dynamische OG-Bildgenerierung, die eine
Schrift- oder Vorlagendatei liest, dateibasierte Redirect-Maps oder ein Sitemap-Endpunkt, der
Inhalte von der Festplatte liest. Jeder davon wandert entweder zu $app/server’s read() oder
in die Prerender-/Build-Zeit. Es ist kein Blocker – es ist eine Einschränkung, die man kennen sollte, bevor man sich für Edge entscheidet.
Cold Starts und TTFB – wann Edge hilft und wann nicht
Edge-Funktionen haben weiterhin Cold Starts. Eine kalte Edge-Funktion kann bei ihrer ersten Anfrage langsamer sein als ein warmer Node-Server und deutlich langsamer als eine prerenderte Datei, die aus dem Cache ausgeliefert wird. Edge gewinnt, wenn die Funktion warm bleibt oder wenn sie mit aggressivem Caching kombiniert wird, sodass die meisten Anfragen die Funktion gar nicht erst erreichen. Es ist nicht automatisch die schnellste Option – „deploy to the edge” ist kein Synonym für „faster.” Für eine Content-Site schlägt prerenderter statischer Output Edge-SSR bei TTFB jedes Mal, weil es keine Funktion gibt, die gestartet werden muss.
sitemap.xml und robots.txt generieren (SvelteKit tut es nicht)
Das ist die Lücke, die die meisten SvelteKit-Tutorials überspringen und die meisten Audits finden. SvelteKit generiert keine sitemap.xml und keine robots.txt automatisch – unabhängig vom Adapter, unabhängig davon, wie viele Seiten Sie prerendern. Eine vollständig statische Site mit Tausenden prerenderten Seiten wird weiterhin ohne Sitemap ausgeliefert, es sei denn, Sie bauen eine.
Das +server.js-Endpunktmuster
Die idiomatische Sitemap ist ein Routen-Endpunkt, der XML mit dem richtigen
Content-Type zurückgibt:
// src/routes/sitemap.xml/+server.js
export const prerender = true; // needed on adapter-static
export async function GET() {
const urls = await getAllUrls(); // from your CMS/content
const body = `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
${urls.map((u) => ` <url><loc>${u}</loc></url>`).join('\n')}
</urlset>`;
return new Response(body, {
headers: { 'Content-Type': 'application/xml' },
});
}Die Strategie hängt von Ihrem Adapter ab
Hier ist der Teil, der diesen gesamten Artikel zusammenhält: Ihre Sitemap-Strategie ist eine Folge Ihrer Adapterwahl.
- Bei
adapter-staticbenötigt der Sitemap-Endpunktexport const prerender = true, damit er in den statischen Output aufgenommen wird – es gibt zur Laufzeit keinen Server, der ihn auf Anfrage generiert. Er wird zur Build-Zeit eingebacken, was bedeutet, dass er nur so aktuell ist wie Ihr letzter Build. - Bei einem Node-/Serverless-/Edge-Adapter kann derselbe Endpunkt die Sitemap
dynamisch pro Anfrage aus Ihrem CMS oder Ihrer Datenbank generieren – immer aktuell, kein Rebuild
nötig. (Bei einem Edge-Adapter beachten Sie die
fs-Einschränkung: Ziehen Sie URLs aus einer API oder einer Bindung, nicht aus einem Festplattenzugriff.)
Die Frage „Soll meine Sitemap statisch oder dynamisch sein?” ist also keine separate Entscheidung – sie ergibt sich aus dem Adapter, den Sie bereits gewählt haben.
robots.txt: statische Datei vs. Endpunkt
Zwei Optionen. Legen Sie eine einfache robots.txt in Ihrem static/-Ordner ab (automatisch unter
/robots.txt ausgeliefert), was die einfachste Wahl und für die meisten Sites ausreichend ist.
Oder generieren Sie sie aus einem src/routes/robots.txt/+server.js-Endpunkt, wenn Sie sie
umgebungsabhängig benötigen (z. B. Crawler auf Staging blockieren, in Produktion erlauben).
Blockieren Sie in jedem Fall nicht Ihr /_app/-Bundle oder CSS –
das bricht das Rendering für Engines, die rendern.
Wenn Sie aus der breiteren Framework- oder JavaScript-SEO-Perspektive kommen, ist die Logik „Wo und wann findet Rendering statt?” hier dieselbe Logik, die JavaScript-SEO allgemein steuert, und der SvelteKit-Grundlagenartikel in diesem Abschnitt behandelt die Rendering-Modi und Metadatenmuster, auf denen dieser Artikel aufbaut.
KI-Zusammenfassung
Eine komprimierte Darstellung der erweiterten Version:
- Der Adapter ändert wo und wann, nicht was. Adapter „nehmen die gebaute App als Eingabe und erzeugen Ausgabe für die Bereitstellung“ — gleicher Inhalt, andere Zeitpunkte (Build vs. Anfragezeit) und Orte (Origin vs. Edge).
- Warum es eine SEO-Entscheidung ist: TTFB → LCP → Crawl-Kapazität. Google: Wenn eine Website „schnell antwortet … steigt das Limit … Wenn die Website langsamer wird … crawlt Google weniger.“ Keine Google-Anleitung nennt SvelteKit speziell — dies ist eine allgemeine Anleitung, die auf SvelteKit-Mechaniken angewendet wird.
- Adapter:
adapter-auto(Null-Konfiguration, keine Optionen);adapter-static(SSG, Content-Websites, niedrigster TTFB);adapter-node(Server, den Sie kontrollieren, vollständige Node-APIs);adapter-vercel(serverless + Edge + ISR);adapter-cloudflare(globale Edge-Workers, keinfs;adapter-cloudflare-workersist veraltet);adapter-netlify(Functions oder Deno Edge Functions). - Prerender:
trueerstellt statisches HTML und entfernt die Route aus dem dynamischen Manifest;falserendert immer serverseitig;'auto'prerendert und behält sie dynamisch — das Werkzeug für gemischte Websites für/blog/[slug](beliebte Beiträge prerendern, die lange Tail serverseitig rendern). - Dynamische Routen benötigen eine
entries-Funktion, sonst erhalten Sie den Fehler „als prerenderbar markiert, aber nicht prerendert“. - Edge-Einschränkungen:
runtime: 'edge'ist pro Route (Vercel); keinfs(„Sie können fs in Cloudflare Workers nicht verwenden“ / Edge-Funktionen) — verwenden Sie$app/server’sread()oder prerendern Sie; Kaltstarts können Edge langsamer machen als einen warmen Server oder eine statische Datei. - Kein integriertes Sitemap/robots.txt. Erstellen Sie einen
sitemap.xml/+server.js-Endpunkt (prerender = truebeiadapter-static; dynamisch bei Server-/Edge-Adaptern). robots.txt überstatic/oder einen Endpunkt. - ISR ≠ Prerender-Plus: „Die Verwendung von ISR auf einer Route mit
export const prerender = truehat keine Wirkung.“ Sie sind Alternativen.
Offizielle Dokumentation
Primärquellen-Dokumentation von SvelteKit und den Suchmaschinen.
SvelteKit
- Adapter • SvelteKit-Dokumentation — die Übersicht: Adapter nehmen die gebaute App und erzeugen Bereitstellungsausgabe.
- Zero-Config-Bereitstellungen (adapter-auto) • SvelteKit-Dokumentation — plattformspezifische Erkennung und die Einschränkung „akzeptiert keine Optionen“.
- Node-Server (adapter-node) • SvelteKit-Dokumentation — der eigenständige Node-Server, Umgebungsvariablen, Graceful Shutdown.
- Statische Website-Generierung (adapter-static) • SvelteKit-Dokumentation — SSG für die gesamte Website, die SSR-Anforderung und die SEO-Warnung zum SPA-Fallback.
- Vercel (adapter-vercel) • SvelteKit-Dokumentation —
runtimepro Route,regions,splitund Incremental Static Regeneration. - Cloudflare (adapter-cloudflare) • SvelteKit-Dokumentation — Workers/Pages,
platform.env-Bindungen,nodejs_compatund diefs-Einschränkung. - Cloudflare Workers (adapter-cloudflare-workers, veraltet) • SvelteKit-Dokumentation — der veraltete Legacy-Adapter und der Migrationspfad.
- Netlify (adapter-netlify) • SvelteKit-Dokumentation — Node Functions vs. Deno-basierte Edge Functions (
edge: true) und die Prerender-Anforderung für Forms. - Seitenoptionen (prerender, ssr, csr, config) • SvelteKit-Dokumentation —
prerender = true/false/'auto', dieentries-Funktion undconfigpro Route einschließlichruntime: 'edge'.
- JavaScript-SEO-Grundlagen verstehen — die Render-Warteschlange und „nicht alle Bots können JavaScript ausführen“.
- Crawl-Budget optimieren — Crawl-Kapazität gekoppelt an Antwortgeschwindigkeit; „machen Sie Ihre Seiten effizient zu laden.“
Bing / Microsoft
- bingbot-Serie: JavaScript, Dynamic Rendering und Cloaking. Oh je! — Bings Empfehlung zu Prerendering/Dynamic Rendering und die Klarstellung zu Cloaking.
- Schnelle Frontend-Leistung für Microsoft Bing — Bings eigene SSR- und CDN/Edge-Node-Architektur als realer Beleg.
Zitate aus der Quelle
Offizielle Aussagen aus der SvelteKit-Dokumentation, von Google und Bing. Jeder Link ist ein Deep Link, der direkt zum zitierten Abschnitt auf der Quellseite springt.
SvelteKit-Dokumentation – Adapter und Seitenoptionen
- “adapter-auto does not take any options.” (Übersetzung) „adapter-auto akzeptiert keine Optionen.“ – zum Standard-Adapter ohne Konfiguration. Zum Zitat springen
- Zu
prerender = true– vorgerenderte Routen sind “excluded from manifests used for dynamic SSR, making your server (or serverless/edge functions) smaller.” (Übersetzung) „von Manifesten ausgeschlossen, die für dynamisches SSR verwendet werden, wodurch Ihr Server (oder Ihre serverlosen/Edge-Funktionen) kleiner wird.“ Zum Zitat springen - Zu
'auto'– der Fall/blog/[slug], in dem Sie “prerender your most recent/popular content but server-render the long tail.” (Übersetzung) „Ihre neuesten/beliebtesten Inhalte vorrendern, aber den Long Tail serverseitig rendern“ möchten. Zum Zitat springen - Zur Edge-
fs-Einschränkung – “You can’t use fs in Cloudflare Workers.” (Übersetzung) „Sie können fs in Cloudflare Workers nicht verwenden.“ Zum Zitat springen - Zu Vercel ISR vs. Prerendering – “Using ISR on a route with export const prerender = true will have no effect, since the route is prerendered at build time.” (Übersetzung) „Die Verwendung von ISR auf einer Route mit export const prerender = true hat keine Auswirkung, da die Route zur Build-Zeit vorgerendert wird.“ Zum Zitat springen
Google – Rendering und Crawl-Budget
- “Keep in mind that server-side or pre-rendering is still a great idea because it makes your website faster for users and crawlers, and not all bots can run JavaScript.” (Übersetzung) „Beachten Sie, dass serverseitiges Rendering oder Pre-Rendering weiterhin eine großartige Idee ist, da es Ihre Website für Benutzer und Crawler schneller macht und nicht alle Bots JavaScript ausführen können.“ Zum Zitat springen
- “If the site responds quickly for a while, the limit goes up, meaning more connections can be used to crawl. If the site slows down or responds with server errors, the limit goes down and Google crawls less.” (Übersetzung) „Wenn die Website eine Weile schnell antwortet, steigt das Limit, was bedeutet, dass mehr Verbindungen zum Crawlen verwendet werden können. Wenn die Website langsamer wird oder mit Serverfehlern antwortet, sinkt das Limit und Google crawlt weniger.“ Zum Zitat springen
- “Make your pages efficient to load. If Google can load and render your pages faster, we might be able to read more content from your site.” (Übersetzung) „Gestalten Sie Ihre Seiten effizient beim Laden. Wenn Google Ihre Seiten schneller laden und rendern kann, können wir möglicherweise mehr Inhalte von Ihrer Website lesen.“ Zum Zitat springen
Bing – Prerendering und eigene Edge-Architektur
- “We encourage detecting our bingbot user agent, prerendering the content on the server side and outputting static HTML for such sites…” (Übersetzung) „Wir empfehlen, unseren Bingbot-User-Agent zu erkennen, den Inhalt serverseitig vorzurendern und für solche Websites statisches HTML auszugeben …“ – Fabrice Canel & Frédéric Dubut, Microsoft Bing. Zum Zitat springen
- “User traffic routes first to the closest CDN node (called an ‘edge node’).” (Übersetzung) „Der Benutzerverkehr wird zuerst zum nächstgelegenen CDN-Knoten (auch ‚Edge-Node‘ genannt) geleitet.“ – Bing Search Quality Insights, zu Bings eigener SSR- und Edge-Architektur. Zum Zitat springen
SvelteKit-Deployment-SEO-Checkliste
Ein Durchlauf, um zu bestätigen, dass Ihr Adapter-, Prerender- und Sitemap-Setup Crawler nicht beeinträchtigt:
- Sie sind von
adapter-autoauf einen expliziten Adapter umgestiegen, wenn Sie Konfiguration benötigen (Edge, ISR, Bindings). - Der Adapter passt zum Seitentyp –
adapter-staticfür reinen Content, ein Server-/Edge-Adapter für alles mit anfragebezogener Logik. - Content-Routen sind
prerender = true(oder'auto'); nur wirklich dynamische Routen bleiben beim SSR. - Gemischte dynamische Routen (
/blog/[slug]) verwendenprerender = 'auto'mit einerentries-Funktion, die bekannte Pfade aufzählt. - Keine ungelösten Build-Fehler “marked as prerenderable, but were not prerendered”.
- Wenn eine Route
runtime: 'edge'verwendet, ruft sie nicht Nodefsauf – Dateizugriff verwendet$app/server’sread()oder wird prerendert. - Sie haben Cold Starts auf Edge/Serverless berücksichtigt – cachebar, statisch, oder warm, wo TTFB wichtig ist.
- Ein sitemap.xml-Endpunkt existiert (
prerender = truebeiadapter-static; dynamisch bei Server-/Edge-Adaptern). - Eine robots.txt existiert (in
static/oder als+server.js-Endpunkt) und blockiert nicht/_app/oder CSS. - Sie versuchen nicht, ISR auf einer
prerender = true-Route zu stapeln (es hat keine Wirkung). - Sie haben das gerenderte HTML und die Antwortgeschwindigkeit in GSC URL Inspection und PageSpeed Insights überprüft.
Die mentalen Modelle
1. Wo und wann, nicht was. Der Adapter ändert nie Ihren Inhalt – er ändert wann das HTML erstellt wird (Build- Zeit vs. Anfragezeit) und wo (Origin vs. Edge). Jede Deployment-SEO-Frage reduziert sich auf diese zwei Achsen. Stellen Sie sie, bevor Sie die Konfiguration anfassen.
2. Prerender entfernt eine Route vom Server.
prerender = true ist nicht nur “statisch machen” – es nimmt die Route aus dem
dynamischen Manifest. Das verkleinert Ihre Funktion und schließt einen dynamischen Fallback aus.
'auto' ist die Ausnahme: prerendert und weiterhin im Manifest.
3. Der /blog/[slug]-Split.
Das Standardmuster für echte Content-Seiten: Prerendern Sie die Einträge, die Sie benennen können
(entries-Funktion gibt aktuelle/populäre zurück), SSR für den langen Schwanz. 'auto' ist der
Schalter, der beides gleichzeitig wahr macht.
4. Edge ist ein Tausch, kein Upgrade.
Edge bringt Ihnen geografische Nähe (niedrige TTFB wenn warm) und kostet Sie Node-APIs
(kein fs) und Cold-Start-Risiko. Es schlägt einen warmen Node-Server nur manchmal und
verliert gegen prerenderten statischen Output bei TTFB immer. Wählen Sie es aus einem Grund, nicht
standardmäßig.
5. Die Sitemap folgt dem Adapter.
“Statische oder dynamische Sitemap?” ist keine separate Entscheidung. adapter-static →
prerenderte Sitemap, nur beim Build aktuell. Server-/Edge-Adapter → Sitemap pro Anfrage,
immer aktuell. Der Adapter hat die Frage bereits beantwortet.
6. Nichts generiert die zwei Dateien. SvelteKit erstellt keine sitemap.xml und keine robots.txt, für keinen Adapter. Wenn Sie sie nicht geschrieben haben, existieren sie nicht. Backen Sie das in Ihre Launch-Checkliste ein.
Welche Adapter- + Prerender-Kombination sollte ich wählen?
Die Kernfrage “Welchen Weg nehme ich?” beim SvelteKit-Deployment ist wie sollte diese Site ausgeliefert werden? Führen Sie Ihre Site dadurch:
1. Braucht irgendeine Seite anfragebezogene Serverlogik – Auth, Personalisierung, Live- Suche, Formularverarbeitung, benutzerspezifische Daten? → Nein (jede Seite ist für jeden Besucher gleich): gehen Sie zu 2. → Ja: springen Sie zu 3.
2. Reine Content-Site (Blog, Doku, Marketing).
→ Verwenden Sie adapter-static, setzen Sie prerender = true site-weit (oder im
Root-Layout). Fügen Sie einen vorgerenderten sitemap.xml/+server.js (prerender = true) und eine
static/robots.txt hinzu. Niedrigste TTFB, keine Cold Starts, nichts zu betreiben. Hier enden.
3. Ist die gesamte Site dynamisch oder nur einige Routen? → Nur einige Routen (überwiegend Content, ein paar dynamische Teile): weiter zu 4. → Überwiegend/vollständig dynamisch (App, Dashboard, Ecommerce mit benutzerspezifischen Daten): weiter zu 5.
4. Content-Site mit dynamischen Bereichen.
→ Verwenden Sie einen Server-/Edge-Adapter (adapter-node, -vercel, oder
-cloudflare). Markieren Sie Content-Routen mit prerender = true, dynamische Routen
mit false. Für /blog/[slug]-artige Routen mit bekannt beliebtem Content verwenden Sie
prerender = 'auto' + eine entries-Funktion. Generieren Sie die Sitemap dynamisch
aus Ihrem CMS. Fertig.
5. App / Dashboard / Ecommerce (SSR-first). Wählen Sie nun, wo SSR läuft:
→ Vorhersehbare Latenz, Node-Bibliotheken, Sie haben Infrastruktur: adapter-node
(warmer Server, volle Node-APIs, keine Cold-Start-Überraschungen).
→ Globales Publikum, TTFB ist am wichtigsten, keine schweren Node-Abhängigkeiten: ein Edge-Adapter
(adapter-cloudflare, oder adapter-vercel mit runtime: 'edge' pro Route) —
akzeptieren Sie kein fs (verwenden Sie $app/server’s read() oder Prerendering) und Cold Starts.
Prerendern Sie nur die wirklich statische Hülle (Marketing, Login).
Vierter Pfad (nur Vercel): Wenn eine Route “größtenteils statisch, aber gelegentlich
sich ändert” ist, erwägen Sie ISR (isr: { expiration }) anstatt prerender = true
— niemals beides, da “ISR on a route with export const prerender = true will have
no effect.”
Soll meine Sitemap statisch oder dynamisch sein?
Auf adapter-static? → Statischer/vorgerenderter Sitemap-Endpunkt
(prerender = true). Er wird beim Build eingebacken; geeignet für Sites, die bei Veröffentlichung neu gebaut werden.
Auf einem Node-/Serverless-/Edge-Adapter? → Dynamische Sitemap, die pro Anfrage
aus Ihrem CMS/DB generiert wird — immer aktuell, kein Rebuild. (Auf Edge ziehen Sie URLs von einer API oder
Binding, nicht von einem Disk-fs-Read.)
Niemals: keine Sitemap ausliefern, weil “die Seiten alle statisch sind.” Statische Ausgabe und Sitemap-Auffindbarkeit sind unabhängig — SvelteKit generiert für keinen Adapter eine dieser Dateien.
SvelteKit-Deployment-SEO — Spickzettel
Adapter auf einen Blick
| Adapter | Rendert | Runtime | SEO-Hinweis |
|---|---|---|---|
adapter-static | Build-Zeit (SSG) | keine | Niedrigste TTFB, keine Cold Starts; Content-Sites |
adapter-node | Anfragezeit (SSR) | Node | Volle Node-APIs (fs ✅); Sie betreiben den Server |
adapter-vercel | Anfragezeit | serverless / edge | Pro-Route runtime, regions, ISR |
adapter-cloudflare | Anfragezeit | V8-Edge | Globales Edge; kein fs; nodejs_compat |
adapter-netlify | Anfragezeit | Node / Deno-Edge | edge: true für Deno-Edge-Funktionen |
adapter-auto | (erkennt oben) | — | Nimmt keine Optionen — nur Scaffold |
Prerender-Werte
| Wert | Statisches HTML? | Im dynamischen Manifest? | Verwenden für |
|---|---|---|---|
true | ✅ | ❌ (entfernt) | Bekannte statische Content-Routen |
false | ❌ | ✅ | Echt dynamische Routen |
'auto' | ✅ | ✅ | /blog/[slug] — beliebte vorrendern, Long Tail per SSR |
Schnelle Regeln
- Dynamische vorgerenderte Routen → fügen Sie eine
entries-Funktion hinzu (oder stoßen Sie auf den “not prerendered”-Fehler). runtime: 'edge'ist pro Route (Vercel) — mischen Sie Edge- und Node-Routen.- Edge = kein
fs→ verwenden Sie$app/server’sread()oder Prerendering. - Cold Starts machen Edge beim ersten Aufruf langsamer als einen warmen Server / eine statische Datei.
- ISR ≠ Prerender —
israuf einerprerender = true-Route bewirkt nichts. - Keine automatische Sitemap/robots.txt — bauen Sie beide.
prerender = trueauf dem Sitemap- Endpunkt füradapter-static; dynamisch auf Server/Edge. - Blockieren Sie niemals
/_app/oder CSS in robots.txt.
Eine vorgerenderte Route fehlt im Deployment
Wahrscheinliche Ursache: Der Crawler konnte den Pfad nicht entdecken, ein entries-Wert fehlt oder das Prerendering ist fehlgeschlagen. Behebung: Fügen Sie crawlbare Links oder explizite Einträge hinzu und behandeln Sie Build-Warnungen als Release-Fehler. Bestätigung: Das Ausgabemanifest enthält die Route und die Produktion liefert vollständiges HTML zurück.
adapter-static schlägt bei einer dynamischen Route fehl
Wahrscheinliche Ursache: Die Route kann zur Build-Zeit nicht vollständig aufgezählt werden. Behebung: Liefern Sie endliche Einträge, gestalten Sie die Route neu oder verwenden Sie einen serverfähigen Adapter für diesen Pfad. Bestätigung: Der ausgewählte Adapter baut erfolgreich und jede repräsentative Route liefert die beabsichtigte Antwort zurück.
Edge-Deployment wirft Dateisystem- oder Node-API-Fehler
Wahrscheinliche Ursache: Routen-Code oder eine Abhängigkeit setzt Node-Funktionen voraus, die in der Edge-Runtime nicht verfügbar sind. Behebung: Ersetzen Sie die Abhängigkeit, verlagern Sie die Arbeit auf einen kompatiblen Dienst oder wählen Sie einen Node-Adapter. Bestätigung: Produktions-SSR läuft ohne Laufzeitausnahmen erfolgreich.
Sitemap oder robots.txt liefert HTML zurück
Wahrscheinliche Ursache: Eine Fallback-Route fängt den Endpunkt ab oder der +server-Handler setzt den falschen Body/die falschen Header. Behebung: Erstellen Sie explizite Endpunkt-Handler mit korrekten Inhaltstypen. Bestätigung: Direkte Anfragen liefern die erwartete Text/XML-Antwort und den Status 200 zurück.
Metadaten unterscheiden sich zwischen prerenderten und SSR-Routen
Wahrscheinliche Ursache: Head-Daten werden in verschiedenen Codepfaden geladen oder hängen vom Browserzustand ab. Behebung: Zentralisieren Sie die Metadatengenerierung aus server-/build-sicheren Seitendaten. Bestätigung: Rohes HTML für beide Routentypen enthält äquivalente Titel-, Canonical- und robots-Logik.
Bestätigen Sie, was Ihr Adapter tatsächlich ausgeliefert hat
Der Sinn der Wahl eines Adapters und des Prerenderings ist, dass ein Crawler schnelles, vollständiges HTML erhält. Diese Prüfungen bestätigen, dass genau das tatsächlich passiert ist – aus der rohen Antwort, nicht aus dem Browser.
Ist die Seite prerendert/SSR’d (Inhalt im rohen HTML)?
Ein einfaches curl führt kein JavaScript aus, sieht also genau das, was ein nicht rendernder Crawler
sieht.
macOS / Linux
# Raw HTML as the host sends it (no JS executed)
curl -sL "https://example.com/your-page/" -o raw.html
grep -o "Your unique headline text" raw.html # empty = CSR shell, not prerenderedWindows (PowerShell)
Invoke-WebRequest -Uri "https://example.com/your-page/" -OutFile raw.html
Select-String -Path raw.html -Pattern "Your unique headline text"Ist TTFB schnell (oder startet eine Funktion kalt)?
TTFB speist LCP und Crawl-Kapazität, also messen Sie es. Rufen Sie die URL kalt auf, dann warm:
# Time to first byte, twice — a big first number then a small one = cold start
for i in 1 2; do
curl -s -o /dev/null -w "TTFB: %{time_starttransfer}s\n" "https://example.com/your-page/"
doneEine prerenderte/statische Seite sollte konstant niedrig sein. Ein großer erster Wert, der beim zweiten Aufruf abfällt, ist ein klassischer Serverless/Edge-Kaltstart.
Wurde diese Route prerendert oder dynamisch ausgeliefert?
Statische Hosts und CDNs zeigen es normalerweise in Headern (Cache-Status, age,
x-vercel-cache, cf-cache-status):
curl -sI "https://example.com/your-page/" | grep -iE "cache|age|x-vercel|cf-"Ein HIT (oder ein von Null verschiedenes age) bedeutet, dass Ihnen gecachter/prerenderter Inhalt ausgeliefert wird;
ein MISS/DYNAMIC bei jeder Anfrage bedeutet, dass pro Anfrage gerendert wird.
Existiert die Sitemap tatsächlich und liefert sie XML zurück?
Da SvelteKit keine generiert, verifizieren Sie, dass Ihre wirklich mit dem richtigen Inhaltstyp vorhanden ist:
curl -sI "https://example.com/sitemap.xml" | grep -iE "HTTP/|content-type"
# Want: 200 + content-type: application/xml (not text/html or a 404)DevTools-Konsolen-Einzeiler
Fügen Sie dies in die Browser-Konsole ein, um das gerenderte DOM mit dem zu vergleichen, was ein Crawler benötigt –
wenn Ihre Überschrift hier, aber in der curl-Ausgabe oben fehlt, ist es clientgerendert:
// Is the content in the DOM, and does the sitemap resolve?
console.log('headline in DOM:', document.body.innerText.includes('Your unique headline text'));
fetch('/sitemap.xml').then(r => console.log('sitemap status:', r.status, r.headers.get('content-type')));Prüfen Sie, ob robots.txt das Bundle nicht blockiert
curl -sL "https://example.com/robots.txt" | grep -iE "disallow.*(/_app|\.js|\.css)"Ein Disallow, das /_app/ (SvelteKits gebündelte Ausgabe) oder Ihr CSS abdeckt, bedeutet,
dass Suchmaschinen die Seite nicht rendern können – fast immer ein Fehler.
Tools zum Debuggen von SvelteKit-Deployment-SEO
- URL Inspection (Google Search Console) — die Quelle der Wahrheit. Testen Sie eine URL live und prüfen Sie das gerenderte HTML, den Screenshot und die Seitenressourcen, um sicherzustellen, dass Inhalte und Metadaten vorhanden sind und nichts blockiert wird.
- PageSpeed Insights — das von der SvelteKit-Dokumentation selbst empfohlene Tool; zeigt TTFB und die Core Web Vitals (LCP/INP/CLS), die Ihre Adapterwahl am stärksten beeinflusst.
- WebPageTest — Wasserfall + Filmstreifen zur Diagnose von TTFB und Cold-Start-Zeiten bei Edge-/Serverless-Deployments.
curl -w "%{time_starttransfer}"— der schnellste rohe TTFB- und Cold-Start-Check (siehe Registerkarte „Skripte“).- Host-Dashboards (Vercel / Cloudflare / Netlify Analytics) — Funktionsaufrufzahlen, Cold-Start-Raten und Cache-Trefferquoten pro Route — die Grundlage dafür, ob Edge/Serverless für Sie tatsächlich schnell ist.
- Screaming Frog SEO Spider — Crawl mit JS-Rendering an/aus, um rohes vs. gerendertes HTML auf der gesamten Website zu vergleichen und zu bestätigen, dass vorgerenderte Routen vollständig sind.
- Ahrefs Site Audit — deckt fehlende/blockierte Sitemaps, Redirect-Ketten, defekte Kanonische und Indexierbarkeitsprobleme im großen Maßstab auf.
Testen Sie sich selbst: SvelteKit-Deployment-SEO
Fünf kurze Fragen zu Adaptern, Vorab-Rendering und Edge-Rendering in SvelteKit. Wählen Sie für jede eine Antwort und prüfen Sie dann.
Ressourcen, die Ihre Zeit wert sind
Meine verwandten Artikel
- JavaScript-SEO: Ein umfassender Leitfaden — meine vollständige Referenz zu Rendering-Modi (SSR, statisches Rendering, Vorab-Rendering und die CSR-Fallstricke), die jeder Adapterentscheidung hier zugrunde liegen. Wie ich dort sagte: Jede Art von SSR, statischem Rendering oder Vorab-Rendering ist für Suchmaschinen in Ordnung — genau das ist das Sicherheitsnetz hinter diesen Adapterentscheidungen.
- Der Anfängerleitfaden für technisches SEO — wo Rendering, Crawling und Core Web Vitals in das größere Bild passen.
Meine Vorträge
- How Search Works (SlideShare) — meine Erläuterung von Crawling, Rendering, Indexierung und Ranking, die den Hintergrund dafür bildet, warum TTFB und Rendering-Zeiten wichtig sind. (Mein üblicher Haftungsausschluss gilt: „This is my understanding of systems… not going to be 100% complete or accurate.“)
Aus der Branche
- Adapters • SvelteKit Docs — der maßgebliche Überblick über jeden offiziellen Adapter und wie sie in
svelte.config.jsangegeben werden. - Page options (prerender, ssr, csr, config) • SvelteKit Docs — die pro-Route
prerender-Werte, dieentries-Funktion und die pro-Routeconfigeinschließlichruntime: 'edge', in den eigenen Worten des Teams. - Vercel (adapter-vercel) • SvelteKit Docs — die Edge-Runtime, Regionen und der ISR-vs-Prerender-Hinweis.
- Cloudflare (adapter-cloudflare) • SvelteKit Docs — Workers/Pages-Bereitstellung, Bindungen und die
fs-Einschränkung. - SvelteKit • Cloudflare Pages docs — die Bereitstellungsmechanik und
platform-Bindungen von Cloudflares Seite. - SvelteKit SEO: Your Secret Weapon (Okupter) — ein Praxisleitfaden zu Vorab-Rendering, Meta-Tags und dem
+server.js-Sitemap/RSS-Muster. - A Deep Dive into SvelteKit’s Rendering Techniques (This Dot Labs) — SSR/SSG/CSR-Mechanik und pro-Route/pro-Layout-Konfiguration, mit dem „SSR kann teuer sein“-Server-Load-Kompromiss.
- Understand JavaScript SEO Basics (Google Search Central) — die Render-Warteschlange und „nicht alle Bots können JavaScript ausführen“, die allgemeine Anleitung, unter der jede Adapterentscheidung steht.