<!-- Generated from validator/index.html. The canonical document is the HTML page. -->

- [ Home ](/) 
/
- Validator           
Paste or fetch · Line-level diagnostics

# Validate your `llms.txt`

Pasted content is analysed in your browser. To check a public URL, our Cloudflare function retrieves the file, then your browser analyses its structure.

Last updated: September 5, 2026

## Validator
Fetch a URL       
Fetch

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.
Paste file content          
Validate

Clear

Load sample

### Live verification badge

The embed points to a live verification endpoint and a public receipt. It is a syntax
check, not a claim about AI behavior or SEO.
Run Fetch to generate a domain-specific badge.   
Copy Markdown
Run Fetch to generate a domain-specific badge.   
Copy HTML

## What we check

Note

Updated for llms.txt v2

The August 2026 proposal allows a UTF-8 BOM, root or subpath files, and page-level Markdown
alternates discovered with  rel="alternate" type="text/markdown"  and  rel="describedby" . This parser validates the file syntax. Location and HTML discovery remain separate checks.

The validator implements the rules from [llmstxt.org](https://llmstxt.org/):

- **H1 required.** Exactly one level-1 heading after an optional UTF-8 BOM. 
- **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. 
- **No preamble headings.** The free-form context before the first H2 cannot add H3-H6
headings. 
- **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`);
```

Note

Privacy

Validation runs entirely in your browser: pasted content is never stored or sent to a server.
URL requests pass through our Cloudflare function. Operational logs may exist at the hosting
provider; see the  privacy policy .

## Next steps

A file that validates can still be the wrong file. [The ten best-practice rules](/best-practices/) cover what no validator can check: whether the pages you listed are the ones a model actually needs,
which are rarely the most-visited ones. Starting from nothing? The
[generator](/generator/) builds a valid file from your sitemap, and
[how to create llms.txt](/how-to-create/) covers deployment stack by stack. For the syntax
itself see the [format reference](/llms-txt-format/), or read
[real files](/examples/) published by Anthropic, Cloudflare and Stripe.

## Diagnostic codes

`H1_REQUIRED`: Error: the first non-empty line must be an H1 (# Project).

`SUMMARY_MISSING`: Warning: a blockquote summary is recommended, but optional. Its absence alone does not make the file invalid.

## Sources

- [ llmstxt.org, community proposal ](https://llmstxt.org/)
