seojuice

Astro-SEO: So bringen Sie Ihre Astro-Website in die Top-Rankings

Vadim Kravcenko
Vadim Kravcenko
· Updated · 8 min read

TL;DR: Astro gibt dir eine solide SEO-Basis, weil es standardmäßig statisches HTML vorab rendert und clientseitiges JavaScript entfernt. Setze site in astro.config.mjs, halte indexierbaren Content aus client:only-Komponenten heraus und konfiguriere eindeutige Metadaten, absolute Canonicals, eine Sitemap und ein konsistentes URL-Format. Prüfe anschließend das gebaute HTML. Ein “sauberer” Komponentenbaum beweist nicht, dass die veröffentlichte Seite auch crawlbar ist.

Priorität Astro SEO-Check Fehlermodus
Schwerwiegend Setze site auf die bereitgestellte HTTPS-URL Canonicals, Sitemaps, RSS-Links und Social-URLs nutzen die falsche Origin oder schlagen fehl
Schwerwiegend Wichtige Inhalte im gerenderten HTML belassen client:only überspringt das Server-Rendering
Hoch Eindeutige Titel und Beschreibungen über ein gemeinsames Layout nutzen Seiten werden mit fehlenden oder duplizierten Metadaten ausgeliefert
Hoch Absolute Canonical-URLs generieren Hostname für Vorschau oder inkonsistenter Pfad wird zur Canonical
Hoch @astrojs/sitemap installieren Es wird keine Sitemap erzeugt, wenn site fehlt
Mittel Statisches oder On-Demand-Rendering bewusst wählen On-Demand Rendering wird eingeführt, ohne dass es wirklich nötig ist
Mittel Eine Slash-Konvention festlegen (Trailing Slash) Links, Redirects und Canonicals widersprechen sich
Mittel Open Graph-, Twitter- und RSS-Metadaten dort ergänzen, wo sie sinnvoll sind Indexierung funktioniert, aber Sharing und Feed-Discovery bleiben unvollständig
Was Astro dir für SEO kostenlos mitgibt – und was du trotzdem noch verdrahten musst.

Astro ist gut für SEO – aber es macht SEO nicht für dich

Der stärkste Teil von Astro SEO ist kein SEO-Paket. Es ist das Rendering-Modell von Astro.

„Standardmäßig rendert Astro automatisch jede UI-Komponente zu reinem HTML & CSS und entfernt dabei sämtliches clientseitiges JavaScript.“

Das ist die eigene Beschreibung von Astro in der Islands-Architecture-Dokumentation. Astro “hydrates” nur die Komponenten, die explizit für den Browserbetrieb markiert sind, und lässt den Rest als statisches HTML stehen.

Die Unterscheidung ist wichtig, weil Google das Herunterladen und Ausführen von JavaScript nicht als dieselbe Operation behandelt wie die Verarbeitung von bereits vorhandenem Content.

„Google verarbeitet JavaScript-Web-Apps in drei Hauptphasen: 1. Crawling 2. Rendering 3. Indexing“

Google Search Central erklärt außerdem, dass ein headless Chromium die Seite rendert, sobald Googles Ressourcen das zulassen. Google kann JavaScript rendern – aber Content, der erst nach der Ausführung existiert, hängt von dieser zusätzlichen Phase ab. Das statische-HTML-Default von Astro entfernt diese Abhängigkeit, weil der relevante Content bereits in der Antwort vorhanden sein kann. Unser JavaScript-SEO-Guide geht auf den Mechanismus noch genauer ein.

Das ist ein echter technischer Vorteil. Kein automatischer Ranking-Vorteil. Statisches HTML kann keine dünnen Seiten retten, keine doppelten Titel, kein schwaches internes Linking, keine versehentliche Canonicalisierung und auch keinen Content, den niemand braucht.

Astro liefert eine ungewöhnlich gute Infrastruktur. Aber du musst sie auch anschließen.

Zuerst die Produktions-Site-URL festlegen

Bevor du eine SEO-Komponente hinzufügst, konfiguriere site in astro.config.mjs:

Zeile astro.config.mjs
1 import { defineConfig } from 'astro/config';
2 export default defineConfig({ site: 'https://example.com' });

Astros Configuration Reference definiert site als die finale, bereitgestellte URL und sagt, dass dieser Wert genutzt wird, um Sitemap- und Canonical-URLs zu erzeugen. Der Default ist undefined, und Astro empfiehlt das explizit zu setzen.

Eine einzige Zeile steuert mehrere Systeme:

  • Astro.site ist ohne sie undefined.
  • @astrojs/sitemap braucht es, um Sitemap-URLs zu generieren.
  • @astrojs/rss nutzt es, um Artikel-Links zu erstellen.
  • Canonical- und Social-Image-URLs brauchen es für eine verlässliche Production-Origin.

Das Spiegelbild dieser Abhängigkeit haben wir während unserer seojuice.io zu seojuice.com-Migration im Januar 2026 gesehen. Canonicals, Sitemap-Einträge, Open-Graph-URLs und interne Referenzen mussten auf eine einzige Production-Origin zusammenlaufen. Eine Migration macht das Problem offensichtlich; ein vergessenes site-Value versteckt die gleiche Fehlerklasse in einem ansonsten erfolgreichen Build.

Setze die Produktions-URL, baue und inspiziere die Ausgabe, bevor du Downstream-Integrationen debugst (eine Origin, mehrere Symptome).

Nur eine Head-Komponente bauen – nicht Dutzende Varianten

Astro liefert keine spezielle Abstraktion für Metadaten. Titel und Beschreibungen sind normale HTML-Tags. Für die meisten Websites ist der wartbare Ansatz ein gemeinsames Layout, das page-spezifische Werte über Astro.props entgegennimmt.

Zeile Gemeinsames Astro-Layout
1 ---
2 const { title, description } = Astro.props;
3 ---
4 <head>
5 <title>{title}</title>
6 <meta name="description" content={description} />
7 </head>

Die erste und die dritte Zeile sind Astros Frontmatter-Fences. Jede Seite oder jeder Content-Eintrag sollte seinen eigenen Titel und seine eigene Beschreibung liefern. Ein Fallback ist sinnvoll, um unvollständige Daten abzufangen – aber lass nicht zu, dass ein Default für die ganze Site still und leise zum Metadaten-Standard für jede URL wird.

Ich bevorzuge, erforderliche Metadaten beim Build zu validieren, statt erst Wochen später in der Search Console nachzusehen, was fehlt. Wenn eine öffentliche Content-Seite keinen Titel oder keine Beschreibung hat, ist es oft das freundlichere Verhalten, den Build fehlschlagen zu lassen.

Solltest du das astro-seo-Paket nutzen?

Das Community-Paket astro-seo kann die üblichen Tags kapseln. Installiere es mit npm install astro-seo, importiere SEO aus dem Paket und rendere die Komponente im document head. Das Repository listet Unterstützung für Titel, Beschreibungen, Canonicals, Robots-Directives, Open Graph, Twitter Cards, Title-Templates, Sprachalternativen und Custom Tags.

Halte es exakt: astro-seo ist eine Drittanbieter-Komponente, gepflegt von jonasmerlin, nicht eine offizielle @astrojs-Integration. Ich würde sie einsetzen, wenn ihre API die relevanten Wiederholungen wirklich reduziert. Für eine kleine Marketing-Site ist eine lokale Head-Komponente oft einfacher zu prüfen und schwerer “zu überleben” (weniger Dependencies können ein Vorteil sein – nicht nur eine Frage des Geschmacks).

Social-Metadaten neben Search-Metadaten halten

Open Graph und Twitter Cards sind Standard-Metatags. Generiere sie in derselben gemeinsamen Head-Komponente, damit Seitentitel, Beschreibung, Canonical-URL und Bild nicht unabhängig voneinander “driften”. Social Images sollten absolute URLs nutzen, die auf Astro.site basieren; relative Pfade sind ein häufiger Grund, warum Vorschauen auf einem Dienst funktionieren und auf einem anderen scheitern.

Canonicals aus Production-Origin und aktuellem Pfad ableiten

Astro macht die zwei Werte verfügbar, die du für eine Canonical brauchst. Astro.site gibt eine URL zurück, basierend auf der konfigurierten Production Site, während Astro.url die aktuelle Request-URL repräsentiert.

Das offizielle API Reference zeigt dieses Muster:

Zeile Canonical-Implementierung
1 ---
2 const canonicalURL = new URL(Astro.url.pathname, Astro.site);
3 ---
4 <link rel="canonical" href={canonicalURL} />

So wird der aktuelle Pfad mit der Production-Origin kombiniert – und ein Development- oder Preview-Hostname wird nicht einfach deshalb zur Canonical, weil er die Anfrage ausgeliefert hat (Preview-Hosts sollten keine “Stimme” bekommen).

Achte darauf, dass das Muster Astro.url.pathname verwendet, nicht die komplette Request-URL. Dadurch fallen Query-Parameter weg. Das ist in der Regel korrekt für Tracking-Parameter und normale Content-Seiten, aber nicht universell. Pagination, gefilterte Collections und wirklich unterschiedliche parameterisierte Seiten benötigen eine explizite Canonical-Policy.

Eine Canonical ist kein generischer Marker “SEO ist aktiviert”. Sie ist eine Ansage, welche URL die maßgebliche (autoritativere) Version einer Seite darstellt. Prüfe den finalen Wert.

Trailing Slashes bewusst entscheiden

Astros trailingSlash-Option hat als Default ignore. Die Einstellungen always und never erzwingen eine bestimmte Form für Production-On-Demand-Routen. Der Default akzeptiert in der Entwicklung und im On-Demand Rendering beide Formen.

Bei statischen Outputs beeinflussen außerdem generierte Dateien und das Host-Verhalten das Ergebnis. Wähle eine Canonical-Form, generiere interne Links in genau dieser Form und teste, wie der veröffentlichende Host beide Varianten behandelt. Wenn du nur die Astro-Option änderst, ist nicht garantiert, dass jeder statische Host die Redirects so anwendet, wie du sie erwartest.

Das Ziel ist Einigkeit: Interne Links, Canonicals, Sitemap-Einträge und Redirects sollten alle auf dieselbe URL-Form zeigen. Unser SEO für Entwickler-Guide behandelt die größere Umsetzungskohärenz hinter dieser Entscheidung.

Die offizielle Sitemap-Integration installieren

Führe npx astro add sitemap aus, um Astros offizielle @astrojs/sitemap-Integration zu installieren.

Laut der offiziellen Sitemap-Dokumentation benötigt die Integration die URL der bereitgestellten Site, beginnend mit http:// oder https://. Ohne site wird keine Sitemap erzeugt.

Nach einem Build fügt Astro sitemap-index.xml und sitemap-0.xml in das Output-Verzeichnis ein. Der Index referenziert die nummerierten Sitemap-Dateien. Das Default-Limit liegt bei 45.000 Einträgen pro Datei; danach werden weitere nummerierte Dateien erzeugt (45.000 ist eine Split-Schwelle, keine Empfehlung, Seiten künstlich zu produzieren).

Prüfe nach dem Deployment mehrere Einträge. Kontrolliere das Protokoll, den Hostnamen, die Pfade, die Slash-Konvention und ob private oder Utility-Seiten “durchgerutscht” sind. Öffne außerdem den Sitemap-Index und folge den Child-Links. Ich habe bereits technisch gültige Sitemap-Dateien gesehen, die unter Pfaden deployt wurden, die vorher niemand wirklich getestet hat.

Eine Sitemap hilft bei der Auffindbarkeit; sie erzwingt kein Indexing. Für den Rest dieses Prozesses siehe wie Google Indexing funktioniert.

Der Astro-Islands-Fallstrick betrifft konkret client:only

Astro Islands sind nicht per se schlecht für SEO. Wenn man das behauptet, verwechselt man selektives Hydrieren mit client-only Rendering.

Astros Directives Reference sagt: client:only „überspringt das HTML-Server-Rendering und rendert nur im Client“. Alles, was in dieser Komponente liegt, fehlt im initial server-gerenderten HTML und hängt von der Ausführung von JavaScript ab.

Platziere keinen Artikeltext, keine Produktbeschreibungen, keine FAQ-Antworten, keine primäre Navigation, keine internen Links oder andere indexierbare Inhalte in client:only. Für solche Inhalte ist das nur dann sinnvoll, wenn sie auf dem Server nicht rendern können und im initialen Antwort-Body nicht sichtbar sein müssen.

client:load, client:idle und client:visible sind etwas anderes. Sie rendern das initiale HTML serverseitig und steuern dann, wann Hydration passiert. Das Problem ist nicht React, Vue, Svelte oder die Islands selbst. Das Problem ist, dass du Server-Rendering auslässt oder essenziellen Content ausschließlich im Browser abholst.

Aus dem, was wir über viele Sites hinweg sehen, die wir mit SEOJuice geprüft haben, ist der aufschlussreiche Ausfall bei JavaScript-Framework-Setups oft nicht das Fehlen einer Sitemap. Es ist eine Seite, die im Browser vollständig aussieht, während im nackten HTML-Response-Body die relevante Copy fehlt. Bei Astro ist eine einzelne client:only-Grenze oft ein offensichtlicher erster Ort zum Schauen – aber auch browserseitiges Abholen von Daten kann zum selben Ergebnis führen.

Ich habe diesen Fehler gemacht, indem ich nur die gerenderte Seite bewertet habe. Genauer: Ich habe überprüft, was der Browser rekonstruiert hat – nicht, was der Server zurückgegeben hat. Wenn man die Response-Source betrachtet, wäre die Untersuchung viel früher beendet gewesen. Das ist dasselbe App-Shell-Problem, über das wir in unseren SPA-SEO-Best-Practices sprechen.

Nutze statischen Output, außer Request-Time Rendering löst ein echtes Problem

„Standardmäßig wird deine gesamte Astro-Site vorgerendert und statische HTML-Seiten werden an den Browser gesendet.“

Das kommt aus Astros Guide zum On-Demand Rendering. Der Default-Modus output: 'static' erzeugt Seiten zur Build-Zeit. Das ist die naheliegende Wahl für Dokumentation, Artikel, Landingpages und Produkt-Content, der nicht von request-spezifischen Daten abhängt.

output: 'server' rendert Seiten on demand und benötigt einen Adapter für die Ziel-Laufzeit, etwa Node, Netlify, Vercel oder Cloudflare. Server-Side Rendering kann vollständiges HTML zurückgeben und ist nicht grundsätzlich schlechter für SEO. Es bringt nur zusätzliche Runtime-Infrastruktur, Latenz und eine weitere Fehlerquelle mit. Nutze es, weil die Seite es braucht – nicht weil SSR sich “fähiger” anhört.

Du kannst beide Verhaltensweisen mischen. Im statischen Modus exportierst du prerender = false in einer Seite, die on demand gerendert werden muss. Im Server-Modus exportierst du prerender = true für eine Seite, die vorher generiert werden soll.

Ältere Tutorials empfehlen möglicherweise output: 'hybrid'. Astro 5 hat das alte Hybrid-Verhalten in 'static' zusammengeführt; der Astro-5-Upgrade-Guide beschreibt 'hybrid' und 'static' als in einer einzigen statischen Konfiguration zusammengeführt. Aktuelle Projekte sollten static oder server verwenden – jeweils mit per-Seite-prerender-Overrides.

RSS hinzufügen, wenn die Site regelmäßig neuen Content veröffentlicht

Astro stellt das offizielle @astrojs/rss-Paket für Feeds bereit, die über API-Endpunkte generiert werden. Installiere es mit npm install @astrojs/rss und erstelle dann einen Endpunkt wie src/pages/rss.xml.js, der den RSS-Helper mit site: context.site und den Feed-Items zurückgibt.

Die Astro-RSS-Dokumentation verlangt eine konfigurierte Site, weil diese Origin genutzt wird, um Artikel-Links zu erzeugen. Das ist ein weiterer Grund, site als Basis-Konfiguration zu behandeln – nicht als eine rein sitemap-spezifische Option.

Das gebaute Site-Output prüfen – nicht nur die Source-Komponenten

Astro-Komponenten können korrekt aussehen, während das deployte Ergebnis falsch ist. Builden und deployen, dann verifizieren:

  1. Die Roh-HTML-Response enthält den Hauptcontent und wichtige Links.
  2. Jede indexierbare Seite hat einen passenden Titel und eine Meta-Beschreibung.
  3. Die Canonical ist absolut, nutzt HTTPS und zeigt auf den Production-Hostname.
  4. Canonicals, interne Links, Redirects und Sitemap-URLs teilen sich eine einheitliche Slash-Konvention.
  5. Open-Graph- und Twitter-Bilder nutzen absolute Production-URLs.
  6. sitemap-index.xml existiert und referenziert erreichbare Child-Sitemaps.
  7. Es existiert kein indexierbarer Content ausschließlich in client:only-Komponenten.
  8. Seiten, die statisch sein sollen, erscheinen im generierten Build-Output.
  9. Preview- und Staging-Hosts geben sich nicht selbst als Canonical aus.
  10. Redirects verhalten sich wie erwartet auf der tatsächlichen Hosting-Plattform.

Nutze „Quelltext anzeigen“, hole die URL ohne dich auf Browser-Execution zu verlassen, und inspiziere die deployten Dateien. Das Elements-Panel in den DevTools zeigt das DOM nach der Ausführung – das ist nützlich, beantwortet aber eine andere Frage (ich ertappe mich immer noch dabei, zuerst den falschen Blickwinkel zu prüfen).

Astro kümmert sich gut um die Rendering-Basis. Die wiederkehrende Arbeit ist das Pflegen von Metadaten, internen Links, Schema und Seiteneinheitlichkeit, wenn die Site wächst. SEOJuice kann auf Astro über einen JavaScript-Snippet laufen und fortlaufend On-Site-Fixes anwenden – etwa interne Links, Meta-Titel und -Beschreibungen, Schema-Markup und Image-Alt-Text. Das kostenlose SEO-Audit ist ebenfalls ein No-Signup-Weg, um die ausgelieferten Metadaten und Canonicals zu prüfen.

Es ist kein Ersatz dafür, site zu setzen, eine Sitemap zu generieren oder indexierbaren Content im initialen HTML zu belassen. Automatisierung sollte auf einem korrekten Build aufsetzen.

Häufig gestellte Fragen

Ist Astro gut für SEO?

Ja. Astro prerendert statisches HTML und entfernt standardmäßig clientseitiges JavaScript, sodass Content in der initialen Response vorhanden sein kann – statt von Googles verzögerter JavaScript-Rendering-Phase abhängig zu sein. Rankings hängen weiterhin von nützlichem Content, Metadaten, internem Linking, Canonicals und anderen Implementierungsentscheidungen ab.

Wie füge ich in Astro Meta-Titel und -Beschreibungen hinzu?

Füge Standard-title- und Meta-Description-Tags zu einem gemeinsamen Layout hinzu, dann übergib je Seite eindeutige Werte über Astro.props. Das Community-Paket astro-seo ist eine weitere Option, aber keine offizielle Astro-Integration.

Wie füge ich einem Astro-Project eine Sitemap hinzu?

Führe npx astro add sitemap aus und setze site in astro.config.mjs auf die bereitgestellte URL. Danach erzeugt ein Build sitemap-index.xml und sitemap-0.xml. Ohne die Site-Konfiguration kann die Integration keine Sitemap generieren.

Wie setze ich in Astro Canonical-URLs?

Nutze das dokumentierte Muster von Astro: Erstelle eine URL mit new URL(Astro.url.pathname, Astro.site) und gib dann diesen Wert in einem Canonical-Link-Tag aus. Setze site zuerst, weil Astro.site sonst undefined ist.

Was ist der Unterschied zwischen statischem und SSR-Output in Astro?

output: 'static' ist der Default und rendert Seiten zur Build-Zeit zu HTML. output: 'server' rendert on demand und benötigt einen Adapter. Du kannst das Verhalten pro Seite mischen, indem du im statischen Modus prerender = false nutzt oder im Server-Modus prerender = true für einzelne Seiten setzt.

Warum funktioniert meine Astro-Sitemap oder Canonical-URL nicht?

Prüfe zuerst site. Es ist standardmäßig undefined, während Sitemap-Generierung, Astro.site, Canonical-Konstruktion, RSS-Artikel-Links und viele absolute Social-URLs davon abhängen. Setze es auf die finale HTTPS-Origin, baue neu und inspiziere den generierten Output.