BlogFindings

Block AI training: 7 of 22 sites declaring ai-train=no blocked no crawler

Lantad requested /robots.txt once from each of 1,027 hostnames on 13 September 2026. 736 answered HTTP 200 and 38 of those carry a Content-Signal line. Twenty two of the 38 declare ai-train=no. Fifteen of the 22 also disallow eight or nine of the nine training crawler tokens this scanner evaluates by name, and seven disallow none of them at the site root.

16 min read Lantad

So we measured whether they do. On 13 September 2026 we asked each of the 1,027 hostnames in this repository's committed industry corpus frame for its robots.txt, once, over HTTPS, identifying as LantadBot, with redirects followed and a twelve second timeout. Seven hundred and thirty six answered HTTP 200. Thirty eight of those files carry at least one Content-Signal line, twenty two of the 38 declare ai-train=no, and seven of those 22 disallow none of the nine training crawler tokens this scanner evaluates at the site root. One of the seven names all nine and writes Allow: / under each.

In short

  • To block AI training you need a Disallow rule under the training crawler's own token, because the Content-Signal line that states the preference is a field crawlers are not obliged to read: of the 736 robots.txt files Lantad read on 13 September 2026, 38 carried a Content-Signal line, 22 of those declared ai-train=no, and 7 of the 22 left all nine training tokens allowed at the site root.
  • Cloudflare's documentation for the managed robots.txt feature, carrying Last updated Aug 3, 2026, states that robots.txt compliance is voluntary and that the file expresses your preferences but does not prevent crawlers from accessing your content at a technical level.
  • The 15 files carrying a use field alongside search and ai-train all disallow eight or nine training tokens by name, because that combination is written by Cloudflare's managed feature rather than by hand. The seven that declared ai-train=no and disallowed nobody were written by their sites.
  • geico.com declared ai-train=no in its wildcard group on 13 September 2026 and wrote Allow: / under every one of the nine training tokens this scanner evaluates, across a file holding 25 user-agent lines.
  • All 16 files declaring ai-train=yes on 13 September 2026 were software company sites, and none of them disallowed any of the nine training tokens, so on that side of the split the declaration and the rules agree.
  • Hostnames asked for /robots.txt 1027 The committed industry frame, eight sectors
  • Answered HTTP 200 736 58 more were refused by our own network path and excluded
  • Carry a Content-Signal line 38 5.2 percent of the files that answered
  • Declare ai-train=no 22 The other 16 declare ai-train=yes
  • Declare it and disallow nobody 7 No training token disallowed at the site root
How 1,027 hostnames asked for /robots.txt on 13 September 2026 narrow down to files whose declared training preference has no rule behind it. Each bar is a subset of the one above it.

How do you block AI training in robots.txt?

There is one mechanism that crawlers are specified to obey and one that asks. The mechanism is a group: a user-agent line naming a product token, followed by rules. RFC 9309, which defines the protocol, gives crawlers the matching and precedence rules for those groups and says nothing about anything else in the file. Writing Disallow: / under GPTBot is therefore a rule in the protocol's own terms, and it is the only edit in a robots.txt file that a compliant training crawler is specified to act on.

The asking half is the Content Signals Policy, a set of fields written into the same file. Its three categories are search, ai-input and ai-train, and the vocabulary is a permission rather than an access control: yes means the operator grants that use, no means they do not, and an absent signal means neither granted nor restricted. It sits in the file as a line reading Content-Signal followed by a comma separated list of those fields. Section 2.2.4 of RFC 9309 is what governs how a crawler treats it: crawlers MAY interpret other records that are not part of the robots.txt protocol, and may be lenient when doing so. May, not must. Our own parser records each of these lines as an unknown field and ignores it, which is the conservative reading and the same one the specification permits any crawler to take.

That leaves a site with two edits available and a choice about which to make. The rule half needs the token, and the tokens are published by the vendors: OpenAI's crawler documentation names GPTBot for training and OAI-SearchBot for the ChatGPT search index at its bots page, and the equivalent pages exist for the other operators, though not all of them are as complete, which is why we found that six of nine vendors publish exactly one crawler token. The declaration half needs no token at all, which is part of why it is easier to adopt and part of why it can end up alone. If you want to see which of the two your own file is relying on, the robots.txt tester evaluates a path against each token separately rather than reading the file as a statement of intent.

The two things a robots.txt file can say about training, and what a crawler is specified to do with each. Read from RFC 9309 sections 2.2.1 and 2.2.4 on 13 September 2026. This is the specification, not a measurement of any site.

How many robots.txt files carry a content signal at all?

The frame is a committed file in this repository rather than a list assembled for this post, so every figure below can be recomputed against the same hostnames. It holds eight sectors of roughly equal size: government at 129 hosts, education at 130, healthcare at 123, news at 128, software at 130, ecommerce at 130, travel at 130 and finance at 127. It is weighted toward large organisations and it is not a random sample of the web, so a proportion measured here describes this frame and nothing wider. The scanner identifies itself the way it always does, which is documented on the bot page.

Fifty eight of the 1,027 requests never reached the site: the network path this scan ran from refused them before the connection was made, and they are excluded from every count rather than being recorded as a site response. Of the 969 that did reach an origin or its bot defence, 736 answered HTTP 200, 110 answered 403, 39 answered 503, 25 answered 404, and 44 returned nothing at all, 24 of those timing out at twelve seconds and 20 failing to connect. The 404 and the 503 are opposites under the protocol and worth keeping apart, which we set out in full when we established that a 404 on robots.txt allows every crawler and a 503 blocks them all. Thirty of the 736 sent a Content-Type of text/html, which is a 200 that a strict parser is entitled to discard.

Thirty eight of the 736 carry at least one Content-Signal line. That is 5.2 percent, and it is a larger number than we expected for a field that did not exist eighteen months ago, though the shape of the adoption explains it: 23 of the 38 are software company sites, five are education, four healthcare, two news, two travel, one government and one finance. Every one of the 38 declares both search and ai-train. Twenty four also declare ai-input, and only two of those declare ai-input=no, so the population is far more willing to refuse training than to refuse the retrieval that puts a page inside an answer. The same corpus produced the count behind GPTBot being disallowed at the root by 82 of 718 files, which is the rule-side comparison: the declaration is rarer than the block by a factor of about four. What this scan counts and what it refuses to infer is set out on the methodology page.

OutcomeHostnamesWhat it means for a crawler
HTTP 200736A file to parse, if the body is really a file
HTTP 403110Bot defence answering instead of the origin
HTTP 50339Commonly read as disallow-all until it recovers
HTTP 40425No restrictions at all under RFC 9309
No response4424 timed out at twelve seconds, 20 never connected
Other statuses154 rate limited, 3 accepted, 3 unauthorised, 5 assorted
Refused by our own network58Never reached the site, excluded from every count
Every response to the 1,027 requests for /robots.txt made on 13 September 2026, one request per hostname, redirects followed, twelve second timeout, from one network location. The 58 refused by our own egress path are listed separately because they are not a site's answer.

What do the 38 content signals actually declare?

Twenty two of the 38 declare ai-train=no and 16 declare ai-train=yes. The split is not evenly spread across the frame: all 16 of the yes files are software company sites, and they include several whose product is developer infrastructure, which is a coherent position for a business whose documentation being inside a model is a distribution channel rather than a loss.

Fifteen of the 38 carry a fourth field, written as use=reference. That field is not one of the three categories in the policy proper. Cloudflare describes it on the managed robots.txt documentation page, carrying Last updated Aug 3, 2026, as an optional extension it is testing, with the values immediate, reference and full, and the same page gives the managed default it writes as search=yes, ai-train=no, use=reference. Fourteen of those 15 files also carry the policy's full comment block, the one that opens by saying that as a condition of accessing this website you agree to abide by the following content signals. So most of the use field in this sample is one vendor's default rather than fifteen independent decisions, and the earlier finding that Cloudflare's managed robots.txt writes one signal line and eight Disallow rules is what these files look like in the wild.

Two of the 38 are written in a shape the documented format does not use. freshworks.com writes three separate Content-Signal lines, one each for ai-train, search and ai-input, where the format puts the fields in one comma separated list. aiven.io writes search=yes, ai-train=yes ai-input=yes, with no comma between the last two fields. Neither is a rule, so neither changes what any crawler may fetch, and that is the point worth taking from them: a syntax error in a field that nothing is required to parse produces no error anywhere. Cloudflare's own page notes that Google Search Console may report Syntax not understood for Content Signals, and says it has observed no impact on crawling rates as a result. The signal's reach depends entirely on adoption by the people it addresses, which is the same dependency that limits the RSL licence directive and, from the other direction, is why we checked whether Cloudflare's own crawl endpoints read the signals and found that one of ten did. None of this makes the declaration pointless. It makes it a legal and commercial artefact rather than a technical one, which is a reasonable thing for a site to publish as long as nobody in the building thinks it is doing the work of a Disallow line. Advice about generative engine optimization rarely draws that line clearly.

Field and valueFiles, of 38What the policy says it covers
search=yes38Building a search index and returning links and excerpts
ai-train=no22Training or fine-tuning AI models
ai-train=yes16The same use, permitted
ai-input declared24Feeding content into a model for a live answer
ai-input=no2The refusal that would keep a page out of an answer
use=reference15An optional fourth field Cloudflare says it is testing
What the 38 Content-Signal lines found in 736 robots.txt files declare, measured on 13 September 2026. A file is counted once per field, and every file declares both search and ai-train.

The seven files that declared ai-train=no and disallowed nobody

For each of the 22 files declaring ai-train=no we evaluated the nine training tokens in this scanner's registry against the site root, using the matcher that ships in the product rather than by reading the file. Those nine are GPTBot, ClaudeBot, anthropic-ai, Google-Extended, Applebot-Extended, Meta-ExternalAgent, Bytespider, CCBot and Amazonbot. Amazonbot is classed as training in our registry by our own judgment, since Amazon documents it as improving Alexa answers, which is a mixed role; the other eight are training crawlers on their vendors' own descriptions.

Fifteen of the 22 disallow eight or nine of the nine at the root. Three of the fifteen disallow all nine: unesco.org, acog.org and sendbird.com, each of which has added anthropic-ai to a list that does not otherwise include it. Seven disallow none of the nine: circleci.com, freshworks.com, snyk.io, twilio.com, vercel.com, visma.com and geico.com. Six of those seven name no training token anywhere in the file, so the Content-Signal line is the only thing in the file that addresses training at all, and it is the line with no force.

geico.com is the seventh and it is a different case, because it names them. The file writes Content-Signal: search=yes, ai-input=yes, ai-train=no inside the group headed by an asterisk, and then, further down the same file, writes a group for GPTBot whose only rule is Allow: /, and another for ClaudeBot, and for Google-Extended, CCBot, Anthropic-AI, Applebot-Extended, Bytespider, Amazonbot and meta-externalagent, each with Allow: / under it. Twenty five user-agent lines, no Disallow rule inside any of the training groups, and a declaration at the top saying training is not permitted. Read by a crawler that implements only the protocol, that file grants nine training crawlers the entire site. Read by a person, it says the opposite.

We are not calling that a mistake, because we cannot see the intent behind it and the two lines may be doing deliberately different jobs, one legal and one technical. What we can say is what a crawler receives, and this is the same gap in a different place from the one we measured yesterday, when 89 of 145 files naming an AI crawler ruled only on the whole site. A robots.txt file is a poor summary of a site's position on AI and a precise statement of its access rules, and reading it as the first is how AI visibility gets estimated wrongly in both directions. Seeing what a crawler actually receives from a page is a separate question again, which is what the GPTBot view renders.

What the file declares

  • User-agent: *
  • Content-Signal: search=yes, ai-input=yes, ai-train=no
  • An other record under section 2.2.4
  • Crawlers MAY interpret it
  • Our parser logs: unknown field, ignored

What the file rules

  • User-agent: GPTBot
  • Allow: /
  • The same for ClaudeBot, CCBot, Google-Extended,
  • Anthropic-AI, Applebot-Extended, Bytespider,
  • Amazonbot and meta-externalagent
The two halves of geico.com/robots.txt as fetched on 13 September 2026. Both are in the same file. Only the right half is a rule under RFC 9309.

What does Cloudflare's managed robots.txt actually write?

The fifteen files that pair ai-train=no with real Disallow rules are almost all one product's output, so it is worth reading what that product writes. The example on Cloudflare's managed robots.txt page, read on 13 September 2026, puts Allow: / in the wildcard group next to the Content-Signal line, then writes Disallow: / under eight named tokens: Amazonbot, Applebot-Extended, Bytespider, CCBot, ClaudeBot, Google-Extended, GPTBot and meta-externalagent. That is eight of the nine training tokens in our registry, the missing one being the legacy anthropic-ai, which is why fifteen of these files score eight rather than nine and why the three that reach nine had to add a line themselves.

The files in the wild carry one token the documented example does not. Fourteen of the 38, all of them managed files, also write a group for CloudflareBrowserRenderingCrawler, and 15 of the 736 files in the whole scan name it. That is not a discrepancy anybody should be alarmed by, since a managed list is meant to move, but it is the behaviour to plan around: the list is maintained by the vendor and a site that turns the feature on is delegating which crawlers it refuses, which we set out when we found that Cloudflare generates your robots.txt and its token list changes without you. Cloudflare is explicit about the limit of the whole mechanism on that page: robots.txt compliance is voluntary, the file expresses your preferences, and it does not prevent crawlers from accessing your content at a technical level. If you want to enforce blocking rather than request it, the same page points at AI Crawl Control, a product rather than a file.

That distinction is about to matter to more sites than have chosen it, because the defaults are moving: from 15 September 2026 new domains onboarding to Cloudflare get bot settings under which crawlers classified as Training or as Agent are blocked on pages that carry ads, which we read from the changelog and wrote up as a default that depends on whether the page carries ads. A site that has been relying on a declaration will find its actual access position decided somewhere else, and neither the declaration nor the robots file will record it. The tokens themselves, and which vendor documents which, are collected in the AI crawler reference.

TokenIn Cloudflare's documented exampleDisallowed by, of 22 files
GPTBotYes15
ClaudeBotYes15
Google-ExtendedYes15
CCBotYes15
Applebot-ExtendedYes15
BytespiderYes15
AmazonbotYes15
Meta-ExternalAgentYes15
anthropic-aiNo3
The nine training tokens this scanner evaluates, whether Cloudflare's documented managed example disallows each, and how many of the 22 files declaring ai-train=no disallowed each at the site root on 13 September 2026.

What to check in your own robots.txt this week

Four checks, in the order that tells you the most for the least work, and none of them needs a tool to start.

First, read the file for the two halves separately. If a Content-Signal line is the only place training appears, then whatever the line says, every training crawler currently has whatever access your wildcard group gives. Second, evaluate each token rather than the file. A group headed by a token replaces the wildcard group for that crawler instead of adding to it, so a restrictive wildcard group and a permissive named group is a common and easily missed combination, and it is the geico pattern above in a milder form. Third, decide which of the two halves you actually want, because they answer different questions: the rule decides access, the declaration reserves a right and may matter in a jurisdiction where a reservation has legal weight, which is the ground the EU AI Act and its Code of Practice sit on. Wanting both is normal. Assuming one implies the other is the failure.

Fourth, check what you have said to the crawlers that are not training crawlers, because that is where most sites are accidentally strict. Of the 38 files carrying a signal, only two declare ai-input=no, so almost everybody in this sample is content to be read for a live answer. If your rules are stricter than your declaration on that point, you have blocked a citation without meaning to, and the guides for being cited by ChatGPT are written for exactly that gap. Our running measurements against this frame, and what they do and do not support, are collected on the research page.

  • A Disallow line under each training token you mean to refuse The only edit a compliant crawler is specified to act on. Fifteen of the 22 files declaring ai-train=no had one
  • A Content-Signal line matching those rules A declaration, not an access control. 38 of 736 files carried one on 13 September 2026
  • No named group that quietly re-allows what the wildcard group refused geico.com wrote Allow: / under nine training tokens beneath a declaration of ai-train=no
  • A deliberate answer on ai-input, not just on ai-train Only 2 of the 38 files declared ai-input=no, and that is the field that governs live answers
  • Knowing who maintains the token list 14 of the 38 files were vendor managed and carried a token the vendor's own documented example does not list
The four checks above as a list, with what this scan found for each on 13 September 2026 across 736 robots.txt files.

Written by

Lantad

Published .

A robots.txt file can now say two different things about AI training, and only one of them is a rule. The first is a Disallow line under a named crawler token, which is the mechanism the Robots Exclusion Protocol defines and the one every compliant AI crawler reads. The second is a Content-Signal line, a newer field that states what the operator permits their content to be used for. The two are written in the same file, a few lines apart, and nothing forces them to agree.

Common questions

Does a Content-Signal line block AI training?

No. It declares a preference. RFC 9309 section 2.2.4 says crawlers MAY interpret records that are not part of the robots.txt protocol, so nothing requires a crawler to read the line, and Cloudflare's own documentation for the feature, carrying Last updated Aug 3, 2026, states that robots.txt compliance is voluntary and that the file expresses your preferences but does not prevent crawlers from accessing your content at a technical level. The edit that changes access is a Disallow rule under the crawler's named token.

How many sites declare ai-train=no without blocking anything?

Seven of 22 in this sample. Lantad requested /robots.txt from 1,027 hostnames on 13 September 2026, 736 answered HTTP 200, 38 of those carried a Content-Signal line and 22 declared ai-train=no. Seven of the 22 disallowed none of the nine training crawler tokens this scanner evaluates at the site root: circleci.com, freshworks.com, snyk.io, twilio.com, vercel.com, visma.com and geico.com.

Which crawler tokens does Cloudflare's managed robots.txt disallow?

Eight, in the example on its managed robots.txt documentation page read on 13 September 2026: Amazonbot, Applebot-Extended, Bytespider, CCBot, ClaudeBot, Google-Extended, GPTBot and meta-externalagent. The legacy anthropic-ai token is not among them. Fourteen of the managed files this scan fetched also carry a group for CloudflareBrowserRenderingCrawler, which the documented example does not list.

Is ai-train=no the same as keeping a page out of AI answers?

No. The policy separates ai-train, which covers training or fine-tuning a model, from ai-input, which covers feeding content into a model for a live answer such as retrieval augmented generation. A site can refuse training and still be read for an answer, and in this sample almost all of them do: 24 of the 38 files declared ai-input at all and only two declared ai-input=no.

See what AI can read on your site

Run a free scan and get a graded report of exactly what AI crawlers can and cannot read, with ranked fixes.