๐ค AI & Agents ยท 10 min read
AI Crawlers in robots.txt: Which to Allow, Which to Block
Allow the retrieval bots whose answers you want to be part of, and treat the training bots as a separate decision. A vendor like OpenAI gives you two independent switches for exactly that. Before you write the list, know one rule that catches almost every hand-written file: consecutive User-agent lines share a single group of rules. Then comes the part nobody enjoys, which is that a robots.txt file is a request and not a wall. RFC 9309 says so in its second paragraph, and the wording is worth keeping in mind while reading the rest of this page.
Which AI crawler tokens exist, and what does each one do?
The naming is not decorative. Vendors split their traffic by intent, and the intent decides whether blocking costs you anything. The table below only lists tokens whose purpose we could read on the vendor's own page, with the token in the form it takes in the file.
| Token | Vendor | What the vendor says it does |
|---|---|---|
| GPTBot | OpenAI | Independent setting; disallowing signals crawled content should not train foundation models |
| OAI-SearchBot | OpenAI | Independent setting; allow it to appear in search results |
| ChatGPT-User | OpenAI | Fetches a page on a user's behalf; not used for automatic crawling |
| ClaudeBot | Anthropic | Collects content that may contribute to training its models |
| Claude-SearchBot | Anthropic | Navigates the web to improve the quality of search results |
| Claude-User | Anthropic | Fetches pages for people using Claude; disabling may cut visibility in user-directed search |
| Google-Extended | Control token with no separate HTTP user agent; governs use of crawled content | |
| Applebot-Extended | Apple | Opt-out from training generative models; does not stop Applebot crawling |
| CCBot | Common Crawl | Builds an open repository of web crawl data, published for anyone to analyse |
Two of those rows deserve a longer look, because they are the ones people misread. Google documents Google-Extended as a token with no user agent string of its own: the crawl happens under ordinary Google user agents and the token acts as a control switch. That means you cannot find it in a log, and you cannot treat its appearance there as evidence of anything. Apple makes a similar distinction from the other direction, noting that disallowing Applebot-Extended does not stop Applebot from crawling, and that content stays discoverable in Spotlight, Siri and Safari either way.
OpenAI frames it as two independent tags rather than one crawler with a mood. Their overview says each setting works separately: a site can allow OAI-SearchBot to appear in search results while disallowing GPTBot to indicate the content should stay out of training data, and if a site allows both, one crawl may serve both purposes. They also note that a robots.txt change takes roughly 24 hours to show up in search behaviour. Anthropic splits its traffic three ways, with training, search indexing and user-initiated fetches on separate names, and adds the consequence that disabling user-initiated fetching may reduce how often your site surfaces when someone asks Claude a question.
Cloudflare's bot documentation is a useful second opinion on the categories, since it sits between sites and this traffic at scale. Under the taxonomy the company introduced on 1 July 2026 it labels AI Assistant as a bot driven by a user action, giving Perplexity-User and DuckAssistBot as examples, AI Crawler as traffic that gathers content for training, and AI Search as the bots behind AI-driven search experiences, with OAI-SearchBot as the example.
The grouping rule, and the file that gets it wrong
Here is the part that turns a tidy list of names into a surprise. RFC 9309 defines a group as one or more user-agent lines followed by one or more rules, and its grammar repeats the user-agent line within a group rather than after it. The example in the specification prints barbot and bazbot on two consecutive lines above a single rule, and describes that as a group relevant for more than one user agent. So this:
User-agent: GPTBot
User-agent: ClaudeBot
Disallow: /privateis not two rules. Both names get the same one. The same document covers the other half of the behaviour: if more than one group matches a product token, the matching groups' rules are combined, and * applies to user agents that have no explicit match at all. Nothing about group order changes the outcome.
Longest match is the last piece. Where an allow and a disallow both match a path, the more specific pattern wins, which is how you exempt one folder from a broader block.
What we measured on our own robots.txt
We wrote a small parser against the specification's grammar and ran it on our live file rather than on a copy, because a copy drifts. On 19 September 2026 our robots.txt came back as two groups: a wildcard group with one user-agent line and six rules, and a second group carrying sixteen user-agent lines that share the same six rules. Among the sixteen are GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-User, Claude-Web, anthropic-ai, PerplexityBot, Perplexity-User, Google-Extended, Applebot-Extended, CCBot, meta-externalagent, cohere-ai, Bytespider and Amazonbot.
| Test token | How it matched | Rules inherited |
|---|---|---|
| GPTBot | Explicit group | 6 |
| PerplexityBot | Explicit group | 6 |
| Claude-SearchBot | Wildcard fallback | 6 |
| An invented bot name | Wildcard fallback | 6 |
The count is identical in every row, and that is the finding worth passing on. Our private paths are closed to everything by the wildcard group already, so listing sixteen names beneath the same rules changes nothing about what any of them may fetch. The list is documentation rather than control, which is a fair thing to be honest about. It exists so that a person reading the file can see which bots we thought about.
Running the same parser over a synthetic file turned up the second finding, and it is the reason the trap above is worth printing. With GPTBot and ClaudeBot stacked above a single disallow, the parser assigned that rule to both, exactly as the specification requires. Anyone who intended two different policies has written one policy twice.
Two details of our own file are less flattering. We carry Claude-Web and anthropic-aialongside Anthropic's current names, and the page we read describes the company's crawlers as three: ClaudeBot, Claude-SearchBot and Claude-User. Legacy tokens are harmless in a list, since an unused name simply never matches, but a file that documents a set which partly no longer exists is a file that has stopped being maintained. We also noticed that our wildcard block comes first in the file and the named block second, which is legal and irrelevant to matching, and would confuse anyone who assumed the order carried meaning.
So should you block GPTBot?
The useful version of this question separates two things that get discussed as one. Being cited in an answer is a retrieval path. Being included in a training set is a separate use of the same content, and the vendors have given you separate switches for them, which suggests they consider the distinction real. Blocking the training token while allowing the retrieval tokens is the documented combination, not a hack.
| What you want | Retrieval tokens | Training tokens |
|---|---|---|
| Answers may cite the site | Allow | Your call |
| No training use | Allow | Disallow |
| Nothing automated at all | Disallow | Disallow |
What we would not do is claim this guarantees anything. No vendor has promised that allowing a bot produces a citation, and a file that asks for a behaviour is a long way from a system that enforces it. The honest summary is that the retrieval switches are cheap to leave open and the training switches are yours to argue about.
Do AI crawlers actually obey robots.txt?
Varies by bot, and the two clearest statements come from opposite sides of the line. Google's documentation states that its common crawlers always obey robots.txt rules when crawling automatically. OpenAI, describing the fetches made on a user's behalf, notes that ChatGPT-User is not used for crawling the web in an automatic fashion and that robots.txt rules may not apply, because a person asked for that page.
RFC 9309 already told you where this lands. Its introduction states that the rules are not a form of access authorization. If the difference matters to you, handle it where requests actually arrive, at the edge or in the application, and treat the file as a published statement of intent that most well-behaved crawlers will read.
How do you write the file so each bot gets its own rules?
- Decide by intent, not by name. Retrieval, training, and private paths. Three decisions, three blocks.
- One group per policy. Put the names that share a policy on consecutive lines, and separate policies with their own user-agent line followed by their own rules.
- Keep a wildcard block. Whatever has no explicit match falls back to
*, so this is where your private paths belong. - Parse it after you edit it. A grammar of this size is worth checking with a script rather than an eye, especially when your list grows past a handful of names.
- Pair it with a reading list. A robots.txt states what may be fetched. An llms.txt states what is worth opening, and the two answer different questions.
One more file belongs in the same afternoon's work if your site offers tools rather than text. Declaring those tools is what WebMCP covers, and it is the difference between a site an assistant can read and one it can use.
Frequently asked questions
Should I block GPTBot in robots.txt?
That depends on which switch you mean. OpenAI documents GPTBot and OAI-SearchBot as independent settings: a site can allow OAI-SearchBot so its content appears in search results while disallowing GPTBot to signal that the content should not be used for training foundation models. If you want to be quoted by an assistant, blocking the training bot costs you nothing; blocking the search bot removes you from the answers.
Do AI crawlers obey robots.txt?
It varies, and you should plan for the weaker case. RFC 9309 says plainly that the rules are not a form of access authorization, so a file is a request rather than a wall. Google states that its common crawlers always obey robots.txt rules when crawling automatically, while OpenAI notes that ChatGPT-User acts on a user's behalf and that robots.txt rules may not apply to those requests. For enforcement you need something at the network edge.
Which AI bots should be allowed for AI search visibility?
The retrieval ones, not the training ones. In OpenAI's naming those are OAI-SearchBot and ChatGPT-User; Anthropic documents Claude-SearchBot for search relevance and Claude-User for queries made by people using Claude; Perplexity-User appears in Cloudflare's taxonomy under AI Assistant, meaning a bot driven by user action. The training tokens, GPTBot and ClaudeBot and CCBot and Applebot-Extended, are a separate decision that does not affect whether you are cited.
Why do several User-agent lines in my robots.txt share one set of rules?
Because that is what the specification says. RFC 9309 defines a group as one or more user-agent lines followed by one or more rules, and its grammar repeats the user-agent line inside a group. The specification's own example shows barbot and bazbot in a single group, described as a group that is relevant for more than one user agent. Listing names on consecutive lines is a deliberate shorthand for giving them identical rules.
How do I give one bot different rules from another?
Break the list. A group ends when a rule line has been read and a new user-agent line appears, so put a blank line between the two blocks and repeat the rules you want for each. The parser test we ran on a synthetic file with GPTBot and ClaudeBot stacked above a single disallow assigns that rule to both names; separating them into two groups with their own rules gives each its own.
What is Google-Extended, and will it appear in my logs?
Google-Extended is a standalone product token rather than a crawler. Google's documentation states that it has no separate HTTP request user agent string: crawling is done with existing Google user agent strings, and the token is used in a control capacity. So it will never show up in your server log, and a search for it there proves nothing.
Does disallowing Applebot-Extended stop Apple from crawling my site?
No. Apple's support page is explicit that even if you disallow Applebot-Extended and tag content with nosnippet, your site instructions may still allow Applebot to crawl your pages, and your content stays discoverable through Spotlight, Siri and Safari. Applebot-Extended is an opt-out from training generative foundation models, not a crawling block.
Do I need to update robots.txt if I am not sure yet?
You can leave the decision open and still be deliberate about it. One practical middle ground is what we do: keep the disallow list to private paths, allow the retrieval bots, and put the training question on a calendar rather than guessing at it today. Note that OpenAI documents a lag of roughly 24 hours from a robots.txt update to a change in search behaviour, so a change is not instant in either direction.
Tools mentioned in this guide
A robots.txt is a text file, and these are for the work around it:
- OpenCode Go โ the parser we ran against our own file started as a handful of lines, and writing that kind of check is faster with an assistant than clicking through a validator for each edit. Try OpenCode Go
- Stack AI โ if crawler and agent traffic needs to land somewhere, a workflow can route a visit into a row, a summary or an alert without custom glue. Try Stack AI
- Softr โ for catalogue and directory sites, publishing the collection as a no-code app produces stable URLs, which is what makes any crawler directive worth writing in the first place. Try Softr
Some links above are affiliate links โ if you buy through them we may earn a commission at no extra cost to you. OpenCode Go uses our referral link; the other two currently point to each vendor's official page until our tracking links are approved.
Want Your Crawler Rules Checked, Not Just Written?
The file we parsed above is live and public, and the parser output is in this article. If you would rather have someone write, parse and verify the same set of files for your site, that is the work I do.
I build this layer for other sites: robots.txt, llms.txt, agent-tools.json and WebMCP declarations, verified against the live pages. Details at /agent-ready.
Related reading
AI & Analysis โ other guides that pair well with this one.
- Chat with CSV
- Best AI Tools for Excel Analysis
- Convert CSV to Excel Without Excel
- Convert Excel to CSV Free Online
Browse all guides in the NoCodeCSV blog.