Skip to content

robots.txt

Quick facts

What it is
Under RFC 9309, a plain-text file at the host root asks crawlers not to fetch specified paths. It is a voluntary request, not access authorization.
Policy versus enforcement
robots.txt states access intent. Network-layer controls are what enforce that intent against noncompliant or spoofed crawlers.
Rules for AI bots
Create named user-agent groups for each category instead of relying on one blanket * block. A named bot reads only its own group, so * rules and per-bot Allow rules do not merge.
Limits
It does not grant access authorization, stop spoofed or noncompliant crawlers, or retract content already absorbed into model weights.
Role in GEO
It states crawler-access intent before network enforcement and long before citability matters. It is necessary, but not sufficient.

1. What robots.txt is

robots.txt is a plain-text file at the host root (/robots.txt) that lists the paths crawlers are asked not to fetch. Martijn Koster proposed the underlying Robots Exclusion Protocol in 1994. It remained a de facto convention for about 25 years before the IETF standardized it as RFC 9309 in September 2022.

Definition (GEO Wiki working definition): robots.txt is a UTF-8 plain-text file at /robots.txt that addresses crawlers by user-agent and asks them to skip certain paths. The request is nonbinding. It is the standardized expression of crawler-access intent, not access control.

RFC 9309 makes this limitation explicit: the rules “are not a form of access authorization,” and the protocol “is not a substitute for valid content security measures” (RFC 9309 §1). A robots.txt file declares intent; it does not enforce access.

The file itself has not changed for GEO, but the bot population has. Before AI crawlers, many publishers made one practical decision: whether to block Googlebot. Publishers now use the same file to address roughly 30 declared agents in three categories: training, retrieval, and user-triggered access. These categories can have different and sometimes opposite access consequences. AI Crawlers explains how they differ.

2. How the protocol works

A robots.txt file contains groups, each of which binds a set of rules to one or more user-agents. The file is served at the host root and uses a small, fixed grammar for matching paths.

The file. It must be a UTF-8 plain-text file, be scoped to one host, and be served from the literal path /robots.txt with a 2xx response. A 4xx response means that no rules have been declared, so the crawler may fetch any path (RFC 9309 §2.3.1.3). Operators handle a 5xx response conservatively: depending on their policy, their crawlers retry or temporarily treat the site as fully disallowed.

Records. A group contains one or more User-agent: lines followed by one or more Allow: and Disallow: rules. Blank lines separate groups, and comments begin with #.

Group selection. A crawler selects the single most specific group that matches its product token (RFC 9309 §2.2.1). Rules from other groups do not merge into the selected group. If the file contains a named group for a bot, the * group does not apply to that bot.

Path matching. The longest matching rule wins. When Allow and Disallow rules of equal path length conflict, Google documents that the least restrictive rule wins. In other words, Allow takes precedence over Disallow for equal-length matches (How Google Interprets the robots.txt Specification). RFC 9309 leaves this tie-breaking decision to the operator, and most major crawlers follow Google’s convention.

Wildcards. * matches zero or more characters, while $ anchors a match to the end of the URL. Google, Bing, OpenAI, Anthropic, and Perplexity support both symbols and evaluate them within each rule rather than as one combined regular expression.

Sitemap directive. Sitemap: https://... applies across the file rather than to a particular group. Sitemap & IndexNow explains how sitemap discovery works.

Here is how the precedence works:

User-agent: GPTBot
Disallow: /
Allow: /blog/

User-agent: *
Disallow: /private/

GPTBot selects the GPTBot group, reads Disallow: / together with Allow: /blog/, and fetches nothing except /blog/. Every other bot selects the * group and is restricted only from /private/. The * rule does not apply to GPTBot because GPTBot has its own group.

3. How AI-bot categories map to robots.txt

Training, retrieval, and user-triggered agents can be represented as separate named user-agent groups. AI Crawlers explains why the categories require different access decisions; the examples below translate those decisions into robots.txt rules.

Opt out of training only. This preserves eligibility for live citations while excluding future training use.

User-agent: GPTBot
User-agent: ClaudeBot
User-agent: Google-Extended
User-agent: Applebot-Extended
User-agent: CCBot
Disallow: /

Retrieval and user-triggered fetchers stay untouched, so live ChatGPT, Claude, Perplexity, and Google AI Overviews answers can still cite you.

Opt out of retrieval. This means your site will no longer appear in current AI answers.

User-agent: OAI-SearchBot
User-agent: PerplexityBot
User-agent: Claude-SearchBot
User-agent: Bingbot
Disallow: /

The protocol cannot separate Google Search from AI Overviews. Blocking Googlebot removes a site from both because Google does not publish a separate “Search only, no AI Overviews” token. Google-Extended governs the training use of fetched content rather than crawling, so it appears in the training-only block above.

Allow everything by naming each bot explicitly:

User-agent: GPTBot
Allow: /

User-agent: ClaudeBot
Allow: /

User-agent: PerplexityBot
Allow: /

These rules have the same effect as an empty robots.txt file. Writing them explicitly can still document the intended policy for internal reviews and audit tools. It also preserves the named allowances if a downstream configuration layer prepends a blanket Disallow: / for *.

Named groups do not merge with *. A common mistake is to combine a blanket Disallow: / under * with per-bot Allow: lines in named groups. Each named bot reads only its own group, so the file does not create the merged policy that the writer intended.

Before implementing these examples, confirm the current product tokens and verification details for GPTBot, ClaudeBot, PerplexityBot, Google-Extended, Applebot-Extended, OAI-SearchBot, and ChatGPT-User. The AI Crawler Access Audit playbook explains how to search logs and verify which agents actually reached the site.

4. What each major operator documents about robots.txt compliance

Major operators describe different approaches to robots.txt. The table summarizes how their AI crawlers respond, including stated exceptions for user-initiated fetches.

OperatorTokens addressedDocumented robots.txt postureCaveat
OpenAIGPTBot · OAI-SearchBot · ChatGPT-UserGPTBot and OAI-SearchBot honor robots.txt as documented. As of late 2025, OpenAI’s bot documentation states that “because these actions are initiated by a user, robots.txt rules may not apply” to ChatGPT-User.OpenAI made the user-triggered exception explicit in its December 2025 documentation revision (OpenAI bots).
AnthropicClaudeBot · Claude-SearchBot · Claude-UserAnthropic documents all three bots as honoring robots.txt. Its 2025 documentation introduced separate controls and disallow examples for each bot.Anthropic also states that its bots honor the nonstandard Crawl-delay: extension alongside standard Disallow: rules (Anthropic crawler docs).
PerplexityPerplexityBot · Perplexity-UserPerplexityBot respects robots.txt, so disallowing it prevents page text from being indexed. Perplexity documents Perplexity-User as user-initiated and says that robots.txt restrictions “generally do not apply.”Perplexity has described this user-triggered exception in its own terms since 2024 (Perplexity Crawlers; How Perplexity follows robots.txt).
GoogleGooglebot · Google-ExtendedGooglebot honors robots.txt. Google-Extended is a training-use opt-out token that governs whether fetched content is used to train Google’s generative AI models, not whether Googlebot crawls.Blocking Googlebot removes a site from Search and AI Overviews together because Google provides no separate AIO opt-out (Google’s common crawlers).
AppleApplebot · Applebot-ExtendedBoth honor robots.txt. Applebot-Extended is a training-use opt-out for Apple Intelligence and other generative AI, while Applebot continues to serve Spotlight, Siri, and Safari.Disallowing Applebot-Extended while allowing Applebot preserves visibility in Spotlight and Siri (About Applebot).
Microsoft (Bing)BingbotBingbot honors robots.txt and supports both Bing Search and Bing Copilot.Unlike Google and Apple, Microsoft had not published a separate AI-training opt-out token as of 2026-05 (Which crawlers does Bing use?).
Common CrawlCCBotCCBot honors robots.txt and the nonstandard Crawl-delay: extension.Common Crawl data indirectly supplies many third-party AI training corpora, so opting out can affect anyone who trains on Common Crawl dumps (CCBot).

User-triggered fetches are a recurring exception. Operators describe ChatGPT-User, Claude-User, and Perplexity-User as user-initiated and generally outside standard robots.txt restrictions. Their stated reasoning is the same: a fetch prompted by one person asking about one URL acts as a proxy for human browsing rather than autonomous crawling. OpenAI stated this most explicitly in its late-2025 documentation revision, while Perplexity’s help page has used the same framing since 2024. These agents show why robots.txt does not cover every form of AI access.

Product-token strings, published IP-range endpoints, and disallow rules can change independently for each bot. The AI Crawler Access Audit provides the current procedure for finding these agents in logs and verifying which requests reached a site.

5. Declared control versus enforcement

RFC 9309 does not define robots.txt as access control. Its preamble makes the distinction clear: declaring intent is not the same as enforcing it.

RFC 9309 includes its own disclaimer. Section 1 states that “the rules in a robots.txt file are not a form of access authorization.” It later adds: “This document is not a substitute for valid content security measures, and information that is not meant to be accessed should be properly secured.” Both statements appear in the published standard (RFC 9309).

A user-agent is a self-reported claim, not proof of identity. Seeing GPTBot in a log does not prove that OpenAI fetched the page. A spoofed user-agent bypasses any rule that depends on the name, and a noncompliant crawler can ignore the file entirely. Published IP ranges and forward-confirmed reverse DNS establish identity; every major AI-crawler operator publishes IP lists for this purpose. The AI Crawler Access Audit playbook explains the verification process.

Published policies and observed behavior do not always match. The evidence supports only these conclusions:

What the evidence showsWhat can be concluded
Major first-party AI bots state that they honor robots.txt as documented.Each operator is stating a policy, not providing a technical guarantee. Operators can also revise their policies, as the ChatGPT-User documentation change shows.
The protocol clearly expresses a site’s intent to compliant agents.A well-written file cannot enforce that intent against a noncompliant or spoofed agent.
Independent measurement can show how many sites express an AI-crawler policy.Cloudflare’s 2025 survey found that only about 14% of sampled domains had robots.txt files that targeted AI bots (Cloudflare, 2025-07-01). Most sites in the sample had expressed no AI policy.
First-party operators publish compliance policies.Independent reporting has also documented noncompliance at scale. In 2024, several news publishers reported that a major answer engine fetched content from sites that had disallowed its crawler (TechCrunch, 2024-07-02). In 2025, Cloudflare reported that an undeclared crawler impersonated a normal browser and rotated IP addresses to evade no-crawl directives across tens of thousands of domains (Cloudflare, 2025-08-04).
A site can enforce crawler access.Enforcement requires network-layer controls such as WAF rules, verified-bot allowlists, or request-signing schemes. robots.txt does not provide those controls.

The incidents involving PerplexityBot show how noncompliance affected Perplexity. AI Crawlers compares the same enforcement problem across crawler categories and access decisions.

Use both policy and enforcement. Write the policy in robots.txt because documented first-party AI bots comply with it. Then verify at the network layer that the policy is working. A site that treats the file as enforcement may keep serving a crawler that ignores the rules while mistakenly assuming access is blocked.

6. Anti-patterns

Most robots.txt mistakes involving AI bots fall into four categories: precedence and group-merging errors, confusion about what the file can do, incorrect file placement, and outdated bot lists. The following patterns look reasonable but fail in practice.

Anti-patternWhy it looks rightWhy it actually fails
User-agent: * Disallow: / followed by per-bot Allow: in named groupsIt appears to set a default and then admit trusted bots.Each named bot selects only its own group (RFC 9309 §2.2.1). The * group does not apply to a bot with a named group. An Allow: rule in the GPTBot group therefore does not undo Disallow: / in the * group because the two groups never merge.
Blocking GPTBot to stay out of ChatGPTGPTBot is operated by OpenAI.GPTBot is used only for training. Live ChatGPT search answers use OAI-SearchBot for indexing and ChatGPT-User for user-triggered fetches. As AI Crawlers explains, blocking the wrong category produces the opposite result from the one intended.
Treating robots.txt as enforcement against bad actorsA disallow rule appears to prevent access.The protocol is voluntary, and RFC 9309 §1 says that its rules “are not a form of access authorization.” Spoofed or noncompliant agents can ignore the file. Enforcement requires a WAF or verified-bot allowlist (AI Crawler Access Audit).
Crawl-delay: to rate-limit AI botsThe name makes it sound like a standard rate-limiting directive.Crawl-delay: is not part of RFC 9309. Support is inconsistent: Common Crawl’s CCBot and Anthropic’s Claude bots document that they honor it, while Google states that Googlebot does not. Network-layer rate limits provide a dependable control across AI crawlers.
Noindex: directives in robots.txtrobots.txt appears to control whether pages are indexed.Noindex has never been a standard robots.txt directive. Google ended support for the unofficial Noindex: line on 2019-09-01 (A note on unsupported rules in robots.txt). Use <meta name="robots" content="noindex"> or the X-Robots-Tag HTTP header instead.
robots.txt at /foo/robots.txt, or no separate file for a subdomainThe file exists at a location that may seem convenient.RFC 9309 §2.3 requires a file at the literal /robots.txt path for each host. Subdomains and different schemes (http versus https) each need their own file. Crawlers ignore a robots.txt file at a non-root path.
A static AI-bot allowlist, never revisitedThe list appears to admit only trusted crawlers.The AI-crawler population grew from about 3 named bots in 2023 to about 30 in 2026. A static allowlist excludes every newly released bot by default, including retrieval bots whose exclusion immediately costs the site citations.
Disallowing the training crawler after the page already shippedThe new rule appears to remove the content from the training set.robots.txt applies only to future crawling. It cannot retract content already absorbed into a prior training corpus. Any retraction mechanism, including an opt-out request form or takedown channel, depends on the vendor rather than the robots.txt file.

Most robots.txt mistakes involving AI are category or precedence errors, not syntax errors. The syntax is forgiving, but selecting the wrong bot or misunderstanding how groups interact can have significant consequences.

7. Three root files, three jobs

Publishers often confuse three root-level files: robots.txt, sitemap.xml, and llms.txt. Their purposes do not overlap.

FileWhat it doesWhat it does not do
robots.txtCrawler-access policy: asks whether a bot may fetch a path. It is standardized as RFC 9309.It does not curate, render, rank, or enforce access. It is a request, not authorization.
sitemap.xmlDiscovery and completeness: lists the pages intended for indexing (Sitemap & IndexNow).It does not curate, grant access, or signal quality. It is not a “best of” list.
llms.txtCuration and clean rendering: identifies selected pages and presents them in clean Markdown (llms.txt).It does not grant or deny access, serve as a ranking signal, or provide a complete discovery file.

None of these files substitutes for another. robots.txt is no more “AI access control” than it was “Google access control.” It performs the same function for a larger bot population divided into more categories. The audience changed; the file’s role did not.

8. How robots.txt affects GEO

A page must be reachable before an AI engine can cite it, but reachability alone does not make it citable. If a site publishes no robots.txt policy, most compliant AI bots assume that no paths are restricted. Incorrect rules can instead remove the site from AI answers without making the cause obvious.

GoalRecommended action
Decide the per-category access policy (training versus retrieval versus user-triggered)Use AI Crawlers to assess the different consequences of blocking each category.
Write the actual robots.txt directivesCreate separate named user-agent groups and apply the appropriate Allow: or Disallow: rules.
Get the per-bot UA strings, IP ranges, and verification recipesGPTBot · ClaudeBot · PerplexityBot · Google-Extended · Applebot-Extended · OAI-SearchBot · ChatGPT-User
Verify what actually reached your siteFollow the AI Crawler Access Audit to compare declared policy with observed traffic.
Curate which pages an LLM should read firstUse llms.txt to identify selected pages and provide clean Markdown versions.
Make sure the page is easy to quote once fetchedImprove its citability so an engine can extract and attribute useful passages.
Put crawler access in a broader GEO strategyUse Generative Engine Optimization to connect crawler access with other visibility decisions.

Write the policy in robots.txt because compliant crawlers follow it, and enforce the policy at the network layer because other agents may not. Reachability makes a page eligible for consideration. Citability determines whether an engine can use it effectively in an answer.

References

Standards & specifications:

Vendor crawler documentation:

Independent measurement & reporting:

Frequently asked questions

Does robots.txt actually stop AI crawlers?
robots.txt is a voluntary request, not an enforcement mechanism. RFC 9309 states that the rules 'are not a form of access authorization.' Compliant first-party AI bots such as GPTBot, ClaudeBot, PerplexityBot, Google-Extended, Applebot-Extended, and CCBot follow robots.txt as documented. Noncompliant or spoofed agents may ignore it and require network-layer controls such as WAF rules or verified-bot allowlists.
Will blocking GPTBot remove me from ChatGPT search?
No. GPTBot is used only for training. Live ChatGPT search answers use OAI-SearchBot for indexing and ChatGPT-User for user-triggered fetches. Blocking GPTBot keeps your content out of future model weights without removing it from ChatGPT search citations. See AI Crawlers for how each crawler category affects access decisions.
Why doesn't User-agent: * plus a per-bot Allow: grant access?
RFC 9309 §2.2.1 says that each crawler selects the single most specific group matching its product token. Rules from other groups do not merge. With User-agent: * and Disallow: / in one group, then User-agent: GPTBot and Allow: /blog/ in another, GPTBot reads only the GPTBot group. It gets /blog/ and nothing else because the * group does not apply. The file can therefore look correct while producing the wrong policy.
Is Crawl-delay: a valid robots.txt directive?
No. Crawl-delay: is not part of RFC 9309. Support varies by vendor: Common Crawl's CCBot and Anthropic's Claude bots document that they honor it, while Google states that Googlebot ignores it. Because support is inconsistent across AI crawlers, use network-layer rate limiting when you need a dependable control.
Can robots.txt remove my content from a model that already trained on it?
No. robots.txt applies to future crawler visits, so it cannot retract content that was already fetched into a training corpus. If a page was published before you disallowed the training crawler, retraction depends on the mechanisms that the operator provides, such as opt-out request forms. Those mechanisms vary by vendor.

See also

Sources

Primary

  1. RFC 9309: Robots Exclusion Protocol · IETF · 2022-09-01
  2. How Google Interprets the robots.txt Specification · Google Search Central
  3. A note on unsupported rules in robots.txt · Google Search Central · 2019-07-02
  4. Overview of OpenAI Crawlers (GPTBot / OAI-SearchBot / ChatGPT-User) · OpenAI
  5. Publishers and Developers FAQ — OpenAI Help Center · OpenAI
  6. Does Anthropic crawl data from the web, and how can site owners block the crawler? · Anthropic
  7. Perplexity Crawlers (PerplexityBot / Perplexity-User) · Perplexity AI
  8. How does Perplexity follow robots.txt? · Perplexity AI
  9. Google's common crawlers (Google-Extended) · Google Search Central
  10. Which crawlers does Bing use? · Microsoft Bing
  11. About Applebot · Apple
  12. Common Crawl — CCBot · Common Crawl

Secondary

  1. From Googlebot to GPTBot: who's crawling your site in 2025 · Cloudflare
  2. Perplexity is using stealth, undeclared crawlers to evade website no-crawl directives · Cloudflare
  3. News outlets are accusing Perplexity of plagiarism and unethical web scraping · TechCrunch
  4. Anthropic clarifies how Claude bots crawl sites and how to block them · Search Engine Land
Last updated: 2026-05-27 Authors: Ray Yang Topic: Infrastructure