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

- [ Home ](/) 
/
- Validator            
# 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: August 12, 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

ℹ 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`);
```

ℹ Privacy

Validation runs entirely in your browser: pasted content is never stored or sent to a server.
URL fetches go through our edge function only to retrieve the file, nothing is logged.

## 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.

## Sources

- [ llmstxt.org, official spec ](https://llmstxt.org/)           
On this page

- [ Validator ](#tool)
- [ What we check ](#rules)
- [ Use it from CI ](#cli)
- [ Next steps ](#next)
