Skip to main content
LovedByAI
Data Study

Are You Blocking AI Crawlers? A 314-Site Study

We fetched 314 live websites as 38 different AI crawlers. 43% refused at least one, and 112 refused at the server with nothing in robots.txt to show for it.

14 min read
By Jenny Beasley
Quick answer

Blocking AI crawlers is more common, and far less deliberate, than most site owners believe. Across 314 live websites checked against 38 crawler tokens in August 2026, 43% refused at least one AI crawler, and 112 of those sites refused at the server while robots.txt said nothing about it. Most of the blocking is aimed at training scrapers, but 33 sites were also turning away the crawlers that fetch pages to answer live questions.

The silent AI crawler block

Most of the argument about AI crawlers is about whether you should let them in. Publishers sue, Cloudflare ships blocking by default, and the comment sections fill up with people who feel strongly either way.

Almost nobody has measured the boring question underneath it: how many websites are already blocking AI crawlers, and do their owners know?

So we measured it. Between 27 and 30 August 2026 we ran a live crawlability check on 314 websites, fetching each one as 38 different AI crawlers in turn and comparing what came back against what the site's own robots.txt claims. 43% refused at least one AI crawler. Only 23 sites out of 314 had written that rule down anywhere.

The rest of this article is what we found, where the honest caveats are, and the one result that surprised us: the single biggest author of AI crawler rules on these websites was not the person who owns them.

How many websites block AI crawlers?

Every square is one of the 314 websites we checked

179 sites

Fully reachable

Every one of the 38 crawler tokens we tested got through.

112 sites

Blocked, but not in robots.txt

The server turns a crawler away. robots.txt says nothing about it.

23 sites

Blocked in robots.txt

Visible, auditable, reversible in a text editor. 18 of the 23 were written by Cloudflare, not the owner.

A site with both a written rule and a server block is counted once, under the written rule.

135 of the 314 sites refuse at least one crawler. That much matches the intuition anyone who works on this expects.

The split underneath it does not. A written robots.txt rule is visible, auditable and takes ten seconds to reverse. A server refusal is none of those things. The crawler asks for the homepage, the server answers 403 Forbidden, and nothing anywhere in the site's own configuration records that it happened. The owner can read their robots.txt all day and see a welcome mat.

Most affected sites are not blocking wholesale. 80 of the 135 refuse only one or two crawlers, 34 refuse between three and nine, 20 refuse between ten and twenty-nine, and exactly one site refuses all 38. The average of 4.4 refused crawlers per affected site is dragged upward by that tail, so the median of 2 is the more honest number.

Most of it is deliberate, and that is the part people get wrong

The finding it would be easy to oversell is that 43% of sites are accidentally shutting themselves out of AI search. They are not, and the data says so plainly.

Of the 135 sites that refuse a crawler, 102 refuse only training scrapers: Bytespider, Amazonbot, CCBot, Meta-ExternalAgent and their relatives. Those crawlers take content to train models and return nothing. Refusing them is a legitimate, common and increasingly default choice, and a site that does only that has lost nothing in AI search.

The number that should worry you is smaller and sharper. 33 sites refuse at least one crawler that fetches pages in order to answer a question somebody is asking right now: OAI-SearchBot, ChatGPT-User, PerplexityBot, Claude-SearchBot, Claude-User, DuckAssistBot and the rest of that group. Those are the requests that end in a citation with a link.

Of those 33 sites, 2 wrote the rule in robots.txt. The other 31 did not. On 20 of them there is no AI crawler rule anywhere in robots.txt at all, so there is nothing to find even if you go looking.

That is the study in one line. Blocking scrapers is a decision. Blocking the assistants is, in almost every case here, a side effect of blocking the scrapers with an instrument too blunt to tell them apart.

Two ways to shut a crawler out, and only one leaves a note

A robots.txt rule is a published policy. Somebody typed it, or a plugin typed it for them, and any crawler that respects the convention will honour it. You can read it, audit it and delete it.

A server refusal is a fact about the connection. A firewall rule, a bot filter, a security plugin or a CDN setting recognises the user agent and closes the door. There is no note. There is frequently no logging the owner will ever look at. And these rules tend to predate the question entirely: a "block bad bots" toggle switched on in 2021 does not know that ChatGPT-User would exist in 2026.

126 of the 314 sites have at least one server-level refusal. 54 of those sites are refusing from behind Cloudflare and 72 from something at the origin, which turns out to matter a great deal later on.

Cloudflare wrote most of the rules, not the owners

Here is the result we did not expect. Of the 23 sites carrying an AI crawler rule in robots.txt, 18 did not write it. Cloudflare did.

Those 18 files contain a block like this, delivered by Cloudflare's managed robots.txt feature and preceded by several paragraphs of Content Signals Policy boilerplate about Article 4 of the EU copyright directive:

# BEGIN Cloudflare Managed content
User-agent: *
Content-Signal: search=yes,ai-train=no,use=reference
Allow: /

User-agent: Amazonbot
Disallow: /
User-agent: Applebot-Extended
Disallow: /
User-agent: Bytespider
Disallow: /
User-agent: CCBot
Disallow: /
User-agent: ClaudeBot
Disallow: /
User-agent: Google-Extended
Disallow: /
User-agent: GPTBot
Disallow: /
User-agent: meta-externalagent
Disallow: /
# END Cloudflare Managed Content

On several of these sites the very next thing in the file is the owner's own SEO plugin, cheerfully allowing everything:

# START YOAST BLOCK
# ---------------------------
User-agent: *
Disallow:

Sitemap: https://example.com/sitemap_index.xml
# ---------------------------
# END YOAST BLOCK

Two configurations, two different intents, one file. The owner's tool says come in. Their CDN, above it, says no to eight named crawlers. Only 5 of the 314 site owners in this study wrote an AI crawler rule themselves.

This is also where the widely repeated "22 sites opted out of Google and Apple AI training" framing needs correcting, including in our own earlier draft of this data. 19 sites disallow Google-Extended or Applebot-Extended, the two tokens that are not crawlers at all but consent switches governing whether Google and Apple may use your content in AI answers. 18 of those 19 also disallow GPTBot, CCBot and Bytespider in the same breath. These are not sites that made a considered decision about Google's AI training. They are sites that received a standard list.

A separate 7 sites carry Cloudflare's Content-Signal line with no Disallow rules behind it. That is a stated preference with nothing enforcing it, and no major AI company has committed to reading it. We wrote about what changes in Cloudflare's September 15 defaults when the announcement landed in July. This is what the early version of it looks like in the wild, five weeks before the deadline.

What the refusal actually looks like

Every refusal we recorded, counted only where robots.txt allowed that crawler, so the table is specifically the silent kind. One site can appear in more than one row.

ResponseWhat it isRefusalsSites
403 ForbiddenA flat refusal. A firewall rule or security plugin recognised the user agent.509113
Cloudflare challengeA browser check the crawler cannot solve. To a bot, an unsolvable puzzle is a locked door.247
406 Not AcceptableRejected on sight, usually from a user-agent rule at the web server.205
Cloudflare cf_mitigatedA 403 issued by a Cloudflare managed rule rather than a customer rule.51

558 refusals in total. 93% of them are a plain 403, which is the signature of a rule keyed to the user agent string and nothing else.

Rate-limit responses are excluded from every figure in this study. Our check fires around 30 requests at a site in a burst and can trip a rate limiter by itself, so a 429 says something about our traffic rather than about the site's policy. Counting them would have added 107 refusals across 39 sites, and inflated the headline. We would rather the methodology survived scrutiny than the number looked bigger.

Which crawlers get turned away

Share of the 314 sites that refuse each crawler

written in robots.txtrefused by the server, nothing written down

BytespiderByteDance32.2%
AmazonbotAmazon29.6%
ClaudeBotAnthropic18.8%
GPTBotOpenAI14.0%
CCBotCommon Crawl11.1%
Meta-ExternalAgentMeta10.2%
PerplexityBotPerplexity8.0%
ChatGPT-UserChatGPT, live fetch7.6%
OAI-SearchBotChatGPT search7.0%
Claude-SearchBotClaude search6.7%
YouBotYou.com6.4%
DuckAssistBotDuckDuckGo5.7%
Six crawlers train models on what they take. The six below them fetch pages to answer a question somebody is asking right now, and almost nobody wrote a rule about those.

The order is the argument. Bytespider and Amazonbot sit at the top because people block them on purpose, and the amber segment shows that a meaningful share of those blocks were written down deliberately.

Everything below GPTBot is almost pure red. PerplexityBot is refused by 8.0% of sites and exactly one of them wrote a rule about it. OAI-SearchBot, the crawler that builds ChatGPT's search index, is refused by 7.0% and again by one written rule. These crawlers are not being blocked. They are being caught.

Does the block work? We checked it against the server logs

A crawlability check tells you what our request received. It does not, by itself, tell you what the real crawler receives. So we tested the check against four weeks of actual server logs from the same sites, covering 1 to 26 August, before the check ran.

Share of sites that logged a real page request from the crawler, 1 to 26 August 2026

Grouped by what our check found on the same sites a few days later.

GPTBot

Reachable80.4%n=270
Disallowed in robots.txt33.3%n=18
Refused at the origin29.4%n=17
Refused at the edge0.0%n=9

ClaudeBot

Reachable79.9%n=254
Disallowed in robots.txt17.6%n=17
Refused at the origin26.3%n=19
Refused at the edge4.2%n=24

PerplexityBot

Reachable65.1%n=289
Disallowed in robots.txt0.0%n=1
Refused at the origin20.0%n=15
Refused at the edge11.1%n=9

OAI-SearchBot

Reachable87.3%n=292
Disallowed in robots.txt100.0%n=1
Refused at the origin84.6%n=13
Refused at the edge0.0%n=8
Robots.txt and sitemap fetches are not ingested into these logs, so every request counted here is a crawler asking for a page. Groups of 20 sites or fewer carry wide error bars, and the single robots.txt-disallowed site under OAI-SearchBot and PerplexityBot is a coin toss, not a finding.

Two things fall out of this, and the second one is more useful than the first.

The check is measuring something real. Sites where we found GPTBot refused at the edge logged zero GPTBot page requests in four weeks. Sites where we found it reachable logged some on 80.4% of them. The same pattern holds for ClaudeBot, 79.9% against 4.2%, and for PerplexityBot, 65.1% against 11.1%.

Where the block lives decides whether it works. An edge block, at Cloudflare, happens before the request ever reaches your site, so the crawler gets nothing and your logs record nothing. An origin block, from a security plugin or a server rule, happens after the request arrives. That is why origin-blocked sites still show high log rates: the request lands, gets recorded, and is then refused. The crawler still leaves empty-handed.

For OAI-SearchBot the contrast is stark. Sites blocking it at the origin logged a page request 84.6% of the time, barely below the 87.3% of fully reachable sites. Sites blocking it at the edge logged one 0.0% of the time. If you are trying to work out whether you have a problem by looking at your own analytics or a crawler-stats plugin, an origin block is close to invisible in exactly the way a real refusal is not.

Robots.txt sits in between, as you would expect from a convention rather than an enforcement mechanism. 33.3% of the sites disallowing GPTBot still logged GPTBot page requests, and 17.6% of those disallowing ClaudeBot logged ClaudeBot. Neither figure includes robots.txt or sitemap fetches, which are not ingested into these logs, so every request counted is a crawler asking for a page it was told not to take.

What we could not show

The result you would most want from this study is that blocked sites earn less AI traffic. We cannot show it, and it would be easy to pretend otherwise.

Across June to August, median AI referral visits per site ran at 12 for the 269 reachable sites, 6 for the 11 sites blocking OpenAI's crawlers at the edge, and 5 for the 17 blocking them at the origin. That points the right way. Then the 17 sites disallowing OpenAI in robots.txt came in at 19, higher than the reachable group, which is the opposite of the story.

With groups of 11 to 17 sites and no control for site size, page count or niche, these differences are not separable from noise. This study establishes that a large minority of sites refuse AI crawlers and that most of them cannot see it from their own configuration. It does not establish what that costs them. For evidence on the other end of the funnel, our 108,000-page study of AI search optimization measures referral traffic properly, with a control group and a matched window.

Methodology

Data source. First-party crawlability check records and bot logs from the LovedByAI platform. Nothing here comes from a third-party estimator.

What the check does. For each website it fetches robots.txt, evaluates it against 38 AI crawler and consent tokens exactly as those crawlers evaluate it, then sends a live request to the homepage using each crawler's own user agent, plus an unbranded control request from the same address.

Sample. One check per website, the most recent completed run between 27 and 30 August 2026, giving 326 checks. 12 are excluded because the unbranded control request was itself refused, so nothing about those sites is AI-specific. The study sample is 314 websites.

Who these sites are. Paying LovedByAI customers, overwhelmingly small and medium business sites on WordPress. The monthly sweep does not cover free-tier sites. Every figure describes these 314 sites and should not be read as a figure for websites in general.

Definition of a robots block. The site's robots.txt disallows that crawler's token from the homepage path.

Definition of a server refusal. robots.txt allows the crawler, and the live request carrying that crawler's user agent returned 403, 406 or an unsolvable Cloudflare challenge, while the unbranded control request from the same address succeeded. Because the control succeeded, the refusal is attributable to the user agent string rather than to our IP address or to the site being down.

429 exclusion. Rate-limit responses are excluded everywhere. The check sends around 30 requests in a burst and can trigger a rate limiter unaided. Including them would have added 107 refusals across 39 sites.

Site categories. Mutually exclusive and ranked by visibility: a site with any AI crawler rule in robots.txt is counted as declared (23), a site with no such rule but at least one server refusal is counted as silent (112), everything else is reachable (179). 14 sites have both a written rule and a server refusal and are counted under the written rule.

Consent tokens. 8 of the 38 tokens are consent switches with no crawler behind them and are therefore evaluated against robots.txt only, never probed: anthropic-ai, Applebot-Extended, Google-Extended, Google-NotebookLM, Grok-User, GrokBot, Grok-bot and xAI-Bot. They can appear as a robots block and never as a server refusal.

Assistant crawlers. The 33-site figure counts a site if any of these were blocked either way: OAI-SearchBot, ChatGPT-User, PerplexityBot, Perplexity-User, Perplexity, Claude-SearchBot, Claude-User, Claude-Web, DuckAssistBot, YouBot, MistralAI-User, DeepSeek-User, Google-Agent, Google-GeminiNotebook, Google-NotebookLM, Meta-ExternalFetcher, Grok-User.

Log validation. Bot requests from 1 to 26 August 2026, entirely before the check window, on the assumption that WAF and firewall configuration is stable over weeks. The metric is the share of sites in each group that logged at least one request from that crawler, chosen over request volume because crawl totals in this fleet are dominated by a handful of large sites. Requests for .txt and .xml paths are not ingested, so robots.txt and sitemap fetches cannot inflate the figure.

Privacy. No website is identified, and no site-level data is published. Only counts, crawler tokens and HTTP response codes. The robots.txt excerpts above are the verbatim Cloudflare and Yoast boilerplate that appears identically across many sites, with the domain replaced.

Known limits. Not a random sample of the web. A single homepage fetch per crawler, so a site could refuse a crawler on inner pages and pass here. Configuration is measured at one moment, and a bot-fight mode that samples traffic could refuse our request and admit the next one. The log validation is observational: it shows that the check's verdict predicts what appears in the logs, not that the block caused the absence.

Reproducibility. Every figure comes from one set of SQL queries against the production crawlability and bot-log tables. If you want the query behind a specific number, ask us and we will send it.

What to do about this

1. Read the server's answer, not robots.txt. 112 of these 314 sites have a robots.txt that tells you nothing useful about who can reach them. Fetching your own homepage as GPTBot with curl -A takes a minute and will tell you more than reading your configuration for an hour. Our free AI search checker does it for all 38 tokens at once and names each one that gets refused.

2. Decide which group you actually mean. Blocking Bytespider, Amazonbot and CCBot is a real position and 102 sites here hold it consistently. Blocking OAI-SearchBot and ChatGPT-User is a different decision entirely, and 31 sites appear to have made it by accident. Whatever you choose, write it in robots.txt so the next person can see it, then make the firewall match.

3. Check what your CDN has written on your behalf. 18 of the 23 written rules in this study came from Cloudflare's managed content block, not from the site owner. If you are on Cloudflare, open your own robots.txt in a browser and look for the # BEGIN Cloudflare Managed content marker before September 15 changes the defaults again.

If your site turns out to be reachable and you still are not showing up in AI answers, crawlability was never the bottleneck and the problem is further down the page. The signs a website is invisible to AI search covers what to look at next.

Jenny Beasley

Jenny Beasley is Head of GEO at LovedByAI. With 7+ years as SEO Director at IBM and 3 years pioneering LLM optimization, she developed the GEO framework behind the plugin, which earned optimized pages 11 times the AI referral visits of untouched pages across a 116-site study.

Frequently asked questions

In this study, 135 of 314 live websites, or 43%, refused at least one of the 38 AI crawler tokens we tested. That figure covers everything from a single scraper to a blanket refusal. Only 23 sites had written a rule in robots.txt. The other 112 refused at the server with nothing in the site's own configuration to show for it. The sample is paying LovedByAI customers, mostly small and medium business sites on WordPress, so it describes those 314 sites rather than the web at large.

Reading robots.txt is not enough, and that is the central finding here. On 112 of the 314 sites we checked, robots.txt allowed every AI crawler while the server refused them anyway, usually with a 403. The only reliable test is to send a real request using each crawler's user agent and see what comes back, alongside an unbranded control request that proves the site is up. Our free AI search checker runs that test and names each crawler that gets refused.

Bytespider is refused by 32.2% of the sites in this study and Amazonbot by 29.6%, both of them scrapers that publish nothing back. Below those the pattern changes: ClaudeBot 18.8%, GPTBot 14.0%, then PerplexityBot 8.0%, ChatGPT-User 7.6% and OAI-SearchBot 7.0%. The crawlers at the bottom of that list are the ones that fetch a page to answer a question a person is asking right now, and almost nobody wrote a rule about them.

Partly, and less completely than a server block. Of the 18 sites that disallowed GPTBot in robots.txt, 33.3% still logged real page requests from GPTBot in the preceding four weeks, against 80.4% of sites that allowed it. Of the 9 sites where a Cloudflare rule refused GPTBot at the edge, 0% logged a single page request. A written rule is a request that a crawler chooses to honour. An edge block is not a request.

It may be, and you would not have chosen it. Of the 23 sites in this study with an AI crawler rule in robots.txt, 18 carried Cloudflare's managed content block, a standard list disallowing Amazonbot, Applebot-Extended, Bytespider, CCBot, ClaudeBot, Google-Extended, GPTBot and meta-externalagent. Only 5 owners had written a rule themselves. On several of those sites the owner's own SEO plugin sat directly underneath the Cloudflare block, allowing everything.

Blocking training scrapers such as Bytespider, Amazonbot and CCBot is a defensible choice, and 102 of the 135 affected sites in this study block only that kind of crawler. The mistake is doing it with a blunt server rule that also catches OAI-SearchBot, ChatGPT-User, PerplexityBot and Claude-SearchBot, which fetch pages in order to cite you. Decide which of those two groups you mean, then write the rule where you can see it.

Ready to optimize your site for AI search?

Discover how AI engines see your website and get actionable recommendations to improve your visibility.

see how AI reads your site

Scan my site free