Skip to content

SEO

Der Starter gibt auf jeder Seite vollständige Metadaten aus, zeichnet Organisation, Website und Seite als JSON-LD aus und steuert, was in den Index darf. Die Grundlagen dafür stehen in der Projektkonfiguration; eine einzelne Seite ergänzt nur, was ihr eigen ist.

ThemaInhalt
MetadatenTitel, Description, Canonical, Open Graph, X-Karten, hreflang
Structured DataJSON-LD-Builder, Brotkrumen, FAQ
IndexierungRouten-Policy, Umgebungen, robots.txt, Sitemap

Der Grundsatz

Die Ausgabe behauptet nichts, was es nicht gibt.

Kein Schema ohne sichtbare Entsprechung, kein hreflang ohne gebaute Übersetzung, kein Canonical, der auf eine andere Seite zeigt als die eigene. Metadaten sieht niemand — deshalb bleiben Fehler dort jahrelang stehen. Siehe ADR 0007.

Was eine Seite selbst angibt

Alles läuft über BaseLayout. Eine Seite, die einen Titel oder ein Vorschaubild selbst in den Kopf schreibt, hätte ihn doppelt.

astro
---
import BaseLayout from '../layouts/BaseLayout.astro';
---

<BaseLayout
  title="Leistungen"
  description="Was wir anbieten."
  breadcrumbs={[{ label: 'Startseite', href: '/' }, { label: 'Leistungen' }]}
>
  <h1>Leistungen</h1>
</BaseLayout>
PropWirkung
titlePflicht; wird in site.titleTemplate eingesetzt
descriptionfällt auf site.description zurück
breadcrumbssichtbarer Pfad und BreadcrumbList aus einer Liste
ogImageSchlüssel aus dem Asset-Manifest; sonst gilt seo.defaultOgImage
ogTypewebsite (Vorgabe) oder article
translationsSprache → Pfad; erzeugt hreflang
jsonLdzusätzliche Knoten aus den Buildern, etwa articleNode()
noindexEinzelfall; der Regelweg ist die Routen-Policy
localenur für Seiten, die nicht in der Standardsprache vorliegen

Wo was liegt

DateiZweck
src/lib/seo/metadata.tsTitel, Canonical, Open Graph, Alternates — reine Funktionen
src/lib/seo/jsonld.tstypisierte JSON-LD-Builder
src/lib/seo/indexing.tsRouten-Policy, robots-Meta, robots.txt
src/lib/seo/sitemap.tsAuswahl der Seiten und XML
src/lib/seo/integration.tsschreibt die Sitemap nach dem Bauen
src/components/seo/Seo.astrogibt die Kopfdaten aus; eingebunden von BaseLayout
src/components/seo/Faq.astrosichtbare Fragen samt FAQPage
src/components/navigation/Breadcrumbs.astrosichtbarer Brotkrumenpfad

Die Logik liegt bewusst in src/lib/seo/ und nicht in den Komponenten: Dort ist sie ohne Astro-Laufzeit einzeln testbar. Die Komponenten lösen nur auf, was ohne Astro nicht geht — das Vorschaubild durch die Bildpipeline schicken und die fertigen Tags schreiben.