Block or Allow AI Crawlers: GPTBot to PerplexityBot
Block or allow AI crawlers with a real framework: which bots fetch to answer a live query and can cite you, which only train models, and the exact syntax.

Whether to block or allow AI crawlers gets argued as one question, and it is at least two. Some of these agents fetch your page to answer a question a human is asking right now, and they can name you and link to you when they do. Others fetch it to build training data, and give you nothing back at the moment of the fetch. Blanket blocking treats those as the same decision, which is how sites quietly remove themselves from answers that would have cited them. Below is the split, the exact robots.txt syntax for each side, the parsing rule that silently breaks most of these files, and how to check what is really crawling you.
Two Jobs, Not One Decision
An AI company can send a crawler at your site for three different reasons, and each vendor runs a separate user agent for each reason.
Retrieval. The bot is building or refreshing an index that gets searched when a user asks a question. When your page wins a slot in the answer, the assistant usually shows a link to it. This is the door that produces referral traffic.
Live user fetch. Somebody pasted your URL into an assistant, or asked about a page by name, and the agent goes and gets it on their behalf. There is a human waiting on the other end.
Training. The bot is collecting text to train or improve a model. Nothing links back, nothing gets cited, and the fetch produces no visitor now or later. Any return arrives much later and cannot be measured.
Those three doors carry completely different consequences, and the user agent string is the only thing that tells them apart. GPTBot and OAI-SearchBot are both OpenAI. One is training, one is search. Block the wrong one and you have made a decision you never intended, with no error message and nothing in any analytics product to warn you.
Every Named Agent and What It Actually Does
Vendors document their own agents, and those pages are the only source worth trusting. The list below is current as of publication and it will age.
| User agent token | Run by | Job | Can it cite you? |
|---|---|---|---|
| `Googlebot` | Builds the Search index, which also serves AI Overviews and AI Mode | Yes | |
| `bingbot` | Microsoft | Builds the Bing index, which also serves Copilot answers | Yes |
| `OAI-SearchBot` | OpenAI | Indexes pages so they can surface in ChatGPT search results | Yes |
| `Claude-SearchBot` | Anthropic | Crawls to build and improve Claude's search results | Yes |
| `PerplexityBot` | Perplexity | Indexes pages for Perplexity answers and their citations | Yes |
| `Applebot` | Apple | Powers Siri and Spotlight Suggestions | Yes |
| `ChatGPT-User` | OpenAI | Fetches a page because a user asked for it in ChatGPT | Yes, and the human is already waiting |
| `Claude-User` | Anthropic | Same, on a user request inside Claude | Yes |
| `Perplexity-User` | Perplexity | Same, when a user asks about a specific URL | Yes |
| `GPTBot` | OpenAI | Collects data used to train models | No |
| `ClaudeBot` | Anthropic | Collects data used to train models | No |
| `Google-Extended` | Not a crawler. A robots.txt token governing use of your content in Gemini apps and Vertex AI generative APIs | No | |
| `Applebot-Extended` | Apple | Not a crawler. A token to opt out of training Apple's foundation models | No |
| `CCBot` | Common Crawl | Builds a free public web archive that many model builders train on | No |
| `Bytespider` | ByteDance | Collects training data | No |
| `meta-externalagent` | Meta | Collects data for training and product use | No |
Primary sources for the four that matter most: OpenAI's bots documentation, Anthropic's crawler article, Perplexity's bots guide and Google's common crawlers list. Common Crawl documents CCBot separately.
Two entries in that table trip people constantly.
Google-Extended is not an agent that appears in your logs. It is a token you write into robots.txt, and Google's own documentation states it does not affect inclusion in Google Search. Since AI Overviews and AI Mode are served from the Search index Googlebot builds, blocking Google-Extended does not remove you from them. Plenty of sites added it in 2024 and 2025 believing it would.
Applebot-Extended works the same way: a training opt-out token that does not change what Applebot crawls for Siri and Spotlight.
Microsoft is the odd one out. There is no Copilot crawler to allow or block, because Copilot answers draw on the Bing index that bingbot builds. Microsoft's Bing Webmaster Tools help documents nocache and noarchive robots meta tags as the content usage controls there, so that lever is a meta tag on the page, not a user agent line in robots.txt.
For the fuller picture of how each engine assembles an answer once it has your page, see how AI assistants pick sources.
Stuck on page two?
Real human clicks that lift your CTR and move you up the rankings.
What Each Side of the Trade Returns to You
Strip the ideology out and the two decisions have different ledgers.
| Allowing retrieval crawlers | Allowing training crawlers | |
|---|---|---|
| What you give up | Public pages that are already readable by anyone | Public pages that are already readable by anyone |
| What comes back immediately | Eligibility to be the cited source in an answer, with a clickable link | Nothing |
| What comes back eventually | Referral visits from those links, plus your brand inside the answer | Your brand and facts may end up in what the model knows, surfacing as unlinked mentions |
| What blocking costs you | Removal from answers that would have cited you, invisible in every report you own | Little that you can measure |
| Is it reversible? | Yes, but the effect returns only as fast as the crawler revisits | Yes, and it does nothing about data already collected |
| Who is on the other end | A user with a live question | A training pipeline |
That table is the whole argument. Blocking a training crawler is a low cost decision with a defensible rationale. Blocking a retrieval crawler is a traffic decision, and it is the one people make by accident.
The invisibility is what makes it dangerous. Fall out of ordinary search results and Search Console shows it: impressions drop, positions vanish. There is no equivalent report for a citation that never happened. This matters more than your position data suggests, because AI answers frequently cite pages that do not rank in the top ten, so a site with mediocre rankings can have plenty to lose here.
One caveat on the upside. Retrieval traffic is not a substitute for search traffic and the volumes are not comparable. An assistant that answers in full is a zero click outcome for most readers, and only a minority follow the citation. Expect a smaller stream of unusually well qualified visitors, not a replacement channel.
The Parsing Rule That Breaks Most AI Crawler Blocks
Here is the mechanic that turns a careful robots.txt into an accident.
RFC 9309, the 2022 specification for the Robots Exclusion Protocol, says a crawler uses the group with the most specific matching user agent, and only that group. Rules are not inherited. Rules are not merged. The group headed User-agent: * applies only to crawlers that match no other group in the file.
So this file, which looks like a reasonable way to welcome Perplexity, does something else entirely:
User-agent: *
Disallow: /checkout/
Disallow: /wp-admin/
Disallow: /internal-search/
User-agent: PerplexityBot
Allow: /
PerplexityBot now has an explicit group of its own, so it ignores the three Disallow lines above completely. Your checkout flow, your admin path and your internal search results are open to it and closed to everybody else. The file reads as "allow Perplexity" and behaves as "exempt Perplexity from every rule on the site."
The fix is to restate the shared rules inside every group you create:
User-agent: *
Disallow: /checkout/
Disallow: /wp-admin/
Disallow: /internal-search/
User-agent: PerplexityBot
Disallow: /checkout/
Disallow: /wp-admin/
Disallow: /internal-search/
Tedious, and there is no way around it. A per agent group is a full replacement, not an amendment. Four more rules follow from the same spec:
- One group can head several agents. Stack
User-agent:lines with no blank line between them and the rules below apply to all of them. That is how you keep the file short without losing the inheritance battle. - Token matching is case insensitive but not fuzzy. Do not rely on a group headed
User-agent: Claudeto catchClaudeBot,Claude-UserandClaude-SearchBot. Write the exact tokens the vendor publishes, one per line. - The most specific path rule wins, and Google documents that a tie between
AllowandDisallowgoes to the least restrictive rule. SoAllow: /blog/beatsDisallow: /under/blog/. - robots.txt is per host and per scheme.
https://www.sparkcliks.com/robots.txtdoes not governhttps://docs.sparkcliks.com/. Subdomains need their own file, and that is where a large share of real world misconfigurations live.
The Exact Syntax, Three Ways
Three coherent positions. Pick one, and do not end up mixing them by accident.
Position 1: allow retrieval, block training
The sensible default for most commercial sites, because it keeps the citation door open and closes the one that pays nothing.
# Training corpora: closed
User-agent: GPTBot
User-agent: ClaudeBot
User-agent: CCBot
User-agent: Bytespider
User-agent: meta-externalagent
User-agent: Google-Extended
User-agent: Applebot-Extended
Disallow: /
# Retrieval and live user fetches: open, with the same exclusions as everyone else
User-agent: OAI-SearchBot
User-agent: Claude-SearchBot
User-agent: PerplexityBot
User-agent: ChatGPT-User
User-agent: Claude-User
User-agent: Perplexity-User
Disallow: /checkout/
Disallow: /account/
Disallow: /internal-search/
User-agent: *
Disallow: /checkout/
Disallow: /account/
Disallow: /internal-search/
Sitemap: https://www.sparkcliks.com/sitemap.xml
Google-Extended and Applebot-Extended sit in the first group because Disallow: / is exactly how those tokens are meant to be used. They are opt-out switches written in robots.txt syntax, not crawlers, so you will never see either one in an access log.
Position 2: allow everything
This is the default state. An agent that matches no group and finds no Disallow is allowed, so if you have never touched the file you are already here. For a lead generation site, a local business or a public documentation set, that is very likely the right place to be. Doing nothing is a legitimate answer.
Position 3: block all AI access
Coherent if your content is your product and you would rather license it than give it away.
User-agent: GPTBot
User-agent: OAI-SearchBot
User-agent: ChatGPT-User
User-agent: ClaudeBot
User-agent: Claude-SearchBot
User-agent: Claude-User
User-agent: PerplexityBot
User-agent: Perplexity-User
User-agent: CCBot
User-agent: Bytespider
User-agent: meta-externalagent
User-agent: Google-Extended
User-agent: Applebot-Extended
Disallow: /
Notice what is missing. Googlebot, bingbot and Applebot are not on that list, because blocking them removes you from ordinary search results, and since AI Overviews and Copilot are served from those same indexes there is no way to leave the AI surface without leaving search itself. A blocklist that names Googlebot is a way to disappear.
Why a Publisher and a Lead Gen Site Decide Differently
There is no universal answer, because the two models are not selling the same thing. A publisher sells attention by the page view, so an answer that satisfies a reader without a click is lost inventory. A lead generation site sells an action that happens after a visit, so being named as the answer is free distribution it would otherwise pay for.
| Site type | Retrieval crawlers | Training crawlers | Why |
|---|---|---|---|
| Ad funded publisher | Allow, and watch the referral share closely | Block | Revenue is per page view, so summarization is a direct loss, but exclusion from the answer set forfeits the residual clicks as well |
| Subscription or paywalled archive | Allow only the free surface | Block | The archive is the asset. The free tier is marketing and should stay findable |
| B2B lead generation | Allow | Allow | You need to be the named source, and being present in what the model knows is worth more than the fetch costs you |
| SaaS with public docs | Allow | Allow | Assistants answering "how do I do X in your product" correctly is support deflection and product marketing at the same time |
| Ecommerce catalog | Allow | Your call | Product facts inside an answer create purchase intent, and training rarely costs a retailer anything measurable |
| Local service business | Allow | Allow | Almost nothing to lose, and a real shot at being the named local answer |
| Original research or data licensing | Allow | Block | Training is precisely the use you would rather sell than donate |
| Anyone with a content licensing deal | Follow the contract | Follow the contract | The agreement, not robots.txt, is the control that matters |
The publisher row is the one with genuine disagreement inside it, and anybody who tells you it is settled is selling something. Large publishers have gone both ways inside the same year, some blocking and then reversing, some signing licensing deals that make the robots.txt question moot. In that category, treat your decision as a hypothesis with a review date, not a policy.
Block or Allow AI Crawlers: Four Questions That Settle It
Run these in order. They resolve most cases in about ten minutes.
- Does a reader who sees a good summary of this page still need to visit it? If yes, retrieval is free distribution and you should allow it. If no, you are a page view business and the retrieval question is a real trade rather than an obvious win.
- Do you get paid per page view, or per action after the visit? Per view pushes you toward caution on retrieval. Per action pushes you hard the other way, because one qualified visitor is worth thousands of impressions.
- Is your content the product, or the marketing for the product? Content that is the product is the strongest case for blocking training. Content that is marketing has no case at all.
- Six months from now, will you be able to tell what the decision did? With no baseline and no way to check, the honest move is to allow retrieval, block training, and revisit once measurement exists. Reversing a block is easy. Recovering the answers you were never in is not.
One check before you write anything: see whether you already have a rule you forgot about. Plenty of sites blocked GPTBot in 2023, when it was the only AI user agent anyone had heard of, and never reopened the file after OAI-SearchBot appeared. That file is now expressing a 2023 opinion about a 2026 landscape.
Worked Example: Verify the Directives Actually Work
Writing the rule is the easy half. Confirming that it does what you meant, at every layer, takes about twenty minutes.
Step 1: fetch the file the way a crawler does
curl -sI https://www.sparkcliks.com/robots.txt
You want a 200 status and content-type: text/plain. Two failures show up constantly. A single page app that returns your HTML shell with a 200 status for every unknown path means every crawler is parsing an HTML document as robots.txt and finding no rules at all. A 5xx response is worse, because search engines commonly treat a persistently failing robots.txt as a reason to back off crawling. Repeat the request on the apex domain and on www, and on http as well as https: each combination is a separate robots.txt as far as the spec is concerned.
Step 2: resolve the groups by hand
There is no widely available tester for these agents. Search engine robots.txt testers evaluate their own crawler and nothing else, so none of them will tell you what PerplexityBot sees.
For each agent you care about, find the single group whose User-agent line names it. If no group names it, the * group applies. Then check your paths against that one group only. Build a table like this and keep it in the repository beside the file:
| Agent | Group that applies | Result for `/blog/` | Result for `/checkout/` |
|---|---|---|---|
| `OAI-SearchBot` | its own | Allowed | Blocked |
| `GPTBot` | its own | Blocked | Blocked |
| `PerplexityBot` | its own | Allowed | Blocked |
| `Googlebot` | `*` | Allowed | Blocked |
If you cannot fill that table in from the file in front of you, neither can the crawler.
Step 3: check the layer above robots.txt
This is the step almost nobody runs, and it is where the surprise usually is. Your CDN or WAF sits in front of the file and never consults it.
curl -s -o /dev/null -w "%{http_code}\n" \
-A "Mozilla/5.0 (compatible; OAI-SearchBot/1.0; +https://openai.com/searchbot)" \
https://www.sparkcliks.com/blog/
A 200 means the edge is letting the request through. A 403, a 503 or an HTML challenge page means a bot management rule is blocking an agent your robots.txt explicitly welcomes, and robots.txt loses that argument every time. Cloudflare announced in July 2025 that new domains on its network default to blocking AI crawlers unless the owner allows them, so a site that never opted into anything can still be closed at the edge. Check the managed rules, not just the file.
Repeat the command for each agent you decided to allow. Spoofing a user agent against your own server is fine for this test, but a 200 proves nothing about identity in the other direction, which is Step 4's job.
Step 4: read the logs, then verify who was really there
Count what has actually reached you over the last 30 days:
for ua in GPTBot OAI-SearchBot ChatGPT-User \
ClaudeBot Claude-SearchBot Claude-User \
PerplexityBot Perplexity-User Googlebot bingbot CCBot; do
printf "%-20s %s\n" "$ua" "$(grep -c "$ua" access.log)"
done
| What the counts show | What it means |
|---|---|
| Training bots present, retrieval bots at zero | You have closed the door that costs you, almost certainly by accident |
| Retrieval bots present, zero user fetch agents | Nobody is pasting your URLs into assistants yet. That is a demand problem, not a configuration one |
| Everything at zero, `Googlebot` included | Start with basic crawlability. AI crawler policy is not your current problem |
| Counts unchanged 30 days after an edit | Go back to Step 3. Something above robots.txt is deciding for you |
Then verify identity, because a user agent string is a claim and not proof. Anyone can send a request labeled ClaudeBot. OpenAI, Anthropic, Perplexity and Google each publish IP range files for their crawlers, and several support reverse DNS verification. Look up the current URLs in the vendor documentation linked earlier and check your log addresses against them before concluding that a well behaved crawler is misbehaving, or that a scraper is legitimate.
Measuring the change without fooling yourself. Take a 28 day baseline before the edit and a 28 day window after it, and hold back a control set of comparable pages you deliberately do not touch. Track crawler hit counts in the logs and assistant referral sessions in analytics: in Google Analytics 4, Reports, then Acquisition, then Traffic acquisition, with the primary dimension set to Session source / medium and a filter for the assistant hostnames. Expect small, noisy numbers, and expect a chunk of genuine assistant referrals to land in Direct because no referrer was sent. Any figures here are illustrative, not campaign results. A swing of a handful of sessions on a base of a few dozen is noise. Signal means a change large enough to see without squinting, holding across two consecutive windows, and absent from the control set.
What robots.txt Cannot Do for You
Be clear about what you are buying, because several popular reasons for blocking are not served by this file at all.
- It is a request, not a fence. RFC 9309 defines a format and a parsing model. It defines no enforcement. Compliance is voluntary, and the agents that ignore it are the ones that worried you in the first place.
- It is not retroactive. Blocking
GPTBottoday does nothing about content collected last year, or about copies of your pages in Common Crawl archives stretching back more than a decade. If removal is the goal, this is not the instrument. - It is not a copyright notice and not a licence. It expresses a crawl preference. It creates no rights and waives none, and it is no substitute for terms of use.
- It cannot stop an agent that does not announce itself. In August 2025 Cloudflare published findings that it had observed crawling attributed to Perplexity from undeclared user agents and rotating addresses, and Perplexity publicly disputed the analysis. The dispute is unresolved, and the lesson holds either way: a text file governs only the crawlers that read it.
- It cannot express "index but do not train." The protocol grants or denies a fetch and stops there. Anything finer depends on a vendor honoring a separate token, which is why
Google-ExtendedandApplebot-Extendedexist as bolt-ons. - Blocking a page also blocks the
noindexon it. A crawler barred from fetching the page cannot read the meta tag telling it to stay out of an index. That failure mode is covered in full in robots.txt vs noindex, and it applies to AI crawlers exactly as it does to search engines.
Where the Picture Is Still Moving
Anything written on this topic has a short shelf life. Four areas are genuinely unsettled, and pretending otherwise would be dishonest.
The agent lists keep growing. OAI-SearchBot did not exist when GPTBot launched. Claude-SearchBot came after ClaudeBot. Every vendor has revised its published list at least once, so any blocklist pasted from an article, this one included, starts aging the day it is written. Diary a quarterly re-read of the four vendor pages above.
There is no standard vocabulary yet. The IETF has a working group drafting a way to express content usage preferences, carried in an HTTP header or a robots.txt extension, precisely because "allow crawling, refuse training" cannot be said in the current protocol. Those drafts are in progress, not a published standard, and nothing you write today can depend on them. llms.txt is not the answer either: it is a content index rather than a crawler directive, and no major vendor documents obeying it.
Paid access is being tested. Cloudflare launched a pay per crawl beta in 2025, letting site owners charge AI crawlers for access instead of choosing between open and closed. Whether that becomes normal infrastructure or a footnote is not knowable yet.
Agentic browsing does not fit the taxonomy. An agent booking a table or completing a purchase for somebody is not training a model and is not building a search index. It is a customer's proxy. The categories above predate that use case, and the vendors have not settled how to label it.
One thing has not changed. The fetch matters far less than what the crawler finds when it arrives. A page that is allowed but unreadable, buried in client rendered JavaScript or written so that no passage stands on its own, loses the citation anyway. That is a content problem, and it is the subject of how AI answer engines retrieve chunks rather than pages.
Frequently asked questions
FAQ
Split the decision by purpose rather than answering it once. Allowing retrieval crawlers such as OAI-SearchBot, Claude-SearchBot and PerplexityBot keeps you eligible to be the cited source in an answer, while blocking a training crawler such as GPTBot is low cost, because it returns no link, no citation and no visitor.
No. Anthropic documents ClaudeBot as the training crawler and Claude-SearchBot as the agent that crawls for search results, so blocking ClaudeBot in robots.txt leaves your eligibility to be cited intact. Blocking Claude-SearchBot is the change that removes you from Claude's search results.
PerplexityBot is the indexing crawler that builds the pool Perplexity searches when it answers a question. Perplexity-User is the fetch that happens because a specific person asked about a specific URL, and Perplexity documents that user triggered fetches are handled differently from scheduled crawling, so blocking one does not necessarily stop the other.
Only for the crawlers that choose to obey it, and only going forward. Content already collected stays collected, public archives such as Common Crawl still hold copies of your pages, and robots.txt has no enforcement mechanism of any kind, so treat it as a stated preference rather than a control.
Blocking GPTBot, ClaudeBot or PerplexityBot has no effect on Google Search, because Googlebot is a separate crawler with its own group of rules. The dangerous mistake is copying a blocklist that also names Googlebot or bingbot, which drops you out of ordinary search results and out of AI Overviews and Copilot at the same time, since those are served from the same indexes.
Grep your access logs for each documented user agent token over a 30 day window and count the hits, then confirm the requests really came from that vendor by checking the source addresses against the IP range files the vendor publishes, or by reverse DNS. User agent strings are trivially spoofed, so the raw count tells you what something claimed to be rather than what it was.
Related articles

AI Overviews vs Featured Snippets: What Actually Changed
AI Overviews vs featured snippets: one extracts from a single page, the other synthesizes many. How selection differs, and what each does to your clicks.

GEO vs AEO vs AIO: What Actually Differs
GEO vs AEO vs AIO: which acronym has a real definition, where the three genuinely diverge, and how to settle it inside your own Search Console data.

Why AI Answers Cite Pages That Don't Rank in the Top Ten
Why AI answers cite pages that don't rank in the top ten: query fan out, passage level retrieval, source diversity, and a citation gap audit you can run.
