
# Content-Signal: Was die KI mit Ihren Inhalten darf

`robots.txt` beantwortet eine einzige Frage und hat nie eine andere beantwortet: darfst du das abrufen. Ja oder nein, Pfad für Pfad, Bot für Bot. Für die Haltung, die die meisten Betreiber tatsächlich haben, fehlt ihr das Vokabular: indexiere mich, zitiere mich, schick mir Leser, aber trainiere kein Modell mit dem, was ich schreibe.

Also greift man zum einzigen vorhandenen Hebel. Man sperrt alles per `Disallow` und verliert den Traffic zusammen mit dem Training.

## Abrufen dürfen ist nicht verwenden dürfen

Das sind zwei getrennte Fragen, und nur eine davon betrifft deine Bandbreite. Ein Crawler, der deine Preisseite liest und sie zitiert, wenn jemand fragt, was er kaufen soll, tut dir einen Gefallen. Dieselben Bytes in einem Trainingskorpus sind ein ganz anderes Geschäft, und an dem bist du nicht beteiligt.

Alles zu sperren wirft beides in ein einziges „nein“. Für ein kostenpflichtiges Archiv kann das richtig sein. Für ein Unternehmen, das gefunden und empfohlen werden will, ist es die falsche Voreinstellung: du verschwindest aus den Antworten, deine Mitbewerber nicht.

Content-Signal ist die Ebene, auf der du beides trennen kannst.

## Die drei Signale

```
Content-Signal: search=yes, ai-input=yes, ai-train=no
```

- **`search`**: einen Suchindex aufbauen und Ergebnisse ausliefern, also Links und kurze Auszüge. Nicht die KI-generierten Zusammenfassungen, die gehören zum nächsten Signal.
- **`ai-input`**: deine Seite zur Antwortzeit in ein Modell geben. RAG, Grounding, die Quellen unter einer generierten Antwort.
- **`ai-train`**: ein Modell mit deinen Inhalten trainieren oder feinabstimmen.

Sie sind voneinander unabhängig. Jede Kombination ist zulässig, und mehrere davon sind durchdachte Positionen und keine Versehen.

Die Werte sind `yes` und `no`. Kein `maybe`, keine Syntax pro Pfad, kein Ablaufdatum.

Ein weggelassenes Signal ist kein `no`. Nach der Konvention ist eine Nutzung, zu der du nichts sagst, weder erlaubt noch untersagt: du hast schlicht nicht geantwortet. Unser Generator schreibt immer alle drei, und das ist die richtige Gewohnheit, denn Schweigen ist die eine Antwort, mit der niemand etwas anfangen kann.

## Wohin es gehört

An zwei Stellen, und beide kosten wenig.

In die robots.txt, innerhalb einer User-Agent-Gruppe:

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

Sitemap: https://beispiel.de/sitemap.xml
```

Und als HTTP-Antwort-Header:

```
Content-Signal: search=yes, ai-input=yes, ai-train=no
```

agentready.md liefert beides aus. Genau dieser Header geht bei jeder Antwort mit: jede Seite, jede `.md`-Fassung, jeder API-Aufruf.

Für nginx:

```
add_header Content-Signal "search=yes, ai-input=yes, ai-train=no" always;
```

Für Apache:

```
<IfModule mod_headers.c>
  Header set Content-Signal "search=yes, ai-input=yes, ai-train=no"
</IfModule>
```

Der Header verdient seinen Platz. Die robots.txt wird gelegentlich an der Wurzel abgeholt, und ein Agent, der auf einer tiefen URL landet, weil jemand einen Link eingefügt hat, liest sie womöglich nie. Der Header reist an dem mit, was gerade mitgenommen wird.

Es gibt auch die Meta-Tag-Form, `<meta name="content-signal" content="search=yes, ai-input=yes, ai-train=no">`. Nimm sie, wenn du an die Serverkonfiguration nicht herankommst. Der Header ist besser, weil er auch Antworten abdeckt, die kein HTML sind.

## Drei reale Positionen

**Ein Verlag, der Attribution will.**

```
Content-Signal: search=yes, ai-input=yes, ai-train=no
```

In einer Antwort mit Link aufzutauchen ist Verbreitung, das heutige Äquivalent zum Zitiertwerden. Training ist der Teil, den niemand bezahlt und der auch niemanden zurückschickt.

**Ein SaaS, das empfohlen werden will.**

```
Content-Signal: search=yes, ai-input=yes, ai-train=yes
```

Doku, Preise, Changelog. Wenn jemand einen Assistenten fragt, womit er eine Aufgabe lösen soll, willst du die Antwort sein, und in den Trainingsdaten zu stehen ist der Weg, genannt zu werden, wenn das Modell gar nichts abruft. Hier gibt es nichts zu schützen. Das Material ist Marketing.

**Ein kostenpflichtiges Archiv.**

```
Content-Signal: search=yes, ai-input=no, ai-train=no
```

Du willst auffindbar sein, denn der Suchtreffer ist das Verkaufsargument. Was du nicht willst: dass der Kern des Artikels gratis in der Antwort eines anderen landet. Das ist der Fall, in dem das Signal etwas leistet, was ein `Disallow` nicht kann, denn den Crawl zu sperren würde den Suchtreffer gleich mitnehmen.

Wenn ein einzelner Bot andere Konditionen verdient, bekommt er seine eigene Gruppe:

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

User-agent: GPTBot
Allow: /
Content-Signal: search=yes, ai-input=yes, ai-train=yes
```

Es gilt die übliche Vorrangregel der robots.txt: ein Bot, der seinen eigenen Namen findet, liest diese Gruppe und ignoriert das `*` vollständig.

## Was es tatsächlich ist

Eine junge Konvention. Kein RFC, kein W3C-Standard, nichts, woran ein Crawler gebunden wäre. Niemand hat Einhaltung in einer Form zugesagt, auf der du bestehen könntest. Wenn irgendwo steht, Content-Signal schütze deine Inhalte, liest du Werbung.

Warum dann die Zeile schreiben.

Weil sie maschinenlesbar ist und fast nichts kostet: eine Zeile in einer Datei, die du ohnehin auslieferst, ein Header in einem Konfigurationsblock, den du ohnehin hast. Die Präambel, die zur Konvention gehört, stellt ein `no` als ausdrücklichen Rechtsvorbehalt nach Artikel 4 der EU-Richtlinie 2019/790 dar, dem Opt-out für Text und Data Mining. Ob das in deiner Rechtsordnung trägt, ist eine Frage für Juristen. Eine nicht geäußerte Präferenz trägt nirgends.

Und weil sie etwas sagt, wofür ein `Disallow` keine Worte hat. „Trainiere nicht mit mir“ und „verschwinde“ sind zwei verschiedene Sätze, und bisher konntest du nur den zweiten schicken.

## Prüfen, ob deins ankommt

```bash
curl -sI https://beispiel.de/ | grep -i content-signal
curl -s https://beispiel.de/robots.txt | grep -i content-signal
```

Wiederhole den ersten Befehl auf einer Seite, die nicht die Startseite ist. Steht der Header in einem `location`-Block, deckt er vielleicht weniger ab, als du denkst.

Noch einer, falls du hinter einem CDN sitzt:

```bash
curl -sI https://beispiel.de/robots.txt | grep -i "server\|cf-cache-status"
```

Vergewissere dich, dass die zurückkommende robots.txt deine ist. Unsere lieferte monatelang `404` vom Origin, während Cloudflare am Edge mit einer verwalteten Policy-Datei antwortete, die wir nie geschrieben hatten, und jede Prüfung bekam eine völlig glaubwürdige `200`.

[Content-Signal erzeugen](/de/tools/content-signal-generator) · [robots.txt erzeugen](/de/tools/robots-txt-generator)
