The AI Crawler Index

What the web tells eight AI crawlers, measured from robots.txt across the corpus and published with the date every reading was taken.

Reading of 2026-10-12. Series 2026-08-02 to 2026-10-12, 72 days of readings.

Blocked, by agentread 2026-10-12
Share of the 58 domains read on this day whose robots.txt disallows each agent, catch-all rules included. Bars are scaled to the largest value, not to 100%.
Domains read58on 2026-10-12
Most blocked5.2%GPTBot
Least blocked1.7%OAI-SearchBot
Catch-all block1.7%Disallow: / for everyone
Serve llms.txt19.00%the proposed standard
Days of series72from 2026-08-02

The series so far

72 days
Sites carrying a catch-all Disallow: /the whole corpus
2026-08-021.1% – 5.2%2026-10-12
Every point keeps the denominator it was computed against, so a growing corpus cannot restate a published figure.

The index

Eight AI crawlers decide whether your writing reaches a generative answer. This index reports what the web's robots.txt files say about each one, across the domains Domduck read on 2026-10-12.

Sample: 58 domains. Series: 2026-08-02 to 2026-10-12, 72 days of readings.

What the web says

AgentOperatorBlockedAllowed by nameNot named30-day change
GPTBotOpenAI5.2%6.9%89.7%-5.3 pts
OAI-SearchBotOpenAI1.7%6.9%93.1%-0.2 pts
ClaudeBotAnthropic5.2%6.9%89.7%-4.7 pts
PerplexityBotPerplexity5.2%6.9%89.7%+3.1 pts
Google-ExtendedGoogle5.2%6.9%89.7%-4.7 pts
Applebot-ExtendedApple3.4%3.4%94.8%-5.9 pts
CCBotCommon Crawl5.2%5.2%91.4%-4.9 pts
BytespiderByteDance5.2%1.7%94.8%-4.7 pts

The change column compares against 2026-09-12, 30 days earlier, when 475 domains were read.

Most blocked on this reading: GPTBot at 5.2%. Least blocked: OAI-SearchBot at 1.7%.

1.7% of the corpus carries a catch-all Disallow: /, which blocks every agent that is not named in a group of its own. 19.0% serve an llms.txt.

The third column is the finding

"Not named" is the majority answer for every agent, and it is not a rounding of "allowed".

A file that never mentions an agent has not allowed it. A catch-all rule blocks it today if one exists, and a catch-all added next month catches it silently. The two states also have different futures, which is why merging them produces a number that cannot be compared with itself later: a rise in "allowed" could be adoption or could be silence.

Nearly every published AI crawler checker returns a boolean. On this corpus that boolean is wrong for the majority of domains, in one direction or the other.

What this data cannot show

Four limits, stated before anyone finds them.

  1. robots.txt is a declaration, not a control. It records what a site publishes, never what a crawler does. Published measurement puts unenforced GPTBot bans near 39.5%.
  2. A network-level block is invisible here. A site can go dark to an agent at its firewall or its CDN with no change to robots.txt, and no reader of that file can see it. Detecting it needs a fetch sent as the agent, which is a different source and is not part of this index.
  3. No intent is inferred anywhere. This index says an agent was blocked on a date. It never says a site decided to block AI, because the file does not say that and neither can we.
  4. The corpus is not the web. It is a seeded set of domains plus every domain a person has looked up. Every rate here is a rate within that set, and the sample size sits beside every figure for that reason.

Method

The corpus is seeded from a public top-sites list and grows with the domains people look up. Each domain's /robots.txt is fetched on a schedule, and the response is parsed against RFC 9309 rather than searched for a string: a Disallow binds to the nearest preceding run of User-agent lines, a new User-agent after a rule line starts a new group, the longest matching pattern wins, and Allow breaks ties.

Agent matching is exact. User-agent: Google is not treated as a rule about Google-Extended, because reporting a policy a site never wrote is worse than reporting none.

Each reading carries two verdicts per agent: what the file names, and what is in force once the catch-all is applied. The published rates use the second.

Requests are conditional. The previous reading's ETag goes out with each fetch, so an unchanged file answers 304 and the prior verdicts carry forward with a fresh timestamp. A day with no reading is stored as a gap rather than as a repeat.

Denominators are frozen into each row. The corpus grows, so every historic rate stays computed against the number of domains read on that day, and no later pass can restate a published figure.

Date precision follows the cadence. Domains people track are read daily. Seeded domains are read on a slower rotation, so a change on one of those is dated to the pass that found it rather than to the day it happened.

The parser's rules and the three states it reports are documented at robots.txt, and it is being extracted into a standalone package so the measurement can be checked rather than trusted.

The data

The full aggregate series, one row per day per agent, is at /research/ai-crawler-index.csv. It carries no domain names and no account data. It is free to use with attribution to Domduck and a link to this page.

Columns: day, agent, domains_read, blocked, allowed_by_name, unspecified.

What comes next

Cloudflare changes its AI-crawler default on 2026-09-15, for new customers, new sites of existing customers, and existing free-tier sites. A large number of sites will change posture on one day without anyone editing a file.

Robots.txt has no history. Change it and the previous version is gone, so what a site allowed on 14 September can only be known if a third party wrote it down first. This index exists to be that record, and the reason it is running now rather than in September is that it cannot be started afterwards.

Editions: this index monthly, a longer cut quarterly, and a full-year reference with the complete series.

Use it

Any figure here is free to quote with attribution. If you need a cut this page does not show, by top-level domain, by rank band, by registrar or by date, write to [press@domduck.com](mailto:press@domduck.com) and it gets run.

The live table updates as readings land, the change feed lists policy changes as they are observed, and how Domduck reads a domain explains the mechanics.