llms.txt validator
Free llms.txt checker: paste your file or enter a URL and test it against the spec. Validation runs entirely in your browser.
Last updated:
Validator
Enter a domain (we fetch its /llms.txt) or a full file URL. The fetch runs through
our edge function, so CORS restrictions on the target site do not apply.
What we check
The validator implements the rules from llmstxt.org:
- H1 required. Exactly one level-1 heading, first non-empty line.
- Blockquote summary. Recommended right after the H1.
- H2 file-list sections. Each section is a Markdown list of
- [name](url)items, with optional: notes. - Absolute URLs. Relative URLs are flagged as warnings.
- No content outside sections. After the first H2, only file lists are expected.
- Size guard. Files larger than 50 KB get an info-level note suggesting
llms-full.txt.
Each diagnostic includes a rule code (e.g. H1_REQUIRED, URL_RELATIVE)
so you can grep for it in CI logs.
Use it from CI
The same parser that powers this page can be wired into your build: the rule codes below are stable, so a script can grep them in CI logs. A minimal Node check:
import { readFileSync } from 'node:fs';
import { parseLlmsTxt, summarize } from './validator/validate'; // same parser as this validator
const input = readFileSync('public/llms.txt', 'utf8');
const parsed = parseLlmsTxt(input);
const sum = summarize(parsed);
if (!sum.passes) {
for (const d of parsed.diagnostics) {
console.error(`${d.severity.toUpperCase()} [${d.rule}] line ${d.line}: ${d.message}`);
}
process.exit(1);
}
console.log(`OK, ${parsed.sections.length} sections, ${parsed.sizeBytes} bytes`);