New: the nine ways developer tools go invisible in AI answers.
citon
AI citations

Which AI Assistants Can Read Your API Docs? robots.txt and AI Citations in 2026

A planted-URL test asked five AI assistants to open one page. Here is what each did with robots.txt, what each vendor says, and what docs teams should set.

Citon10 min read

Which AI assistants read robots.txt when a user asks them to open a page, from one public planted-URL test, set beside what each vendor documents for its fetchers.

Short answer

Do AI assistants respect robots.txt when a user asks them to open a page?

Mostly not, and three vendors say so in writing. When a person asks an assistant to open a page, the request comes from a user-triggered fetcher, not a crawler. OpenAI, Google and Perplexity each state that these fetches may skip or generally ignore robots.txt. Anthropic says its bots honour it. A small public test on 2026-10-09 matched that split: Claude read robots.txt first, ChatGPT read it only after its first fetch, and Grok never read it at all. For a docs team, robots.txt decides which crawlers can index you for citation. It does not decide who can read a page a user hands over.

Paste a link to your API reference into an assistant and ask it a question about the page. Something fetches that page. Whether it read your robots.txt first depends on which assistant you asked, and for most of them the honest answer is that robots.txt was never meant to apply.

A small public test posted on 2026-10-09 made that visible. The author gave five assistants each their own unlinked URL, asked each one in a fresh chat to open it and read back a code, and logged every request. The author is plain that it was a few runs per assistant on one day. Read at that size, it is still a clear picture of what happens between a user's prompt and your server.

This post is for developer-tool and API companies that want ChatGPT, Claude, Gemini, Perplexity and Grok to read and cite their docs. It covers what the test observed per assistant, what each vendor's own documentation says about user-triggered fetches, and what a docs team should actually decide in robots.txt.

The short version

A user-triggered fetch is not a crawl, and most vendors document it as exempt from robots.txt. One public test on 2026-10-09 gave each of five assistants a secret URL and watched the logs. Claude read robots.txt first and honoured it. ChatGPT fetched the page, then its search crawler read robots.txt and the next request was refused. Gemini and Grok never read it, and Grok arrived from 59 different addresses. For a docs team the decision is about crawlers: allow the search and fetch agents, decide training separately, and stop expecting robots.txt to gate a page a user pastes in.

At a glance

What each assistant did in the test, and what its vendor documents

AssistantIn the 2026-10-09 testWhat the vendor documents
ClaudeRead robots.txt first, refused the blocked pageBots honour robots.txt
ChatGPTFetched first, crawler read robots.txt about 76 seconds laterUser fetches may not follow robots.txt
GeminiNever read robots.txtUser-triggered fetchers generally ignore it
PerplexityCrawler read robots.txt, page never fetchedUser fetches generally ignore it
GrokNever read robots.txt, 59 addresses in 6 requestsNo crawler page found
Test column from one public test, a few runs per assistant on 2026-10-09. Vendor column read from each first-party page on 2026-10-14.
Three figures from the planted-URL test, 3 of 5 assistants requested the page without reading robots.txt first, ChatGPT's crawler arrived about 76 seconds after its first fetch, and Grok used 59 addresses in 6 requests.
Three numbers from one small public test on 2026-10-09. They describe a few runs on one day, not a rate.

What did the planted-URL test actually measure?

The test separated one question from all the noise around it: when a user asks an assistant to open a page, which requests arrive, and does any of them read robots.txt first? Each assistant got a secret URL linked from nowhere, so anything that requested it had to be that assistant acting on the prompt.

The setup was simple on purpose. A logging script sat in front of the site and recorded every request: path, user agent, address and time. The author then asked each assistant to open its link and report a code printed on the page. Across the five assistants in the 2026-10-09 post, 3 of 5 requested the planted page without reading robots.txt first, and one, Perplexity, never requested it at all.

Size matters here. The author says it was a few runs each, on one day, and every figure in this post from that test should be read as "this happened" rather than "this is the rate". For a rate, the closer source is the academic study posted on 2026-07-19, which ran ten assistants through four robots.txt conditions across 200 trials and reported substantial variation between them.

Worth knowing

One test, read at its real size

The planted-URL test is one person, a few runs per assistant, one day. It is good evidence that each behaviour happened, and weak evidence about how often it happens. The 2026 academic study ran ten assistants through four robots.txt conditions across 200 trials and also found wide variation, which is the safer headline.

r/SEO, 2026-10-09, and arXiv 2607.14447 v2, 2026-07-19

Which AI assistants read robots.txt before opening a page?

Claude was the only assistant that read robots.txt before touching the site and then honoured it. When the page was disallowed it refused and said it would not try to work around the rule. ChatGPT, Gemini and Grok, 3 of the 5, requested the planted page without reading robots.txt first, per the test write-up of 2026-10-09.

ChatGPT went straight to the disallowed page on its first visit to a brand new site without reading robots.txt. About 76 seconds later, OAI-SearchBot arrived and read robots.txt. The next time the author asked, ChatGPT refused the page without sending a request at all. In a reply on the same thread on 2026-10-09, the author reads this as ChatGPT reusing the crawler's saved copy of the rules, and says that cannot be proven from logs.

Gemini arrived with a user agent that read only "Google" and never requested robots.txt. The author reported that the addresses were not on Google's published lists. Perplexity sent its crawler to read robots.txt and the homepage, never fetched the planted page, and told the author the link might be phishing.

Grok is where the logs got strange. Every request brought 9 to 12 different addresses, most within a few seconds, all claiming to be Chrome or Safari. Over 6 requests the author counted 59 addresses and no reuse, and none of them requested robots.txt, per the same 2026-10-09 post. The addresses came from hosting companies and small ISPs in Brazil, Mexico and Poland, with a couple inside a commercial proxy network's registered range.

A numbered list of what each of the five assistants did when asked to open a planted URL, Claude, ChatGPT, Gemini, Perplexity and Grok.
Five assistants, five different behaviours, all from the same prompt asking for a code printed on the page.
A four-step flow of the ChatGPT sequence, a first fetch with no robots.txt read, the search crawler reading robots.txt about 76 seconds later, and the next request refused without any fetch.
The ChatGPT sequence the test author observed. The first fetch skipped robots.txt and the next request obeyed it.
A stat panel for the Grok runs, 9 to 12 addresses per request, 59 addresses over 6 requests, 0 addresses reused and 0 robots.txt reads.
The Grok figures the test author reported. No published list exists to tell these requests from ordinary visitors.
Blocking by user agent only stops the agents that tell you their name.
The author of the planted-URL test, r/SEO, 2026-10-09, paraphrased

What does each vendor say its user-triggered fetchers do?

The vendor pages explain most of the test before you reach the logs. The key distinction is between a crawler, which visits on a schedule, and a user-triggered fetcher, which reads one page because a person asked. We read each first-party page on 2026-10-14 and recorded the exact wording for the fetcher.

OpenAI's crawler page, read 2026-10-14, says of ChatGPT-User that because these actions are initiated by a user, robots.txt rules may not apply. It also says ChatGPT-User is not used to decide what appears in search, and it publishes 4 IP range files, one per agent. So the ChatGPT first fetch in the test is the documented behaviour, not a violation.

Google's user-triggered fetchers page, last updated 2026-08-19, says these fetchers generally ignore robots.txt rules because the fetch was requested by a user. It lists Google-Agent and the Gemini Notebook fetcher and publishes 3 IP range files. The bare "Google" user agent in the test does not match the strings on that page, which is the part that is still unexplained.

Perplexity's bot page, read 2026-10-14, says Perplexity-User generally ignores robots.txt rules because a user requested the fetch, and that a change can take up to 24 hours to apply. It publishes 2 IP range files. Anthropic's article, dated 2026-04-07, says its bots honour robots.txt and that disabling Claude-User stops Claude retrieving your content for a user query. It publishes 1 IP list.

For xAI we found no crawler or fetcher documentation in its developer docs. We read the xAI developer sitemap on 2026-10-14: 0 of its 236 URLs mention crawling, robots, fetching or user agents, while a control path matched 25. That is absence of documentation, not a statement from xAI, but it means there is no stated rule to hold Grok's behaviour against.

What each vendor's own page says about user-triggered fetches

VendorUser fetch agentrobots.txt for that agentPublished IP filesSource
OpenAIChatGPT-UserMay not apply4measured
GoogleGoogle-Agent, Gemini NotebookGenerally ignored3measured
PerplexityPerplexity-UserGenerally ignored2measured
AnthropicClaude-UserHonoured1measured
xAINone documentedNot documented0measured

n = 5 · as of 2026-10-14

Method: We read each first-party page on 2026-10-14 and recorded the wording for the user-triggered agent and the number of IP range files it links. The xAI row records that 0 of 236 URLs in its developer sitemap concern crawling. A page can change after this date, so re-read it before relying on a row.

A grid comparing five assistants on whether they read robots.txt in the test, what their vendor documents, and whether a published IP list exists.
Where the test and the documentation agree, and the one assistant with no documentation to check against.
A stat panel of published IP range files per vendor, 4 at OpenAI, 3 at Google, 2 at Perplexity, 1 at Anthropic and none found for xAI.
Verifying an agent by address needs a list to verify against. Four vendors publish one.

From the field

The crawler and the fetcher are different requests

Every assistant that cites live pages runs at least two kinds of request. A crawler builds an index on a schedule, and that is what decides whether a page can be cited. A fetcher reads one page because a person asked. Vendors treat the second as the person's own visit, which is why three of the four that document one, OpenAI, Google and Perplexity on pages read 2026-10-14, exempt it from robots.txt.

OpenAI, Google, Anthropic and Perplexity pages, read 2026-10-14

Should an API company block AI assistants in robots.txt?

Usually not. Allow the search crawlers, allow the user fetchers, and decide training on its own terms. That is the whole policy for a documentation site that wants to be cited, and it follows from the vendor pages rather than from any one test.

Allow the search crawlers because they are the only agents that decide whether a page can appear as a citation. Allow the user fetchers because a block there mostly affects the one vendor that honours it, Anthropic per its 2026-04-07 article, and leaves the others unaffected. Treat GPTBot, ClaudeBot and Google-Extended as a separate licensing question about future models, not a switch for today's answers.

The common failure is not a deliberate block. A read of 500 small B2B startups posted on 2026-10-13 found that of the 471 that answered, 3 blocked an AI answer crawler, and one of those 3 disallowed every agent with a single wildcard rule. The more likely problem on a docs host is an edge or firewall default that returns a 403 to an agent your robots.txt allows.

If you want a shape to start from, this is the structure with agent names read from each vendor page on 2026-10-14. Re-read those pages before you copy any name, because rosters change.

# Search crawlers: these decide whether docs can be cited
User-agent: OAI-SearchBot
User-agent: Claude-SearchBot
User-agent: PerplexityBot
Allow: /

# User-triggered fetchers: a person asked for this page
User-agent: ChatGPT-User
User-agent: Claude-User
User-agent: Perplexity-User
Allow: /

# Training crawlers: a separate licensing decision
# (change Allow to Disallow if you decide against training)
User-agent: GPTBot
User-agent: ClaudeBot
User-agent: Google-Extended
Allow: /

The robots.txt decision for a documentation site

Agent typeExamplesDefault for docsWhySource
Search index crawlerOAI-SearchBot, Claude-SearchBot, PerplexityBot, GooglebotAllowThis is the crawl that makes a page citable in answersderived
User-triggered fetcherChatGPT-User, Claude-User, Perplexity-UserAllowA block mostly breaks the one vendor that honours itderived
Training crawlerGPTBot, ClaudeBot, Google-ExtendedDecide separatelyA licensing choice, not a citation switchderived
Unidentified browser trafficRotating addresses with a Chrome user agentNot a robots.txt questionIt never reads the filederived
Derived from the vendor pages in the table above and from the test. Re-read every vendor page before copying any agent name.
A numbered list of five robots.txt rules for a documentation site, allow search crawlers, allow user fetchers, decide training separately, check the edge, and re-read vendor pages.
Five rules for a docs site that wants to be cited. None of them is a pasted block.
A stat panel from a robots.txt read of 500 small startups, 471 answered and 3 blocked an AI answer crawler.
Blocking the answer crawlers is rare among small B2B companies. The usual failure is somewhere else.

Can robots.txt stop someone pasting my page into ChatGPT?

At most vendors, no. robots.txt is a request, read voluntarily, by agents that choose to identify themselves. It cannot stop a user-triggered fetch at the three vendors whose pages, read 2026-10-14, document one as exempt (OpenAI, Google, Perplexity), and it cannot stop an agent that never requests the file, which is what Grok did in all 6 requests in the 2026-10-09 test.

It also cannot override your edge. If a firewall returns a 403, the robots.txt line that says Allow is never consulted. And it cannot remove a page from a model that was already trained on it. A page that must stay private needs authentication, not a disallow rule. A page that must be cited needs to be reachable by the search crawlers at the network level as well as in the file.

For docs teams, the practical reading is reassuring. Your API reference is public, you want it read, and the agents that matter for citation are the polite, documented ones. The unidentified traffic is a bandwidth and analytics question, not a citation one.

A numbered list of four things robots.txt cannot do, stop a user-triggered fetch at most vendors, stop an agent that never reads it, override an edge block, or remove a page from a model already trained.
The limits of the file. Each one is a reason to stop treating robots.txt as an access control.

How do I test which AI assistants read my pages?

You do not need to trust anyone's logs, including the ones in this post. The test costs one afternoon and a few unlinked pages, and it answers the question for your own host, your own edge rules and today's versions of each assistant.

Mint one unlinked URL per assistant with a short code on each page. Do not open the links yourself, because the test author did exactly that on the first run (r/SEO, 2026-10-09) and the only visitor in the logs was their own browser. Ask each assistant in a fresh chat to open its link and report the code, note the time, and match requests to prompts by timing rather than by user agent.

Then repeat it on another day. Answers moved between identical runs in our own measurement too: the same 12 queries changed outcome on 7 of them across 5 repeats, as published on 2026-07-27 in why a single AI visibility score is noise. Assistant output moves between runs, so one afternoon is one draw.

STEPS

How to run the planted-URL test on your own docs host

  1. Mint one unlinked URL per assistant

    First

    Put a short code on each page and link it from nowhere, so the only visitor can be the assistant you hand it to.

  2. Do not open the links yourself

    Second

    On the first run the test author opened every link in a browser before pasting it, and the only visitor in the logs was them (r/SEO, 2026-10-09).

  3. Ask in a fresh chat

    Third

    Ask the assistant to open the URL and report the code. Note the time to the second.

  4. Log every request

    Fourth

    Record path, user agent, address and time for the page and for robots.txt, then match by timing.

  5. Repeat on another day

    Fifth

    One day is one draw. Run it again before treating any behaviour as a pattern.

A five-step flow for running your own planted-URL test, mint an unlinked URL, open nothing yourself, ask the assistant in a fresh chat, log every request, and repeat on another day.
The test is cheap to repeat on your own docs host, and the one mistake the author made is the first step to avoid.

Where this sits in the work of getting cited

Being readable is the first link in a chain, not the result. A docs page also has to say something an assistant can lift, and the assistant has to reach for it when a buyer asks a question that does not contain your name. Our posts on whether llms.txt moves AI citations and making your docs agent-readable cover the next two links.

What we sell is the measured version of that chain for developer tools and APIs. Our answer engine optimization work starts with a crawlability and citability check of exactly the kind this post describes, then measures citation share against a held-out set of queries left unworked, so a change in access is judged by what it did to the answers.

Methodology: what we read and what we did not

Every behaviour attributed to an assistant in this post is the test author's report from the r/SEO post of 2026-10-09 and its comment replies, read in full on 2026-10-14. We did not rerun the test. Every statement about what a vendor's agent is supposed to do comes from that vendor's own page, read on 2026-10-14, with the page date where one is shown.

The limits are the test's limits. It is one person, a few runs per assistant, one day, and the author says the data on hand could not group the Grok addresses any further. The 2026-07-19 study of ten assistants is the better guide to how much behaviour varies. Nothing in this post measures whether allowing or blocking an agent changes citation share, which is a separate question with its own design.

Sources

Every number above, and where it came from. A figure without a row here is one we should not have printed.

The planted-URL test, r/SEO
One person gave each assistant its own unlinked URL, asked it to open the page in a fresh chat, and logged every request. Posted 2026-10-09. The author calls it a small test, a few runs each, on one day. Read in full, with its comment thread, on 2026-10-14.
OpenAI, Overview of OpenAI Crawlers
First-party page for GPTBot, OAI-SearchBot, ChatGPT-User and OAI-AdsBot. States that for ChatGPT-User, because the actions are initiated by a user, robots.txt rules may not apply. Publishes four IP range files. Read 2026-10-14; the page carries no updated date.
Google, User-triggered fetchers
First-party page. States that because the fetch was requested by a user, these fetchers generally ignore robots.txt rules. Lists Google-Agent and the Gemini Notebook fetcher and three IP range files. Page last updated 2026-08-19, read 2026-10-14.
Anthropic, crawler and site-owner article
First-party article for ClaudeBot, Claude-User and Claude-SearchBot. States that the bots honour robots.txt directives and publishes one IP list. Dated 2026-04-07 on the page, read 2026-10-14.
Perplexity, Perplexity Crawlers
First-party page for PerplexityBot and Perplexity-User. States that Perplexity-User generally ignores robots.txt rules because a user requested the fetch, and that changes can take up to 24 hours to apply. Read 2026-10-14; no updated date shown.
Lopez-Fonseca et al., Do Generative AI Assistants Respect robots.txt?
Academic study of ten assistants under four robots.txt conditions across 200 trials, using server logs and secret codes. Version 2 posted 2026-07-19. Reports substantial variation across assistants.
xAI developer documentation sitemap
We read the sitemap on 2026-10-14. 236 page URLs, 0 with crawl, robot, fetch or user-agent in the path, against a control of 25 URLs that matched a known product path. Absence of a page, not a statement from xAI.

Questions about AI assistants and robots.txt

Do AI assistants respect robots.txt when a user asks them to open a page?
Mostly not. OpenAI, Google and Perplexity each document that a fetch a user asks for may skip or generally ignore robots.txt, because the person is treated as the visitor. Anthropic says its bots honour robots.txt. A small public planted-URL test on 2026-10-09 matched that split, with Claude the only assistant that read the file first and then honoured it.
Does ChatGPT read robots.txt?
Its crawlers do. ChatGPT-User, the agent that opens a page when you ask, is documented as possibly exempt. In the [2026-10-09 test](https://reddit.com/r/SEO/comments/1x1no5q/made_secret_urls_to_see_which_ais_actually/), the first fetch skipped robots.txt, the search crawler read it about 76 seconds later, and the next request was refused.
Does Grok respect robots.txt?
In the [2026-10-09 test](https://reddit.com/r/SEO/comments/1x1no5q/made_secret_urls_to_see_which_ais_actually/) it never requested robots.txt, and one request arrived from 9 to 12 addresses posing as Chrome or Safari. We found no crawler or fetcher documentation in xAI's developer docs on 2026-10-14, so there is nothing to hold it to.
Should an API company block AI assistants in robots.txt?
Usually not. Allow the search crawlers, because they decide whether your docs can be cited, and allow the user fetchers. Decide training crawlers as a separate licensing question. Blocking user fetchers mostly affects the one vendor that honours the block.
Can robots.txt stop a user from pasting my page into an assistant?
At most vendors, no. OpenAI, Google and Perplexity describe a user-triggered fetch as the user's own request, so a disallow line may not apply to it. Anthropic is the exception and honours the file. If a page must not be read by anyone, it needs authentication or an edge rule, not a line in robots.txt.
How do I check which assistants actually read my pages?
Mint one unlinked URL per assistant with a short code on the page, ask each assistant to open it in a fresh chat, and log every request with its time, user agent and address. Match requests to prompts by timing. Do not open the link yourself first, and repeat the run on another day before trusting a pattern.

Keep reading