AI training opt-out tracker: how the top 500 websites use robots.txt
On 31 October 2026, 2 of the 227 readable robots.txt files among the Tranco top 500 had a group for the shared AI training token __usage_ai-training (twitter.com, x.com). 68 files (30 %) named at least one AI training control: the shared token, Google-Extended, GPTBot or ClaudeBot. We repeat the count every month with the same method.
By the Crawlerpeek editorial team · Run of , 19:48 to 19:57 UTC · Tranco list 746VX · first run · Method
Download CSV (one row per run)Per-domain CSV (2026-10-31)Open JSON
Latest run
31 October 2026. Shares are of the 227 readable files; 273 of the 500 domains gave no readable robots.txt.
| Signal in robots.txt | Files | Share of readable files | With Disallow: / in that group |
|---|---|---|---|
__usage_ai-training group (shared token) | 2 | 0.9 % | – |
| Google-Extended Google | 56 | 24.7 % | 33 |
| GPTBot OpenAI | 57 | 25.1 % | 38 |
| ClaudeBot Anthropic | 56 | 24.7 % | 38 |
| At least one of the four | 68 | 30 % | – |
| All three vendor tokens | 43 | 18.9 % | – |
Content-Signal line | 8 | 3.5 % | – |
| Misspelled token (matches nothing) | 0 | 0 % | – |
A file counts for a token when one of its User-agent lines names it exactly, apart from case. User-agent: * never counts: the draft says wildcard groups must not be read as matching the shared token, and a group for all bots says nothing about AI training in particular.
Who uses the shared token
| Rank | Domain | Rules in the group |
|---|---|---|
| 16 | twitter.com | Disallow:/ |
| 47 | x.com | Disallow:/ |
x.com and twitter.com served the same file, so this is one site owner.
Run by run
| Run | Readable files | Shared token | Google-Extended | GPTBot | ClaudeBot | At least one | Content-Signal | Data |
|---|---|---|---|---|---|---|---|---|
| 2026-10-31 Tranco 746VX | 227 of 500 | 2 | 56 | 57 | 56 | 68 (30 %) | 8 | CSV |
A new run is added at the start of each month. The list of top sites changes a little from month to month, so a change of one or two files can come from the list as well as from the sites.
What is being counted
__usage_ai-training is a policy token defined in the IETF Internet-Draft draft-kelley-aipref-training-preference-signal-00 (30 October 2026, an individual submission). A robots.txt group that names it states one preference against or in favour of AI training for every provider that reads it, instead of one group per vendor bot. It is not a crawl directive. Until providers read it, the vendor tokens Google-Extended (Google), GPTBot (OpenAI) and ClaudeBot (Anthropic) are how sites opt out of training, so we count those too. Background, provider dates and a parser test: __usage_ai-training in robots.txt: What to Add Now.
To add the group to your own file, use the robots.txt generator; the robots.txt validator flags misspelled variants of the token.
Method
- Sample: the top 500 domains of the Tranco list of the run day (list ID per run in the table and the files). Tranco ranks domains, not websites, so the sample includes CDN, API and tracking domains without a public site.
- One pass: one HTTPS request for
/robots.txton the domain, and one on www. plus the domain when the first answer was not HTTP 200. Redirects are followed, certificates are checked, the timeout is 10 seconds and at most 1 MB is read. - Polite: at most 2 requests per second over the whole run, robots.txt files only, with a user agent that names the survey and a contact page.
- A file is readable when the answer is HTTP 200, not empty and not an HTML page. Everything else (errors, 403, 404, timeouts, HTML) counts as not readable and is left out of the shares.
- Each readable file is split into groups as in RFC 9309 (consecutive User-agent lines share the rules below them). A token counts when a User-agent line names it exactly, apart from case; the Disallow: / column shows whether that group closes the whole site.
- The script and its parser are open:
scripts/ai-training-optout-scan.py, Python standard library only. The per-domain file of every run lets you recount each number.
Limits
- 273 of 500 domains gave no readable file in the latest run. Many are infrastructure domains without a website; others block unknown clients, which our survey client is. The shares describe the readable files, not the top 500 as a whole.
- A named token is not always an opt-out: a group can also allow a bot. The Disallow: / column counts only groups that close the whole site; partial rules are in the per-domain file.
- robots.txt states a preference; it does not show whether a provider follows it, and it says nothing about meta tags, HTTP headers or contracts that also express AI preferences.
- The top 500 are large sites. Small and medium sites may behave very differently.
Columns
The per-domain file has one row per domain and run:
| Column | Meaning |
|---|---|
scan_date | Day of the run (UTC) |
rank | Rank in the Tranco list of that run |
domain | Domain as listed by Tranco |
fetched_host | Host we asked: the domain, or www. plus the domain when the first answer was not HTTP 200 |
http_status | HTTP status of the last answer; 0 when there was no answer (timeout, DNS or TLS error) |
fetch_error | Error class when http_status is 0 |
readable | 1 when the answer was HTTP 200, not empty and not an HTML page |
bytes | Size of the answer in bytes (read up to 1 MB) |
token_present | 1 when a User-agent line names __usage_ai-training exactly (case-insensitive) |
token_rules | Allow and Disallow lines of that group; or a note when the token appears only outside a User-agent line |
token_typo | User-agent values that spell the token with other punctuation (e.g. usage-ai-training) and so match nothing |
content_signal | 1 when the file has a Content-Signal line |
google_extended_named | 1 when a User-agent line names Google-Extended |
google_extended_blocks_root | 1 when that group has Disallow: / |
gptbot_named | 1 when a User-agent line names GPTBot |
gptbot_blocks_root | 1 when that group has Disallow: / |
claudebot_named | 1 when a User-agent line names ClaudeBot |
claudebot_blocks_root | 1 when that group has Disallow: / |
The run file (ai-training-opt-out.csv) has one row per run with the counts above: scan_date, tranco_list_id, sample, readable, token_group, token_group_pct_readable, any_ai_training_control, any_ai_training_control_pct_readable, google_extended_named, google_extended_blocks_root, gptbot_named, gptbot_blocks_root, claudebot_named, claudebot_blocks_root, all_three_named, content_signal, token_typo, token_string_outside_group, period_start, period_end, per_domain_file. Percentages are of readable files. Both files quote every field and have no comment lines.
Cite this data
Free to use under CC BY 4.0 with a link to this page. Please cite the Tranco list as well (Le Pochat et al., NDSS 2019, list ID of the run).
Crawlerpeek. (2026). AI training opt-out tracker: robots.txt of the Tranco top 500 (Version 2026-10-31) [Data set]. https://crawlerpeek.com/data/ai-training-opt-out
License scope: our measurements and descriptions. Domain names and ranks come from Tranco; the robots.txt files belong to their sites.
Changelog
- 2026-10-31: First measurement, the day after the IETF draft that defines the __usage_ai-training token (30 October 2026). Top 500 rows of the Tranco list 746VX, identical to that day's daily file.
Related: robots.txt of 151 big sites · block AI crawlers · AI training crawlers · bot traffic data