State of the agent-readable web · July 2026

The agents are coming.
The web hasn't set the table.

Every month Desvela crawls the top 100,000 domains for the four surfaces a visiting AI agent can actually read: ai-catalog.json (Google's ARD standard), llms.txt, agents.md, and the AI-bot directives in robots.txt. This is what we found.

99,997
domains checked this pass
8
valid ai-catalog.json manifests with entries — in the entire scan
6.7%
of the top 1K publish an llms.txt
80.2%
of robots.txt naming GPTBot block it entirely
Adoption

Four surfaces, by ranking tier.

Tranco tierCheckedai-catalog.jsonllms.txtagents.md
top 1K1,000 2 (0.2%) 67 (6.7%) 2 (0.2%)
1K–10K9,000 18 (0.2%) 526 (5.8%) 19 (0.2%)
10K–100K89,997 125 (0.1%) 5178 (5.8%) 958 (1.1%)
ai-catalog.json reality check: 146 files respond — 114 are invalid JSON, and only 8 are valid manifests with at least one entry: huggingface.co, zapier.com, opus.pro, roboflow.com, clickhouse.com, datarobot.com, neon.com, desvela.dev (us). Google published the ARD spec in May 2026; adoption is a rounding error.
The door policy

Who's blocking the AI bots.

Domains that name each bot in robots.txt, and how many of those shut it out completely (Disallow: /). Before your agent touches a domain, this is the etiquette it should know.

BotNamed in robots.txtFully blocked
GPTBot10,474 8,395 (80.2%)
ClaudeBot9,291 7,472 (80.4%)
CCBot9,085 8,145 (89.7%)
Google-Extended8,446 6,929 (82.0%)
Bytespider8,230 7,667 (93.2%)
meta-externalagent7,422 6,551 (88.3%)
Applebot-Extended7,176 6,455 (90.0%)
PerplexityBot4,179 2,377 (56.9%)
anthropic-ai3,524 2,678 (76.0%)
cohere-ai2,763 2,248 (81.4%)
Claude-Web2,689 2,122 (78.9%)
Notable publishers

Who has set the table.

ai-catalog.json (valid, with entries): huggingface.co #1,345 · zapier.com #2,955 · opus.pro #21,089 · roboflow.com #32,436 · clickhouse.com #34,553 · datarobot.com #55,866 · neon.com #97,739 · desvela.dev (that's us — full disclosure) #—

llms.txt: cloudflare.com #3 · github.com #30 · wordpress.org #43 · digicert.com #44 · adobe.com #66 · opera.com #93 · samsung.com #94 · wordpress.com #99 · gravatar.com #137 · kaspersky.com #138 · dropbox.com #139 · reg.ru #145

agents.md: checkpoint.com #337 · paloaltonetworks.com #503 · olx.pl #1,119 · goal7.co #1,701 · razorpay.com #3,699 · nanit.com #4,735 · eufylife.com #4,799 · laravel-news.com #5,057 · nazwa.pl #5,064 · guinnessworldrecords.com #5,707 · jbhifi.com.au #6,051 · network-lc.ru #6,312

Method

How we count.

Plain GET requests (no rendering) against /.well-known/ai-catalog.json, /llms.txt, /agents.md and /robots.txt on each apex domain of the Tranco top-100K, paced at ~4 req/s globally, honoring robots.txt, as DesvelaBot/0.1 (bot policy). HTML responses to text paths count as absent. Every publisher is re-probed with a canary request to a nonexistent path: servers that answer 200 to anything are excluded as catch-alls, including some seemingly legitimate publishers. Undercounting beats inflating.

Full disclosure: desvela.dev — ours — appears among the publishers. We build the measuring stick and comply with it; its row gets no special treatment, and you can verify every surface yourself with a GET.
Subdomains are out of scope by design (docs.example.com publishing llms.txt does not count for example.com) — the census measures apex-domain adoption, same bar for everyone.