SEO
Xingluo wird mit vollständiger SEO-Unterstützung ausgeliefert: Open Graph, Twitter Card, canonical, JSON-LD-Strukturdaten, dynamische OG-Bilder, RSS, Sitemap und hreflang mehrsprachige Deklarationen.
head-Ausgabe
Der <head> in src/layouts/Layout.astro gibt aus:
charset,viewportfavicon(public/favicon.svg)canonical(kanonischer Link)title,meta title,meta description,meta authorsitemap-Link- Open Graph:
og:type,og:site_name,og:title,og:description,og:url,og:image - Twitter Card:
twitter:card,twitter:title,twitter:description,twitter:image - RSS-Alternativlink
- hreflang-Alternativlinks (pro Sprache + x-default)
theme-color(zur Laufzeit vontheme.tsgesetzt)google-site-verification(bedingt)
Beitragsseiten-Meta
src/layouts/PostLayout.astro injiziert beitragsspezifische Meta über <Fragment slot="head">:
og:type = articlearticle:published_time(ISO 8601)article:modified_time(fallsmodDatetimegesetzt ist)- JSON-LD
BlogPosting-Strukturdaten:
json{ "@context": "https://schema.org", "@type": "BlogPosting", "headline": "Beitragstitel", "image": "OG-Bild-URL", "datePublished": "2026-06-19T10:00:00.000Z", "dateModified": "2026-06-20T10:00:00.000Z", "author": [ { "@type": "Person", "name": "Autorenname", "url": "Autoren-Startseite" } ] }
canonical-Normalisierung
Die canonical-Strategie auf Beitragsdetailseiten (PostDetailView.astro):
- Benutzerdefinierte
canonicalURLim Frontmatter → zuerst verwendet - Der aktuelle Beitrag ist eine echte Übersetzung für diese Sprache (
localestimmt mit Seitensprache überein) → verweist auf eigene URL - Der aktuelle Beitrag ist Fallback-Inhalt (keine Übersetzung verfügbar, Original wird verwendet) → verweist auf die URL des Originals in der Standardsprache
Strategie 3 stellt sicher, dass Suchmaschinen Seiten ohne eigenständige Übersetzungen nicht als Duplicate Content behandeln. Beiträge mit eigenständigen Übersetzungen haben canonical, das auf sich selbst verweist, und können separat indiziert werden.
BreadcrumbList-Strukturdaten
Alle Seiten mit Breadcrumbs (Beitragsliste, Tag-Index, Tag-Beitragsliste, Archive, Über, Suche) geben automatisch BreadcrumbList JSON-LD-Strukturdaten aus:
json{ "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [ { "@type": "ListItem", "position": 1, "name": "Startseite", "item": "https://..." }, { "@type": "ListItem", "position": 2, "name": "Beiträge", "item": "https://.../posts/" } ] }
Wenn das letzte Breadcrumb-Element keinen Link hat (aktuelle Seite), wird die aktuelle Seiten-URL als item verwendet. Beitragsdetailseiten verwenden keine Breadcrumb-Komponente und geben daher diese Strukturdaten nicht aus.
Open-Graph-Bilder
Dynamische Generierung
Mit aktiviertem features.dynamicOgImage (Standard) generiert Xingluo dynamisch 1200×630 OG-Bilder mit satori + sharp:
- Site-Ebene:
src/pages/og.png.ts, für Seiten ohne benutzerdefiniertes OG-Bild - Beitragsebene:
src/pages/posts/[...slug]/og.png.ts, nur für Beiträge ohneogImagegeneriert
Schriftarten
OG-Bilder verwenden Noto Sans SC (siehe die fonts-Konfiguration in astro.config.ts, CSS-Variable --font-og), geladen über astro:assets’s fontData. Die Schriftart ist nur für satori und wird nicht in das Site-CSS eingebunden.
Fallbacks
- Schriftart nicht verfügbar (kein Netzwerk) → Fallback auf ein 1×1-Platzhalter-PNG (bricht den Build nicht ab)
dynamicOgImagedeaktiviert → verwendet das statische Standard-OG-Bild unterpublic/
Beitrags-OG-Bild-Auflösung
Der vierstufige Fallback in PostDetailView.astro:
- Frontmatter
ogImageist ein String → direkt verwenden - Frontmatter
ogImageist einimage()-Objekt →.srcverwenden dynamicOgImageaktiviert → den beitragsspezifischenog.png-Endpunkt verwenden- Andernfalls → Standard-OG-Bild der Site
RSS
src/pages/rss.xml.ts generiert den RSS-Feed:
- Titel, Beschreibung und Site-URL stammen aus der
site-Konfiguration - Einträge stammen von
getSortedPosts(Entwürfe und geplante Beiträge bereits gefiltert) - Der
linkjedes Eintrags istgetPostUrl(id, filePath, config.site.lang) pubDateistmodDatetime ?? pubDatetime
Layout.astro injiziert den RSS-Autodiscovery-Link:
html<link rel="alternate" type="application/rss+xml" title="..." href=".../rss.xml" />
Sitemap
Die @astrojs/sitemap-Integration (siehe astro.config.ts):
filter: filtert Archivseitenpfade basierend auffeatures.showArchivesi18n: ermöglicht automatische hreflang-Generierung, Zuordnungzh-cn → zh-CN,en → en, mit defaultLocalezh-cn
Generiert sitemap-index.xml und sprachspezifische Alternativdeklarationen; robots.txt verweist auf die Sitemap.
hreflang-Mehrsprachigkeitsdeklarationen
Layout.astro gibt <link rel="alternate"> für jede Sprache aus:
html<link rel="alternate" hreflang="zh-CN" href="https://.../posts/welcome/" /> <link rel="alternate" hreflang="en" href="https://.../en/posts/welcome/" /> <link rel="alternate" hreflang="x-default" href="https://.../posts/welcome/" />
Pfade werden über parseLocaleFromPath(stripBase(...)) nach Entfernen von Präfixen normalisiert, sodass jede Sprache der korrekten URL zugeordnet wird. x-default verweist auf die Standardsprache.
robots.txt
src/pages/robots.txt.ts generiert:
User-agent: * Allow: / Sitemap: https://site-url/sitemap-index.xml
Site-Verifizierung
Die Google Search Console-Verifizierung wird über site.googleVerification auf zwei Arten konfiguriert:
- Umgebungsvariable
PUBLIC_GOOGLE_SITE_VERIFICATION(Laufzeit-Injektion) - Das Feld
site.googleVerificationinxingluo.config.ts
Gerendert als <meta name="google-site-verification" content="...">.
Verwandte Beiträge
Bereitstellung
2 Min. LesezeitBereitstellungsleitfaden für Xingluo mit statischen Hosting-Plattformen (Netlify/Vercel/GitHub Pages), Nginx-Self-Hosting, Docker und Umgebungsvariablen.
Suche
1 Min. LesezeitSuchleitfaden für Xingluo mit Flexsearch-Volltextsuche-Integration, Indexgenerierung, UI, mehrsprachiger Suche und Leistung.