Research · October 2026 edition
State of AI Crawler Access What the top 9,973 sites tell AI crawlers, and whether their llms.txt holds up.
14.2% of the sites we could read shut at least one AI crawler out by name in robots.txt. 14.1% of the sites we asked publish an llms.txt.
- Measured
- 15 October 2026
- Panel
- 9,973 domains, Tranco list N26XW
- Updated
- A monthly pulse, a full report each quarter
- Author
- QueryRev Research
Crawlers covered, by what they are for
What each one doesCollects pages for AI training
- GPTBotOpenAI
- Google-ExtendedGoogle
- Applebot-ExtendedApple
- CCBotCommon Crawl
- Meta-ExternalAgentMeta
- BytespiderByteDance
Indexes pages for AI search
- OAI-SearchBotOpenAI
- PerplexityBotPerplexity
- AmazonbotAmazon
Fetches a page when a user asks
- ChatGPT-UserOpenAI
- Perplexity-UserPerplexity
and the catch-all group, User-agent: *No other crawler was measured; “any AI crawler” on this page means any of these 11.
Key figures
The answer, on three denominators.
Studies of AI crawler blocking disagree mostly because they divide by different things. Every share on this page carries the mark of what it is a share of.
What a share is of
- Sites read6,294 sites whose robots.txt answer we could read
- Whole panelall 9,973 domains of the panel
- With AI rules1,339 sites whose robots.txt names at least one AI crawler
For llms.txt, the sites read are the 6,030 that let us ask for one: 264 keep our crawler from /llms.txt in robots.txt.
Each pair is on one denominator. Their figures are from their own pages, read on the day given; ours are from this edition’s counts.
AI Crawler Check, robots.txt study published 5 October 2026: Tranco top 10,000, list of 4 October 2026. Read 16 October 2026.
GPTBot kept from the whole site, of the robots.txt files read
- Theirs
- 14.3%710 of 4,962
- Ours
- 13.0%730 of 5,637
The same, by a group that names GPTBot
- Theirs
- 11.1%549 of 4,962
- Ours
- 10.3%580 of 5,637
GPTBot kept from the whole site, of every domain on the list
- Theirs
- 7.1%710 of 10,000
- Ours
- 7.3%730 of 9,973
SEOmator, llms.txt adoption study published 13 September 2026: Cloudflare Radar top 100,000. Read 16 October 2026.
Publish an llms.txt, of every domain on the list
- Theirs
- 8.6%8,598 of 100,000
- Ours
- 8.5%848 of 9,973
Publish an llms.txt, of the domains that answered (theirs) or that we asked (ours)
- Theirs
- 11.4%8,598 of 75,353
- Ours
- 14.1%848 of 6,030
Where the rest of the difference comes from
- What counts as blocked. We count a crawler as blocked when its whole site is closed and no Allow opens a path again. AI Crawler Check counts any rules that keep it from the home page, /. A site closed except for a few paths is blocked there and partly blocked here.
- What counts as a file read. Both read robots.txt as RFC 9309 says. A web page, a bot check or a refusal is not a file in either; how each sorts the answers in between gives 4,962 files there and 5,637 here.
- The list. Their Tranco list is of 4 October 2026, ours of 14 October 2026. We also leave out the 25 domains of companies that build language models.
- What counts as an llms.txt. We count a file only when /llms.txt answers 200 with text that is not HTML and opens with a Markdown title. SEOmator counts a 200 whose body is not HTML, JSON or JavaScript, and checks the title apart. It found 20,171 domains answering 200 and 8,598 real files: counting every 200 would have overstated adoption 2.35×.
- Who is asked. SEOmator’s panel of 100,000 domains reaches far smaller sites than our 9,973. Its second denominator is every domain that answered; ours is the sites whose robots.txt we read and that let us ask.
The panel
One fixed panel of 9,973 domains, read again every month.
The first 10,000 places of Tranco list N26XW, created 14 October 2026 from rankings between 15 September 2026 and 14 October 2026. Each reading measures the same domains, so a change is a change on the web, not in the list.
A monthly pulse
robots.txt and llms.txt read again on the same panel; what changed goes into the change log on this page.
A full report each quarter
Every figure again, by crawler, rank and ending, with dated data files.
Within 48 hours of crawler news
A re-run when a crawler or a common robots.txt template changes, added to the same change log.
This edition is the baseline. The per-domain file lists the 9,973 domains of the panel with what we read (a site that opts out is left out of it), so anyone can compare the next reading with this one.
By crawler
Training crawlers are blocked by name more than search crawlers: 7.9% against 4.8%.
Most often: Bytespider, CCBot and GPTBot. The colour is what a crawler is for. A solid bar is blocked: a group naming the crawler closes the whole site. An outlined bar is partly blocked.
How this was counted
9.5%+1.5% partly
9.4%+2.4% partly
9.2%+3.3% partly
6.5%+2.5% partly
6.5%+1.6% partly
6.4%+2.0% partly
6.3%+1.8% partly
5.1%+2.9% partly
4.2%+3.2% partly
3.0%+1.3% partly
2.7%+3.0% partly
3.0%+1.1% partly
The table gives the counts. Blocked by any rule adds the sites whose catch-all group closes the whole site to a crawler that has no group of its own.
Show the numbers as a table
| Crawler | Purpose | Vendor | Blocked by name | Partly blocked by name | Named at all | Blocked by any rule |
|---|---|---|---|---|---|---|
| Bytespider | AI training | ByteDance | 595 | 92 | 742 | 770 |
| CCBot | AI training | Common Crawl | 594 | 152 | 847 | 763 |
| GPTBot | AI training | OpenAI | 580 | 210 | 1,019 | 730 |
| Google-Extended | AI training | 411 | 157 | 789 | 571 | |
| Amazonbot | AI search | Amazon | 406 | 102 | 596 | 573 |
| Meta-ExternalAgent | AI training | Meta | 401 | 125 | 600 | 573 |
| Applebot-Extended | AI training | Apple | 394 | 111 | 590 | 563 |
| PerplexityBot | AI search | Perplexity | 323 | 181 | 747 | 479 |
| ChatGPT-User | User fetch | OpenAI | 262 | 199 | 688 | 416 |
| Perplexity-User | User fetch | Perplexity | 186 | 81 | 367 | 359 |
| OAI-SearchBot | AI search | OpenAI | 172 | 188 | 591 | 326 |
| Every crawler (catch-all *) | 190 | 69 | 190 |
llms.txt
14.1% of the sites we asked publish an llms.txt. 59.0% of those files are complete.
A 200 answer is not enough: many sites answer every address with a web page. We count a file only when it is text, not HTML, and opens with a Markdown title.
How this was counted
- Median file
- 7 KB
- Median file
- 38 links
264 sites keep our crawler from /llms.txt in their robots.txt; we did not ask for theirs, so adoption is a share of the 6,030 sites we asked.
A file with a title
100.0%
A summary under the title
82.5%
At least one section that lists links
87.1%
Every link checked answers
84.9%
All of these
59.0%
Shares of the 848 files found. Links checked: 3,298, of which 92.6% answered with a page. Every link answers is counted over the 684 files with at least one link checked.
Show the numbers as a table
| A file with a title | 848 | 100.0% |
|---|---|---|
| A summary under the title | 700 | 82.5% |
| At least one section that lists links | 739 | 87.1% |
| Every link checked answers | 581 | 84.9% |
| All of these | 500 | 59.0% |
robots.txt and llms.txt
8.8% of the sites with an llms.txt keep an AI crawler from reading it.
An llms.txt is written for AI tools to read; robots.txt says which of them may. On the same site the two do not always agree.
Block an AI crawler by name
8.1%
Block none by name
15.1%
Shares of the sites in each group that we asked for an llms.txt: 862 block an AI crawler by name, 5,168 block none.
Show the numbers as a table
| Block an AI crawler by name | 70 of 862 | 8.1% |
|---|---|---|
| Block none by name | 778 of 5,168 | 15.1% |
Who wrote the rules
2.9% of robots.txt files carry a Content-Signal line.
Some robots.txt files are not written by the site. We looked for fixed signatures, each with one rule, in the 5,637 robots.txt files we read.
By rank
Places 1 to 1,000: 17.6% block an AI crawler by name. The rest: 13.9%.
The same figures for the top of the panel and for the rest, each as a share of the sites read in that band; llms.txt as a share of the sites we asked for one.
Block an AI crawler by name
17.6%
13.9%
Block GPTBot by name
10.2%
9.1%
Block every crawler (*)
6.8%
2.6%
Publish an llms.txt
19.1%
13.6%
Show the numbers as a table
| Places 1 to 1,000 | Places 1,001 to 10,000 | |
|---|---|---|
| Block an AI crawler by name | 17.6% (104) | 13.9% (792) |
| Block GPTBot by name | 10.2% (60) | 9.1% (520) |
| Block every crawler (*) | 6.8% (40) | 2.6% (150) |
| Publish an llms.txt | 19.1% (103) | 13.6% (745) |
By country-code domain
From 44.6% on .it to 3.7% on .cn.
The share that blocks an AI crawler by name, for each country-code ending (.de, .co.uk, .com.br) with at least 50 sites read. An ending is not a country: some, such as .io or .co, are used worldwide.
.it
56 read
44.6%
.fr
79 read
38.0%
.uk
57 read
33.3%
.de
139 read
19.4%
.br
63 read
15.9%
.jp
123 read
15.4%
.in
57 read
10.5%
.tv
54 read
7.4%
.ru
195 read
6.2%
.io
116 read
4.3%
.cn
54 read
3.7%
Show the numbers as a table
| Ending | Sites read | Block an AI crawler by name | Block every crawler (*) | Publish an llms.txt |
|---|---|---|---|---|
| .ru | 195 | 6.2% | 1.0% | 12.0% |
| .de | 139 | 19.4% | 1.4% | 9.7% |
| .jp | 123 | 15.4% | 0.0% | 5.9% |
| .io | 116 | 4.3% | 6.0% | 30.3% |
| .fr | 79 | 38.0% | 5.1% | 4.0% |
| .br | 63 | 15.9% | 0.0% | 20.6% |
| .in | 57 | 10.5% | 3.5% | 14.5% |
| .uk | 57 | 33.3% | 7.0% | 7.7% |
| .it | 56 | 44.6% | 0.0% | 5.6% |
| .cn | 54 | 3.7% | 0.0% | 1.9% |
| .tv | 54 | 7.4% | 3.7% | 0.0% |
Method
How we measured, and what it cannot tell you.
One run, from one place, with our own crawler, which reads robots.txt as the standard says (RFC 9309).
The panel
The first 10,000 places of Tranco list N26XW, less the domains of companies that build language models: 9,973 domains.
Details
Tranco ranks registrable domains, combined from several sources over 30 days; list N26XW was created 14 October 2026. 2 places were not a valid domain and were left out. We also leave out the domains of companies that build language models (25 domains), so the study measures how the rest of the web treats their crawlers. The list includes domains that serve no website, such as networks and APIs.
What was fetched
robots.txt, then /llms.txt unless robots.txt keeps us from it, then up to five links an llms.txt lists. Nothing else.
Details
For each domain, https://domain/robots.txt; when the domain did not resolve, or the connection to it failed or timed out, the www. host instead, if it answered (319 sites). Then /llms.txt on the same host, unless robots.txt keeps our crawler from it, and up to five links listed in a found llms.txt, on the site’s own host and allowed to our crawler, without reading their pages. Requests identified themselves as QueryRevBot, with a page that says how to stop it; at most 16 were in flight, one at a time per site, with a 10-second limit and redirects followed only to public addresses. Names were looked up through public resolvers. A domain that failed for network reasons was tried once more at the end.
How a rule was read
Blocked: the whole site closed to the crawler. Partly blocked: some paths closed beyond the catch-all group’s.
Details
The group that applies to a crawler is the one naming its product token, any case; failing that, the catch-all group. Within it the longest matching rule wins and Allow wins a tie. Lines other than rules, such as Sitemap, Crawl-delay or Content-Signal, do not split a group. Blocked means a rule for the whole site disallows / and no narrower Allow opens anything; partly blocked means a group naming the crawler closes paths that the catch-all group leaves open, closes the whole site with Allow exceptions, or closes only the home page (Disallow: /$). Paths a group repeats from the catch-all, such as /search, do not count. A 404 means no restrictions.
What counts as an llms.txt
A 200 answer is not enough. A web page served at /llms.txt, often with status 200 (a soft 404), is not counted.
Details
We count an llms.txt only when /llms.txt answers 200 with a text type, the body is not an HTML page and not a robots.txt served at that address, and its first non-empty line is a Markdown title (# Name), the one part llmstxt.org requires. Many sites answer every address with a web page; counting every 200 would count those pages as files.
What counts as read
6,294 of the 9,973 domains (63.1%) gave a robots.txt answer we could read.
Details
Of those, 5,637 had a file and 657 had none. A bot check or a web page served in place of the file, or a 202 answer, is not a file we could read. 0 sites opted out of the study and count only as opted out. The other 3,679 were not read: their counts by cause are below.
The crawlers measured
These 11 product tokens of 8 vendors, and the catch-all group. Other crawlers were not measured, and every “any AI crawler” figure means any of these.
Collects pages for AI training
- GPTBot
- OpenAI: Collects pages for model training
- Google-Extended
- Google: Opts pages out of Gemini training and grounding
- Applebot-Extended
- Apple: Opts pages out of Apple model training
- CCBot
- Common Crawl: Builds the open web archive used in many training sets
- Meta-ExternalAgent
- Meta: Collects pages for AI training and products
- Bytespider
- ByteDance: ByteDance crawler; purpose not documented
Indexes pages for AI search
- OAI-SearchBot
- OpenAI: Indexes pages for ChatGPT search
- PerplexityBot
- Perplexity: Indexes pages for Perplexity answers
- Amazonbot
- Amazon: Crawls for Amazon products and AI
Fetches a page when a user asks
- ChatGPT-User
- OpenAI: Fetches a page a user asks about
- Perplexity-User
- Perplexity: Fetches a page a user asks about
Domains not read, by cause
| The name did not resolve | 1,385 | 13.9% |
|---|---|---|
| Refused our crawler (401 or 403) | 1,065 | 10.7% |
| A bot check or a web page, not the file | 453 | 4.5% |
| No answer within 10 seconds | 383 | 3.8% |
| Connection or TLS failed | 241 | 2.4% |
| Server error (5xx) | 59 | 0.6% |
| Resolved to a private or reserved address | 52 | 0.5% |
| Redirects that could not be followed | 21 | 0.2% |
| Asked us to slow down (429) | 20 | 0.2% |
Limits
- robots.txt is a request, not an enforcement. A site may block a crawler at its CDN or firewall without saying so in robots.txt, or allow it in robots.txt and refuse it there; we read what the file says, not what the server does.
- A site that refuses our crawler, or serves a bot check in place of robots.txt, is counted as not read, not as having no file.
- We keep to our own robots rules, so a site whose robots.txt keeps our crawler from /llms.txt, every site that closes itself to all crawlers included, was not asked for one. The llms.txt figures, and their comparison with robots.txt, cover the sites that let us read it.
- One vantage point: a site that answers differently by country or by network was measured as it answered us.
- A rule naming a crawler is counted for that crawler only; similar tokens of the same vendor are separate rows or not measured.
Other studies, and how this one differs
- Cloudflare Radar AI Insights: robots.txt of the top domains, updated weekly.
- HasData AI Crawler Block Index: robots.txt and live responses for top Tranco domains and news sites.
- AI Crawler Check robots.txt study: robots.txt of top Tranco domains, by crawler and rank band.
- SEOmator llms.txt adoption study: llms.txt on the Cloudflare Radar top domains, with soft 404s set apart.
- A comparison of llms.txt adoption trackers: Why published llms.txt adoption figures disagree.
This study keeps one panel and reads it again every month with a change log; reads robots.txt and llms.txt of the same site against each other; measures how complete an llms.txt is, not only whether it exists; looks for rules written by a template; gives each figure on three denominators; and keeps the catch-all group apart from rules that name AI crawlers.
Data
Download, cite or embed it.
The data is free to use under CC BY 4.0: copy, share and adapt it, with a credit and a link to this page.
- Per-domain results (CSV)One row per domain of the panel, sites that opted out left out: what we read and how each crawler was treated.
- Every figure (CSV)Each figure with its count and its three denominators, overall, by rank and by ending.
- Every count (JSON)The counts this page is built from, as one JSON file.
The same data, mirrored
The same files under the same licence, on three research data hosts. The DOI is the dataset’s permanent address.
Cite this study
QueryRev Research. “State of AI crawler access, October 2026 (dataset).” QueryRev AI, 15 October 2026. https://queryrev.com/research/ai-crawler-access. Dataset: https://doi.org/10.5281/zenodo.23424275
The panel comes from Tranco
Le Pochat et al., “Tranco: A Research-Oriented Top Sites Ranking Hardened Against Manipulation,” NDSS 2019. List N26XW: https://tranco-list.eu/list/N26XW
Embed this chart
An image of the chart by crawler, with a link back. No script: paste it where your page takes HTML.
<a href="https://queryrev.com/research/ai-crawler-access#by-agent"><img src="https://queryrev.com/data/ai-crawler-access/2026-10/block-rates.svg" width="720" alt="Share of top sites that block each AI crawler by name in robots.txt, October 2026. Source: QueryRev Research."></a> <p>Source: <a href="https://queryrev.com/research/ai-crawler-access">State of AI Crawler Access, QueryRev Research</a> (CC BY 4.0)</p>
Questions
Does blocking an AI crawler in robots.txt stop it?
Not by itself. robots.txt is a request that well-behaved crawlers follow; it does not refuse any request. Sites that want to refuse a crawler do it at their server, CDN or firewall, which this study does not see.
Why do studies of AI crawler blocking give different numbers?
Mostly because they divide by different things: every domain on a list, the domains that answered, or the domains with a robots.txt file. This study gives each figure on three denominators so it can be compared with any of them, and puts its own figures on the denominators of two other studies under Key figures.
Why is the catch-all rule counted separately?
A site that blocks every crawler with User-agent: * is not making a choice about AI crawlers. Counting it as blocking each AI crawler would mix two decisions, so it has its own figure.
How do I keep my site out of this study?
Add User-agent: QueryRevBot with Disallow: / to your robots.txt. We still read robots.txt itself, as every crawler must, but nothing else, and your site is left out of the per-domain data and counted only as opted out.
Keep exploring