Validate llms.txt
Point it at a domain and we fetch /llms.txt the way a crawler would, or paste the text before you publish. You get a letter grade, the arithmetic behind it, and every finding with its rule id and line.
What we check
Errors are format violations a crawler would trip on. Warnings are things that make the file less useful. Info is context that never changes the score.
| Rule | Severity | What it checks | Score |
|---|---|---|---|
| E1 | error | No file at /llms.txt | score = 0 |
| E2 | error | Not served as text, or larger than 1 MB | −40 each, max −40 |
| E3 | error | No H1 title | −25 each, max −25 |
| E4 | error | Malformed line inside a section | −5 each, max −25 |
| E5 | error | HTML page served instead of the file | score = 0 |
| W1 | warn | No blockquote summary | −10 each, max −10 |
| W2 | warn | No H2 sections | −20 each, max −20 |
| W3 | warn | Dead link | −4 each, max −24 |
| W4 | warn | Link points off-domain | −2 each, max −10 |
| W5 | warn | More than 200 links | −5 each, max −5 |
| W6 | warn | Duplicate URL | −2 each, max −10 |
| I1 | info | robots.txt blocks major AI crawlers | 0 (info) |
| I2 | info | llms-full.txt presence | 0 (info) |
| I3 | info | File age (Last-Modified) | 0 (info) |
Link checks. URL mode and paste mode both sample up to 20 links, HEAD first then GET, same etiquette as the generator. A dead link is any 4xx/5xx or a connection failure; a redirect that lands is fine.
Off-domain links (W4). Links to another registrable domain are flagged, except well-known documentation hosts (readthedocs, GitHub Pages, GitBook, Mintlify, Notion, ReadMe).
robots.txt (I1). We list GPTBot, ClaudeBot, Google-Extended and PerplexityBot when they are blocked at the root. That is your call; the note is there so nobody expects a blocked crawler to read the file.
No file yet? Generate one.