Documentation Python quickstart Blog Free tools hello@quanticdata.ioLog in

llms.txt vs robots.txt

robots.txt answers whether a crawler may fetch a page and is honoured by every major AI operator; llms.txt answers what is worth reading and is documented as read by none of them

They are not competing standards and one does not replace the other. robots.txt answers "may you fetch this?" and is honoured by every major AI crawler. llms.txt answers "what here is worth reading?" and, as of today, no AI operator documents reading it. Only one of the two can cost you traffic if you get it wrong.

One is permission, the other is orientation

robots.txtllms.txt
Question it answersMay this agent fetch this path?What on this site is worth reading, and where is it?
FormatPlain-text directives in user-agent groupsMarkdown: H1, blockquote summary, H2 lists of links
Standardised asRFC 9309, an IETF standard since 2022A proposal at llmstxt.org, currently v2
Read atCrawl time, before the fetchInference time, on demand, when an agent needs orientation
Documented consumersOpenAI, Anthropic, Perplexity, Google, Apple, Common CrawlNone of them
ScopeThe whole hostIts own path — /docs/llms.txt covers /docs, most specific wins
Getting it wrong costs youEvery citation from the agents you blockedVery little either way
Adoption in the top 800Near-universal — 326 of 362 serve one18.0% — 64 of 355

The asymmetry in that last row of consequences is the practical point. A misconfigured robots.txt removes you from an assistant's answers outright. A missing llms.txt removes a convenience.

What robots.txt actually does, precisely

It is a set of groups, each headed by one or more User-agent lines and followed by Allow and Disallow rules. Three resolution rules decide everything, and all three routinely surprise people:

  • Consecutive User-agent lines form one group sharing the rules beneath them. A blank line in the wrong place silently splits it.
  • The most specific matching group wins outright. An agent with its own group ignores * entirely — so a site-wide Disallow: / under * does not apply to any bot you named elsewhere, even to allow it something trivial.
  • Within a group the longest matching path wins, and Allow beats Disallow on an exact tie.

The AI-specific part is that the operators split their crawlers by job. GPTBot and ClaudeBot train; OAI-SearchBot and Claude-SearchBot build the index an assistant searches at answer time; PerplexityBot only ever indexes and, by Perplexity's own documentation, never trains. Blocking across that line is the most expensive mistake in the file — the full breakdown is in the AI crawler user agent list.

What llms.txt actually does, precisely

Per the specification, in this order: an optional byte-order mark, then an H1 with the site or project name — the only required section, then a blockquote summarising the project, then any markdown sections that are not headings, then zero or more H2-delimited "file lists" where each entry is a markdown link optionally followed by : and a note.

# Acme

> Acme is a payments API for marketplaces. Everything below is
> developer documentation; pricing and legal live on the main site.

## Docs

- [Quickstart](https://acme.com/docs/start.md): create a key and take a payment
- [API reference](https://acme.com/docs/api.md): every endpoint and parameter

## Optional

- [Changelog](https://acme.com/changelog.md)

Two details people miss. It may live at any subpath, and an agent should use the most specific file that applies — so a large site can ship /docs/llms.txt and /api/llms.txt rather than one enormous root file. And the companion llms-full.txt holds the concatenated full text so an agent can take everything in one fetch; it is rare, appearing on only 11 of the 64 publishers we measured.

Neither file does what people hope it does

robots.txt is not enforcement. It is a published preference that well-behaved crawlers honour. The user-triggered fetchers are explicitly outside it: OpenAI states that because ChatGPT-User actions are initiated by a person, robots.txt rules may not apply, and Perplexity states that Perplexity-User generally ignores robots.txt. If a block has to hold, it belongs at the edge, not in a text file.

llms.txt is not access control. It grants nothing and forbids nothing. Listing a URL there does not make it fetchable if robots.txt disallows it, and omitting a URL does not hide it. A site that blocks GPTBot and publishes a beautiful llms.txt has blocked GPTBot.

And llms.txt is not a documented route into AI answers. We checked the crawler documentation of OpenAI, Anthropic, Perplexity and Google: all four specify robots.txt tokens in detail and none mentions consuming llms.txt — while several publish one for their own docs, making them authors of the convention rather than readers of it. The spec itself is careful here, positioning the file as an inference-time aid for agents fetching on demand rather than a crawl directive.

What the two files look like in the wild

We measured both across the same 355 top-Tranco domains on 2 September 2026.

MeasuredResult
Serve a parseable robots.txt326 of 362
Block Googlebot at the root2.5%
Block GPTBot at the root17.8%
Block GPTBot while allowing Googlebot15.3%
Publish a real llms.txt64 of 355 — 18.0%
Return HTTP 200 at /llms.txt without serving one77 — which inflates naive counts 2.2x

Joining the two datasets gives the result that ties them together. Sites publishing llms.txt block GPTBot at 4.7% against 20.4% for everyone else, ClaudeBot at 3.1% against 21.6% — and none of the 64 blocks OAI-SearchBot or Claude-SearchBot. The two files are not alternatives; in practice they are two expressions of the same decision. The full numbers and per-domain data are in the llms.txt adoption study and the crawler blocking study.

Which to write first

  1. Fix robots.txt. Resolve it per agent rather than reading it by eye, and check specifically that OAI-SearchBot, Claude-SearchBot and PerplexityBot are not caught by a rule aimed at training. This is the only step with a measurable downside if skipped.
  2. Make sure the pages render without JavaScript. No major AI crawler executes it, and permission is worthless if the response body is an empty shell.
  3. Then write llms.txt. H1, blockquote, curated H2 lists. Keep it an index — the median real file is 13.7 KB; anything past 100 KB has become a sitemap.
  4. Point it at parseable URLs. Markdown twins of your pages beat linking to JavaScript-heavy HTML.

Step one is the robots.txt tester, step two the SEO audit API, which fetches a URL as a plain HTTP client and as a rendered browser and returns the difference.

Sources & further reading

FAQ

Quick answers on llms.txt vs robots.txt.

Something else? Ask us →

What is the difference between llms.txt and robots.txt?

robots.txt is an access-control convention standardised as RFC 9309: it tells crawlers which paths they may fetch, per user agent, and every major AI operator documents honouring it. llms.txt is a markdown index proposed at llmstxt.org that tells an agent what is worth reading and where, read on demand at inference time. One governs permission, the other orientation.

Does llms.txt replace robots.txt?

No, and it cannot. llms.txt grants no access and forbids none — listing a URL there does not override a Disallow, and omitting one hides nothing. A site that blocks GPTBot in robots.txt and publishes a perfect llms.txt has still blocked GPTBot.

Do I need both files?

You need robots.txt to be correct, because getting it wrong removes you from AI answers. llms.txt is optional and cheap: 18.0% of top domains publish one in our measurement, overwhelmingly developer platforms and SaaS documentation. Fix the first before writing the second.

Is llms.txt an official standard?

No. It is a proposal published at llmstxt.org, currently at version 2, and it has no standards-body status. robots.txt by contrast has been an IETF standard since 2022 as RFC 9309. That difference shows in adoption: near-universal for robots.txt against 18.0% for llms.txt among the top domains we measured.

Do AI crawlers read llms.txt?

None of the major operators documents doing so. OpenAI, Anthropic, Perplexity and Google all specify their robots.txt user-agent tokens in detail and none mentions consuming llms.txt, though several publish one for their own documentation. The spec positions it as an inference-time aid for agents that fetch on demand, which is a narrower claim than most articles make for it.

Where should llms.txt be placed?

At /llms.txt for the whole site, or at any subpath to cover the URLs beneath it — /docs/llms.txt covers /docs. Where more than one file applies, an agent should use the most specific. That makes splitting a large index by section preferable to one enormous root file.

What is llms-full.txt and do I need it?

It holds the concatenated full text of the documents your llms.txt indexes, so an agent can take everything in a single fetch rather than following dozens of links. It is optional and uncommon — only 11 of the 64 llms.txt publishers in our sample serve one.

Resolve both files before you rewrite either

The free robots.txt tester shows which rule actually decides for each named AI agent, and the SEO audit API fetches any URL twice — plain HTTP with no JavaScript and fully rendered — returning both views and the diff at $0.0012 per URL. Failed requests are never billed, and every account gets $2 of free usage a month.

Related reading