Blog

Was eine agentenfähige Website braucht: Notizen aus dem Bau von dardo.studio

Wir haben dardo.studio Schicht für Schicht für KI-Agenten les- und aufrufbar gemacht. Was jede Schicht leistet, wer sie laut Doku heute nutzt und welche wir wieder bauen würden.

Von Nicolás Cerón ·

Ein kleiner Roboter auf Rädern folgt nachts in einer Museumsgalerie einer karminroten Leitlinie zu einer beleuchteten Skulptur.

Die kurze Antwort

Eine agentenfähige Website leistet drei Dinge. KI-Agenten können sie erreichen. Sie können sie lesen, ohne sich durch Menüs, Banner und Skripte zu kämpfen. Und wo es sinnvoll ist, können sie einige deklarierte Tools aufrufen, statt zu raten, welchen Button sie drücken sollen.

Alle drei Punkte haben wir Anfang Oktober 2026 in dardo.studio umgesetzt. Hier steht, was wir veröffentlicht haben und wie viel davon die großen KI-Plattformen laut ihrer Dokumentation nutzen, geprüft an der Live-Seite am 8. Oktober 2026.

Das Fazit ist weniger aufregend als die meisten „AI-ready“-Checklisten. Die ältesten Schichten tragen am meisten: Crawler-Zugang und sauberes, semantisches HTML. Markdown-Kopien und llms.txt sind günstige Extras. MCP, A2A und WebMCP sind echte Protokolle mit funktionierenden Clients, doch keine der von uns zitierten Crawler-Dokumentationen von OpenAI, Anthropic, Perplexity oder Google beschreibt, dass deren Assistenten die Tools einer Website von selbst finden.

Zuerst der Zugang: robots.txt und der Edge

Unsere robots.txt wiederholt eine Gruppe für den Standard-Agenten (*) und für jeden KI-Suchcrawler und User-Fetcher, den wir nennen:

User-agent: OAI-SearchBot
Allow: /
Disallow: /api/
Content-Signal: search=yes, ai-input=yes

Dieselben Regeln gelten für ChatGPT-User, PerplexityBot, Perplexity-User, Claude-SearchBot, Claude-User und Bingbot. Nur /api/ ist gesperrt.

Suchcrawler und Trainingscrawler sind getrennt

Die großen Unternehmen dokumentieren inzwischen getrennte Tokens für Suche und Training:

  • OpenAI. OAI-SearchBot bringt Websites in die ChatGPT-Suche. Wer ihn blockiert, taucht in den Antworten der ChatGPT-Suche nicht auf, kann aber weiterhin als einfacher Navigationslink erscheinen. GPTBot sammelt Trainingsdaten. (OpenAI-Crawler)
  • Anthropic. Claude-SearchBot indexiert für die Suche, ClaudeBot sammelt Trainingsdaten, und Claude-User ruft Seiten ab, wenn jemand Claude etwas fragt. (Anthropic-Crawler)
  • Perplexity. PerplexityBot zeigt Websites in den Ergebnissen von Perplexity an und verlinkt sie; er wird nicht zum Training von Foundation-Modellen verwendet. (Perplexity-Crawler)
  • Google. Google-Extended ist ein Steuer-Token für das Training von Gemini und das Grounding in anderen Google-Produkten. Auf die Aufnahme oder das Ranking in der Google-Suche wirkt es sich nicht aus. (Google-Crawler allgemein)

Durch Nutzer ausgelöste Fetcher sind anders. OpenAI sagt, robots.txt gelte für ChatGPT-User möglicherweise nicht, weil ein Mensch diese Anfragen startet. Perplexity-User und die nutzerausgelösten Fetcher von Google ignorieren sie in der Regel. Diese Fetcher handeln in Echtzeit für eine einzelne Person; wo eine Sperre greift, hindert sie meist nur deren Assistenten daran, Ihre Seite zu lesen.

Unsere Datei nennt die Trainingscrawler nicht, sie fallen also unter * und sind erlaubt. Das ist eine unternehmerische Entscheidung, und die Anbieter dokumentieren sie als eigene Steuerung: GPTBot oder ClaudeBot zu blockieren ist nicht dasselbe, wie ihre Suchindizes zu verlassen.

Content Signals: eine Zeile, keine Zusagen

Die Zeile Content-Signal stammt aus der Content Signals Policy von Cloudflare, die drei Verwendungen benennt: search, ai-input (Inhalte beim Antworten an ein Modell weitergeben) und ai-train. Wir lassen ai-train weg, was nach der Policy diese Nutzung weder erlaubt noch einschränkt. Laut Cloudflare drücken Signale Präferenzen aus, blockieren nichts und können ignoriert werden. Keine der hier zitierten Crawler-Seiten erwähnt sie. Es kostet eine Zeile; erwarten Sie vorerst nichts.

Den Edge prüfen, nicht nur die Datei

robots.txt legt eine Richtlinie fest; Ihr CDN entscheidet, was passiert. Bei unserem Test am 2. Oktober beantwortete die Browser Integrity Check von Cloudflare den Standard-HTTP-Client von Python (Python-urllib) und libwww-perl mit einem 403, obwohl robots.txt alles erlaubte. Skripte von Coding-Agenten nutzen oft unverändert die Standardbibliothek von Python.

Wir haben eine Cloudflare-Konfigurationsregel hinzugefügt, die GET- und HEAD-Anfragen für öffentliche Inhalte ausnimmt; /api/ antwortet weiterhin mit 403. Dieselbe Prüfung ergab, dass unsere .txt-Dateien keinen Zeichensatz angaben, sodass manche Clients „Bogotá“ als „Bogotá“ lasen. Die Lösung war ein einziger Header: charset=utf-8.

Testen Sie mit echten Anfragen unter jedem User-Agent. Das zeigt, dass nichts den Namen blockiert; es beweist nicht, dass der echte Crawler vorbeigekommen ist.

Schlichtes, semantisches HTML: die Schicht, auf die jeder Agent angewiesen ist

Der AI-Optimierungsleitfaden von Google beschreibt Browser-Agenten, die Screenshots analysieren, das DOM untersuchen und den Accessibility-Tree interpretieren. Er verweist Website-Betreiber auf die agentenfreundlichen Hinweise von web.dev, bei denen es meist um Barrierefreiheit geht: <button> und <a> statt gestylter <div>s verwenden, jedes Label mit seinem Eingabefeld verbinden und verhindern, dass das Layout unter einem Screenshot verrutscht.

Auf dardo.studio hat jede Seite ein einziges <main> und beschriftete <nav>-Landmarks. Menü- und Theme-Schalter sind echte Buttons, die ihren Zustand mit aria-expanded und aria-pressed melden, und geschlossene Menüs sind inert. Jedes Feld des Kontaktformulars sitzt in seinem <label>, was ihm einen zugänglichen Namen gibt. web.dev empfiehlt das Attribut for; das Umschließen des Eingabefelds leistet dasselbe.

Das hilft heute schon Nutzern von Screenreadern, und das ist Grund genug.

Eine saubere Markdown-Kopie jeder Seite

Agenten zahlen für jedes Token, das sie lesen, und eine gerenderte Seite enthält Navigation, ein Cookie-Banner, Skripte und dekorative Grafiken. Vor dieser Arbeit lieferte die Anfrage an unsere Seiten mit Accept: text/markdown all das als HTML zurück.

Jetzt schreibt ein Build-Schritt zu jeder indexierbaren Seite eine index.md daneben. Sie beginnt mit Front Matter (Titel, Beschreibung, kanonische URL, Sprache, die Version in der anderen Sprache und das Datum der letzten Aktualisierung), gefolgt vom <main>-Inhalt der Seite ohne Skripte, Buttons, dekorative Bilder und das Inhaltsverzeichnis der Seite. FAQ-Antworten bleiben erhalten. Formulare werden zu einer Liste ihrer Felder und Auswahlmöglichkeiten, sodass ein Agent einer Person sagen kann, was unser Kontaktformular abfragt, ohne es zu verwenden.

Es gibt drei Wege, an die Kopie zu kommen:

  • Senden Sie Accept: text/markdown an die normale URL. Diese Antworten enthalten Vary: Accept, damit Caches die Versionen getrennt halten.
  • Rufen Sie die Datei direkt auf: /en/services/seo/index.md.
  • Hängen Sie .md an den Seitenpfad an (/en/services/seo.md). Für URLs, die auf einen Schrägstrich enden, verwendet der llms.txt-Vorschlag index.md, also die oben genannte Form.

Jede HTML-Seite verweist außerdem mit <link rel="alternate" type="text/markdown"> auf ihre Kopie.

Suchmaschinen zurück auf das HTML lenken

Googles Leitfaden weist darauf hin, dass Google neben HTML viele weitere Dateitypen crawlen und indexieren kann, ohne sie besonders zu behandeln. Eine Markdown-Kopie könnte mit der eigenen Seite konkurrieren, deshalb nennt jede Markdown-Antwort die HTML-Seite als kanonisch:

$ curl -sI https://dardo.studio/en/services/seo/index.md
content-type: text/markdown; charset=utf-8
link: <https://dardo.studio/en/services/seo/>; rel="canonical", ...

Wer liest diese Kopien? Cloudflare hat Markdown for Agents entwickelt, um HTML am Edge für Anfragen umzuwandeln, die Markdown bevorzugen. Das deutet darauf hin, dass Agenten danach fragen. Welche Clients den Header senden, nennt Cloudflare nicht, und auch wir haben keine geprüfte Liste. Wenn Sie die Funktion von Cloudflare nutzen, fügt sie Content-Signal: ai-train=yes, search=yes, ai-input=yes hinzu, sofern Ihr Origin-Server nicht ein eigenes setzt. Wir erzeugen unsere Kopien beim Build, damit sie exakt zur Seite passen.

llms.txt: ein nützlicher Index ohne Wirkung auf die Suche

llms.txt ist ein Vorschlag von Jeremy Howard, erstmals im September 2024 veröffentlicht und weiterhin offen für Beiträge aus der Community: eine Markdown-Datei unter /llms.txt mit dem Namen der Website, einer kurzen Zusammenfassung und Linklisten, die ein Agent brauchen könnte.

Unsere Datei unter /llms.txt und /es/llms.txt wird aus denselben Daten wie die Seiten erzeugt und kann deshalb nicht davon abweichen. Sie nennt die Fakten zum Studio (Bogotá, gegründet 2026, ein Team von drei Personen, wie Projekte bepreist werden, Kontaktwege), listet Leistungen und Arbeiten auf und erklärt, wie sich Markdown-Kopien abrufen lassen. llms-full.txt enthält den vollständigen Text der Seiten zu Studio, Leistungen, Arbeiten und Kontakt.

Eine Zeile nennt ähnlich benannte Unternehmen, die nichts mit uns zu tun haben. Als wir am 2. Oktober nachgesehen haben, standen sie bei der Suche nach "dardo studio" ganz oben. Diese Zeile ist vielleicht die nützlichste der ganzen Datei.

Der Stand der Dinge, ganz nüchtern:

  • Google sagt, dass Sie keine llms.txt brauchen, um in der Suche oder in den KI-Funktionen zu erscheinen, dass die Suche sie ignoriert und dass es weder nützt noch schadet, eine zu haben.
  • OpenAI, Anthropic und Perplexity sagen in der Dokumentation ihrer Crawler nicht, dass ihre Bots die llms.txt anderer Websites lesen. Die eigenen Dokumentationsseiten von OpenAI, Anthropic und Perplexity veröffentlichen allerdings eine, für Agenten, die ihre Dokumentation lesen.

Behalten Sie eine, wenn sie automatisch erzeugt wird und korrekt ist. Sie hilft Coding-Agenten und Tools, die danach suchen. Ein Hebel für die Sichtbarkeit ist sie nicht.

Tools, die Agenten aufrufen können: MCP, A2A und der API-Katalog

Wir haben zwei schreibgeschützte Tools veröffentlicht:

  • list_services liefert unsere veröffentlichten Leistungen, den Umfang, die Liefergegenstände und die Quell-URLs auf Englisch oder Spanisch, gefiltert nach einem optionalen Stichwort.
  • get_project_brief liefert die Fragen, die Sie vor der Kontaktaufnahme beantworten sollten, und den lokalisierten Kontaktlink für die jeweilige Leistung.

Eine Implementierung steht hinter mehreren Einstiegspunkten:

EinstiegspunktAdresse auf dardo.studioStandard und Status
MCP-Server/mcp, Karte unter /.well-known/mcp/server-card.jsonMCP Streamable HTTP; die Server-Karte ist ein Entwurf eines Vorschlags
A2A-Agent/a2a, Karte unter /.well-known/agent-card.jsonA2A 1.0, JSON-RPC
JSON-Endpunkt/agent/services.json, beschrieben in OpenAPIReines HTTP
API-Katalog/.well-known/api-catalogRFC 9727, IETF Standards Track

Jede HTML- und Markdown-Antwort sendet einen Link-Header, der auf den Katalog, den Index der Agent Skills und beide Karten verweist, sodass jede Seite zum Rest führt.

Designregeln, die wir wiederholen würden

  • Schreibgeschützt und öffentlich. Die MCP-Tools deklarieren readOnlyHint: true und lesen denselben veröffentlichten Katalog wie das HTML, ohne Datenbank dahinter. get_project_brief sendet nichts ab, bucht nichts und erstellt kein Angebot; eine Person prüft und sendet.
  • Begrenzte Eingaben. Request-Bodys sind auf 8 KiB begrenzt, die Origin-Header von Browsern werden geprüft (die MCP-Spezifikation verlangt das), und für Aufrufe gilt ein eigenes Ratenlimit.
  • Kein Zustand. Der A2A-Agent antwortet sofort, speichert keine Tasks, hat Streaming deaktiviert und ruft keine Dateien oder URLs ab, die ihm geschickt werden.
  • Klare Bedingungen. /auth.md besagt, dass keine Zugangsdaten nötig sind und dass das Lesen öffentlicher Daten nicht dazu berechtigt, eine Nachricht zu senden oder eine Zahlung zu veranlassen.

Manches haben wir auch bewusst weggelassen. Readiness-Scanner prüfen auf Commerce-Protokolle und OAuth-Discovery. Wir verkaufen nichts über einen Checkout und schützen keine Ressourcen, daher würde deren Veröffentlichung Fähigkeiten beschreiben, die es nicht gibt.

Wer diese Tools heute nutzt: MCP-Clients, die jemand mit /mcp verbunden hat, und A2A-Clients, denen unsere Karte gegeben wurde. Für ein Studio ist der Nutzen bescheiden: eine präzise Antwort auf "Was macht Dardo, und was sollte ich ihnen schicken?" Stärker ist der Fall bei einer Website mit Live-Daten, nach denen Leute fragen, etwa Lagerbestand, Verfügbarkeit oder Produktdokumentation. Agenten, die Daten schreiben, brauchen Authentifizierung und Prüfschritte; das ist Arbeit für KI-Automatisierung.

WebMCP: dieselben Tools im Browser

WebMCP erlaubt es einer Seite, Tools zu registrieren, die ein KI-Agent im Browser aufrufen kann. Es ist ein Draft Community Group Report der W3C Web Machine Learning Community Group und stellt klar, dass es kein W3C-Standard ist. web.dev zufolge befindet es sich in aktiver Entwicklung, kann sich ändern und lässt sich in Chrome über einen Origin Trial ausprobieren.

Unsere Seiten registrieren dieselben zwei Tools über document.modelContext (oder navigator.modelContext in älteren Vorabversionen). Ohne die API führt der Browser nichts Zusätzliches aus. Weil die Tools bereits existierten, waren dafür etwa 40 Zeilen nötig. Betrachten Sie es als Experiment.

Jede Ebene und ob sie sich lohnt

EbeneWas es istWer es heute liestLohnt es sich?
Semantisches HTML und beschriftete FormulareEchte Buttons, Links, Landmarks und LabelsBrowser, assistive Technologien und Browser-AgentenJa. Zuerst umsetzen
robots.txt für Such- und User-AgentsRegeln pro Crawler, die Suche und Training trennenOpenAI, Anthropic, Perplexity und Google dokumentieren ihre TokensJa. Danach am CDN testen
Content SignalsPräferenzen für search, ai-input und ai-train in der robots.txtKein von uns geprüftes KI-Unternehmen dokumentiert, sie zu beachtenEine Zeile. Nichts erwarten
Markdown-Kopien mit Canonical-HeadernEine saubere Textversion jeder SeiteAgenten, die Markdown anfordern; es gibt keine veröffentlichte Liste, welcheJa, mit dem Canonical-Header
llms.txt und llms-full.txtEin kuratierter Index und der Volltext für AgentenGoogle Search ignoriert sie; laut keiner Crawler-Dokumentation wird sie gelesenBehalten, wenn automatisch generiert. Kein Hebel für Sichtbarkeit
MCP-Server (nur lesend)Deklarierte Tools, die Agenten aufrufen könnenMCP-Clients, die jemand verbindetNur mit Daten oder Aktionen, für die sich ein Aufruf lohnt
A2A Agent CardEine maschinenlesbare Beschreibung eines AgentenA2A-Clients, die darauf verweisenFür die meisten Websites spekulativ
API-Katalog (RFC 9727)Eine zentrale Well-known-Liste Ihrer öffentlichen APIsTools, die danach suchenGünstig, wenn Sie bereits APIs haben
WebMCPTools, die die Seite im Browser registriertChrome, über einen Origin TrialExperiment

Was wir wieder bauen würden

In dieser Reihenfolge: semantisches HTML, getesteter Crawler-Zugriff, Markdown-Kopien mit Canonical-Headern, eine generierte llms.txt und Tools nur dann, wenn es etwas gibt, das sich aufzurufen lohnt. Danach messen. Server-Logs zeigen, welche Agenten Markdown-Kopien abrufen oder /mcp aufrufen. Ein Abruf ist keine Zitierung, und nichts davon garantiert, dass ein KI-System Sie erwähnt.

Agent Readiness ist Teil unserer Arbeit an der Optimierung für KI-Suche, zusammen mit den Inhalten und der Messung, die entscheiden, ob KI-Antworten Sie zitieren. Wenn Sie das in Ihre Website einbauen möchten, erzählen Sie uns von Ihrem Projekt.