llms.txt v2: What Changed and What You Need to Do
The llms.txt specification was updated to v2 on 10 August 2026, almost two years after Jeremy Howard and the Answer.AI team first proposed it. The update is explicitly a response to how people actually used the file during those two years, rather than a redesign.
The good news for anyone who already published one: v2 does not invalidate v1 files. Nothing that was required has become optional in a way that breaks you, and nothing optional has become required. Most sites need a small addition, not a rewrite.
The one-line summary: v2 adds a standard way for an agent to discover your Markdown and your llms.txt from any page, defines what a file at a subpath covers, and drops the machinery that tried to expand the file into one big context blob.
The structure is unchanged β including what is required
This trips people up, so it is worth stating before the changes. The spec describes five elements, in order:
- An optional byte-order mark.
- An H1 with the name of the project or site.
- A blockquote with a short summary.
- Zero or more Markdown sections of any type except headings.
- Zero or more H2-delimited sections containing file lists.
And the spec says of the H1: βThis is the only required section.β That sentence was in v1 too. A file with just a title is technically conforming; the blockquote and the H2 link lists are strongly recommended, not mandatory.
Plenty of tools β ours included, until we fixed it β reported a missing blockquote as an error. It is not one. If a validator tells you a file is invalid for that reason, the validator is wrong, not your file.
Change 1: link relations for discovery
This is the substantial addition. v1 gave agents a file at a known path and nothing else. v2 gives every page a way to point at two things: its own Markdown version, and the llms.txt that covers it.
Two standard link relations do the work:
rel="alternate" type="text/markdown"β points at the Markdown version of this page.rel="describedby"β points at the llms.txt file that covers this page.
Either as HTML:
<link rel="alternate" type="text/markdown" href="/docs/page.md">
<link rel="describedby" href="/docs/llms.txt">Or as an HTTP header, which works for non-HTML resources too:
Link: </docs/page.html.md>; rel="alternate"; type="text/markdown",
</docs/llms.txt>; rel="describedby"Why it matters: an agent that lands on one of your pages from a search result no longer has to guess that/llms.txt exists, or that a cleaner Markdown rendering is available. It reads the relation and follows it.
This is the one change no llms.txt validator can check for you. The relations live in your HTML pages and your HTTP headers, not in the llms.txt file. Verify them with your browser's network tab or curl -I.
Change 2: both .md URL patterns are now valid
v1 asked you to append .md to the full filename. v2 also allows replacing the extension outright. Both of these are now correct:
/docs/tutorial.html β /docs/tutorial.html.md (v1 style, still valid)
/docs/tutorial.html β /docs/tutorial.md (new in v2)A small change with a practical reason: many static site generators and CMS platforms could not produce the double-extension form without fighting their own routing. Now they do not have to.
Change 3: subpaths finally mean something
v1 permitted an llms.txt at a subpath β /docs/llms.txt β without ever saying what that implied. v2 defines it:
A file covers the URLs under its path, and where more than one file applies, agents should use the most specific one.
So /docs/llms.txt covers everything under/docs/, and beats a root/llms.txt for those pages. The rule works the same way robots.txt precedence does: most specific wins.
The practical unlock is for anyone who does not control a domain root. A project documented on GitHub Pages atusername.github.io/project/ can now publish a real, conforming llms.txt at its own path and participate fully. Under v1 that was a grey area.
Change 4: the Optional section lost its special powers
In v1, a section headed ## Optional had a mechanical meaning: context-expansion tools were told they could skip it when they needed to fit inside a budget.
v2 removes that. The section is still allowed and still conventionally means βsecondary linksβ, but no tool is expected to treat it specially any more. You do not need to remove it. You should stop relying on it to control what an agent reads.
Change 5: the file is read, not expanded
v1 came with llms_txt2ctx, a tool that expanded an llms.txt and everything it linked into a single context blob to paste into a model.
v2 drops that model entirely. The expectation now is that an agent views or searches your llms.txt, decides what is relevant, and follows the links it needs. That is how agents actually behave, and it changes how you should write the file: the one-line description after each link is no longer decoration. It is the only thing the agent has to go on when deciding whether a link is worth fetching.
Practical consequence: if your link descriptions read like [API](/api): API docs, rewrite them. Say what is in the document and who it is for. That sentence is now doing real routing work.
Your v1 β v2 checklist
- Leave the file structure alone. It is still valid.
- Add the two link relations to your page template β this is the only change with real upside.
- Serve Markdown versions of your key pages, in whichever URL shape your stack finds natural.
- Rewrite thin link descriptions. They are now the agent's routing signal.
- If you publish at a subpath, know that it covers only that subtree β and add a root file if you need wider coverage.
- Stop treating
## Optionalas a control mechanism.
Is it a standard yet?
No. llms.txt remains a community convention. Neither the IETF nor the W3C has ratified it, though a W3C proposal to standardise it surfaced in June 2026 and would turn an interpretation into a documented contract for crawler authors.
Meanwhile Google has been pointedly ambivalent: Search says the file is not needed for its AI features, while Chrome added an llms.txt check to Lighthouse under a new βAgentic Browsingβ category. Both things are true. The file is an agent-readiness signal, not a ranking factor β and the honest reason to publish one is that agents which do read it get a better answer about you.
Check your file against v2
Our validator applies the v2 rules, including subpath coverage and Markdown-target detection β and, importantly, it no longer reports a missing blockquote or H2 as an error, because the spec never made them required.
People Also Ask About llms.txt v2
These are common questions about llms.txt and AI optimization. Click on any question to see the answer.
Validate against llms.txt v2
Paste your file or give us a URL. Free, instant, and nothing leaves your browser.
Open the validatorRelated Reading
Complete Guide to LLMs.txt
Everything you need to know about llms.txt files β what it is, why it matters, and how to create one.
Read moreCase Study: MorseKit and 27 Languages
A section-by-section read of a real 12 KB llms.txt, and why its statements about what does NOT exist matter more than its links.
Read moreLighthouse Agentic Browsing and llms.txt
Google Search says llms.txt does nothing for rankings while Chrome Lighthouse audits it. Both are true β here is what the audit checks.
Read more