Content-Signal in robots.txt erreicht keinen AI-Crawler: unser eigener Fehler

Content-Signal in robots.txt erreicht keinen AI-Crawler: unser eigener Fehler

Zuletzt überprüft: 18. September 2026
10 Min. Lesezeit
Leitfaden
500+ WP-Projekte
Technisches SEO

Unser Vorbehalt gegen KI-Training war an niemanden adressiert. Die Zeile Content-Signal: search=yes, ai-input=yes, ai-train=no stand in der Datei robots.txt von wppoland.com genau einmal, in der Gruppe User-agent: *, und darunter lagen zwanzig benannte Crawler-Gruppen. Nach RFC 9309 erbt keine dieser zwanzig Gruppen irgendetwas aus der Sternchen-Gruppe. GPTBot, ClaudeBot, PerplexityBot, Google-Extended und der Rest der Liste lasen ausschließlich ihre eigenen Abschnitte, und dort stand diese Zeile nicht.

Wir schreiben darüber, weil es unsere Datei und unser Fehler ist. Wir haben die robots.txt immer daraufhin geprüft, ob sie versehentlich etwas blockiert, und nie daraufhin, ob die Erklärung ihren Empfänger überhaupt erreicht.

#Was genau in der Datei stand

Der Aufbau sah so aus, wie er in den meisten Dateien aussieht, die uns begegnet sind: eine allgemeine Gruppe oben, darunter eine Liste benannter Bots mit erweiterten Allow-Regeln für maschinenlesbare Endpunkte.

User-agent: *
Content-Signal: search=yes, ai-input=yes, ai-train=no
Allow: /
Disallow: /cdn-cgi/

Sitemap: https://wppoland.com/sitemap-index.xml
Agentmap: https://wppoland.com/.well-known/ai-catalog.json

User-agent: GPTBot
Allow: /
Allow: /llms.txt
Allow: /facts.json

User-agent: ClaudeBot
Allow: /

User-agent: PerplexityBot
Allow: /

Das wirkt sauber. Das Signal ist da, die benannten Gruppen sind da, die Endpunkte für Agenten sind separat aufgeführt. Das Problem ist, dass diese beiden Teile keinen Kontakt zueinander haben.

#Warum eine Zeile nicht die ganze Datei abdeckt

RFC 9309 beschreibt das Gruppen-Matching auf eine Weise, die sich selbstverständlich liest, solange man sie nicht neben die eigene Datei legt. Der Client vergleicht sein Product Token mit den Namen in den User-agent-Zeilen, ohne auf Groß- und Kleinschreibung zu achten, und wendet eine Gruppe an: die, die ihn nennt. Der Stern ist nicht das unspezifischste Muster, sondern der Rückfall, und RFC 9309 greift nur dann darauf zurück, wenn keine Gruppe den Client beim Namen nennt. Das Sternchen ist das unspezifischste Muster, es verliert also gegen jede benannte Gruppe. Existiert eine benannte Gruppe, wendet der Client ausschließlich deren Direktiven an, und die Sternchen-Gruppe betrifft ihn komplett nicht mehr.

Das ist keine Ausnahme für Content Signals. Dieselbe Regel gilt seit jeher für Allow und Disallow, und genau deshalb schützt eine Datei, in der jemand Disallow: /wp-admin/ nur in die Sternchen-Gruppe geschrieben hat, gar nichts vor einem Bot, der weiter unten seinen eigenen Abschnitt hat. Der Unterschied: bei Disallow sieht man die Folge. Die Seite taucht im Index auf oder eben nicht. Bei Content-Signal sieht man nichts. Eine Rechteerklärung hat keine Rückkopplung, sie kann also monatelang falsch sein und dabei exakt so aussehen wie eine korrekte.

Content Signals ist ein Vorschlag von Cloudflare und nicht Teil von RFC 9309. Cloudflare aktiviert diese Richtlinie in seiner verwalteten robots.txt standardmäßig. Aber der Gruppenmechanismus, in dem diese Zeile wohnt, stammt vollständig aus RFC 9309, also gilt die Ein-Gruppen-Regel für sie genauso wie für alles andere in dieser Datei. Eine neue Direktive im alten Container erbt die Regeln des Containers.

#Drei Signale und das, was sie nicht versprechen

Die Spezifikation definiert drei Signale, jeweils mit dem Wert yes oder no:

SignalWorum es geht
searchAufbau eines Suchindex und Ausliefern von Ergebnissen, also Links und kurze Textausschnitte
ai-inputZuführen von Inhalten an ein KI-Modell während der Antwort, also RAG und Grounding
ai-trainTraining und Feintuning von Modellen

Unsere Kombination search=yes, ai-input=yes, ai-train=no ist eine bewusste Entscheidung. Wir wollen in generativen Antworten zitiert werden, weil das heute einer der Kanäle ist, über die uns jemand findet, und wir wollen unseren Korpus nicht fürs Training hergeben. Ein fehlendes Signal bedeutet etwas Drittes als no: der Betreiber erteilt auf diesem Weg weder Zustimmung noch Absage.

Keines dieser Signale blockiert irgendetwas. Es ist eine Textzeile in einer Datei, die ein Client abrufen kann oder nicht, lesen kann oder nicht und respektieren kann oder nicht. Der Server beantwortet die Anfrage unabhängig davon, was in dieser Datei steht. Blockieren ist eine eigene Schicht, ausgewertet vor der Anwendung, und sie entsteht aus WAF-Regeln, Rate Limits oder der Verifikation der Bot-Identität, nicht aus einer Textdatei. Ein Signal ist genau so viel wert wie eine eindeutige Nachricht an die richtige Adresse. Unsere war eindeutig und ging an die falsche.

#Prüfen Sie Ihre eigene Datei mit einem Kommando

Das dauert ein paar Sekunden und funktioniert auf jeder Domain:

curl -s https://ihre-domain.de/robots.txt \
  | awk 'tolower($0) ~ /^user-agent:/ {ua++} tolower($0) ~ /^content-signal:/ {cs++} END {print "User-agent-Gruppen: " ua "\nContent-Signal-Zeilen: " cs}'

Ist die Zahl der Gruppen größer als die Zahl der Signale, sagt die Differenz, wie viele Gruppen Ihren Vorbehalt nicht sehen. Bei uns lautete das Ergebnis einundzwanzig zu eins.

Die genauere Variante gibt die Namen der Gruppen aus, in denen das Signal fehlt:

curl -s https://ihre-domain.de/robots.txt \
  | awk '/^[Uu]ser-agent:/ {if (name != "" && !sig) print "kein Signal: " name; name=$2; sig=0} /^[Cc]ontent-[Ss]ignal:/ {sig=1} END {if (name != "" && !sig) print "kein Signal: " name}'

Das zweite Kommando gehört in die Pipeline, denn seine Ausgabe ist eine Liste zum Abarbeiten und keine Zahl zum Interpretieren.

#Wie man es repariert

Die Korrektur ist langweilig: die Zeile Content-Signal in jeder Gruppe wiederholen, für die sie gelten soll. Es gibt keine Abkürzung, keine Kurzform und keine Vererbung, die man einschalten könnte.

User-agent: *
Content-Signal: search=yes, ai-input=yes, ai-train=no
Allow: /
Disallow: /cdn-cgi/

User-agent: GPTBot
Content-Signal: search=yes, ai-input=yes, ai-train=no
Allow: /
Allow: /llms.txt
Allow: /facts.json

User-agent: ClaudeBot
Content-Signal: search=yes, ai-input=yes, ai-train=no
Allow: /

User-agent: PerplexityBot
Content-Signal: search=yes, ai-input=yes, ai-train=no
Allow: /

In unserem Repository ist diese Änderung noch nicht umgesetzt. Der Beitrag entstand im Moment des Fundes und nicht nach dem Schließen des Fehlers, und so ist er zu lesen.

Bei der Korrektur ist eine Sache zu entscheiden, die eine Datei mit wiederholter Zeile nicht von selbst entscheidet: ob derselbe Signalsatz zu jeder Gruppe passt. Für einen indexierenden Crawler und für einen Crawler, der Trainingskorpus sammelt, fällt die Antwort unterschiedlich aus, und eine Datei mit zwanzig identischen Zeilen legt nahe, dass niemand darüber nachgedacht hat. Eine Gruppe, in der search=yes keinen Sinn ergibt, weil der Client keinen Index baut, braucht ihren eigenen Eintrag.

#Das Zweite, was uns fehlte: Gruppen für einzelne Rollen

Beim selben Lesen der Datei kam heraus, dass wir nur die Gruppe ClaudeBot hatten und die beiden anderen nicht: Claude-User für vom Nutzer ausgelöste Abrufe und Claude-SearchBot für das Grounding der Suche. Das sind drei verschiedene Rollen und drei verschiedene Absichten auf der Clientseite. Ein Bot, der eine Seite abruft, weil ein Mensch gerade deren Adresse in ein Gespräch geklebt hat, tut etwas anderes als ein Bot, der einen Korpus aufbaut, und es ist sinnvoll, ihm etwas anderes zu antworten.

Die Folge der fehlenden Gruppen ist dieselbe wie oben, nur von der anderen Seite: ein Client ohne eigenen Abschnitt fällt auf die Sternchen-Gruppe zurück. In unserem Fall hieß das ausgerechnet, dass Claude-User das korrekte Signal sah, weil es im Sternchen stand. In einer Datei, in der das Signal zwanzig benannte Bots nicht erreichte, erreichte es also die unbenannten. Genau umgekehrt zur Absicht.

#Warum dieser Fehler eine Durchsicht so leicht übersteht

Drei Gründe, alle strukturell, keiner davon Unaufmerksamkeit.

Eine robots.txt liest man von oben nach unten, und der allgemeine Abschnitt wirkt übergeordnet. Etwas dort hineinzuschreiben weckt die Intuition aus CSS oder aus Serverkonfigurationen, wo die allgemeine Einstellung der Default ist und die spezifische sie überschreibt. In RFC 9309 gibt es kein Überschreiben. Es gibt die Wahl einer Gruppe und das Verwerfen des restlichen Dateiinhalts.

Zweiter Grund: es gibt kein Werkzeug, das das meldet. robots.txt-Tester prüfen, ob eine bestimmte Adresse für einen bestimmten Bot erlaubt ist, und von Content-Signal wissen sie nichts, weil es keine Direktive aus dem RFC ist. Die Zeile geht in den Augen des Validators als Kommentar durch und in den Augen des Menschen als Richtlinie.

Dritter und wichtigster Grund: eine Rechteerklärung hat kein Rücksignal. Setzen Sie Disallow falsch, sehen Sie es eine Woche später im Indexierungsbericht. Setzen Sie Content-Signal falsch, passiert nichts, was sich beobachten ließe, und das Ausbleiben eines Ereignisses sieht in beiden Fällen identisch aus. Diese Fehlerklasse findet man durch Lesen der Datei, nicht durch Beobachten der Wirkung.

#Zeilen außerhalb von Gruppen führen in die Irre, weil sie tatsächlich global gelten

In dieser Datei steckt etwas, das die falsche Intuition direkt nahelegt. Neben den User-agent-Gruppen kennt robots.txt gruppenunabhängige Records, und Sitemap ist so ein Record. In unserer Datei steht er nach der Sternchen-Gruppe:

Sitemap: https://wppoland.com/sitemap-index.xml
Agentmap: https://wppoland.com/.well-known/ai-catalog.json

Sitemap gilt für die ganze Datei, unabhängig davon, wo Sie ihn hinschreiben und wie viele Gruppen darunter stehen. Niemand wiederholt ihn zwanzigmal, und niemand muss das. Wer weiß, wie sich Sitemap verhält, und Content-Signal in derselben Gegend der Datei sieht, zwei Zeilen darüber, hat jedes Recht anzunehmen, dass sich diese Zeile genauso verhält. Tut sie nicht. Das eine ist ein globaler Record, das andere eine Direktive innerhalb einer Gruppe, und nichts in der Syntax weist darauf hin. Beide sind eine zweiteilige Zeile mit einem Doppelpunkt, direkt nebeneinander.

Praktischer Schluss beim Lesen fremder Dateien: Einrückung und Reihenfolge bedeuten nichts, es zählt allein, ob eine Direktive als gruppenbezogen definiert ist. Allow, Disallow und Content-Signal sind gruppenbezogen. Sitemap ist es nicht.

#Was dieser Beitrag nicht klärt

Zwei Dinge lassen wir bewusst außerhalb des Rahmens, weil sie nicht unsere sind.

Erstens die rechtliche Wirkung des Vorbehalts. Content Signals beruft sich auf einen urheberrechtlich formulierten Rechtevorbehalt, und genau so ein Text steht im Kommentar oben in unserer Datei. Ob und wann dieser Vorbehalt wirksam ist, entscheidet eine Anwältin oder ein Anwalt und nicht die Person, die robots.txt bearbeitet. Unser Beitrag ist rein technisch: wenn eine Erklärung irgendein Gewicht haben soll, muss sie wenigstens den Client erreichen, an den sie adressiert ist, und unsere erreichte ihn nicht.

Zweitens das Verhalten einzelner Betreiber. Wir haben nicht gemessen, welcher Crawler Content-Signal liest, welcher es respektiert und was er mit widersprüchlichen Signalen in verschiedenen Gruppen anstellt. Ohne eigene Messung haben wir dazu nichts zu sagen, und fremde Zahlen wiederholen wir nicht. Die beschriebene Korrektur lohnt sich unabhängig von diesem Wissen, denn sie repariert eine Datei, die etwas anderes sagt, als ihr Autor gemeint hat, und das ist für sich genommen ein Defekt.

#Was daraus für den Prozess folgt

Die Reichweite des Signals einmal zu prüfen kostet ein paar Minuten, sie zu halten ist keine einmalige Arbeit. Jede neue Gruppe in der Datei, und die kommen regelmäßig dazu, weil die Liste der KI-Crawler von Monat zu Monat wächst, ist eine Gruppe ohne Signal, bis jemand daran denkt. Deshalb gehört das zweite Kommando oben in die Tests und nicht in eine Notiz. Eine Regel, die sich selbst prüft, überlebt; eine Regel in einem Dokument überlebt bis zur nächsten Bearbeitung der Datei durch jemanden, der das Dokument nicht gelesen hat.

Es lohnt sich auch, im Kopf zu behalten, über welchen Anteil des Traffics wir hier reden. In unserer Messung vom August 2026, beschrieben im Beitrag über Bot-Traffic auf einer kleinen Website, kamen 72 % der Requests nicht aus einem Browser. Die Datei robots.txt ist der einzige Ort, an dem wir mit dieser Mehrheit überhaupt sprechen, und das Einzige, was diese Mehrheit über unsere Bedingungen weiß. Ist der Satz darin an die falsche Gruppe adressiert, ist das kein weicher Fehler, sondern Schweigen.

#Kurze Checkliste

  • Zählen Sie die User-agent-Gruppen und die Content-Signal-Zeilen in Ihrer Datei. Stimmen die Zahlen nicht überein, ist die Differenz die Menge der Gruppen ohne Vorbehalt.
  • Wiederholen Sie die Zeile in jeder Gruppe, für die sie gelten soll. Die Wiederholung ist hier die korrekte Form und kein Duplikat.
  • Entscheiden Sie bewusst, ob jede Gruppe denselben Signalsatz bekommt. Zwanzig identische Zeilen sind meist ein Zeichen dafür, dass niemand entschieden hat.
  • Prüfen Sie, ob Sie eigene Gruppen für die Rollen desselben Anbieters haben, etwa für vom Nutzer ausgelöste Abrufe und für das Sammeln von Korpus.
  • Hängen Sie die Prüfung in die Pipeline. Die Crawler-Liste wächst, und jede neue Gruppe startet ohne Signal.
  • Reden Sie sich nicht ein, dass ein Signal irgendetwas blockiert. Blockieren ist die Schicht vor der Anwendung, das hier ist eine Erklärung.
Nächster Schritt

Machen Sie aus dem Artikel eine echte Umsetzung

Dieser Block stärkt die interne Verlinkung und führt Nutzer gezielt zum nächsten sinnvollen Schritt im Service- und Content-System.

Soll das Thema auf Ihrer Website umgesetzt werden?

Wenn Sichtbarkeit in Google und KI-Systemen wichtig ist, baue ich die passende Content-Architektur, FAQ, Schema-Daten und interne Verlinkung auf.

Relevanter Cluster

Weitere WordPress-Dienste und Wissensbasis entdecken

Stärken Sie Ihr Unternehmen mit professionellem technischen Support in den Kernbereichen des WordPress-Ökosystems.

Liest ein Crawler die Sternchen-Gruppe, wenn er eine eigene Gruppe hat?#
Nein. RFC 9309 lässt einen Client genau eine Gruppe anwenden, nämlich die, die sein Product Token nennt, und behandelt die Sternchen-Gruppe als Rückfall, der nur ohne passende Gruppe greift. Eine Vererbung aus der Gruppe User-agent Sternchen gibt es nicht. Wenn GPTBot einen eigenen Abschnitt hat, betrifft ihn die Sternchen-Gruppe überhaupt nicht.
Wo muss die Content-Signal-Zeile stehen, damit sie wirkt?#
In jeder Gruppe, für die sie gelten soll, jeweils einzeln. Eine Zeile in der Sternchen-Gruppe deckt nur die Bots ab, die keinen eigenen Abschnitt haben. Die Wiederholung ist hier die korrekte Schreibweise und kein Duplikat, das man entfernen sollte.
Ist Content-Signal Teil des robots.txt-Standards?#
Nein. Content Signals ist ein Vorschlag von Cloudflare, eine zusätzliche Zeile in der Datei robots.txt. Die Gruppensemantik übernimmt der Vorschlag allerdings aus RFC 9309, also gilt für ihn dieselbe Ein-Gruppen-Regel wie für Allow und Disallow.
Verhindert ai-train=no das Training eines Modells auf den Inhalten?#
Nein. Das ist eine Erklärung und kein Durchsetzungsmechanismus. Der Server beantwortet die Anfrage weiterhin, und eine Textdatei hat keine Möglichkeit, auf der Clientseite irgendetwas zu erzwingen. Der Wert des Signals liegt darin, dass es eindeutig ist und den richtigen Empfänger erreicht.
Wie prüfe ich meine eigene Datei mit einem einzigen Kommando?#
robots.txt abrufen und die Vorkommen der Content-Signal-Zeilen sowie der User-agent-Zeilen zählen. Bei zwanzig Gruppen und einem Signal sehen neunzehn Gruppen den Vorbehalt nicht. Das fertige Kommando steht im Text.

Sie brauchen ein FAQ für Branche und Zielmarkt? Wir erstellen eine Version passend zu Ihren Business-Zielen.

Kontakt aufnehmen

Ähnliche Artikel

Googlebot und JSON-LD: ein einziger Unescape-Durchlauf

Google hat die JSON-LD-Extraktion geändert und wendet nur noch einen Durchlauf HTML-Unescaping an. Doppelt escapte Entities werden nicht mehr aufgelöst, der Block parst nicht mehr und die strukturierten Daten verschwinden. Wie Sie Ihren Korpus messen und korrekt kodieren.

Site-Reputation-Policy im EWR ab 30. August 2026

Ab 30. August 2026 teilt Google die Wirkung von Manual Actions zur Site-Reputation-Policy nach Sucher-Standort. Außerhalb des EWR trifft die Absenkung weiterhin den betroffenen Teil. Im EWR entfällt diese Wirkung; der Abschnitt kann unabhängig ranken. Warum Parasite-SEO nicht zurückkehrt.