← All posts· ~7 min

Content Signals in robots.txt: search, ai-input, ai-train and the Wrong-Group Mistake

Content-Signal tells bots if your content may feed search, AI answers or AI training. What the signals mean, where the line goes, and what 8 sites got wrong.

By Long Nguyen — CTO, ERPFit

Content Signals in robots.txt: search, ai-input, ai-train and the Wrong-Group Mistake

Short answer: Content Signals are a Content-Signal: line in robots.txt, for example Content-Signal: search=yes, ai-input=yes, ai-train=no. The line tells bots which of three uses you agree to: search, AI answers, or AI training. It must sit inside a User-agent group, usually User-agent: *. It does not block crawling, and it is a preference, not a command: a bot can ignore it.

What the three signals mean

Cloudflare published the Content Signals Policy on 24 September 2025 (updated 15 July 2026) under CC0, so anyone may use it. The policy's definitions:

SignalMeaning (per the policy)Example
searchBuilding a search index and providing search results: links and short excerpts. It does not include AI-generated search summaries.A list of ten links
ai-inputPutting content into an AI model when it answers: RAG, grounding, real-time use of content for AI search answers.An AI answer with cited sources
ai-trainTraining or fine-tuning AI models.Model training data

yes means content may be collected for that use; no means it may not. A missing signal "conveys no meaning": you neither grant nor restrict. So the line search=yes, ai-train=no says nothing about AI answers.

Where the line goes: the wrong-group mistake

robots.txt is split into groups. Each group starts with one or more User-agent: lines and runs until the next User-agent: line (RFC 9309). Blank lines and # comments do not end a group. The IETF draft that attaches AI preferences to robots.txt also defines its rule as part of a group. So a Content-Signal: line at the end of the file belongs to the group just above it.

On 21 October 2026 we read the robots.txt of 8 sites with the code the CiteStat scan uses (packages/core/content-signals.ts):

SiteContent-Signal lineApplies to
blog.cloudflare.com, developers.cloudflare.com, docs.stripe.comsearch=yes, ai-input=yes, ai-train=yesEvery bot (User-agent: *)
citestat.comsearch=yes, ai-input=yes, ai-train=noEvery bot (User-agent: *)
www.cloudflare.comai-train=yes, search=yes, ai-input=yesCohere-ai only
vercel.com, docs.claude.comNone-
erpfit.comOnly the policy text, in # commentsNo bot can read it

www.cloudflare.com is the clearest lesson. The file lists 8 groups for individual AI bots (GPTBot, the old Claude-Web, PerplexityBot…), the last one is User-agent: Cohere-ai, then a comment, then the Content-Signal: line. By RFC 9309 grouping, that line is a preference addressed to Cohere only. The intent was clearly every bot, but a parser that follows the standard will not read it that way.

erpfit.com shows the second common mistake: the full policy text (a long comment block) copied in, but no real Content-Signal: line. Comments are for human readers. citestat.com's own robots.txt had this mistake until 21 October 2026.

How to write it

Put the line right after User-agent: *, before the Allow/Disallow lines:

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

Sitemap: https://your-site/sitemap.xml

If you have a separate group for one bot (for example User-agent: GPTBot), that bot reads only its own group and ignores the * group. If it should get the signals too, add the Content-Signal: line to that group as well. How to write a group per bot: AI crawlers and robots.txt.

Which values? A site that wants to be cited by AI should keep ai-input=yes: that is the signal for AI answers with sources. ai-train is a separate choice; no does not make an answer less likely to cite you. Google Search Console may report "Syntax not understood" for the line; Cloudflare's documentation (updated 8 October 2026) says it has seen no effect on crawl rate or SEO.

Content-Signal and the IETF's Content-Usage

Cloudflare's IETF draft (draft-romm-aipref-contentsignals-00) is an individual draft and has expired. The IETF's official working group, AI Preferences (aipref), is drafting a different syntax:

Cloudflare Content SignalsIETF aipref (draft)
Line nameContent-Signal:Content-Usage:
Labelssearch, ai-input, ai-trainsearch, ai-use, train-ai
Valuesyes / noy / n
Whererobots.txtrobots.txt (per path) and an HTTP header
StatusIn use; IETF draft expiredvocab-08 (14 Sep 2026), attach-05 (19 Aug 2026)

The two share the concepts but not the names, so a reader that knows one syntax will not see the other. That is why the CiteStat scan reads both, including the Content-Usage header. Today Content-Signal is the syntax found on real sites; we will update this post when the IETF drafts become a standard.

Is Content-Signal binding?

No. Cloudflare writes that signals "express preferences; they are not technical countermeasures against scraping", and that some companies might ignore them. The policy text says that restrictions expressed through Content Signals are reservations of rights under Article 4 of EU Directive 2019/790 on text and data mining; what that means legally depends on the country. In the documentation we read, neither Google nor OpenAI has said it follows the line. To actually block a bot, use a Disallow for it (see AI crawlers). To control what Google's AI Overviews quote, use nosnippet and max-snippet.

Check your own site in one minute

Run curl -s https://your-site/robots.txt and find the Content-Signal: line. Check three things: the line does not start with #; the nearest User-agent: line above it is * (or the bot you mean); each value is yes or no.

What does CiteStat check?

In its Agent Readiness section, the CiteStat scan reads robots.txt by group as above, plus the page's Content-Signal header. It passes when at least one readable declaration exists, and it reports signals that exist only in comments or have unreadable values. The free plan includes 10 scans a day. If you manage several sites, see pricing: Pro is 500.000₫/month (excl. VAT) for 100 scans a day.

FAQ

Does Content-Signal block AI crawlers?

No. Content-Signal only says how you want content used after it is collected. Cloudflare states that signals express preferences, are not technical countermeasures, and that some companies might ignore them. To stop collection, use a Disallow for each bot in robots.txt or block it at the firewall.

Where does the Content-Signal line go in robots.txt?

Inside a User-agent group, usually User-agent: *. Under RFC 9309 a group runs until the next User-agent line, so a line placed at the end of the file, after a specific bot's group, belongs to that bot only.

What does leaving a signal out mean?

Nothing. Under Cloudflare's policy, when a signal is missing the site operator neither grants nor restricts permission for that use via content signals.

How is Content-Signal different from Content-Usage?

Content-Signal is Cloudflare's syntax (search, ai-input, ai-train with yes/no). Content-Usage is the syntax in the IETF AI Preferences working group drafts (search, ai-use, train-ai with y/n), as a robots.txt rule and an HTTP header. Neither is a final standard: Cloudflare's IETF draft has expired, and the aipref drafts are still in progress.