Markdown für KI-Agenten: Accept text/markdown, Content-Signal und Link-Header erklärt
Kurzantwort: Markdown für KI-Agenten heißt: Dein Server beantwortet dieselbe Adresse mit reinem Markdown statt HTML, wenn der Aufrufer es im Anfrage-Header mit
Accept: text/markdownverlangt. Browser bekommen weiter HTML. Dafür genügen ein paar Zeilen Servercode oder eine CDN-Funktion, die du einschaltest, und Agenten erhalten sauberen Text ohne Menüs und Skripte. Ein Nutzen für Rankings oder KI-Zitate ist nicht belegt. Betrachte es als günstiges Extra auf lesbarem HTML, einer guten robots.txt und einer Sitemap, nie als Ersatz dafür.
Warum mögen KI-Agenten Markdown?
Eine Webseite ist für Browser gebaut. Um den Text, den du lesen willst, stehen Navigation, Cookie-Banner, Skripte, Style-Klassen und Fußzeilen. Das menschliche Auge überspringt das alles. Ein Programm, das die Seite an ein Sprachmodell weiterreichen muss, kann es nicht umsonst überspringen: Das Modell hat ein begrenztes Kontextfenster, und jedes zusätzliche Element verbraucht einen Teil davon.
Markdown behält, was fürs Lesen zählt: Überschriften, Absätze, Listen, Tabellen, Links. Deshalb sind Agenten und ähnliche Werkzeuge naheliegende Abnehmer, und deshalb ist auch der Vorschlag der llms.txt in Markdown geschrieben. Über diese Datei haben wir in llms.txt erstellen geschrieben.
Cloudflare macht den Größenunterschied sichtbar. In der Ankündigung von Markdown for Agents enthält die Beispielantwort einen Header x-markdown-tokens mit einer geschätzten Tokenzahl (im Beispiel 725). Ein Aufrufer kann so einschätzen, wie viel Kontext die Seite braucht.
Offen bleibt, ob die großen KI-Suchsysteme Markdown anfordern. Cloudflares Ankündigung zeigt Radar-Daten zu Markdown-Antworten an OAI-SearchBot. Das belegt, dass es solche Antworten gibt, nicht, dass der Crawler sie anfordert; OpenAI dokumentiert das nicht. Also behaupten wir es nicht. Belegt ist, dass manche Agenten es schon tun, wie die nächsten Abschnitte zeigen.
Content Negotiation: Accept, Vary und Content-Type
Content Negotiation (auf Deutsch Inhaltsaushandlung) ist ein alter Teil von HTTP. Eine Adresse kann mehrere Darstellungen haben, und der Aufrufer sagt, welche er bevorzugt. Drei Header tragen den ganzen Mechanismus:
| Header | Gesendet von | Bedeutung |
|---|---|---|
Accept | Aufrufer, in der Anfrage | Welche Inhaltstypen er will, optional mit Gewichten (q=0.8) |
Content-Type | Server, in der Antwort | Was der Server tatsächlich geschickt hat, hier text/markdown; charset=utf-8 |
Vary: Accept | Server, in der Antwort | Die Antwort hängt vom Header Accept ab, Zwischenspeicher dürfen die Fassungen also nicht vermischen |
Ein Browser nennt zuerst text/html und hängt als Ersatz den Platzhalter */* an. Ein Agent, der Markdown will, nennt es ausdrücklich, zum Beispiel Accept: text/markdown oder Accept: text/markdown, text/html;q=0.8. Cloudflare schreibt, dass gängige Coding-Agenten wie Claude Code und OpenCode solche Accept-Header schon senden.
Die Regel, die alle schützt, ist einfach: Antworte nur dann mit Markdown, wenn text/markdown ausdrücklich genannt ist und nicht schlechter bewertet wird als text/html. Der Platzhalter */* darf nie zählen. Sonst bekämen Browser, Linkprüfer und Vorschau-Bots für soziale Netzwerke, die alle „irgendetwas“ akzeptieren, plötzlich Markdown.
Markdown für KI-Agenten mit Cloudflare
Am 12. Februar 2026 hat Cloudflare Markdown for Agents vorgestellt. Ist die Funktion für deine Zone aktiviert (sie ist als Beta kostenlos in den Tarifen Pro, Business und Enterprise verfügbar), bekommt eine Anfrage mit Accept: text/markdown dein HTML im laufenden Betrieb als Markdown umgewandelt zurück. Dein Ursprungsserver bleibt unverändert.
Die Beispielantwort aus der Ankündigung zeigt, welche Header du erwarten kannst:
content-type: text/markdown; charset=utf-8
vary: accept
x-markdown-tokens: 725
content-signal: ai-train=yes, search=yes, ai-input=yes
Das ist der schnellste Weg, wenn deine Website ohnehin hinter Cloudflare in einem dieser Tarife läuft und das umgewandelte Ergebnis gut aussieht. Prüfe es mit curl (siehe den Abschnitt zum Test), bevor du dich darauf verlässt. Willst du selbst bestimmen, was die Markdown-Fassung sagt, oder läuft deine Seite woanders, baue es selbst.
Selbst bauen: ein kurzes Node-Beispiel
Die folgende Skizze enthält die Regeln von oben: Markdown nur bei ausdrücklicher Anfrage, Vary: Accept an beiden Fassungen, eine feste Adresse /index.md für Aufrufer, die nicht verhandeln, und einen Canonical-Link im Header der Markdown-Antwort. Es ist ein Minimalbeispiel, kein Produktivcode.
import http from 'node:http';
import { readFileSync } from 'node:fs';
function wantsMarkdown(accept = '') {
const weight = new Map();
for (const part of accept.toLowerCase().split(',')) {
const [range, ...params] = part.trim().split(';');
const q = params.find((p) => p.trim().startsWith('q='));
weight.set(range.trim(), q ? Number(q.trim().slice(2)) : 1);
}
const md = weight.get('text/markdown') ?? 0;
const html = weight.get('text/html') ?? weight.get('text/*') ?? weight.get('*/*') ?? 0;
return md > 0 && md >= html; // der Platzhalter allein wählt nie Markdown
}
http.createServer((req, res) => {
if (req.url === '/index.md' || (req.url === '/' && wantsMarkdown(req.headers.accept))) {
res.writeHead(200, {
'Content-Type': 'text/markdown; charset=utf-8',
'Vary': 'Accept',
'Link': '<https://example.com/>; rel="canonical"',
});
return res.end(readFileSync('index.md'));
}
if (req.url === '/') {
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8', 'Vary': 'Accept' });
return res.end(readFileSync('index.html'));
}
res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' }); // jede andere Adresse antwortet 404
res.end('Not found');
}).listen(3000);
Drei Einzelheiten verdienen einen zweiten Blick:
- Vary an beiden Fassungen. Auch die HTML-Antwort braucht
Vary: Accept. Sonst kann ein gemeinsamer Zwischenspeicher das HTML ablegen und an einen Agenten ausliefern, der Markdown wollte, oder umgekehrt. - Die feste Adresse.
/index.mdliefert immer Markdown, egal was der Aufrufer sendet. Agenten und Menschen können darauf verlinken, und sie funktioniert dort, wo sich keine Header setzen lassen. Unsere eigene Seite seogrinder.com/index.md macht es so. - Der Canonical-Header. Die Markdown-Fassung ist eine zweite Darstellung derselben Seite. Google dokumentiert, dass
rel="canonical"bei Dateien, die kein HTML sind, als HTTP-Header gesendet werden darf. Das ist ein starkes Signal, dass die Markdown-Fassung zur Seite gehört, keine Garantie (Google).
Schreibe die Markdown-Datei von Hand oder erzeuge sie aus derselben Quelle wie das HTML. In beiden Fällen soll sie dasselbe sagen wie die Seite, nur ohne den Rahmen.
Link-Header: Agenten auf die Beschreibung deiner Seite hinweisen
Der Antwort-Header Link ist in RFC 8288 festgelegt. Er nennt eine verwandte Adresse und die Art der Beziehung, zum Beispiel Link: </llms.txt>; rel="describedby". Die Beziehung describedby ist registriert, und ihre Bedeutung passt: Die verlinkte Ressource beschreibt diese hier. Ein Aufrufer, der Antwort-Header liest, erfährt so, wo die Beschreibung deiner Website liegt, noch bevor er den Rumpf der Antwort liest.
seogrinder.com sendet diesen Header auf der Startseite und zeigt damit auf die eigene llms.txt. An der Markdown-Antwort trägt derselbe Link-Header zusätzlich die Beziehung canonical von oben, durch Komma getrennt.
Ob heute irgendein Agent diesen Links folgt, ist nicht belegt. Der Aufwand ist eine Zeile in der Serverkonfiguration.
Die Content-Signal-Zeile
Im September 2025 hat Cloudflare für die robots.txt eine Zeile eingeführt, die sagt, was ein Crawler mit deinem Inhalt tun darf, wenn er ihn abgerufen hat:
Content-Signal: search=yes, ai-input=yes, ai-train=no
search steht für Indexierung und Snippets, ai-input für die direkte Nutzung des Inhalts in KI-Antworten und ai-train für Training oder Feinabstimmung eines Modells. Das Format beschreiben die Ankündigung von Cloudflare und contentsignals.org. Es ist eine Erklärung, keine Sperre: Niemand ist gezwungen, sie zu beachten. Cloudflare sagt, dass Content Signals Präferenzen ausdrücken, keine technischen Gegenmaßnahmen sind und manche Unternehmen sie einfach ignorieren könnten. Wie oben gezeigt, trägt auch Cloudflares Markdown-Beispiel einen Antwort-Header content-signal.
Die Zeile gehört in deine robots.txt, zu allen anderen Regeln für KI-Bots. Die Einzelheiten, auch den häufigen Fehler mit getrennten Gruppen je Bot, findest du in robots.txt für KI-Crawler. Die robots.txt von seogrinder.com nutzt eine gemeinsame Gruppe für alle Crawler und neun KI-Kennungen, mit Content-Signal: search=yes, ai-input=yes, ai-train=yes.
So prüfst du es mit curl
Prüfe mit demselben Werkzeug, das auch ein Agent nutzen würde. Die Option -I zeigt nur die Header:
curl -sI -H "Accept: text/markdown" https://example.com/
Achte in der Antwort auf vier Dinge: Status 200, content-type: text/markdown, ein vary, das Accept enthält, und einen link-Header mit der Canonical-Adresse. So sieht das Ergebnis für seogrinder.com aus, gekürzt auf die wichtigen Zeilen:
HTTP/2 200
content-type: text/markdown; charset=utf-8
vary: Accept
link: </llms.txt>; rel="describedby"; type="text/plain", <https://seogrinder.com/>; rel="canonical"
Mache danach die Gegenproben. Jede davon muss text/html liefern:
curl -sI -H "Accept: text/html" https://example.com/
curl -sI -H "Accept: */*" https://example.com/
curl -sI https://example.com/
Schicke zuletzt -H "Accept: text/markdown, text/html;q=0.8". Markdown sollte gewinnen, weil es höher bewertet ist.
So prüft SEOgrinder es
Öffne nach einem Scan in SEOgrinder den Reiter KI-Bereitschaft. Unter „Prüfpunkte für KI-Agenten“ stehen sieben Zeilen. Drei davon betreffen diesen Artikel, und alle drei stehen in der Gruppe „Zusatz“:
- Text statt HTML ausliefern (Markdown Negotiation): erfüllt, wenn eine Anfrage mit
Accept: text/markdownMarkdown zurückbekommt. - Agenten zu den Daten führen (Link Headers): sucht nützliche Beziehungen im Antwort-Header.
- Nutzung des Inhalts erklären (Content Signals): sucht eine vollständige
Content-Signal-Zeile, dieai-train,searchundai-inputabdeckt.
An jeder Zeile steht der Knopf Agent-Prompt kopieren, und eine erfüllte Zeile klappt außerdem auf und zeigt den gefundenen Text. Bei einem offenen Punkt beschreibt der Prompt, was anzulegen ist, zeigt mit curl den Ist-Zustand und nennt einen Befehl zur Kontrolle. Bei einem erfüllten Punkt verlangt er von deinem Coding-Assistenten, das Vorhandene zu prüfen, nur zu ändern, was nötig ist, und dich zu fragen, bevor er eine Regel entfernt, die er nicht versteht. Entscheidungen wie KI-Crawler zu erlauben oder zu sperren bleiben bei dir, und manche Prompts offener Punkte schlagen Beispielwerte vor. Entscheide also zuerst und lies den Prompt, bevor du ihn in Claude Code, Cursor, GitHub Copilot oder ChatGPT einfügst. Klicke danach auf Neu prüfen. Berichte stehen bis zu 24 Stunden im Zwischenspeicher, und Neu prüfen erzwingt einen frischen Lauf (einige Male je Stunde).
SEOgrinder sagt zur Gruppe „Zusatz“ offen: Es sind Vorschläge einzelner Anbieter, und eine Wirkung auf Google ist nicht belegt. Das Werkzeug misst auch nicht, ob ChatGPT, Gemini oder Perplexity deine Marke tatsächlich nennen. Es prüft die technische Grundlage: Können Maschinen deine Seite erreichen und lesen?
Lohnt sich der Aufwand?
Das hängt davon ab, was deine Website bietet. Dokumentation, Nachschlageseiten, lange Anleitungen und Wissensdatenbanken sind die Art Inhalt, die Agenten abrufen, um eine konkrete Frage zu beantworten, und dort ist eine saubere Markdown-Fassung nützlich. Für einen kleinen Shop oder einen lokalen Betrieb mit fünf Seiten ist die Zeit bei den Grundlagen besser angelegt: Text, der ohne JavaScript im HTML steht, eine robots.txt, die die Such-Bots hineinlässt, und eine Sitemap.
Für Googles eigene KI-Funktionen sagt Google, dass es keine zusätzlichen Anforderungen gibt, um in AI Overviews oder im AI Mode zu erscheinen, und keine besonderen Optimierungen nötig sind; die Einzelheiten stehen in Googles Dokumentation. Eine Markdown-Fassung ist dort also keine Voraussetzung. Andere Assistenten können sich anders verhalten, aber niemand kann versprechen, dass ein KI-Assistent deine Seite nennt.
Häufige Fehler
- Kein Vary-Header. Ohne
Vary: Acceptkann ein Zwischenspeicher oder CDN dem nächsten Besucher die falsche Fassung ausliefern. - Ein vorgeschalteter Zwischenspeicher, der den Header ignoriert. Teste über die öffentliche Adresse, nicht nur gegen deinen Ursprungsserver.
- Markdown für Browser. Behandelt deine Prüfung den Platzhalter
*/*als Wunsch nach Markdown, sehen Besucher rohen Text. Teste mit einem normalen Browser. - Kein Canonical-Link. Die Markdown-Fassung kann dann als eigene Seite behandelt werden. Wir haben den Canonical-Header statt
noindexgewählt, weil die ausgehandelte Fassung unter derselben Adresse liegt wie die Seite. - Eine Markdown-Fassung, die etwas anderes sagt. Halte den Inhalt gleich wie auf der HTML-Seite, nur ohne den Rahmen. Wie Suchmaschinen Unterschiede zwischen beiden behandeln, dazu haben wir keine Quelle, also halte beide deckungsgleich.
- Eine veraltete Datei. Eine von Hand geschriebene
index.md, die das Angebot vom letzten Jahr listet, führt Agenten in die Irre. Erzeuge sie aus der Quelle der Seite oder setze sie auf deine Prüfliste. - Eine leere HTML-Seite. Hat das HTML selbst keinen Text, bis JavaScript gelaufen ist, behebt Markdown für Agenten das Problem bei den übrigen Aufrufern nicht, zum Beispiel bei Social-Vorschauen. SEOgrinder meldet Seiten, die erst im Browser zusammengesetzt werden.
Häufige Fragen
Ist Markdown für KI-Agenten ein Ranking-Faktor?
Es gibt keinen Beleg dafür. Sieh es als Auslieferungsformat für Maschinen, nicht als Ranking-Hebel.
Fordern ChatGPT, Claude oder Perplexity Markdown an?
Cloudflare schreibt, dass Coding-Agenten wie Claude Code und OpenCode Accept: text/markdown schon senden. Für die Such-Crawler der großen Anbieter gibt es keine Dokumentation, dass sie es anfordern; Cloudflares Radar-Daten zeigen Markdown-Antworten an OAI-SearchBot, das ist kein Beleg für einen Anfrage-Header. Es ist also nicht belegt.
Brauche ich Cloudflare?
Nein. Cloudflare bietet die Umwandlung als Funktion an (als Beta, in den Tarifen Pro, Business und Enterprise). Die Node-Skizze oben zeigt, dass ein paar Zeilen Servercode genügen, und dieselben Regeln lassen sich in jedem Server oder Framework umsetzen.
Soll ich Content Negotiation nutzen oder eine eigene .md-Adresse?
Du kannst beides. Eine feste Adresse wie /index.md lässt sich leicht verlinken und testen. Die Aushandlung hält eine Adresse für beide Zielgruppen. seogrinder.com bietet für die Startseite beides an.
Sehen normale Besucher jemals die Markdown-Fassung?
Nicht, wenn du die Regel zum Platzhalter einhältst: Markdown geht nur raus, wenn text/markdown ausdrücklich genannt und nicht schlechter bewertet ist als text/html.
Dein nächster Schritt
Starte den kostenlosen Scan in SEOgrinder und öffne den Reiter KI-Bereitschaft. Sieh dir die drei Zusatz-Zeilen zu Markdown, Link Headers und Content Signals an und entscheide, ob deine Website zu denen gehört, die Agenten lesen. Wenn ja, kopiere den Agent-Prompt, lass deinen Assistenten die Änderung machen, prüfe das Ergebnis mit curl und scanne neu.