Site-Dateien aus einer Config
robots.txt, llms.txt, sitemap.xml, rss.xml, security.txt und humans.txt – typisiert konfiguriert und bei jedem astro build neu geschrieben. Keine Handarbeit in public/.
Eine Integration statt drei Plugins und Handarbeit.
astro-site-files schreibt alle Meta-Dateien einer Website in astro:build:done ins Build-Verzeichnis. robots.txt und sitemap.xml sind standardmäßig aktiv, die anderen vier Dateien entstehen, sobald ihre Option gesetzt ist. Das Paket ersetzt @casoon/astro-crawler-policy und @casoon/astro-sitemap; beide werden nicht mehr aktiv gepflegt.
- 01Typisiert — TypeScript-Interfaces für jede Option, Fehler fallen im Editor auf
- 02Build-Zeit — kein Runtime-Code, kein externer Dienst
- 03Presets — Crawler-Strategie per Name statt Bot-Liste von Hand
- 04Audit-Hinweise — Warnungen bei Fehlkonfiguration, bevor die Dateien live gehen
Sechs Dateien, jede einzeln schaltbar.
Crawler-Regeln
Presets, Gruppen- und Bot-Overrides, eigene Agent-Blöcke und eine Sitemap:-Zeile, die auf die tatsächlich geschriebene Datei zeigt.
Sitemap
Aus dem Build-Output, mit dynamischen sources, Priority- und Changefreq-Regeln, hreflang und Index-Modus ab 50.000 URLs.
Übersicht für KI-Systeme
Titel, Beschreibung und Link-Abschnitte nach llmstxt.org. Abschnitte lassen sich per sources aus Content Collections erzeugen.
RSS-2.0-Feed
Top-Level-Option rss, unabhängig von der Sitemap. Für SSR und Entwicklung zusätzlich createRssRoute aus dem Sub-Path /rss.
Security-Kontakt
Contact, Expires, Policy, Encryption und weitere Felder. Abgelaufene oder ungültige Daten melden die Audit-Hinweise als Fehler.
Team und Technik
Team, Danksagungen, Technologien und Notiz nach humanstxt.org. Das Aktualisierungsdatum ist standardmäßig das Build-Datum.
Eine Config, drei Ergebnisse.
// astro.config.ts
import { defineConfig } from 'astro/config'
import siteFiles from '@casoon/astro-site-files'
export default defineConfig({
site: 'https://example.com',
integrations: [
siteFiles({
robots: { preset: 'seoOnly', disallow: ['/admin/'] },
llms: {
title: 'Example',
description: 'An example website focused on TypeScript tooling.',
details: 'This site documents internal tools and workflows.',
sections: [{
title: 'Documentation',
links: [
{ title: 'Getting started', url: '/docs/start', description: 'Setup guide' },
{ title: 'API reference', url: '/docs/api' },
],
}],
},
security: {
contact: 'mailto:security@example.com',
expires: '2027-01-01T00:00:00.000Z',
},
}),
],
})User-agent: *
Disallow: /admin/
User-agent: Googlebot
Allow: /
Disallow: /admin/# Example
> An example website focused on TypeScript tooling.
This site documents internal tools and workflows.
## Documentation
- [Getting started](/docs/start): Setup guide
- [API reference](/docs/api)Fünf Presets, fünf Bot-Gruppen.
| Bot-Gruppe | seoOnly | citationFriendly | openToAi | blockTraining | lockdown |
|---|---|---|---|---|---|
| Suchmaschinen | erlaubt | erlaubt | erlaubt | erlaubt | gesperrt |
| Verifizierte KI-Bots | gesperrt | erlaubt | erlaubt | erlaubt | gesperrt |
| Unbekannte KI-Scraper | gesperrt | gesperrt | erlaubt | gesperrt | gesperrt |
| SEO-Scanner | inherit | inherit | inherit | inherit | gesperrt |
| Web-Archive | gesperrt | inherit | erlaubt | gesperrt | gesperrt |
| Trainings-Bots zusätzlich gesperrt | – | ja | – | ja | – |
Stand: v0.5.0, September 2026, laut README. inherit heißt: keine eigene Gruppe, es gilt die Wildcard-Gruppe. Hervorgehoben ist seoOnly, der Preset aus dem Quick-Start. groups und bots überschreiben jeden Preset.
Was im Build-Output genau passiert.
Version 0.5.0 hat mehrere Regeln geändert, die ohne neue Konfiguration greifen.
- 01
Globale Regeln in jeder Bot-Gruppe
Nach RFC 9309 befolgt ein Crawler nur die spezifischste passende Gruppe. Deshalb stehen globale
disallow-Pfade auch in jedem erlaubten Bot-Block. Gesperrte Bots behalten ein nacktesDisallow: /. - 02
noindex-Seiten fallen aus der Sitemap
Seiten mit
<meta name="robots" content="noindex">landen nicht mehr in sitemap.xml. Search Console meldet solche URLs sonst als Fehler. Abschaltbar mitexcludeNoindex: false. - 03
hreflang aus Astros i18n
sitemap.i18nübernimmt standardmäßig die i18n-Konfiguration von Astro und schreibt Alternates samtx-default. Locale-Präfixe senken die Priority nicht mehr. - 04
Werte aus JSON-LD
data-sitemap-priorityunddata-sitemap-changefreqan JSON-LD-Script-Tags, etwa von@casoon/astro-structured-data, werden pro Seite übernommen.
Release-Verlauf
Gemeinsame Audits
Einheitliche Audit-Typen, llms.sources, Deduplizierung der Sitemap.
RSS
RSS-2.0-Feed und createRssRoute aus @casoon/astro-sitemap übernommen.
Presets und Registry
Bot-Registry und die fünf Presets aus @casoon/astro-crawler-policy portiert.
Verhaltensänderungen
noindex-Filter, hreflang aus Astro-i18n, rss als eigene Option, neue security.txt-Prüfungen.
Was die Dateien nicht leisten.
robots.txt ist freiwillig
Seriöse Crawler halten sich daran. Scraper mit normalen Browser-Headern und wechselnden IPs ignorieren sie. Durchsetzen lässt sich eine Sperre nur auf Server- oder CDN-Ebene.
Update vor dem Upgrade lesen
0.5.0 ändert Sitemap- und robots.txt-Ausgabe ohne Config-Änderung. Vor dem Update den Changelog prüfen und die erzeugten Dateien vergleichen.
RSS ohne getCollection
getItems läuft in astro:build:done. Dort steht getCollection() nicht zur Verfügung, die Einträge werden aus dem Dateisystem gelesen.
sources werden nicht gefiltert
exclude und filter gelten nur für automatisch gefundene Seiten. Einträge aus sources müssen in der Funktion selbst oder per serialize gefiltert werden.
Häufige Fragen.
Welche Dateien erzeugt astro-site-files?
robots.txt, llms.txt, sitemap.xml (oder sitemap-index.xml mit nummerierten Teildateien), rss.xml, .well-known/security.txt und humans.txt. robots.txt und sitemap.xml sind standardmäßig aktiv, die übrigen Dateien entstehen, sobald ihre Option gesetzt ist.
Ersetzt astro-site-files die älteren CASOON-Pakete?
Ja. Es ist der Nachfolger von @casoon/astro-crawler-policy (robots.txt und llms.txt) und @casoon/astro-sitemap (sitemap.xml und rss.xml). Beide werden nicht mehr aktiv gepflegt. Neue Funktionen und Fehlerbehebungen gibt es nur noch in astro-site-files.
Wie wähle ich eine Crawler-Strategie?
Über einen Preset-Namen, zum Beispiel robots: { preset: "seoOnly" }. Zur Auswahl stehen seoOnly, citationFriendly, openToAi, blockTraining und lockdown. Mit groups lässt sich eine ganze Bot-Gruppe anpassen, mit bots ein einzelner Bot; eigene Bots kommen über extraBots dazu.
Hält robots.txt KI-Crawler zuverlässig ab?
Nein. robots.txt ist eine Absichtserklärung. Crawler, die sich daran halten, respektieren sie; viele Scraper geben sich nicht als Bot zu erkennen. Wirksame Sperren brauchen Rate Limiting, Bot-Erkennung oder WAF-Regeln auf Server- oder CDN-Ebene.
Welche Voraussetzungen gelten?
Node.js ab 22.12.0 und Astro ab 6.0.0, einschließlich Astro 7. Die Renderer-Funktionen wie renderRobotsTxt oder renderSitemapXml sind zusätzlich exportiert und lassen sich auch ohne Astro-Integration nutzen.
Wann werden die Dateien geschrieben?
Beim Build im Hook astro:build:done. Alle Dateien landen direkt im Build-Verzeichnis. Ein separater Schritt oder ein laufender Server ist nicht nötig.
Ein Paket für alle Site-Dateien.
Einmal konfigurieren, bei jedem astro build neu erzeugen.