Skip to content
robots.txtCrawlersTechnical

GPTBot, ClaudeBot, PerplexityBot: the AI crawler and robots.txt guide

Three families of robot visit your site on behalf of AI systems, and confusing them is expensive: block the wrong one and you have shut the door on the most qualified visitor you get. Here is who is who, and what to write.

Published Updated 7 min read 1,269 words This page in Markdown

You see GPTBot in your logs and the question follows: should I block it? That cannot be answered until three things the phrase "AI crawler" routinely conflates are pulled apart.

Three families, three separate decisions

  1. Training crawlers. They collect text to build datasets. They send you no traffic and cite you nowhere today; they feed the memory of future models. Blocking protects your content and steps out of the slow path.
  2. Indexing crawlers. They build the index an assistant searches when it is composing an answer. Blocking them is asking not to be found at the moment an answer is written.
  3. Human-triggered fetches. A user pastes your link, or asks a question your page is a candidate answer to, and the assistant goes to get it right then. That is not a scraper, that is your prospect with an intermediary. Blocking it is almost always a mistake.

The reference table

The operators marked as documented publish their own agent lists and control instructions: OpenAI, Anthropic, Perplexity and Google.

User-AgentOperatorFamilyEffect of blocking
GPTBotOpenAITrainingExcluded from future training sets
OAI-SearchBotOpenAIIndexingAbsent from ChatGPT search
ChatGPT-UserOpenAIHuman-triggeredThe user gets an error instead of you
ClaudeBotAnthropicTrainingExcluded from future training sets
Claude-SearchBotAnthropicIndexingAbsent from Claude search
Claude-UserAnthropicHuman-triggeredThe user's request fails
PerplexityBotPerplexityIndexingAbsent from the Perplexity index
Perplexity-UserPerplexityHuman-triggeredThe user's request fails
Google-ExtendedGoogleUsage controlContent withheld from some Google AI uses; no ranking effect
GooglebotGoogleIndexingDisappearance from Google Search — do not touch
Applebot-ExtendedAppleUsage controlWithholds content from Apple's AI uses
BytespiderByteDanceTrainingExcluded from ByteDance collection
CCBotCommon CrawlPublic archiveExcluded from a corpus many parties reuse

Two clarifications that prevent blind decisions. Google-Extended is not a crawler: it is a usage-control token — the content is still fetched by Googlebot, but its use in certain Google AI products is withheld, and Search ranking does not depend on it. And CCBot feeds a public archive many organisations reuse: blocking it reaches far further than the name suggests.

How robots.txt actually behaves

The format is standardised by RFC 9309. Three rules prevent nearly every mistake we see:

  • A robot obeys exactly one group: the one whose User-agent matches its name most specifically. If GPTBot has its own group it ignores the * group entirely — including the rules you thought were global.
  • Matching is case-insensitive and applies to a token, not to the whole User-Agent string.
  • The file has no enforcement power. It is a polite request. Serious operators honour it; an anonymous scraper will not even read it. Real blocking happens at the server or CDN.

Three configurations to copy

Pick by the decision you are making, not by fashion.

A — Maximum visibility: everyone welcome
User-agent: *
Allow: /

Sitemap: https://your-domain.com/sitemap.xml
B — The common compromise: citation yes, training no
# Human-triggered fetches: always allowed.
User-agent: ChatGPT-User
Allow: /

User-agent: Claude-User
Allow: /

User-agent: Perplexity-User
Allow: /

# Indexing for answer engines: allowed — this is how citation happens.
User-agent: OAI-SearchBot
Allow: /

User-agent: Claude-SearchBot
Allow: /

User-agent: PerplexityBot
Allow: /

# Training collection: refused.
User-agent: GPTBot
Disallow: /

User-agent: ClaudeBot
Disallow: /

User-agent: Bytespider
Disallow: /

User-agent: CCBot
Disallow: /

User-agent: Google-Extended
Disallow: /

User-agent: Applebot-Extended
Disallow: /

User-agent: *
Allow: /

Sitemap: https://your-domain.com/sitemap.xml
C — Closed to AI, classic search kept
User-agent: Googlebot
Allow: /

User-agent: Bingbot
Allow: /

User-agent: GPTBot
Disallow: /

User-agent: OAI-SearchBot
Disallow: /

User-agent: ChatGPT-User
Disallow: /

User-agent: ClaudeBot
Disallow: /

User-agent: Claude-User
Disallow: /

User-agent: PerplexityBot
Disallow: /

User-agent: Perplexity-User
Disallow: /

User-agent: Google-Extended
Disallow: /

User-agent: *
Allow: /

Configuration C carries a cost you should take on knowingly: you are no longer a possible answer, including for a user asking for you by name. It makes sense where the value of the content is its exclusivity — paid research libraries, licensed archives — and rarely for a commercial site.

Content-Signal: stating permitted use, not just access

robots.txt expresses a binary permission: come in, or don't. It says nothing about what may be done with the content once read. The Content-Signal header, proposed to fill that gap, separates three uses and lives in the same file:

A machine-readable statement of use
Content-Signal: search=yes, ai-input=yes, ai-train=no

# search=yes    — index it and link to it
# ai-input=yes  — quote it in a generated answer, with attribution
# ai-train=no   — do not use this content as training data

An honest caveat: this is a convention, not an adopted standard, and it carries no enforcement. Its value is twofold — it states an unambiguous intent, and it leaves a dated record of that intent. That is little, but it is more than silence. Our own robots.txt carries it, because a product that audits other people for this had better hold it itself.

Verifying a robot is who it claims to be

A User-Agent is a free-text string: any script can announce itself as GPTBot to slip past a filter, and aggressive scrapers frequently do. Before drawing any conclusion from a log line — and certainly before blocking an address — verify the origin. Serious operators publish either their IP ranges or a verifiable reverse DNS record.

Reverse lookup, then forward lookup
# 1. Which hostname owns the address seen in the log?
host 203.0.113.42
# 2. Does that hostname resolve back to the same address?
host the-hostname-you-got.example.com
# Both must agree. If they do not, the User-Agent is forged.

This two-step check is the same one long recommended for authenticating Googlebot. It avoids the most expensive symmetric mistake: blocking a genuine indexing crawler on the strength of a log line, or letting a scraper in because it typed the right name.

When robots.txt is not enough

Against a client that ignores the file, the only effective answer sits at the server or CDN. On nginx a User-Agent refusal is three lines; it runs before any application code, so it costs almost nothing.

nginx — an actual refusal rather than a polite request
map $http_user_agent $block_ai {
    default 0;
    ~*(Bytespider|ClaudeBot|GPTBot) 1;
}

server {
    if ($block_ai) { return 403; }
}

Two cautions before generalising this. A block that is too broad always ends up catching an agent you meant to keep — reread the list before applying it. And a refusal served with a 200 status and a styled error page is not a refusal: return a real 403, or both sides will be wrong about what happened.

The mistakes that cost the most

  • A staging Disallow: / pushed to production. Always the first suspect when visibility collapses overnight.
  • Blocking CSS and JavaScript. Engines that render the page can no longer understand it, and you lose on both fronts.
  • Blocking .md files. Those are precisely the clean version you wanted agents to read.
  • Believing a block removes what already exists. robots.txt affects future visits; it deletes nothing already collected and nothing a model has already memorised.
  • Forbidding access, then wondering about the absence. The most frequent case we see at audit: the site forbids exactly what it wants cited, often through a setting left behind by a plugin.

Frequently asked questions

Does blocking GPTBot keep me out of ChatGPT?

Not directly. GPTBot feeds training; ChatGPT's search goes through OAI-SearchBot and on-demand fetches through ChatGPT-User. Blocking the first while allowing the other two is coherent: refuse training, accept citation.

Is robots.txt legally binding?

No. It is a technical convention honoured by serious operators. Effective blocking requires server or CDN filtering — by User-Agent, by IP, or by verifying that the robot is genuine.

How do I find out who really visits my site?

Your access logs. A single grep across agent names gives you a dated, counted list. It is the one source that depends on nobody's interpretation.

Should I block CCBot?

It depends on your tolerance for reuse. CCBot feeds a public archive used by a very wide range of parties, researchers included. The block therefore reaches far, and it does not undo collection already done.

One URL is enough. The audit returns the score, the twelve checks and the detail of every failure. The first file generation is on us.

Audit my site for free

Back to the blog

Free audit

See what AI actually reads about you.

One URL is enough. The audit returns the score, the twelve checks and the detail of every failure. The first file generation is on us.

Custom project or enterprise

By phone

REPLY WITHIN 48H · ENGLISH & FRENCH

© 2026 Indexonic. All rights reserved.

Legal notice The Web Master — Marrakech