Zum Inhalt springen
astro-site-files
MITDokumentation
Astro-Integration · Build-Zeit · MIT

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/.

Dateitypen
6
Bot-Presets
5
Bots im Registry
25
aktuelle Version
0.5.0
Erzeugt
  • robots.txt
  • llms.txt
  • sitemap.xml
  • sitemap-index.xml
  • rss.xml
  • .well-known/security.txt
  • humans.txt
  • RFC 9116
  • RFC 9309
  • llmstxt.org
01 — Überblick

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.

casoon.github.io/astro-site-files →
  1. 01Typisiert — TypeScript-Interfaces für jede Option, Fehler fallen im Editor auf
  2. 02Build-Zeit — kein Runtime-Code, kein externer Dienst
  3. 03Presets — Crawler-Strategie per Name statt Bot-Liste von Hand
  4. 04Audit-Hinweise — Warnungen bei Fehlkonfiguration, bevor die Dateien live gehen
02 — Dateien

Sechs Dateien, jede einzeln schaltbar.

robots.txt

Crawler-Regeln

Presets, Gruppen- und Bot-Overrides, eigene Agent-Blöcke und eine Sitemap:-Zeile, die auf die tatsächlich geschriebene Datei zeigt.

Standard: anRFC 9309
sitemap.xml

Sitemap

Aus dem Build-Output, mit dynamischen sources, Priority- und Changefreq-Regeln, hreflang und Index-Modus ab 50.000 URLs.

Standard: ani18n
llms.txt

Übersicht für KI-Systeme

Titel, Beschreibung und Link-Abschnitte nach llmstxt.org. Abschnitte lassen sich per sources aus Content Collections erzeugen.

optionalllmstxt.org
rss.xml

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.

optionalRSS 2.0
.well-known/security.txt

Security-Kontakt

Contact, Expires, Policy, Encryption und weitere Felder. Abgelaufene oder ungültige Daten melden die Audit-Hinweise als Fehler.

optionalRFC 9116
humans.txt

Team und Technik

Team, Danksagungen, Technologien und Notiz nach humanstxt.org. Das Aktualisierungsdatum ist standardmäßig das Build-Datum.

optionalhumanstxt.org
03 — Konfiguration

Eine Config, drei Ergebnisse.

astro.config.tsEingabe
// 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',
      },
    }),
  ],
})
dist/robots.txtAuszug
User-agent: *
Disallow: /admin/

User-agent: Googlebot
Allow: /
Disallow: /admin/
dist/llms.txtAusgabe
# 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)
04 — Bot-Presets

Fünf Presets, fünf Bot-Gruppen.

Bot-GruppeseoOnlycitationFriendlyopenToAiblockTraininglockdown
Suchmaschinenerlaubterlaubterlaubterlaubtgesperrt
Verifizierte KI-Botsgesperrterlaubterlaubterlaubtgesperrt
Unbekannte KI-Scrapergesperrtgesperrterlaubtgesperrtgesperrt
SEO-Scannerinheritinheritinheritinheritgesperrt
Web-Archivegesperrtinheriterlaubtgesperrtgesperrt
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.

05 — Details

Was im Build-Output genau passiert.

Version 0.5.0 hat mehrere Regeln geändert, die ohne neue Konfiguration greifen.

  1. 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 nacktes Disallow: /.

  2. 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 mit excludeNoindex: false.

  3. 03

    hreflang aus Astros i18n

    sitemap.i18n übernimmt standardmäßig die i18n-Konfiguration von Astro und schreibt Alternates samt x-default. Locale-Präfixe senken die Priority nicht mehr.

  4. 04

    Werte aus JSON-LD

    data-sitemap-priority und data-sitemap-changefreq an JSON-LD-Script-Tags, etwa von @casoon/astro-structured-data, werden pro Seite übernommen.

Release-Verlauf

0.2.0

Gemeinsame Audits

Einheitliche Audit-Typen, llms.sources, Deduplizierung der Sitemap.

0.3.0

RSS

RSS-2.0-Feed und createRssRoute aus @casoon/astro-sitemap übernommen.

0.4.1

Presets und Registry

Bot-Registry und die fünf Presets aus @casoon/astro-crawler-policy portiert.

0.5.0 · 9. Sep. 2026

Verhaltensänderungen

noindex-Filter, hreflang aus Astro-i18n, rss als eigene Option, neue security.txt-Prüfungen.

06 — Grenzen

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.

07 — FAQ

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.