invisit
All posts

By Miraç Berk16 min read

How many websites block AI crawlers? Data from the top 20,000

We read the robots.txt of the Tranco top 20,000. 15% block GPTBot by name, and three quarters of those still leave ChatGPT search open.

Rows of small matte white gates on violet dithered ground, most standing open, one indigo gate shut, with frosted glass posts in soft light.

Of the 10,870 sites in the Tranco top 20,000 with a readable robots.txt on 8 November 2026, 2,247 (20.7%) disallow at least one AI bot by name and 1,647 (15.15%) disallow GPTBot by name. CCBot is the most blocked name at 15.43%. Most sites that refuse AI training leave AI search open: 74.3% of the sites blocking GPTBot do not block OAI-SearchBot, and 75.4% of those blocking ClaudeBot do not block Claude-SearchBot.

Below are the numbers for 25 bots, the split between training, search and user-triggered fetchers, how large and smaller sites differ, the retired names sites still block, the link between blocking and Cloudflare-style signals, the full method with its limits, and the raw data, which you may reuse with attribution.

Headline number Sites Share
Name at least one AI bot in robots.txt 2,981 27.4%
Block at least one AI bot by name 2,247 20.7%
Block GPTBot by name 1,647 15.15%
Block none of the 8 main training names by name 8,647 79.5%
Block all 8 main training names by name 780 7.2%
Block every unnamed bot with User-agent: * 507 4.7%
GPTBot blockers that leave OAI-SearchBot unblocked 1,224 74.3%
ClaudeBot blockers that leave Claude-SearchBot unblocked 1,138 75.4%

Shares are of the 10,870 sites with a readable file, except the last two, which are shares of the 1,647 GPTBot blockers and the 1,509 ClaudeBot blockers.

What share of websites block AI crawlers?

About one in five popular websites blocks at least one AI bot by name: 2,247 of 10,870 readable robots.txt files, or 20.7%. Another way to read it is that 79.5% block none of the eight main training names (GPTBot, ClaudeBot, CCBot, Bytespider, Meta-ExternalAgent, Google-Extended, Amazonbot and Applebot-Extended) by name.

A smaller group goes all the way: 780 sites (7.2%) block all eight training names. And 2,981 (27.4%) mention at least one AI bot somewhere in the file, whether to block or to allow it.

“By name” means a robots.txt group names that bot and disallows ordinary pages. Separately, 507 sites (4.7%) shut out every bot they do not name with User-agent: * and a full disallow. Counting sites blocked only that way, GPTBot’s share rises from 15.15% to 19.15%. We report both, and use the by-name figure wherever we talk about a decision aimed at a specific bot.

Which AI crawlers get blocked the most?

CCBot, GPTBot and Bytespider are the most blocked names, each on about 15% of readable files. Training crawlers are blocked far more often than search crawlers or user fetchers: most named training bots sit between 11.75% and 15.43%, the search bots between 0.70% and 6.40%, and the user-triggered fetchers between 1.67% and 5.83%.

Bar chart of the share of sites disallowing each AI bot by name, grouped into training, search and user fetchers. Training names such as CCBot and GPTBot lead at about 15%, search and user fetchers sit mostly under 7%.
Share of the 10,870 sites with a readable robots.txt that disallow each bot by name, 8 November 2026.
Bot Kind Sites, by name % by name % incl. User-agent: *
CCBot Training 1,677 15.43 19.68
GPTBot Training 1,647 15.15 19.15
Bytespider Training 1,637 15.06 19.36
ClaudeBot Training 1,509 13.88 18.08
Meta-ExternalAgent Training 1,338 12.31 16.61
Google-Extended Training 1,323 12.17 16.25
Amazonbot Training 1,288 11.85 16.12
Applebot-Extended Training 1,277 11.75 16.04
PerplexityBot Search 696 6.40 10.47
ChatGPT-User User fetch 634 5.83 9.83
MistralAI-Training Training 514 4.73 9.37
Meta-ExternalFetcher User fetch 421 3.87 8.33
OAI-SearchBot Search 416 3.83 7.84
Perplexity-User User fetch 401 3.69 8.00
Claude-User User fetch 396 3.64 7.85
DuckAssistBot User fetch 370 3.40 7.76
Claude-SearchBot Search 362 3.33 7.52
MistralAI-User User fetch 328 3.02 7.51
Meta-WebIndexer Search 270 2.48 7.04
Applebot Search engine 206 1.90 5.82
Amzn-SearchBot Search 182 1.67 6.25
Amzn-User User fetch 182 1.67 6.26
Bingbot Search engine 80 0.74 4.14
MistralAI-Index Search 76 0.70 5.34
Googlebot Search engine 20 0.18 3.11

The Kind column is our grouping; what each bot does is in our AI crawler reference. Two placements are judgement calls. Common Crawl describes CCBot as building “an open repository of web crawl data”, and ByteDance’s only page on Bytespider (in Chinese) describes it as Toutiao Search’s crawler. They sit with training here because their block rates do. Google-Extended is also not a crawler: Google calls it “a standalone product token”, and blocking it does not touch Google Search (Google, checked on 8 November 2026).

Almost nobody blocks the search engines themselves. Googlebot is disallowed by name on 20 sites of 10,870.

Mostly no. Of the 1,647 sites that block GPTBot by name, 1,224 (74.3%) leave OAI-SearchBot unblocked and 423 (25.7%) block it too (412 by name, 11 through a User-agent: * rule). The pattern is almost identical at Anthropic: of the 1,509 sites blocking ClaudeBot by name, 1,138 (75.4%) leave Claude-SearchBot unblocked and 371 (24.6%) block it too (359 by name, 12 through *). This is the study’s main finding. A site refusing training usually stays available for citation.

Part of this split may be a default rather than a decision. 519 of the 1,224 GPTBot blockers that leave search open also carry a Content-Signal line, the mark of a managed robots.txt. Without those sites the pattern weakens but holds: of the 1,101 GPTBot blockers with no Content-Signal line, 705 (64.0%) leave OAI-SearchBot unblocked, and of the 969 such ClaudeBot blockers, 625 (64.5%) leave Claude-SearchBot unblocked.

Two split bars. Of 1,647 sites blocking GPTBot by name, 1,224 leave OAI-SearchBot unblocked and 423 block it. Of 1,509 sites blocking ClaudeBot by name, 1,138 leave Claude-SearchBot unblocked and 371 block it.
Of the sites blocking the training bot by name, how many also block the same operator's search bot, by name or through User-agent: *.

The opposite setup barely exists. Only 2 sites block OAI-SearchBot by name while leaving GPTBot open. 13 sites shut out every crawler with * but name OAI-SearchBot with an explicit allow, so they let exactly the search side in.

The split is one operators invite. OpenAI says “each setting is independent of the others” and that a site “can allow OAI-SearchBot in order to appear in search results while disallowing GPTBot” (OpenAI, checked on 8 November 2026). It also says sites opted out of OAI-SearchBot “will not be shown in ChatGPT search answers, though can still appear as navigational links”. Anthropic says disabling Claude-SearchBot “may reduce your site’s visibility and accuracy in user search results” (Anthropic, checked on 8 November 2026).

Part of this split may be a default rather than a decision. The managed file Cloudflare documents names training crawlers only, so a site using it gets the selective setup without writing a line (more below).

Site What its robots.txt said on 8 November 2026
nytimes.com Blocks GPTBot, OAI-SearchBot and ChatGPT-User by name
bbc.co.uk Blocks GPTBot, OAI-SearchBot and ChatGPT-User by name
cnn.com Blocks GPTBot, OAI-SearchBot and ChatGPT-User by name
forbes.com Blocks GPTBot by name, explicitly allows OAI-SearchBot
medium.com Blocks GPTBot and ClaudeBot by name, search bots unblocked
reddit.com Blocks every unnamed bot with User-agent: *
theguardian.com Blocks ClaudeBot by name, does not name GPTBot
wikipedia.org, shopify.com, wordpress.com Name none of GPTBot, OAI-SearchBot, ChatGPT-User or ClaudeBot

Do websites block user-triggered fetchers like ChatGPT-User?

Far less often than training bots, and the block may do less than it looks like. ChatGPT-User is disallowed by name on 634 sites (5.83%), against 1,647 for GPTBot. Of the GPTBot blockers, 1,032 (62.7%) leave ChatGPT-User unblocked, and 381 block all three OpenAI bots by name.

A user fetcher loads a page because someone asked an assistant about it, so operators treat robots.txt differently here, and they do not agree with each other. As of 8 November 2026:

Fetcher What the operator says
ChatGPT-User “Because these actions are initiated by a user, robots.txt rules may not apply.” (OpenAI)
Perplexity-User “Since a user requested the fetch, this fetcher generally ignores robots.txt rules.” (Perplexity)
Amzn-User “It may not follow all robots.txt directives.” (Amazon)
Claude-User Disabling it “prevents our system from retrieving your content in response to a user query” (Anthropic)
MistralAI-User The token “governs which sites these user requests can be made to” (Mistral)
DuckAssistBot After a disallow takes effect, it “will stop crawling your site” (DuckDuckGo)

So the 634 sites disallowing ChatGPT-User have recorded a preference that OpenAI says may not apply. Where a fetcher ignores robots.txt, only a server or CDN rule actually stops it.

Do bigger websites block AI crawlers more than smaller ones?

Yes, on every bot we split by rank, and in relative terms the gap is widest for the search and user bots. GPTBot is blocked by name on 18.00% of readable files in the top 1,000 and 15.15% in the top 20,000. OAI-SearchBot nearly doubles, from 3.83% across the top 20,000 to 7.24% in the top 1,000.

Grouped bars for the top 1,000, top 10,000 and top 20,000 sites. GPTBot falls from 18.00% to 15.15%, ClaudeBot from 17.81% to 13.88%, OAI-SearchBot from 7.24% to 3.83% and ChatGPT-User from 9.59% to 5.83%.
Share of readable robots.txt files disallowing each bot by name, by Tranco rank tier. Each tier includes the ones above it.
Bot Top 1,000 Top 10,000 Top 20,000
CCBot 18.98% 16.06% 15.43%
GPTBot 18.00% 15.44% 15.15%
ClaudeBot 17.81% 14.25% 13.88%
Google-Extended 15.07% 12.68% 12.17%
ChatGPT-User 9.59% 6.69% 5.83%
OAI-SearchBot 7.24% 4.61% 3.83%

The top tier is a small base: 511 readable files in the top 1,000, against 5,472 in the top 10,000 and 10,870 overall. The tiers are nested, so the top 20,000 column contains the other two.

Which retired or undocumented bot names are sites still blocking?

Well over a thousand robots.txt files name bots their operators do not document. 1,559 sites name anthropic-ai or Claude-Web, and 1,367 name cohere-ai. Of the 1,285 sites that block one of the two old Anthropic names by name, 99 (7.7%) leave ClaudeBot, the name Anthropic uses today, unblocked. Examples include espn.com, science.org and abcnews.com, which block anthropic-ai and never mention ClaudeBot.

Name in robots.txt Sites naming it What the operator says, checked on 8 November 2026
anthropic-ai 1,472 Not on Anthropic’s crawler page, which lists “three robots”: ClaudeBot, Claude-User, Claude-SearchBot
Claude-Web 1,232 Not on that page either
cohere-ai 1,367 Not listed as a bot. Cohere’s table of bots reads N/A
GrokBot 111 xAI documents no crawler
xAI-Grok 74 xAI documents no crawler
Google-NotebookLM 162 “Former agent (supported until August 2026)”, replaced by Google-GeminiNotebook

Anthropic. Its crawler page does not mention anthropic-ai or Claude-Web at all, and says nothing about their status. The retirement comes from a statement an Anthropic spokesperson gave 404 Media in July 2024: the two names “are no longer in use”, and ClaudeBot was configured “to respect any existing robots.txt directives that were previously set for these deprecated user agents”.

That qualifies the 99. Read literally under RFC 9309, these files leave ClaudeBot unblocked. Anthropic’s 2024 statement says the old rules were carried over, but that is a press statement from two years ago, and its current page does not repeat it. A few of the 99, such as trustpilot.com and oreilly.com, do name ClaudeBot with rules of their own that leave ordinary pages open. If you mean to refuse Anthropic’s training crawler, name ClaudeBot, which is the rule Anthropic’s page describes.

Cohere. Its crawler page says “We do not use Cohere bots or user agents for the purpose of crawling or scraping web content to train generative AI foundation models at this time”, and the table of bots reads N/A. The string cohere-ai is not given as a bot name; the page’s only example token is Coherebot, in instructions for a future bot. The statement covers training crawlers and is silent on other kinds of bot.

xAI. On 8 November 2026 we downloaded xAI’s documentation export (about 2 MB) and searched it. “robots” and “crawler” appear zero times, the only grokbot matches are an email domain and a download path, and the only xai-grok matches are a package called xai-grok-shell. The names in these files come from somewhere other than xAI’s documentation.

Google. Google’s fetcher page gives Google-NotebookLM as a former agent, supported until August 2026.

The CSV also tracks FacebookBot (named on 790 sites) and DeepSeekBot (named on 300). We could not confirm the status of either from the operator’s own pages on the day, so we make no claim about them.

Is Cloudflare behind the blocking?

We can’t say from robots.txt alone, but the correlation is strong. 762 sites (7.0%) carry a Content-Signal line, the directive from Cloudflare’s Content Signals, and 546 of those (71.7%) block GPTBot by name, against 1,101 of the other 10,108 (10.9%). Those 546 sites are 33.2% of all GPTBot blockers. The most common value, on 466 sites, is search=yes,ai-train=no,use=reference.

Cloudflare’s docs, last updated 2 November 2026, explain why the two might travel together. When a customer turns on Bot Preference Sync and sets a policy to block, Cloudflare prepends managed content to the site’s robots.txt. The example file on that page has a Content-signal line with those same three values and a Disallow: / for eight names: Amazonbot, Applebot-Extended, Bytespider, CCBot, ClaudeBot, Google-Extended, GPTBot and meta-externalagent. Those are the same eight names as our main training list, and 780 sites block all eight.

This is a correlation. It does not show that any particular site uses Cloudflare:

Two consequences matter for reading the rest of this study. The example lists only training crawlers, so a site using it would block GPTBot and leave OAI-SearchBot alone, which is the selective pattern reported above. The content_signal column in the CSV lets you separate those sites. And Cloudflare says setting Training to Disallow also “enables edge blocking for AI training crawlers”, so for those sites the block may be enforced, which robots.txt cannot show.

The newer shared training signal has barely started: __usage_ai-training appears on 22 sites (0.2%). Google says it “intends to support” it “in early 2027” (Google). Anthropic’s page says that as of 30 October 2026 it has begun recognising a “no AI training” signal based on IETF aipref work, and that a robots.txt rule naming ClaudeBot takes priority over it, without giving the token in the page’s text.

How many websites have an llms.txt file?

2,053 of the 14,671 reachable sites (14.0%) serve an llms.txt, rising to 130 of 699 (18.6%) in the top 1,000. Of the 2,053, 1,902 open with a # heading, the one section the format requires. We checked the site root only, and the spec also allows files at subpaths, so this undercounts. The details are in our llms.txt adoption post.

What should you check in your own robots.txt?

Run this against your own domain to see which Anthropic, Cohere and xAI names your file uses, then compare with the checklist:

Terminal
curl -s https://www.example.com/robots.txt \
  | grep -iE '^[[:space:]]*user-agent:[[:space:]]*(anthropic-ai|claude-web|cohere-ai|grokbot|claudebot|claude-searchbot|claude-user)[[:space:]]*$'

The robots.txt generator writes a current file, and the AI crawler reference has the full list of tokens.

How was this measured?

We fetched robots.txt for every domain in the Tranco top 20,000, list 94P72, generated on 7 November 2026, and parsed each file the way RFC 9309 specifies.

Two checks on the pipeline. Our parser agreed with Python’s urllib.robotparser on 4,473 of 4,500 comparisons (1,500 wildcard-free files, 3 bots). All 27 differences were urllib departing from the RFC: 18 from dropping rules after a blank line, and 9 from reading only the first of several User-agent: * groups. And to test whether sites serve bots a different file, we refetched 302 sites with a Chrome user agent; of the 287 that answered, 286 served the same file.

The limits are real and worth stating before you quote any of this:

Can I reuse this data?

Yes. The data may be reused with attribution. Everything is in one folder; please credit Tranco for the ranking as well as this study for the scan.

File What it is
sites.csv One row per domain with rank, llms.txt flag, Content-Signal flag and a state for each bot
summary.json All aggregates by tier, plus the 150 most named user agents
collect.ts.txt The fetcher (Bun; drop .txt)
analyze.py.txt The parser and aggregation (Python; drop .txt)

Each bot column holds one of named_block, named_partial, named_allow, star (blocked only by *) or none, and is blank where the site had no readable file. The CSV holds these derived states, not copies of each site’s file. To reproduce the main finding:

reproduce.py
import csv

rows = list(csv.DictReader(open("sites.csv", encoding="utf8")))
valid = [r for r in rows if r["robots_valid"] == "1"]
gptbot = [r for r in valid if r["GPTBot"] == "named_block"]
search_open = [r for r in gptbot if r["OAI-SearchBot"] not in ("named_block", "star")]
print(len(valid), len(gptbot), len(search_open), round(100 * len(search_open) / len(gptbot), 1))
# 10870 1647 1224 74.3

To cite the study:

Citation
invisit (2026). How many websites block AI crawlers? Data from the top 20,000.
Scan of 8 November 2026, Tranco list 94P72.
https://invisit.dev/blog/how-many-sites-block-ai-crawlers

The ranking comes from Tranco, list 94P72. Tranco asks users to cite its paper: Le Pochat, Van Goethem, Tajalizadehkhoob, Korczyński and Joosen, “Tranco: A Research-Oriented Top Sites Ranking Hardened Against Manipulation”, NDSS 2019.

robots.txt only shows what a site asks for; to see which crawlers actually read your pages you need server-side records, which invisit, the tool we build, keeps with @invisitdev/server, classifying by user agent without checking IP lists.