Table of contents
Of the 779 sites in our scan database on 28 October 2026, 427 served an /llms.txt file that returned a 200, and the typical file that passes our check is small: a median of 4,403 bytes, with 80% of passing files between 1,605 and 39,550 bytes. The files that fail to pass despite answering 200 are a different animal. Their median is 33,308 bytes, 52 of the 57 lack a top-level heading, and 37 files are over 100 KB, which looks like a full-text dump or an app shell served at the index path rather than an index.
This post is a census of what AIScan's check C2 stored for those files: size, and whether the file has a heading, sections and links. It is written by M Asif Rahman for site owners who want to know how big an llms.txt should be and what structure the passing ones share. The evidence has no file bodies, so what we can say is limited to size and three structure flags, and the limits section says where that stops.
Quick summary
| Question | Answer from our scans | Section |
|---|---|---|
How many sites serve a file at /llms.txt? | 427 of 779 (54.8%) answer 200; the other 352 fail with no file | The size ladder |
| How big is a passing file? | Median 4,403 bytes; p10 1,605; p90 39,550 | The size ladder |
| How big is a partial? | Median 33,308 bytes | Partials |
| What separates pass from partial? | A top-level H1 plus sections or links. 52 of 57 partials have no H1 | Structure |
| At what size does pass become unlikely? | Over 100 KB, 18 of 37 pass (49%), against 93% to 95% in the 500 B to 10 KB bands | The size ladder |
| Does platform matter? | Mostly for whether the file exists (Shopify 94% serve one, unknown-platform sites 40%), less for size | By platform |
For site owners: aim for a file that fits in one screen of an index: a heading, a few sections, links with one-line descriptions, a few KB. For anyone building a generator: the failure to avoid is the 100 KB file with no heading.
How we measured it, and what it cannot tell you
The corpus. Every AIScan report stores the result of each check. We took the latest site-scope scan per host under rubric 2026.08.2, excluded aiscan.site, and read the C2 result for each. On 28 October 2026 that was 779 hosts. We name no scanned site. The sites are ones people chose to scan, not a random sample of the web, and the platform mix (a lot of Next.js and WordPress) reflects who uses a free agent-readiness scanner.
What C2 stores. The check requests /llms.txt and records the status, the byte count and three flags: has H1, has sections, has links. According to the check's documentation, it looks for a file that returns 200 with an H1, at least one ## section and markdown links, following the llms.txt proposal. A passing file in the data does not always have all three: 338 passes have all three flags, 30 have an H1 and sections but no links, and 2 have an H1 and links but no sections. Every pass has an H1.
What it cannot tell you. The evidence holds no body. We do not know whether the links resolve, whether the Markdown is valid, whether a 100 KB file is a real llms-full.txt, HTML, or JSON. Our validator study read 39 files in full, and this post does not repeat it. We also do not re-argue whether the file changes what AI systems do; that question has its own post. And a fail row here has no byte count at all: all 352 failures are cases where no file answered 200, so size says nothing about them.
Scores. The "average score" figures below are the overall AIScan score of the host, not a C2 score, so they show what else tends to be true of the site, not an effect of the file.
The size ladder
We cut the 427 files that answered 200 into five rungs by byte count. "Pass" and "partial" are C2's own statuses.
| Size rung | Files | Pass | Partial | Pass share | Smallest to largest |
|---|---|---|---|---|---|
| Under 500 B | 9 | 4 | 5 | 44% | 0 to 427 B |
| 500 B to 1,999 B | 61 | 58 | 3 | 95% | 518 to 1,961 B |
| 2,000 B to 9,999 B | 219 | 204 | 15 | 93% | 2,003 to 9,917 B |
| 10 KB to 99 KB | 101 | 86 | 15 | 85% | 10,057 to 98,088 B |
| 100 KB and over | 37 | 18 | 19 | 49% | 103,625 to 524,255 B |
Source: AIScan scan database, rubric 2026.08.2, latest site-scope scan per host, aiscan.site excluded, n = 427 files with a 200 response out of 779 hosts, 28 October 2026.
Three readings follow from the table.
The middle is crowded. 280 of 427 files (65.6%) are between 500 B and 10 KB. That is the size of a short index: a name, a paragraph, three to ten sections and a link list. If you are writing one by hand, you will land here without trying.
Tiny files are mostly broken, not minimal. Nine files are under 500 bytes and five of them are partials. The smallest passing file in the next band is 518 bytes, so a file under 500 B is short enough that it is probably a placeholder or a single line. We cannot see the bodies to say which. Four still pass, which says the check accepts a very small file that has the right shape.
Size alone does not fail a file, but it correlates with the wrong shape. In the 10 KB to 99 KB band 85% pass. Above 100 KB the pass share halves to 49%. The next section shows why: the big partials are overwhelmingly missing a heading.
The overall distribution for passes:
| Statistic | Passing files | Partial files |
|---|---|---|
| Files | 370 | 57 |
| 10th percentile | 1,605 B | not computed |
| Median | 4,403 B | 33,308 B |
| 90th percentile | 39,550 B | not computed |
A median partial that is 7.6 times the size of a median pass is the signal in this census.
Structure: what the passes share
C2's evidence strings come in a handful of shapes. We grouped on the shape with the number replaced, so each row is one combination of flags.
| Evidence shape | Status | Files | Median size | Average host score |
|---|---|---|---|---|
| 200, H1, sections, links | pass | 338 | 4,571 B | 76.2 |
| 200, H1, sections | pass | 30 | 3,049 B | 70.1 |
| 200, H1, links | pass | 2 | 1,737 B | 53.0 |
| 200, no flags | partial | 44 | 39,835 B | 56.8 |
| 200, links only | partial | 6 | 107,834 B | 56.0 |
| 200, H1 only | partial | 5 | 268 B | 54.6 |
| 200, sections and links, no H1 | partial | 2 | 265,974 B | 39.5 |
Same corpus and date, n = 427.
An H1 is the dividing line. All 370 passes have one. Of the 57 partials, 52 do not. The five that do have an H1 are the tiny ones: a heading and nothing else, median 268 bytes. In other words, the partial population is two groups. One is a heading with no content. The other, much larger, is a file with content and no heading.
Sections or links are enough with the H1, though most files have both. 338 of 370 passes (91.4%) have all three. The 32 that miss one are rare enough that we would not design around them. Write all three.
The 52 headless partials are large. The 44 with no flags have a median of 39,835 bytes, the six with links only a median of 107,834. A 40 KB file with no H1, no ## and no markdown links is not an index of anything in the llms.txt sense. The stored evidence cannot say what it is. Our reading is that it is prose, HTML or an app shell, because a serious llms-full file would normally open with a title. That is a reading, not a measurement, and we did not fetch third-party files to confirm it.
Over 100 KB, a heading is the exception. Of the 37 files at 100 KB and over, 19 have no H1. The two largest shapes above (265,974 B median with sections and links but no H1, 107,834 B with links only) are the extreme end. If you generate a file from your whole site and it comes out above 100 KB, check the first line before anything else.
By platform
For platforms with at least 15 hosts in the corpus. "Serves a file" is the share of that platform's hosts whose /llms.txt answered 200.
| Platform | Hosts | Serves a file | Pass | Median pass size | Files over 100 KB |
|---|---|---|---|---|---|
| Unknown | 288 | 115 (39.9%) | 90 | 3,827 B | 7 |
| WordPress | 196 | 112 (57.1%) | 96 | 6,209 B | 17 |
| Next.js | 192 | 120 (62.5%) | 110 | 3,548 B | 7 |
| Astro | 41 | 34 (82.9%) | 34 | 9,640 B | 4 |
| Shopify | 16 | 15 (93.8%) | 14 | 4,438 B | 1 |
Same corpus and date. Shopify has 16 hosts, so treat its row as indicative only.
Existence differs far more than size. Serving a file ranges from 40% to 94% across platforms, while median pass size sits between 3.5 KB and 9.6 KB. Astro hosts are the likeliest to serve a file among the larger groups and every one that served a file passed (34 of 34). We cannot say whether that is the framework's docs tooling, a plugin, or the sort of site that picks Astro.
WordPress has the long tail. 17 of the 37 oversize files are on WordPress sites, 15.2% of the WordPress files, against 5.8% on Next.js. A file generated from a post list grows with the site, which is one possible reason. We did not check how each file was made, so this is a pattern in the data and not a finding about any plugin.
What the data says about how big yours should be
The census answers "what exists", not "what works best for agents", and the llmstxt.org proposal sets no size limit. Within that limit, here is what the passing files do.
| If your site has | Aim for | Why, from the data |
|---|---|---|
| A handful of key pages | 600 B to 2 KB | 58 of 61 files in this band pass |
| A normal site or docs set | 2 KB to 10 KB | The band with 219 files and 93% pass; the median pass is 4.4 KB |
| A big docs site | An index under 40 KB, plus a separate full-text file | 90% of passes are at or below 39,550 B |
| Everything in one file | Do not go over 100 KB | Pass share halves above 100 KB; use a full-text file under its own name |
For the full-text case, our post on llms-full.txt covers when a second file is worth having. The idea is the same as in the data: keep /llms.txt as the index and let the big file live elsewhere.
What a good file looks like
Here is the shape the 338 full passes share, with about 1 KB of content:
# Acme Analytics
> Privacy-first web analytics for small teams. Open source, self-hostable.
## Docs
- [Quick start](https://example.com/docs/start): Install the script and see your first pageview.
- [API reference](https://example.com/docs/api): Endpoints, parameters and examples.
## Product
- [Pricing](https://example.com/pricing): Plans and limits.
- [Changelog](https://example.com/changelog): What shipped, by date.
## Optional
- [Blog](https://example.com/blog): Guides and release notes.
That has an H1, a one-line summary, three ## sections and links with short descriptions, in under 800 bytes. If you build your file with a generator, the AIScan llms.txt generator produces this layout, and the per-platform steps are in the llms.txt setup guide for every platform.
Fixing a file that is flagged partial
The data says the cause is almost always a missing top-level heading, so check in this order:
- Fetch the file and read the first line. If it does not start with
# Your Site Name, add it. In our data 52 of the 57 partials have no H1, so this is the likeliest single fix. - Check what is being served at the path. An app shell or an HTML page served with a 200 at
/llms.txtwill read as a headless file. Your framework's catch-all route is a common cause. - Add at least one
##section and some links in Markdown form,[title](url). - If the file is over 100 KB, split it. Keep the index small and move the full text to a second file.
- Re-scan. Run
npx aiscan-cli yoursite.comor paste the address at aiscan.site, free and with no account, and read the C2 line.
If you run WordPress, ThinkRank writes /llms.txt from the same settings that control robots.txt and sitemaps, so one plugin handles the files that would otherwise fight over the same paths, and it migrates settings from Rank Math, Yoast, AIOSEO and SEOPress. Other SEO plugins also generate the file, and the size pattern above applies to any of them: open the output and look at the first line. On Shopify, StoreSEO is our default recommendation for store AEO work; whichever tool writes the file, check its first line against the shape above.
Notes for the AIScan team
Two things in the stored evidence limit what a census can say, and we have written them up for the product backlog. The C2 evidence holds no body or content type, so an HTML page served with a 200 cannot be told apart from Markdown except by the missing flags. And the pass rule in the data (an H1 plus sections or links) is looser than the rule the docs page states (all three). Both are small changes: store the content type and a short prefix of the body, and either tighten the rule or update the page.
Next step
Scan your site free at aiscan.site or with npx aiscan-cli yoursite.com and read check C2 on the content checks page. If C2 says partial, check the first line of the file against the layout above. The rest of the checks are in the AIScan guides.
Frequently asked questions
How big should an llms.txt be?
Between 2 KB and 10 KB for most sites. In our data 219 files sit in that band and 93% pass; the median passing file is 4,403 bytes. Larger index files work, but pass share falls to 49% above 100 KB.
Is there a size limit in the llms.txt specification?
According to the llms.txt proposal, the file is a Markdown index with an H1 and optional sections, and it sets no byte limit. The size guidance here comes from what passes our check, not from the specification, and a consumer may truncate long files in ways we cannot see.
Why does my llms.txt show as partial in AIScan?
Most often there is no top-level heading. 52 of 57 partials in our data lack an H1. Add # Your Site Name as the first line and confirm the file contains ## sections and Markdown links.
Why does AIScan say my llms.txt is missing when I can open it in a browser?
The check fails when the request does not get a 200 with a file. Common causes are a redirect to an HTML page, a bot block that answers 403 or 429 for scanner traffic, or a CDN rule. Request /llms.txt with curl and read the status and first line.
My llms.txt returns 200 but the scan says partial with a very large size. What is it serving?
Probably not Markdown. A 40 KB or 100 KB response with no H1 is typically an HTML page or an app shell returned by a catch-all route. Fetch it with curl and check the first line and the content type.
Does a bigger llms.txt help more?
Our data does not show a benefit. Pass share is highest between 500 B and 10 KB. We did not measure agent behaviour, so this is about passing the check and not about retrieval quality.
Should I put my whole documentation in llms.txt?
No. Keep /llms.txt as an index and put the full text in a separate file such as llms-full.txt, as described in our post on when to use it.
How often should I regenerate the file?
Whenever your key pages change. If a plugin generates it from your content, check the output size once after setup and again after a large content import, since the file grows with the content.

About the author
M Asif Rahman
Entrepreneur, curious about AI
I have been building companies for a long time, and lately most of my curiosity goes to AI. AIScan is a small personal project I built on a flight from Dubai to Narita. I use it to understand how ready the web is for AI agents, and I share what the scans teach me.
Related guides
AI readiness setup guide by platform (2026)
Verified 17, 18, 20 and 22 October 2026. Updated on 22 October 2026. An AIready site needs six things: a robots.txt that names AI crawlers D1, B2, a sitemap D2, a declared feed E5, an llms.txt C2,…
Platform League Table: WordPress, Next.js, Astro and Shopify Across 728 Sites
Every few weeks someone asks which platform produces the most agentready sites. WordPress, Next.js, Astro and Shopify all have fans, and a ranked table is the answer people expect. We have the data…
Markdown for AI Agents Beyond Docs: Only 19.3% of 701 Sites Serve It
On 8 October 2026 we queried the AIScan database for check C1, the Markdown availability check, across 701 distinct hosts. 135 of them 19.3% returned a real text/markdown response on one of the two…
