---
title: "Agentenlesbare Websites: llms.txt und Markdown-Spiegel"
canonical: https://wavect.io/de/blog/agent-readable-website-llms-txt-markdown-mirrors/
language: de
description: "Was eine Website für KI-Agenten lesbar macht: Robots-Zugriff, ausgeliefertes HTML, Markdown-Spiegel, llms.txt und JSON-LD, plus die Konvertierungsfehler, die ein Build-Gate fängt."
image: "https://wavect.io/img/blog/headers/header_agent-readable-website-llms-txt-markdown-mirrors.png"
---

[**Zurück**](/de/blog/overview/)

[![Kevin Riedl](/img/team/kevin.webp)](/de/team/kevin-riedl/)

[Kevin Riedl](/de/team/kevin-riedl/) https://linkedin.com/in/wsdt

9 min Lesezeit · 18. Aug 2026 Zuletzt geprüft 18. August 2026

[**Weiter**](/de/blog/can-an-ai-agent-use-your-product/)

# Agentenlesbare Websites: llms.txt, Markdown-Spiegel und was wirklich kaputtgeht

TL;DR

Eine agentenlesbare Website braucht vier unabhängige Oberflächen, die zusammenspielen: Robots-Regeln, die Retrieval-Fetcher hereinlassen, Text, der schon im ausgelieferten HTML steht, bevor JavaScript läuft, eine saubere Markdown- oder llms.txt-Kopie, die per rel=alternate angekündigt wird, und valides JSON-LD, das den Herausgeber benennt. Drei von vier zu bestehen lässt dich weiterhin unsichtbar. llms.txt ist eine Konvention und kein Standard, und ihr häufigster Defekt sind relative URLs, weil die Datei losgelöst von ihrer Herkunftsseite gelesen wird. Die Konvertierungsfehler, die ein Gate braucht, sind unaufgelöste Template-Werte, unbalancierte Code-Fences, nicht dekodierte HTML-Entities, zusammengeklebte Links, nicht passende Tabellenspalten, doppelte H1 und leere Bodies. Der teuerste Einzelfehler ist die Verwechslung von Trainings-Crawlern mit Retrieval-Fetchern: GPTBot zu blocken ist eine Lizenzentscheidung, während eine Wildcard-Disallow darunter dich komplett aus Antworten entfernt. Keiner dieser Fehler zeigt ein sichtbares Symptom, deshalb gehören die Checks in den Build und nicht in eine Checkliste.

**Eine agentenlesbare Website liefert zu jeder Seite eine saubere Maschinenkopie aus, kündigt sie im Seitenkopf an und blockt nichts, was sie abrufen muss.** Der schwierige Teil ist nicht die Entscheidung dafür. Es ist, das nach dem vierten Deployment noch wahr zu halten, denn jeder Fehlerfall hier ist im Browser unsichtbar und in deinen Logs stumm.

Wir betreiben diesen Stack auf der Website, die du gerade liest: einen Markdown-Spiegel jeder Seite, eine llms.txt pro Sprache, veröffentlichte Agent Skills und einen Verifier, der den Production-Build scheitern lässt, sobald davon etwas kaputt ist. Dieser Beitrag ist die Liste der Dinge, die dieser Verifier gefangen hat, und die ist nützlicher als die Liste, die man beim Lesen der Spezifikation bekommt.

## Die vier Oberflächen, die ein Agent tatsächlich nutzt

Agentenlesbarkeit wird als ein Thema diskutiert, es sind aber vier voneinander unabhängige Oberflächen, und eine Website kann drei davon bestehen und trotzdem unsichtbar bleiben.

| Oberfläche | Beantwortete Frage | So sieht der Fehler aus |
| --- | --- | --- |
| robots.txt | Darf ich das überhaupt abrufen? | Stilles Fehlen in Antworten |
| Ausgeliefertes HTML | Steht der Text hier, bevor JavaScript läuft? | Eine leere Hülle mit Navigation |
| Markdown-Spiegel | Gibt es eine günstige, eindeutige Kopie? | Teures, verrauschtes Parsen von gerendertem Beiwerk |
| JSON-LD | Wer hat das veröffentlicht und was ist es? | Aus Prosa geratene Fakten, oder nichts |

Die Reihenfolge zählt. Strukturierte Daten auf einer Seite zu reparieren, von der ein Retrieval-Fetcher ausgeschlossen ist, ist verlorene Arbeit, und genau so wird dieses Projekt am häufigsten von hinten begonnen.

## llms.txt, ehrlich betrachtet

llms.txt ist eine Konvention, kein Standard. Keine Engine ist verpflichtet, sie zu lesen, und wer dir garantierte Auswertung verkauft, verkauft zu viel. Sie ist auch günstig zu erzeugen und gibt einem Agenten eine saubere Karte statt deiner gerenderten Navigation, weshalb wir eine veröffentlichen und sie meistens empfehlen.

Wenn du sie veröffentlichst, entscheiden drei Dinge, ob sie nützlich ist:

- **Absolute URLs.** Das ist der Fehler, den wir am häufigsten sehen, und wir haben ihn selbst gemacht. Eine llms.txt wird abgerufen und weitergegeben, losgelöst von der Seite, aus der sie kommt, es bleibt also keine Basis-URL, gegen die relative Links auflösen könnten. Eine Datei voller `/services/…` -Pfade ist eine Datei voller Sackgassen.
- **Das Blockquote unter der H1.** Dieser eine Satz ist das, was ein Agent am ehesten wörtlich übernimmt, wenn er dich vorstellt. Lass ihn weg, und der Agent schreibt diesen Satz selbst, aus dem, was er sich zusammengereimt hat.
- **Notizen an jedem Link.** Die `: Notizen` -Hälfte jedes Bullets ist, wie ein Agent mit knappem Budget entscheidet, welchen Link er öffnet. Eine nackte Titelliste lässt ihn raten.

## Markdown-Spiegel und wie man sie ankündigt

Ein Spiegel ist derselbe Inhalt wie die Seite, ohne Beiwerk, als Markdown unter einem vorhersagbaren Pfad ausgeliefert und aus dem Seitenkopf verlinkt:

```
<link rel="alternate" type="text/markdown" href="/services/ai-visibility.md">
```

Spiegel zu erzeugen ist einfach. Sie treu zu halten ist der Teil, der eine Maschine braucht, denn ein Spiegel kann auf Weisen subtil falsch sein, die monatelang niemandem auffallen. Der Generator läuft nach dem Site-Build, geht das gerenderte HTML durch, und der Verifier vergleicht danach beides.

## Die Fehlerfälle, die man kennen sollte

Das sind echte Funde aus unserem eigenen Build, keine Hypothesen. Jeder davon ist mindestens einmal live gegangen, bevor es das Gate gab.

| Fehler | Warum er passiert | Was ein Agent sieht |
| --- | --- | --- |
| Unaufgelöster Template-Wert | Ein Generator gibt seinen No-Value-Platzhalter aus, oder ein Paar Template-Delimiter übersteht ungerendert, und niemand liest die Ausgabe | Eine Seite, die dir deine Templating-Sprache zurückzitiert |
| Unbalancierte Code-Fence | Eine öffnende Fence ohne schließende | Jede Überschrift danach ist keine Überschrift mehr, das Dokument verliert seine Struktur |
| Unaufgelöste HTML-Entity | Entities werden bei der Konvertierung nicht dekodiert | Eine nicht dekodierte Ampersand- oder Apostroph-Entity, gelesen als ihre wörtlichen Zeichen statt als das Satzzeichen |
| Zusammengeklebte Links | Whitespace zwischen zwei Anchors bei der Konvertierung verloren | Zwei Linktexte zu einer Phrase verschmolzen |
| Attribution am Link klebend | Ein fehlendes Leerzeichen vor einem Autorenlink | Ein Autorenstring, in dem das Wort vor dem Link mit dem Namen verschmolzen ist |
| Nicht passende Tabellenspalten | Kopfzeile und Trennzeile sind sich über die Spaltenzahl nicht einig | Die Tabelle wird nicht mehr als Tabelle geparst, jede Zahl verliert ihre Spalte |
| Mehr als eine H1 | Chrome-Überschriften lecken in den Body | Unklarheit darüber, worum es auf der Seite überhaupt geht |
| Leerer Body | Inhalt clientseitig eingefügt, der Spiegel hat nichts zu spiegeln | Front Matter und Stille |

Unser Favorit war subtiler als alle davon. Ein dekoratives Glyph auf einer Seite brachte ein wörtliches Anführungszeichen in einen SVG-Textknoten, was den HTML-Minifier in Foreign Content stoppte. Der Rest dieser Seite ging unminifiziert live, und ihr Markdown-Spiegel brach still nach zwei Dritteln ab und nahm die komplette FAQ mit. Im Browser sah nichts falsch aus. Das Gate ließ den Build scheitern, benannte die Route, und der Fix war ein einzelnes Zeichen.

## Die robots.txt-Falle: Retrieval ist nicht Training

Das ist das teuerste Missverständnis im ganzen Thema, und es ist eine Zeile Konfiguration.

Manche Crawler existieren, um Trainingsdaten zu sammeln. Andere rufen eine Seite ab, um eine Frage zu beantworten und sie zu zitieren, jetzt gerade. Die erste Gruppe zu blocken ist eine Lizenzentscheidung, die du durchaus treffen willst. Die zweite Gruppe zu blocken entfernt dich komplett aus Antworten, und das passiert fast immer unbeabsichtigt:

```
User-agent: GPTBot
Disallow: /

User-agent: *
Disallow: /
```

Der erste Block ist ein bewusstes Trainings-Opt-out. Der zweite nimmt jeden Answer-Engine-Fetcher mit, weil ein Crawler ohne eigene Gruppe die Wildcard erbt. Das Team, das das geschrieben hat, glaubte, aus dem Training ausgestiegen zu sein. Es war auch aus dem Zitiertwerden ausgestiegen.

Wenn du die Position „zitiere mich, aber trainiere nicht auf mir“ willst, ist die schlüssig und konfigurierbar: benenne die Retrieval-Fetcher explizit und lass sie durch, und schließe die Trainings-Crawler namentlich aus.

## Warum ein Gate und keine Checkliste

Jeder Punkt oben ist leicht einmal zu beheben und unmöglich durch guten Willen behoben zu halten. Der Inhalt ändert sich wöchentlich, die Templates monatlich, und keiner dieser Fehler erzeugt ein sichtbares Symptom. Ein Quartals-Audit findet sie ein Quartal zu spät.

Die Checks gehören also in den Build, neben die Tests. Unsere laufen nach dem Generieren der Website und lassen das Deployment scheitern, ein kaputter Spiegel ist damit eine rote Pipeline und kein langsames Leck. Das ist der ganze Trick, und deshalb geben wir Leuten den Regelkatalog statt eines Reports: der [Agent Readability Checker](/de/tools/agent-readability-checker/) führt dieselben Spiegel-Regeln in deinem Browser aus, und es ist derselbe Codepfad, der entscheidet, ob diese Website deployt.

Für die Nachbarprobleme: unser [Open-Knowledge-Format-Guide](/de/blog/open-knowledge-format-okf/) behandelt das Verpacken internen Wissens als portables Markdown, und der [Guide zum KI-fähigen Firmenwiki](/de/blog/ai-ready-company-wiki/) behandelt das Ausliefern dieses Wissens an deine eigenen Agenten. Dieser Beitrag dreht sich strikt um die öffentliche Oberfläche: was der Agent von jemand anderem lesen kann.

## Häufige Fragen

### Was macht eine Website agentenlesbar?

Vier Dinge zusammen: Robots-Regeln, die Retrieval-Fetcher hereinlassen, Text, der im ausgelieferten HTML steht, bevor JavaScript läuft, eine saubere Markdown- oder llms.txt-Kopie, die im Seitenkopf angekündigt wird, und valides JSON-LD, das den Herausgeber benennt. Drei von vier zu bestehen genügt meist, um unsichtbar zu bleiben.

### Ist llms.txt ein Standard?

Nein. Es ist eine Konvention, und keine Engine ist verpflichtet, sie zu lesen. Sie ist günstig zu veröffentlichen und gibt einem Agenten eine saubere Karte statt gerenderter Navigation, deshalb betreiben wir eine. Behandle Behauptungen über garantierte Auswertung aber als Grund, am Rest des Pitches zu zweifeln.

### Funktionieren relative URLs in llms.txt?

Nicht zuverlässig. Die Datei wird abgerufen und weitergegeben, losgelöst von der Seite, aus der sie kommt, es bleibt also keine Basis-URL zum Auflösen. Nutze absolute URLs.

### Sollen wir GPTBot blocken?

Das ist eine Lizenzentscheidung, keine Sichtbarkeitsfrage. GPTBot oder CCBot zu blocken ist ein Opt-out aus Trainingsdaten und entfernt dich nicht aus Antworten von ChatGPT oder Perplexity, weil die von separaten Retrieval-Fetchern bedient werden. Erst die Retrieval-Fetcher zu blocken entfernt dich aus Antworten.

### Erzeugen Markdown-Spiegel Duplicate Content für Suchmaschinen?

Nimm die kanonische URL in den Spiegel mit und halte die Spiegel aus deiner XML-Sitemap heraus, damit Discovery weiter auf die HTML-Seite zeigt. Der Spiegel ist eine alternative Repräsentation eines kanonischen Dokuments, angekündigt per rel=alternate.

### Wie verhindern wir, dass das nach dem Launch verfällt?

Steck die Checks in den Build statt in ein Dokument. Inhalt und Templates ändern sich dauernd, und keiner dieser Fehler hat ein sichtbares Symptom, alles, was nur durch guten Willen gilt, fällt binnen ein bis zwei Quartalen zurück.

## Fazit

Agentenlesbarkeit ist kein Content-Projekt. Es sind vier mechanische Oberflächen, eine kurze Liste von Konvertierungsfehlern und eine Konfigurationszeile, die entscheidet, ob der Rest überhaupt zählt.

Fang mit robots.txt an, weil das der günstigste Check und der teuerste Fehler ist. Liefere dann eine saubere Kopie aus, kündige sie an, validiere deine strukturierten Daten, und stell alles hinter ein Gate, damit das nächste Deployment es wahr halten muss.

## Das könnte dich auch interessieren..

[**Open Knowledge Format: Der Enterprise-Guide** Wie man organisationales Wissen als portables, menschenlesbares Markdown mit Provenienz- und Aktualitätssignalen verpackt.](/de/blog/open-knowledge-format-okf/) [**AI Enablement vs generische KI-Beratung** Vergleiche eine messbare Umsetzung auf deiner eigenen Infrastruktur mit einem Mandat, das nur Strategie liefert.](/de/compare/ai-enablement-vs-generic-ai-consultancy/)

Agent Engineering

## In diesem Cluster weiterlesen

Coding Agents, MCP, Kontextsysteme, Evaluation und Kontrollen für verlässliche Automatisierung.

[Mit dem Grundlagenartikel starten**Graph Engineering für KI-Agenten: Wann lohnt sich ein Knowledge Graph?**](/de/blog/graph-engineering-ai-agents/)

- [Lokalisierte URLs zerlegen hreflang: ein englischer Slug genügt](/de/blog/english-slugs-vs-localized-urls-hreflang/)
- [Kann ein KI-Agent dein Produkt benutzen, oder nur darüber lesen?](/de/blog/can-an-ai-agent-use-your-product/)
- [Graft Review 2026: Gehört die Repo-Map ins Git?](/de/blog/graft-review-agent-repo-map/)
- [Wie du Coding-Agenten mit Tool-Ausgabe-Kompression skalierbar machst](/de/blog/codag-cost-control/)
- [Intelligenterer Token-Einsatz mit deinem AI-Coding-Agenten](/de/blog/smarter-token-usage-with-your-ai-coding-agent/)

Postfach, ohne Lärm

## Folge der Arbeit, die für dich zählt

Du bekommst eine kurze E-Mail, wenn wir etwas Neues veröffentlichen. Folge dem ganzen Blog oder nur den Themen, die dich interessieren.

[**Zurück**](/de/blog/overview/)

[![Kevin Riedl](/img/team/kevin.webp)](/de/team/kevin-riedl/)

[Kevin Riedl](/de/team/kevin-riedl/) https://linkedin.com/in/wsdt

9 min Lesezeit · 18. Aug 2026 Zuletzt geprüft 18. August 2026

[**Weiter**](/de/blog/can-an-ai-agent-use-your-product/)

Neue Beiträge per E-Mail ×

×

Neue Beiträge per E-Mail

Eine kurze E-Mail, wenn wir etwas veröffentlichen. Kostenlos, ohne Tracking.

## Structured Data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ],
      "employee": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "founder": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "legalRepresentative": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "name": "Wavect GmbH",
      "subjectOf": {
        "@id": "https://wavect.io/verified-claims.json#dataset",
        "@type": "Dataset",
        "creator": {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        "description": "A machine-readable registry of quantitative and qualitative claims published by Wavect, with review dates, localized page appearances and public third-party citations where available.",
        "inLanguage": "en",
        "isAccessibleForFree": true,
        "license": "https://creativecommons.org/licenses/by/4.0/",
        "name": "Wavect verified publication claims",
        "url": "https://wavect.io/verified-claims.json"
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/team/kevin-riedl/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Kevin Riedl",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796365",
        "https://www.linkedin.com/in/wsdt",
        "https://github.com/wsdt"
      ],
      "url": "https://wavect.io/team/kevin-riedl/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/team/christof-jori/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Christof Jori",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796367",
        "https://www.linkedin.com/in/jocr77/",
        "https://github.com/jo-chris"
      ],
      "url": "https://wavect.io/team/christof-jori/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/#website",
      "@type": "WebSite",
      "inLanguage": [
        "en",
        "de",
        "es",
        "zh"
      ],
      "name": "Wavect",
      "potentialAction": {
        "@type": "SearchAction",
        "query-input": "required name=search_term_string",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://wavect.io/search/?q={search_term_string}"
        }
      },
      "publisher": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/de/blog/agent-readable-website-llms-txt-markdown-mirrors/#webpage",
      "@type": "WebPage",
      "dateModified": "2026-08-18",
      "inLanguage": "de",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "lastReviewed": "2026-08-18",
      "url": "https://wavect.io/de/blog/agent-readable-website-llms-txt-markdown-mirrors/"
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "abstract": "Eine agentenlesbare Website braucht vier unabhängige Oberflächen, die zusammenspielen: Robots-Regeln, die Retrieval-Fetcher hereinlassen, Text, der schon im ausgelieferten HTML steht, bevor JavaScript läuft, eine saubere Markdown- oder llms.txt-Kopie, die per rel=alternate angekündigt wird, und valides JSON-LD, das den Herausgeber benennt. Drei von vier zu bestehen lässt dich weiterhin unsichtbar. llms.txt ist eine Konvention und kein Standard, und ihr häufigster Defekt sind relative URLs, weil die Datei losgelöst von ihrer Herkunftsseite gelesen wird. Die Konvertierungsfehler, die ein Gate braucht, sind unaufgelöste Template-Werte, unbalancierte Code-Fences, nicht dekodierte HTML-Entities, zusammengeklebte Links, nicht passende Tabellenspalten, doppelte H1 und leere Bodies. Der teuerste Einzelfehler ist die Verwechslung von Trainings-Crawlern mit Retrieval-Fetchern: GPTBot zu blocken ist eine Lizenzentscheidung, während eine Wildcard-Disallow darunter dich komplett aus Antworten entfernt. Keiner dieser Fehler zeigt ein sichtbares Symptom, deshalb gehören die Checks in den Build und nicht in eine Checkliste.",
  "articleBody": " Blog-Übersicht/AI und Agents/Agent Engineering Agentenlesbare Websites: llms.txt, Markdown-Spiegel und was wirklich kaputtgeht TL;DR Eine agentenlesbare Website braucht vier unabhängige Oberflächen, die zusammenspielen: Robots-Regeln, die Retrieval-Fetcher hereinlassen, Text, der schon im ausgelieferten HTML steht, bevor JavaScript läuft, eine saubere Markdown- oder llms.txt-Kopie, die per rel=alternate angekündigt wird, und valides JSON-LD, das den Herausgeber benennt. Drei von vier zu bestehen lässt dich weiterhin unsichtbar. llms.txt ist eine Konvention und kein Standard, und ihr häufigster Defekt sind relative URLs, weil die Datei losgelöst von ihrer Herkunftsseite gelesen wird. Die Konvertierungsfehler, die ein Gate braucht, sind unaufgelöste Template-Werte, unbalancierte Code-Fences, nicht dekodierte HTML-Entities, zusammengeklebte Links, nicht passende Tabellenspalten, doppelte H1 und leere Bodies. Der teuerste Einzelfehler ist die Verwechslung von Trainings-Crawlern mit Retrieval-Fetchern: GPTBot zu blocken ist eine Lizenzentscheidung, während eine Wildcard-Disallow darunter dich komplett aus Antworten entfernt. Keiner dieser Fehler zeigt ein sichtbares Symptom, deshalb gehören die Checks in den Build und nicht in eine Checkliste. Eine agentenlesbare Website liefert zu jeder Seite eine saubere Maschinenkopie aus, kündigt sie im Seitenkopf an und blockt nichts, was sie abrufen muss. Der schwierige Teil ist nicht die Entscheidung dafür. Es ist, das nach dem vierten Deployment noch wahr zu halten, denn jeder Fehlerfall hier ist im Browser unsichtbar und in deinen Logs stumm. Wir betreiben diesen Stack auf der Website, die du gerade liest: einen Markdown-Spiegel jeder Seite, eine llms.txt pro Sprache, veröffentlichte Agent Skills und einen Verifier, der den Production-Build scheitern lässt, sobald davon etwas kaputt ist. Dieser Beitrag ist die Liste der Dinge, die dieser Verifier gefangen hat, und die ist nützlicher als die Liste, die man beim Lesen der Spezifikation bekommt. Die vier Oberflächen, die ein Agent tatsächlich nutzt Agentenlesbarkeit wird als ein Thema diskutiert, es sind aber vier voneinander unabhängige Oberflächen, und eine Website kann drei davon bestehen und trotzdem unsichtbar bleiben. OberflächeBeantwortete FrageSo sieht der Fehler aus robots.txtDarf ich das überhaupt abrufen?Stilles Fehlen in Antworten Ausgeliefertes HTMLSteht der Text hier, bevor JavaScript läuft?Eine leere Hülle mit Navigation Markdown-SpiegelGibt es eine günstige, eindeutige Kopie?Teures, verrauschtes Parsen von gerendertem Beiwerk JSON-LDWer hat das veröffentlicht und was ist es?Aus Prosa geratene Fakten, oder nichts Die Reihenfolge zählt. Strukturierte Daten auf einer Seite zu reparieren, von der ein Retrieval-Fetcher ausgeschlossen ist, ist verlorene Arbeit, und genau so wird dieses Projekt am häufigsten von hinten begonnen. llms.txt, ehrlich betrachtet llms.txt ist eine Konvention, kein Standard. Keine Engine ist verpflichtet, sie zu lesen, und wer dir garantierte Auswertung verkauft, verkauft zu viel. Sie ist auch günstig zu erzeugen und gibt einem Agenten eine saubere Karte statt deiner gerenderten Navigation, weshalb wir eine veröffentlichen und sie meistens empfehlen. Wenn du sie veröffentlichst, entscheiden drei Dinge, ob sie nützlich ist: Absolute URLs. Das ist der Fehler, den wir am häufigsten sehen, und wir haben ihn selbst gemacht. Eine llms.txt wird abgerufen und weitergegeben, losgelöst von der Seite, aus der sie kommt, es bleibt also keine Basis-URL, gegen die relative Links auflösen könnten. Eine Datei voller /services/…-Pfade ist eine Datei voller Sackgassen. Das Blockquote unter der H1. Dieser eine Satz ist das, was ein Agent am ehesten wörtlich übernimmt, wenn er dich vorstellt. Lass ihn weg, und der Agent schreibt diesen Satz selbst, aus dem, was er sich zusammengereimt hat. Notizen an jedem Link. Die : Notizen-Hälfte jedes Bullets ist, wie ein Agent mit knappem Budget entscheidet, welchen Link er öffnet. Eine nackte Titelliste lässt ihn raten. Markdown-Spiegel und wie man sie ankündigt Ein Spiegel ist derselbe Inhalt wie die Seite, ohne Beiwerk, als Markdown unter einem vorhersagbaren Pfad ausgeliefert und aus dem Seitenkopf verlinkt: <link rel=\"alternate\" type=\"text/markdown\" href=\"/services/ai-visibility.md\"> Spiegel zu erzeugen ist einfach. Sie treu zu halten ist der Teil, der eine Maschine braucht, denn ein Spiegel kann auf Weisen subtil falsch sein, die monatelang niemandem auffallen. Der Generator läuft nach dem Site-Build, geht das gerenderte HTML durch, und der Verifier vergleicht danach beides. Die Fehlerfälle, die man kennen sollte Das sind echte Funde aus unserem eigenen Build, keine Hypothesen. Jeder davon ist mindestens einmal live gegangen, bevor es das Gate gab. FehlerWarum er passiertWas ein Agent sieht Unaufgelöster Template-WertEin Generator gibt seinen No-Value-Platzhalter aus, oder ein Paar Template-Delimiter übersteht ungerendert, und niemand liest die AusgabeEine",
  "articleSection": "Engineering",
  "author": {
    "@id": "https://wavect.io/team/kevin-riedl/#person",
    "@type": "Person",
    "name": "Kevin Riedl",
    "sameAs": [
      "https://www.wikidata.org/wiki/Q139796365",
      "https://www.linkedin.com/in/wsdt",
      "https://github.com/wsdt"
    ],
    "url": "https://wavect.io/team/kevin-riedl/"
  },
  "dateModified": "2026-08-18",
  "datePublished": "2026-08-18",
  "description": "Eine agentenlesbare Website braucht vier unabhängige Oberflächen, die zusammenspielen: Robots-Regeln, die Retrieval-Fetcher hereinlassen, Text, der schon im ausgelieferten HTML steht, bevor JavaScript läuft, eine saubere Markdown- oder llms.txt-Kopie, die per rel=alternate angekündigt wird, und valides JSON-LD, das den Herausgeber benennt. Drei von vier zu bestehen lässt dich weiterhin unsichtbar. llms.txt ist eine Konvention und kein Standard, und ihr häufigster Defekt sind relative URLs, weil die Datei losgelöst von ihrer Herkunftsseite gelesen wird. Die Konvertierungsfehler, die ein Gate braucht, sind unaufgelöste Template-Werte, unbalancierte Code-Fences, nicht dekodierte HTML-Entities, zusammengeklebte Links, nicht passende Tabellenspalten, doppelte H1 und leere Bodies. Der teuerste Einzelfehler ist die Verwechslung von Trainings-Crawlern mit Retrieval-Fetchern: GPTBot zu blocken ist eine Lizenzentscheidung, während eine Wildcard-Disallow darunter dich komplett aus Antworten entfernt. Keiner dieser Fehler zeigt ein sichtbares Symptom, deshalb gehören die Checks in den Build und nicht in eine Checkliste.",
  "headline": "Agentenlesbare Websites: llms.txt, Markdown-Spiegel und was kaputtgeht",
  "image": "https://wavect.io/img/blog/headers/header_agent-readable-website-llms-txt-markdown-mirrors.svg",
  "inLanguage": "de",
  "keywords": "KI-Sichtbarkeit, Maschinenlesbares Web",
  "mainEntityOfPage": {
    "@id": "https://wavect.io/de/blog/agent-readable-website-llms-txt-markdown-mirrors/",
    "@type": "WebPage"
  },
  "publisher": {
    "@id": "https://wavect.io/#organization",
    "@type": [
      "Organization",
      "ProfessionalService",
      "LocalBusiness"
    ]
  },
  "url": "https://wavect.io/de/blog/agent-readable-website-llms-txt-markdown-mirrors/",
  "wordCount": 1775
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "item": "https://wavect.io/de/",
      "name": "Startseite",
      "position": 1
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/de/blog/overview/",
      "name": "Blog-Übersicht",
      "position": 2
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/de/blog/topics/ai-agents/",
      "name": "AI und Agents",
      "position": 3
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/de/blog/clusters/agent-engineering/",
      "name": "Agent Engineering",
      "position": 4
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/de/blog/agent-readable-website-llms-txt-markdown-mirrors/",
      "name": "Agentenlesbare Websites: llms.txt und Markdown-Spiegel | ",
      "position": 5
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Vier Dinge zusammen: Robots-Regeln, die Retrieval-Fetcher hereinlassen, Text, der im ausgelieferten HTML steht, bevor JavaScript läuft, eine saubere Markdown- oder llms.txt-Kopie, die im Seitenkopf angekündigt wird, und valides JSON-LD, das den Herausgeber benennt. Drei von vier zu bestehen genügt meist, um unsichtbar zu bleiben."
      },
      "name": "Was macht eine Website agentenlesbar?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Nein. Es ist eine Konvention, und keine Engine ist verpflichtet, sie zu lesen. Sie ist günstig zu veröffentlichen und gibt einem Agenten eine saubere Karte statt gerenderter Navigation, deshalb betreiben wir eine. Behandle Behauptungen über garantierte Auswertung aber als Grund, am Rest des Pitches zu zweifeln."
      },
      "name": "Ist llms.txt ein Standard?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Nicht zuverlässig. Die Datei wird abgerufen und weitergegeben, losgelöst von der Seite, aus der sie kommt, es bleibt also keine Basis-URL zum Auflösen. Nutze absolute URLs."
      },
      "name": "Funktionieren relative URLs in llms.txt?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Das ist eine Lizenzentscheidung, keine Sichtbarkeitsfrage. GPTBot oder CCBot zu blocken ist ein Opt-out aus Trainingsdaten und entfernt dich nicht aus Antworten von ChatGPT oder Perplexity, weil die von separaten Retrieval-Fetchern bedient werden. Erst die Retrieval-Fetcher zu blocken entfernt dich aus Antworten."
      },
      "name": "Sollen wir GPTBot blocken?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Nimm die kanonische URL in den Spiegel mit und halte die Spiegel aus deiner XML-Sitemap heraus, damit Discovery weiter auf die HTML-Seite zeigt. Der Spiegel ist eine alternative Repräsentation eines kanonischen Dokuments, angekündigt per rel=alternate."
      },
      "name": "Erzeugen Markdown-Spiegel Duplicate Content für Suchmaschinen?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Steck die Checks in den Build statt in ein Dokument. Inhalt und Templates ändern sich dauernd, und keiner dieser Fehler hat ein sichtbares Symptom, alles, was nur durch guten Willen gilt, fällt binnen ein bis zwei Quartalen zurück."
      },
      "name": "Wie verhindern wir, dass das nach dem Launch verfällt?"
    }
  ]
}
```
