Two classes, very different consequences, and the rule that decides which ones you allow.
AI crawlers fall into two classes. Training crawlers collect content that may be used to train models. Retrieval agents fetch your page while an assistant answers a live question. Blocking the first is a choice; blocking the second removes you from answers.
Almost every argument about AI crawlers collapses the two classes into one, which is why the advice is contradictory. “Block the AI bots” and “you need to be in AI answers” are both reasonable positions, and they are not in conflict once you separate the agents by what they actually do.
A training crawler collects pages that may be used in building or updating a model. The effect, if any, is diffuse and slow: over time a model may become more familiar with your brand as a concept. Blocking one is a legitimate editorial and commercial decision, and plenty of publishers have made it.
A retrieval agent fetches your page in the seconds after a user asks a question, so the assistant can read it and quote it. There is no lag and no ambiguity about the effect. If the agent is refused, the assistant cannot cite you in that answer — not because it chose not to, but because it could not open the page.
This is why a single “block AI bots” rule is so damaging. The instinct behind it is about training. The collateral damage is entirely to retrieval.
| Agent | Operator | Class | Blocking it means |
|---|---|---|---|
OAI-SearchBot | OpenAI | Retrieval / index | Not in the pool ChatGPT search can cite |
ChatGPT-User | OpenAI | Retrieval, user-triggered | A user asking ChatGPT to open your page gets nothing |
GPTBot | OpenAI | Training | Long-term familiarity only |
PerplexityBot | Perplexity | Index | Perplexity has nothing of yours to cite |
Perplexity-User | Perplexity | Retrieval, user-triggered | User-initiated fetches fail |
Claude-SearchBot | Anthropic | Retrieval / index | Claude cannot surface you in search results |
Claude-User | Anthropic | Retrieval, user-triggered | User-initiated fetches fail |
ClaudeBot | Anthropic | Training | Long-term familiarity only |
Googlebot | Search + AI Overviews | You disappear from Google entirely | |
Google-Extended | Gemini training and grounding | Does not affect Search crawling or AI Overviews eligibility | |
Bingbot | Microsoft | Search index | Affects Bing and assistants that lean on its index |
CCBot | Common Crawl | Open dataset | Removed from a corpus many parties use |
Applebot-Extended | Apple | Training opt-out | Training only; Applebot itself still serves search features |
Two entries in that table catch people out. Google-Extended is not a search crawler — it governs whether your content is used for Gemini training and grounding, and disallowing it has no effect on whether Googlebot crawls you or whether you can appear in AI Overviews. And Applebot-Extended is the opt-out, not the crawler: blocking it does not remove you from Apple’s search features.
There is a defensible answer for each class, and they are different answers.
| You are | Training crawlers | Retrieval agents |
|---|---|---|
| A B2B company that sells to people who research first | Allow — there is no realistic downside and some upside | Allow. Blocking these is self-harm |
| A publisher whose product is the content itself | Reasonable to block, and many do | Allow, unless you are pursuing a licensing position — and know the traffic cost |
| Running a paywalled archive | Block | Allow on the free tier, block behind the wall |
| Unsure | Allow | Allow |
For most B2B companies, blocking a training crawler protects nothing of value and blocking a retrieval agent costs you the answers. If you take one rule away from this page: allow retrieval, decide about training on the merits.
Directives are per-agent and evaluated by the most specific matching group, so a blanket rule and a named rule can coexist. A configuration that allows retrieval while declining training looks like this:
User-agent: OAI-SearchBot
Allow: /
User-agent: ChatGPT-User
Allow: /
User-agent: PerplexityBot
Allow: /
User-agent: Claude-SearchBot
Allow: /
User-agent: GPTBot
Disallow: /
User-agent: ClaudeBot
Disallow: /
User-agent: CCBot
Disallow: /
If you have no reason to decline training either, the simplest correct file is a permissive one — and a permissive file has the advantage that it cannot be wrong about an agent that did not exist when it was written.
robots.txt is a request, not an enforcement mechanism. Well-behaved agents from the major operators honour it. Nothing in the file physically prevents a fetch. If your goal is enforcement rather than signalling, that is an infrastructure question, and it is worth knowing that the two are frequently confused in vendor marketing.
Because most blocks are not in the file. They are managed bot rules at the CDN, and they are the single most common cause of an unexplained absence.
Content delivery networks added AI-bot categories to their bot-management products, and some are switched on by default or enabled during a routine security review by somebody who was not thinking about search. The rule lives in a dashboard, not in your repository, so no code review will ever surface it.
Check, in this order: your robots.txt, your CDN bot-management settings, any WAF rules matching on user agent, and any origin-level rules in nginx or Apache. The conflict is almost always between the first and the second.
Make the request as the agent and read the status code. Nothing else settles it:
for ua in "OAI-SearchBot/1.0" "ChatGPT-User/1.0" "PerplexityBot/1.0" "GPTBot/1.0"; do
printf "%-22s " "$ua"
curl -s -o /dev/null -w "%{http_code}\n" -A "$ua" https://yourdomain.com/
done
A 200 is a pass. A 403 is a refusal. A 429 is a throttle, which behaves like a refusal from the agent’s point of view. And do the same test against a page deeper in the site, not just the homepage — rules are often scoped to paths.
Then check that the response actually contains your content:
curl -s -A "OAI-SearchBot/1.0" https://yourdomain.com/key-page | grep -c "a sentence from the page"
A 200 containing an empty JavaScript shell is a pass on access and a failure on everything downstream.
It is worth being precise, because the cost is not evenly spread across your funnel.
A blocked retrieval agent costs you the answers where a buyer is comparing options — the category questions, the “best X for Y” questions, the ones asked before anyone knows your name. Those are the answers you most want to be in, because being named there is the entire mechanism by which a stranger discovers you inside an assistant.
What it does not cost you is the branded question. Someone who already knows your company and asks about you by name will usually get an answer assembled from whatever the model already holds and whatever third-party sources it can reach. That answer may be stale, or wrong, and you have no ability to correct it while the agent cannot open your site — which is its own argument for allowing retrieval even if you never expect discovery traffic from it.
There is a second-order cost that is easy to miss. When an assistant cannot fetch your page but can fetch a competitor’s comparison article that describes you, the description of your company that reaches the buyer is the one your competitor wrote. Allowing retrieval is partly about being cited, and partly about being the most authoritative source on the subject of yourself.
A proposed file listing your key pages in a form convenient for language models. Its status is genuinely contested: Google has said publicly that it is not used for its AI features, while other vendors recommend it and some agents do request it.
The sensible position is proportionate: it costs almost nothing to publish, it is read by some agents, and it is not a substitute for anything. Ship it, and do not let it displace crawler access or schema work, which are the things with demonstrable effects. The full argument, with what Google actually said →
Your server or CDN logs already know. Filter requests by user agent for the names in the table above and you get a factual picture of which agents reach you, how often, which pages they request, and — crucially — which status codes they receive.
OAI-SearchBot, ChatGPT-User, PerplexityBot, Claude-SearchBot, GPTBot, ClaudeBot.403s is the finding.An agent that never appears at all is also information: either it has not discovered you, or something upstream is refusing it before it reaches your logs — which points back at the CDN.
They will. New assistants launch, operators split one agent into two, names change. Two habits keep you safe without constant attention.
robots.txt and find the named retrieval agents. If they are not there, note it.It is a defensible choice, because GPTBot collects content that may be used for training rather than for answering live questions. Blocking it costs long-term familiarity and nothing immediate. Blocking OAI-SearchBot or ChatGPT-User is a different decision entirely and removes you from ChatGPT's answers.
No. Google-Extended governs whether your content is used for Gemini training and grounding. It does not control Googlebot crawling, your Search rankings, or your eligibility to appear in AI Overviews, which follow standard Googlebot access.
The named agents from the major operators publish their user-agent strings and state that they honour robots.txt. The file is a request rather than an enforcement mechanism, so it signals intent; it does not physically prevent a fetch. Enforcement is an infrastructure question, not a robots.txt one.
Almost always a managed bot rule at the CDN. Several providers added AI-bot categories to their bot-management products and some are enabled by default or switched on during a security review. The rule lives in a dashboard rather than your repository, so nothing in your code reveals it.
Dozens, and the list changes. What matters is not completeness but coverage of the agents that actually produce citations: OpenAI's search agents, Perplexity's, Anthropic's, and Googlebot. Getting those right covers most of the answers your buyers will see.
Allowing retrieval agents is how you appear in answers at all, and assistant referrals tend to arrive further along in their decision. The honest trade-off is different: some questions get answered inside the assistant without a click, whether or not you allow the agent. Blocking does not recover that click, it just removes your name from the answer.