Dark green cover graphic reading llms.txt vs robots.txt vs sitemap.xml, six files six jobs, measured across 477 real sites, with an abstract rising staircase of green and coral shapes
Dark green cover graphic reading llms.txt vs robots.txt vs sitemap.xml, six files six jobs, measured across 477 real sites, with an abstract rising staircase of green and coral shapes
AI Readiness

llms.txt vs robots.txt vs sitemap.xml in 2026: Six Files, Six Jobs

robots.txt, sitemap.xml and llms.txt answer three different questions, and by 2026 there are six discovery surfaces. We measured all six on 477 real sites.

AAsif Rahman September 4, 2026 18 min read
#llms.txt#robots.txt#sitemap.xml#agent readiness#AI crawlers#discovery

This guide covers D1 · Discoverability, D2 · Discoverability, D3 · Discoverability, C1 · Content, C2 · Content, P2 · Capabilities, B1 · Bot Access, B2 · Bot Access, E1 · Discoverability — for WordPress, Shopify, Next.js / Vercel.

Table of contents

Verified 4 September 2026. Every figure below was measured or fetched on that date.

Three files keep getting compared as if they were competing for the same job: robots.txt, sitemap.xml and llms.txt. They are not alternatives. They answer three different questions, and by 2026 there are three more surfaces answering three more questions that most comparisons never mention.

We measured how many of the six a real site actually publishes. Across 477 sites scanned on our own rubric between 25 August and 4 September 2026, the median site carries three of them, 75 sites carry none, and only 13 carry all six.

Quick summary

The question an agent is askingThe file that answers itAIScan checkSites passing (n=477)
May I fetch this?robots.txtD1, B1, B272.1%
What pages exist here?sitemap.xmlD275.9%
Which pages actually matter?/llms.txtC244.4%
Can I have that in a form I can parse?Markdown negotiationC130.8%
Where are all of the above?HTTP Link: headerD352.2%
Can I do something, not just read?MCP endpoint or server cardP23.4%

The short version. robots.txt is a permission statement, not a lock. sitemap.xml is an inventory, and the line that declares it is not part of the robots.txt standard at all. llms.txt is an editorial shortlist that Google says it ignores. Markdown negotiation is the same page in a cheaper form. The Link: header is the only surface that tells an agent the other five exist. The MCP endpoint is the only one that lets an agent act rather than read.

If you publish only two, publish robots.txt and sitemap.xml. 328 of 477 sites already do. If you publish two and want a third, the evidence points at llms.txt, because 199 of those 328 sites have already added it and the rest are now the minority.

Six files, six different jobs

All six live at predictable paths and all six are fetched by machines. The difference is what a machine learns from each one.

SurfaceLocationFormatGoverned byEnforced?
robots.txtorigin root onlyplain text, grouped recordsRFC 9309 (IETF Standards Track)No, voluntary
XML sitemapany path, declared in robots.txtXMLsitemaps.org 0.90No, a hint
llms.txtroot or any subpathMarkdownllmstxt.org, no standards bodyNo
Markdown twinsame URL, different Accepttext/markdownHTTP content negotiationServer-side, yes
Link: headerHTTP response headerRFC 8288 link relationsllms.txt v2 for two relationsN/A
MCP endpointplatform-specific, often /api/mcpJSON-RPCModel Context ProtocolYes, it executes

Each arrived to solve a problem the previous one left open.

DateWhat shippedWhy it mattered
1994Robots Exclusion Protocol, Martijn KosterCrawlers were overwhelming servers; publishers needed a way to say no
April 2020Sitemaps protocol 0.90 documented at sitemaps.orgLink-following missed pages nobody linked to
September 2022RFC 9309 makes robots.txt an IETF Standards Track documentThirty years of convention finally written down
3 September 2024llms.txt proposed by Jeremy HowardContext windows are small; a sitemap of 50,000 URLs is useless to a model
24 September 2025Cloudflare Content Signals adds ai-train and ai-input to robots.txt"Do not crawl" and "do not train" turned out to be different requests
10 August 2026llms.txt v2 adds link relations and subpath scopingDiscovery needed to work without guessing a path

robots.txt says who may, and nothing more

RFC 9309 is the only one of these six that is an actual internet standard, published September 2022 by Martijn Koster, Gary Illyes, Henner Zeller and Lizzi Sassman, the last three at Google.

According to its own Security Considerations section, the file is not a lock:

"The Robots Exclusion Protocol is not a substitute for valid content security measures. Listing paths in the robots.txt file exposes them publicly and thus makes the paths discoverable."

So a Disallow line is a request, and it advertises the path you are asking crawlers to skip. Anything genuinely private belongs behind authentication, and a robots.txt full of admin paths is a map for anyone who reads it.

The AI-specific layer sits on top of the same file. B2 grades whether any known AI crawler is named at all, and it passes on just 36.9% of the 477 sites. B1 grades Cloudflare's Content Signals vocabulary (search, ai-input, ai-train) and passes on 21.2%. Both are documented on our bot access reference page. That vocabulary is contested: according to Google's John Mueller, writing on Reddit on 6 July 2026, "none of the crawlers / llms use the 'content-signal' robots.txt directives. It was made up by a CDN."

Naming a specific bot is not optional detail. Google's own robots.txt specification says only one group applies to any given crawler, the most specific one that matches its token. A bot with its own User-agent block never reads your * block. Our AI crawler user-agent list covers which operators publish which tokens, and which document that they ignore the file.

sitemap.xml is an inventory, and the line that declares it is not a robots.txt record

The detail almost every comparison gets wrong: the Sitemap: line lives in robots.txt, but RFC 9309 does not define it. Section 2.2.4, "Other Records", puts it outside the standard:

"Crawlers MAY interpret other records that are not part of the robots.txt protocol -- for example, 'Sitemaps'."

Two independent conventions in one file, one of them optional for a compliant parser. That is why scanners disagree about sitemaps more than anything else.

A worked example, verified on 4 September 2026. stripe.com/robots.txt opens with Sitemap: https://stripe.com/sitemap/sitemap.xml. That URL returns 200, application/xml, 805 bytes. Meanwhile stripe.com/sitemap.xml returns a hard 404. A scanner that probes the conventional path calls Stripe's sitemap missing. One that reads the declaration finds it immediately. Same correctly configured site.

The sitemap's job is coverage, not priority. Sitemaps.org states it in its own words: "Using the Sitemap protocol does not guarantee that web pages are included in search engines, but provides hints for web crawlers to do a better job of crawling your site." Its hard limits are 50,000 URLs and 50MB uncompressed per file, which is why it fails as an agent-facing document. A model with a finite context window cannot read a 50,000-row inventory to find your pricing page.

D2 passes on 75.9% of our 477 sites, the highest pass rate of any check in the whole rubric. This is the surface publishers have already finished.

llms.txt is the shortlist, with a subpath rule most tools ignore

llms.txt exists because a sitemap answers "what exists" and nobody was answering "what matters". It is Markdown, it lives at the root or any subpath, and per llmstxt.org an H1 with the site name "is the only required section". The spec page records its own dates: published 3 September 2024, modified 10 August 2026.

That August revision added the rule that breaks most validators, verbatim from the spec:

"A file covers the URLs under its path, and where more than one file applies, agents should use the most specific one."

Subpath scoping means example.com/docs/llms.txt is legitimate even when the root file does not exist. Our own C2 check probes the origin root and stops, a defect we published rather than hid. Our teardown of 39 real llms.txt files documents that case against the spec author's own reference implementation.

Adoption depends entirely on how the sample was drawn, and the spread is enormous:

SourceSampleAdoptionDated
AIScan (this study)477 scanned sites44.4% pass, 9.4% partial4 Sep 2026
Ahrefs137,210 domains with traffic28%15 Jun 2026
RankabilityTranco top 1,0008.7% overall, 15.8% of the 549 reachableupdated 23 Aug 2026
SE Ranking~300,000 domains10.13%reported 20 Nov 2025

Ours is the highest because our sample is the most self-selected: owners who chose to run an agent-readiness scanner. Read it as an upper bound for motivated publishers, not a figure for the web. According to Ahrefs, its own sample skews "more technical and SEO-aware than the web at large".

Publishing is also not consumption. According to Ahrefs, 97% of the valid llms.txt files it found received zero requests in May 2026. And Google's AI optimization guide, last updated 2026-07-10, is unambiguous about its own behaviour:

"Doing so will neither harm nor help your site's visibility or rankings in Google Search, as Google Search ignores them."

Our evidence review on whether llms.txt does anything sets out the three candidate consumers and which of them there is evidence for.

Markdown negotiation delivers the same page in a form a model can afford

The fourth surface is not a file. It is the same URL returning a different representation when the client asks, using the Accept header HTTP has always had.

The best live implementation belongs to the Next.js team, verified on 4 September 2026:

curl -sI -H 'Accept: text/markdown' https://nextjs.org/ | grep -iE 'content-type|vary|x-matched'
# content-type: text/markdown; charset=utf-8
# vary: Accept
# x-matched-path: /llms.md

That response is 3,939 bytes. The same URL fetched with a browser user-agent returns 347,764 bytes of HTML. An agent gets 1.1% of the payload and loses nothing it wanted.

C1 passes on 30.8% of our 477 sites, and that number needs a warning we would rather publish than bury. C1 passes on 147 sites, and 55 of those 147 sit on hosts that do not cleanly pass E1, our correct-404 check. On a host that answers 200 for every path, a Markdown probe "succeeds" because nothing can fail. The honest floor is closer to 20%, which lands much nearer Cloudflare Radar's independent finding of 3.9% of the top 200,000 domains passing Markdown negotiation, reported in its Agent Readiness announcement of 17 April 2026.

Every convention above requires an agent to guess a path. llms.txt v2 fixed that by borrowing two RFC 8288 link relations, deliverable as HTML <link> tags or as HTTP Link: headers: rel="describedby" points at the llms.txt covering a page, and rel="alternate" type="text/markdown" points at its Markdown twin.

The header form matters more than it sounds. It works for non-HTML resources, and it can be set at the CDN without touching a single page. Our own homepage, verified on 4 September 2026, answers:

link: </.well-known/api-catalog>; rel="api-catalog"; type="application/linkset+json",
      </llms.txt>; rel="describedby"; type="text/markdown",
      </sitemap.xml>; rel="sitemap"; type="application/xml",
      </api/scan>; rel="service-desc"; type="text/event-stream"

Four relations, one header, no path guessing required.

D3 passes on 52.2% of the 477 sites, which is much higher than it looks, because our D3 accepts any agent-useful relation rather than only the two that llms.txt v2 names. Measured strictly against those two relations across 39 llms.txt-publishing sites on 1 September 2026, rel="describedby" appeared on 4. Say which definition your number uses, because the two differ by an order of magnitude.

The MCP endpoint is the only surface that lets an agent act

The first five surfaces hand an agent something to read. The sixth hands it something to do, and it is missing from every comparison article we could find.

An MCP server card at /.well-known/mcp/server-card.json is the file version. Our P2 check passes on 3.4% of 477 sites, 16 in total, the lowest pass rate in the rubric after x402 payments. That number understates reality badly, and here is the proof, verified on 4 September 2026:

# The well-known path
curl -s -o /dev/null -w '%{http_code}\n' https://www.allbirds.com/.well-known/mcp/server-card.json
# 404

# The live endpoint the platform actually runs
curl -s -X POST https://www.allbirds.com/api/mcp -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
# 200 application/json, with a callable tool listed

The file is absent and the capability is live. On 2 September 2026 we sent that same request to 25 Shopify storefronts and 15 answered with a valid tool list, nine of them exposing a update_cart tool. Our WebMCP measurement covers what that surface exposes and what it does not.

A standards footnote worth carrying: IANA's Well-Known URIs registry held 213 registered suffixes on 2 September 2026. agent-card.json is registered. Neither mcp nor webmcp is. So the file version of this surface is a convention, and the endpoint version is not declared anywhere at all.

How many of the six do real sites actually publish?

Population: every scan in our production database on rubric version 2026.08.2 at site scope, deduplicated to the single latest scan per host, with our own domain removed. That leaves 477 sites scanned between 25 August and 4 September 2026, mean score 56.3. It is the same population definition as our 473-site state-of-the-web study, refreshed a day later. No scanned URL is named here; the corpus is other people's sites.

Surfaces published (of 6)SitesShareMean readiness score
07515.7%19.2
1388.0%41.9
27816.4%46.3
311123.3%55.3
48517.8%70.8
57716.1%88.2
6132.7%95.9

Mean AIScan score rising from 19.2 to 95.9 as sites publish more of the six discovery surfaces, across 477 sites measured on 4 September 2026

The gradient is monotonic and steep, roughly 13 points per additional surface. That is partly circular, because five of the six are graded checks, so it is not claimed as an independent effect. What is not circular is the shape of the distribution. A quarter of the web we scanned sits at exactly three surfaces, and those three are almost always robots.txt, a sitemap, and one more.

What having the classic two predicts about the newer four

Do publishers who did the old work do the new work? They do, and the effect is large.

GroupSitesAlso publish llms.txt
Pass both robots.txt and sitemap328199 (60.7%)
Do not pass both14913 (8.7%)

A site with both classic files is seven times more likely to publish llms.txt than a site without them. The plausible reading is not that a sitemap causes an llms.txt, but that both come from the same habit: a team that treats machine readers as an audience.

The counter-population is worth naming. 52 of 477 sites pass both classic files and none of the four newer ones, technically competent sites that finished the 2005 checklist and never started the 2026 one. 75 sites pass none of the six at all, with a mean readiness score of 19.2.

Which surface to add next, based on what you already have

Run the scan first, then branch on what it returns.

What your scan showsAdd this nextWhy
D1 or D2 failingThe failing one of robots.txt or sitemapEverything else is discovered through them. 328 of 477 sites already have both
D1 and D2 pass, C2 fails/llms.txtCheapest remaining surface, and the majority of your peer group already has it
C2 passes, C1 failsMarkdown twins for your top 20 pagesCuts payload by roughly 99% on a docs-style page
C1 and C2 pass, D3 failsTwo Link: relations at the CDNOne header change, no page edits, and it is the surface that makes the others findable
B2 failsName specific AI crawler tokens in robots.txt292 of 477 sites name none, so wildcard rules are doing all the work
Everything passes, P2 is infoNothing yet, unless you sell something3.4% adoption. Worth watching, not worth a sprint
Correct-404 check E1 failingFix the soft 404 before anything elseOn a host that answers 200 for every path, four of these six checks return meaningless passes

That last row is the one people skip: a soft 404 makes every well-known-path probe look successful, including ours.

How to check all six on your own site

The fastest route is one command, free, no account:

npx aiscan-cli yoursite.com

Or paste the URL at aiscan.site. The scan grades all six surfaces in a single pass and names the check IDs used throughout this article: D1 robots.txt present and sane, D2 XML sitemap, D3 Link header for discovery, C1 Markdown content negotiation, C2 /llms.txt, P2 MCP Server Card, plus B1 and B2 for the AI-specific robots.txt layer and E1 for correct 404 handling. The discoverability, content and capabilities reference pages document exactly what each one looks for.

If you would rather check by hand, six commands cover it:

S=https://yoursite.com
curl -s $S/robots.txt | head -30                              # D1, B1, B2
curl -s $S/robots.txt | grep -i '^sitemap:'                   # D2, read the declaration
curl -s -o /dev/null -w '%{http_code} %{content_type}\n' $S/llms.txt          # C2
curl -sI -H 'Accept: text/markdown' $S/ | grep -i content-type               # C1
curl -sI $S/ | grep -i '^link:'                                              # D3
curl -s -o /dev/null -w '%{http_code}\n' $S/.well-known/mcp/server-card.json # P2

# And the one that validates the other five
curl -s -o /dev/null -w '%{http_code}\n' $S/definitely-not-a-real-page-xyz    # E1, must be 404

Run the last command first. If it returns 200, every result above it is unreliable.

Fixing them on WordPress and on Shopify

On WordPress the recurring problem is not knowing what to publish, it is three plugins each believing they own robots.txt. ThinkRank puts all five of the surfaces a WordPress site can control (the robots file, robots meta, sitemaps, schema and llms.txt) behind one plugin, which ends the argument rather than adding a fourth voice to it. Switching costs nothing in re-entered configuration either: it imports what Yoast, Rank Math, SEOPress or All in One SEO already hold. Named honestly: Rank Math and Yoast both have deeper traditional-SEO content analysis and far larger install bases, and if that analysis is your daily workflow, they remain reasonable choices. Neither ships llms.txt generation today. Our WordPress platform page lists the check-by-check guides.

On Shopify the constraint is different, because the theme does not give you filesystem access to drop a file at the root. StoreSEO generates llms.txt from products, collections, pages and articles, edits agents.md, and handles schema and AEO markup, which is precisely the half of the stack Shopify's own agent rollout leaves untouched. It is rated 5.0 from 733 reviews on the Shopify App Store as of 4 September 2026 and carries the Built for Shopify badge. Honest alternatives: Yoast SEO for Shopify and Avada SEO both cover schema and metadata well, and neither generates llms.txt or agents.md today. The Shopify platform page has the per-check steps.

For generating a first llms.txt on any stack, our llms.txt generator writes a spec-shaped file from a URL. Be aware of its limit, stated plainly: it generates, it does not validate a file you already have.

Where AIScan fits, and where it doesn't

What AIScan seesWhat it cannot see
Whether each of the six surfaces responds, and with what content typeWhether any agent ever fetched them. Server logs answer that, we do not
The declared Sitemap: line in robots.txt, not only the conventional pathWhether the URLs inside your sitemap are the ones worth crawling
/llms.txt at the origin rootAn llms.txt at a subpath, which llms.txt v2 explicitly permits. This is a defect in our C2, published on 1 September 2026
A Markdown content type on a probe pathWhether the Markdown is a faithful rendering of the page or a stub
Any agent-useful Link: relationWhether the targets it names resolve to what they claim
An MCP server card at the well-known pathA live MCP endpoint at a platform-specific path such as /api/mcp, which is where the real adoption is

Two of those rows are our own open bugs. We publish them because a scanner that hides its false negatives is worth less than one that names them.

The six-surface checklist, ten minutes

  • Probe a nonsense path. Confirm it returns 404, not 200
  • robots.txt exists, returns text/plain, and names at least one AI crawler token explicitly
  • robots.txt carries a Sitemap: line pointing at a URL that returns 200 and XML
  • Each sitemap file is under 50,000 URLs and 50MB uncompressed
  • /llms.txt returns 200 with text/plain and starts with a single # H1 line
  • If your docs live under a subpath, publish an llms.txt there too
  • Accept: text/markdown on your busiest page returns text/markdown, not text/html
  • Response headers carry the two v2 relations, describedby and alternate with type="text/markdown"
  • If you run a store, send one JSON-RPC tools/list to your platform's MCP endpoint and read what it exposes

What to do with this

Six surfaces, six questions, and no site needs all six. The evidence from 477 real sites is that most publishers stop at three, that the classic two are finished work, and that the gap between a site scoring 46 and one scoring 88 is two files and one HTTP header.

Start by finding out which of the six you already have. One command, npx aiscan-cli yoursite.com, or your URL pasted into aiscan.site, returns all of them. Read E1 first, because it decides whether the rest mean anything, then D1, D2, D3, C1, C2 and P2. Then work down the decision table above, one surface at a time.

The guides index has the per-platform walkthroughs, and the state-of-the-web study has the full distribution this article's population came from.

Frequently asked questions

Do I still need llms.txt if I already have an XML sitemap?

They answer different questions, so a sitemap does not replace it. A sitemap is a complete inventory, capped by the sitemaps.org protocol at 50,000 URLs and 50MB per file, and its job is coverage. An llms.txt is a short curated list of the pages that matter, written in Markdown so a model can read the whole thing. Across 477 sites measured on 4 September 2026, 75.9% pass our XML sitemap check and 44.4% pass the llms.txt check, so most publishers who have one still do not have the other.

My scan says my sitemap is missing, but I can open it in a browser. What is wrong?

The scanner is almost certainly probing /sitemap.xml while your sitemap lives somewhere else and is declared in robots.txt. Stripe is the clean example: on 4 September 2026 stripe.com/robots.txt declared Sitemap: https://stripe.com/sitemap/sitemap.xml, that URL returned 200 with 805 bytes of XML, and stripe.com/sitemap.xml returned a hard 404. Check the declaration in your robots.txt first. If it points at a live file, the site is correct and the scanner is reading the wrong path.

Does robots.txt actually block AI crawlers?

No. It states a preference that well-behaved crawlers honour voluntarily. RFC 9309 says so in its own Security Considerations section: the protocol is not a substitute for valid content security measures, and listing a path in robots.txt makes that path publicly discoverable. Enforcement needs an edge rule, a WAF, or authentication. Several operators also document that specific user-triggered agents ignore robots.txt entirely.

My llms.txt returns HTTP 200 but the check still fails. Why?

Three usual causes. The file may be served with content-type text/html rather than text/plain, which means a server rendered a page instead of returning a file. The host may answer 200 for every path, in which case the file does not really exist and a nonsense URL will also return 200. Or the file may be missing the single H1 line, which llmstxt.org calls the only required section. Test the nonsense path first, because it decides whether the other two answers mean anything.

Accept: text/markdown returns text/html on my site. What do I fix?

That is content negotiation not being implemented, and it is a server or CDN change rather than a content change. The site has to inspect the Accept header and route to a Markdown representation. Next.js does it in production: on 4 September 2026 nextjs.org answered a text/markdown request with content-type text/markdown, vary: Accept and x-matched-path: /llms.md, returning 3,939 bytes against 347,764 bytes of HTML for a browser. Publishing a .md twin of each page and routing to it is the usual implementation.

Does Google use llms.txt?

No, and it says so directly. Google's AI optimization guide, last updated 2026-07-10, states that creating and maintaining llms.txt files will neither harm nor help your site's visibility or rankings in Google Search, because Google Search ignores them. Ahrefs also found on 15 June 2026 that 97% of the valid llms.txt files it identified received zero requests in May 2026. The file is worth publishing for the tools that do read it, and for a human-curated map of your own site, not for Google rankings.

Every well-known path on my site returns 200, including ones I never created. Is that a problem?

Yes, and it is the single most damaging thing on this list. A host that answers 200 for missing pages is a soft 404, and it makes every well-known-path probe look successful, including ours. Of 477 sites measured on 4 September 2026, 127 did not cleanly pass our correct-404 check, and 55 of the 147 sites passing the Markdown negotiation check sit on those hosts. Fix the soft 404 before you trust any other result.

If I can only add one more surface, which should it be?

Add whichever of robots.txt and the XML sitemap is failing, because everything else is discovered through them. If both already pass, the evidence points at llms.txt. Of the 328 sites in our 477-site sample that pass both classic files, 199 have already added llms.txt, so a site with both and no llms.txt is now in the minority of its own peer group. The MCP server card can wait unless you sell something, since it passes on only 3.4% of sites.

Related guides