# llms.txt Validator

> Validate llms.txt or llms-full.txt by URL, upload or paste. Get a structure score, every problem with its line number, V2-aware checks and a report to download.

Source: https://llmstextgenerator.com/llms-txt-validator/
Last updated: 24 October 2026

A free online llms.txt checker: test that an `llms.txt` or `llms-full.txt` file has the structure readers expect. Every problem comes with its line number and a plain explanation, and the checks follow the current V2 version of the proposal.

## What does the validator check?

The checks below are the ones the validator runs, listed from the same source the code uses, so this table cannot drift out of date. An `llms-full.txt` file is judged on its headings and serving only, because its job is to hold text rather than links.

| Check | Severity | Applies to | Why it matters |
| --- | --- | --- | --- |
| A single H1 at the top | Error | Both files | The H1 is the site name. Parsers use the first one and get confused by several. |
| Blockquote summary after the H1 | Warning | Both files | Optional, but it is the one line most likely to be read in full. |
| At least one H2 section | Note (llms.txt), Error (llms-full.txt) | Both files | Only the H1 is required by llms.txt v2, so a file without sections is valid but gives agents nothing to follow. In llms-full.txt each page starts with an H2. |
| H3 or deeper headings | Warning | `llms.txt` | Only H2 marks a section in an llms.txt index. Deeper headings are fine inside llms-full.txt. |
| Links use Markdown link syntax | Error | `llms.txt` | Bare URLs and HTML anchors are commonly skipped. |
| Links are absolute | Error | `llms.txt` | Relative paths cannot be resolved once the file is read out of context. |
| Each link has a description | Warning | `llms.txt` | A link with no description gives a model nothing to judge relevance on. |
| Descriptions stay on one line | Warning | `llms.txt` | A description that wraps onto the next line breaks the list item in some parsers. |
| A useful number of links | Warning | `llms.txt` | Fewer than 3 links says little; more than 500 reads like a sitemap rather than a curated index. None at all is valid under v2 but noted. |
| `## Optional` section | Note | `llms.txt` | Since llms.txt V2 (August 2026) it is a convention for secondary links with no special meaning, so its position is only noted. |
| Where the file is served | Note / Warning | Both files | The domain root is the most widely supported place. V2 also allows files in subdirectories, which cover the pages beneath them. Any other filename is a warning. |
| Served as plain text or Markdown | Error | Both files | A file returned as HTML is a web page, not an llms file. |
| Served without a redirect | Warning | Both files | Some readers do not follow redirects for this file. |
| Size | Warning | Both files | An index over 50 KB is usually doing the job of llms-full.txt. A full file over 500 KB is too large for many tools to load. |

**Errors will stop a parser; warnings and notes will not.** A file with only warnings is still usable, so fix the errors first and treat the rest as polish.

## How is the score worked out?

The score measures structure, nothing more. It does not predict rankings or whether any model will read the file. Each part below is worth the points shown. Parts that use a proportion, such as links with descriptions, earn points in proportion, so 18 described links out of 20 earn 90% of that part.

| Part of the score | Points | Counts for |
| --- | --- | --- |
| Single H1 at the top | 20 | Both files |
| Blockquote summary | 10 | Both files |
| H2 sections | 15 | Both files |
| Markdown link syntax | 15 | `llms.txt` only |
| Absolute links | 10 | `llms.txt` only |
| Links with descriptions | 15 | `llms.txt` only |
| One-line descriptions | 5 | `llms.txt` only |
| Link count between 3 and 500 | 5 | `llms.txt` only |
| Served correctly (URL checks only) | 5 | Both files |

The total is the points earned divided by the points available for that kind of file, as a percentage. Serving only counts when you validate by URL, since a pasted file has no server to judge.

## What does your score mean?

The label beside your score comes from these bands. A high score means the file is well formed. It says nothing about whether you listed the right pages or described them well, which matters more and only you can judge.

| Score | What it means | What to do next |
| --- | --- | --- |
| **Well formed** 90 to 100 | Every structural rule passes or nearly passes. | Nothing to fix. Spend the time on the descriptions: are they specific, and are these the right pages? |
| **Usable, worth tidying** 70 to 89 | A reader can use the file, but some links or headings will be skipped or misread. | Fix any errors first, then work through the warnings from the top. |
| **Needs work** 0 to 69 | Something basic is missing or broken, often the H1, the link format or how the file is served. | Fix the errors listed first. They usually account for most of the missing points. |

## How do you fix the most common problems?

These are the problems that cost the most points. In the report, each one links straight to its fix below.

### No H1, or more than one

The first line must be a single `#` heading with your site or project name. Move anything above it below, and turn any second `#` heading into a `##` section.

Before

```
Welcome to Northgate Tools
## Products
```

After

```
# Northgate Tools

> Hand tools for woodworkers, sold and sharpened in Leeds.

## Products
```

### Relative links

A model reads the file on its own, with no page around it to resolve a path against. Write every link in full, with the scheme and domain.

Before

```
- [Chisels](/chisels): Bevel-edge and mortise chisels.
```

After

```
- [Chisels](https://example.com/chisels): Bevel-edge and mortise chisels.
```

### Bare URLs, HTML links or broken Markdown

Each entry is one list item: a dash, the page title in square brackets, the full URL in round brackets, then a colon and the description, all on one line.

Before

```
- https://example.com/chisels
- <a href="https://example.com/planes">Planes</a>
```

After

```
- [Chisels](https://example.com/chisels): Bevel-edge and mortise chisels, 6mm to 38mm.
- [Hand planes](https://example.com/planes): New and restored bench and block planes.
```

### Links without descriptions

Add a colon and one sentence that says what is on the page and who it is for. Facts beat adjectives: sizes, prices, turnaround times, versions.

Before

```
- [Sharpening](https://example.com/sharpening)
```

After

```
- [Sharpening](https://example.com/sharpening): Postal sharpening, GBP 6 per edge, back within 3 working days.
```

### Served as HTML

The server is returning a web page (often a 404 page or a theme template) instead of the file. Put the file at the site root and make sure it is served as `text/plain` or `text/markdown`. The platform guides cover WordPress, Shopify and Next.js.

Before

```
Content-Type: text/html; charset=utf-8
```

After

```
Content-Type: text/plain; charset=utf-8
```

### The index is too large

An llms.txt index should point to your most useful pages, not every page. Keep the pages that answer real questions, move long text into llms-full.txt, and let the sitemap list everything else.

Before

```
## Blog
- [Post 1](https://example.com/blog/1): ...
- [Post 2](https://example.com/blog/2): ...
(400 more)
```

After

```
## Guides
- [Choosing a first chisel](https://example.com/guides/first-chisel): Which sizes to buy first and why.

## Optional
- [Blog archive](https://example.com/blog): Every post, newest first.
```

## What changed with llms.txt V2?

The proposal was revised in August 2026. Two changes affect validation. Files in subdirectories are now defined: `/docs/llms.txt` covers the pages under `/docs/`, so the validator notes the location rather than calling it an error. And the `## Optional` section lost its special meaning, so its position is only noted. The full summary is in [llms.txt V2: what changed](https://llmstextgenerator.com/llms-txt-v2/).

## Frequently asked questions

Is an llms.txt checker different from a validator?

No, they are names for the same job. Whether a tool calls itself a checker, tester, verifier or validator, it reads the file and reports what breaks the format. What differs is how much each checks; this one covers structure, links, descriptions and how the file is served, and publishes its scoring.

Is there an official specification to validate against?

There is a public proposal ([the llms.txt proposal at llmstxt.org](https://llmstxt.org/)), revised as V2 in August 2026 ([the V2 change notes](https://llmstxt.org/changes.html)), but no standards body behind it. These checks follow that proposal and the structure the widely used parsers expect.

Why is my score different on another validator?

There is no official score. Every validator decides its own checks and weights, so the same file can score differently from one tool to the next. This one publishes its weights in the table above, and the score breakdown in each report shows where every point came from.

What does the validator not check?

It cannot judge whether you chose the right pages, whether a description is accurate, or whether the summary describes your business well. Those decide how useful the file is, so read it through once yourself after it passes.

My file passes but nothing seems to read it.

Validation proves the file is well formed and reachable. Whether a given assistant fetches it is up to that vendor. Coding agents use llms.txt files routinely; general chat assistants are less consistent.

Why does link checking take so long?

It requests each link in turn and waits for the answer, up to 60 links. Leave it off unless you are hunting broken URLs.

Is an uploaded file stored?

No. Your browser reads the file and sends its text for checking, the same as pasting it. The file is not kept on the server.
