llms.txt validator
Paste your llms.txt and check it against the llmstxt.org proposal: structure, link format, sections, URLs and size, with line numbers and a cleaned copy. Only the H1 is required, and that is the standard the validator holds you to.
The cleaned copy reorders the file into spec order, turns stray headings into H2 sections, normalises list items, drops duplicate links and empty sections. It cannot invent missing URLs or make relative links absolute.
4 steps, no signup
- 01
Paste your llms.txt
Open
yourdomain.com/llms.txt, copy the whole file and paste it in. Or load the sample to see how the checks work. - 02
Read errors first
Errors break the format defined at llmstxt.org, such as a missing H1 or a link that is not in
[name](url)form. Each one names its line. - 03
Then the warnings
Warnings are legal but probably unintended: relative URLs, duplicate links, empty sections, an oversized file.
- 04
Copy the cleaned version
The tool rebuilds the file in spec order with the safe fixes applied. Review it, then upload it to your web root.
Short answer: an llms.txt validator checks your /llms.txt file against the proposed spec at llmstxt.org: one H1 title, an optional blockquote summary, then H2 sections of Markdown links. Paste the file above to see errors, warnings and a cleaned copy. A valid file isn't proof that any AI engine reads it.
What this llms.txt validator checks
An llms.txt validator should hold a file to the format that actually exists, not to one a tool vendor imagined. The format is a proposal by Jeremy Howard, published at llmstxt.org in September 2024. It is short. The file is Markdown, and its parts come in a fixed order:
- An H1 with the name of the project or site. The proposal calls this "the only required section."
- A blockquote with a short summary.
- Zero or more detail sections of any Markdown type except headings: paragraphs, lists, notes.
- Zero or more H2 sections holding "file lists": Markdown list items with a required
[name](url)link, optionally followed by a colon and notes.
By convention, an H2 called ## Optional marks links an agent may skip when it needs a shorter context. That is the whole specification. Everything else this tool reports is a warning, a judgement about what is likely to go wrong, and it is labelled as one.
Errors vs. warnings
| Level | Check | Why |
|---|---|---|
| Error | No H1, or H1 not the first content | The H1 is the one required element, and it comes first. |
| Error | More than one H1 | The format has a single title. |
| Error | H3 or deeper headings; any heading before the H1 | Detail sections allow any Markdown "except headings"; file lists are H2. |
| Error | A list item in an H2 section without a [name](url) link | The link is required in every file-list entry. |
| Error | Empty link name or empty URL | Both halves of the link are required. |
| Warning | No blockquote, or blockquote not straight after the H1 | Recommended, not required. |
| Warning | Relative or non-HTTP URLs | The file is often read away from your domain. |
| Warning | Duplicate links | Wastes the context the file exists to save. |
| Warning | Empty H2 sections; prose inside a file-list section | Probably a leftover or a mistake. |
| Warning | Notes not separated by : | The proposal's form is [name](url): notes. |
| Warning | ## Optional not last, or repeated | Convention puts secondary links at the end. |
| Warning | Over 50 KB or 200 links | No limit in the spec; a long file defeats its purpose. |
Why the blockquote is only a warning. Several online checkers fail a file with no blockquote or no H2 section. The proposal treats both as optional, so a file that is just # Acme is technically valid. It is also nearly useless, which is why the tool still nudges you.
What the cleaned version changes
The fix is conservative. It keeps your H1 (or inserts a placeholder you must replace), moves the blockquote directly under it, keeps your detail paragraphs, converts any H3 or deeper heading into an H2 section, rewrites list items as - [name](url): notes, removes exact duplicate URLs after their first appearance, drops empty sections, and moves ## Optional to the end. It never guesses a domain for a relative link or a URL for an entry that has none: those remain warnings for you to fix by hand.
The honest part: does a valid llms.txt do anything?
No one has shown that it does. In this site's own llms.txt log study, the file was requested only a handful of times in three months, almost all by SEO audit tools and generic scanners; the study records which bots fetched it and which did not. Google's own guidance on AI features and your website says you do not need to create "new machine readable files, AI text files, or markup" to appear in AI Overviews or AI Mode. On the site's GEO tactic evidence scoreboard the effect on citation is still an open question.
So treat validation as housekeeping. If you publish the file, it should be correct, because a broken file is worse than none for any tool that does parse it. But passing this validator is not a signal to any AI system, and no checker, including this one, can tell you otherwise. The file costs a few minutes; spend those minutes, not a budget.
Validator vs. generator
If you are starting from nothing, use the llms.txt generator: it writes a file in spec order from a list of pages. Use this validator when you already have a file, hand-edited, produced by a CMS plugin, or generated by another tool, and want to know whether it matches the proposal. Plugin output is a common source of H3 sections and relative links.
Common llms.txt mistakes
- Starting with a comment or a blank heading. The H1 has to be the first content. A YAML front-matter block or an HTML comment above it breaks that.
- Nesting H3 sections under an H2. It reads naturally to a human, but the format has only one level of sections.
- Bare URLs in lists.
- https://example.com/docshas no link name. Write- [Docs](https://example.com/docs). - Notes with a dash instead of a colon.
[Docs](url) - setupis readable but is not the proposal's form. - Copying the whole sitemap. Hundreds of links turn a curated map into a crawl list. Keep the pages that answer the questions people ask about you.
- Serving it with the wrong content type or behind a redirect. This tool cannot see how your server delivers the file. Check that
/llms.txtreturns 200 and plain text.
What this validator cannot check
It works only on the text you paste. It does not fetch your site, so it cannot check that links resolve, that the file is served at the root, or that AI crawlers request it. For that last question, your own server logs are the only reliable source; the AI crawler log analyzer will show you whether any bot ever asked for /llms.txt.
Last checked and updated: . Everything on this page runs in your browser; nothing you enter is sent anywhere.
Frequently asked questions
How do I validate my llms.txt file?
- [name](url): notes. Errors and warnings show their line numbers.What is the correct llms.txt format?
## Optional holds links an agent can skip.Is the blockquote required in llms.txt?
Can llms.txt use H3 headings?
What does the Optional section in llms.txt mean?
## Optional are secondary: an agent that needs a shorter context can skip them. Put changelogs, archives and nice-to-have references there, not your main docs.Do llms.txt links need to be absolute URLs?
/docs may not resolve. This validator warns on relative links and the cleaned version cannot fix them without your domain.Does llms.txt actually work?
Does Google use llms.txt?
How big should an llms.txt file be?
llms-full.txt or in .md versions of pages.What is the difference between llms.txt and llms-full.txt?
llms.txt is an index of links with short notes. llms-full.txt is a community convention, not part of the core proposal, that puts the full text of key pages in one file. This validator checks the index format only.