---
title: "llms.txt validator"
description: "Checks any site's llms.txt against the llmstxt.org v2 spec: structure, link health, subpath resolution. Every finding is labelled spec, convention or hygiene."
canonical_url: "https://serhiichuk.dev/tools/llms-txt/"
---

# llms.txt validator

Checks against llmstxt.org v2 (August 2026). Free, no signup.

Check any site's `llms.txt` against the [llmstxt.org](https://llmstxt.org/) spec: structure, link
health, and the conventions that aren't actually in the spec. Every finding says where its rule comes
from, so you can tell a spec violation from a habit.

The check itself is a form on the page, so this file describes the tool rather than replacing it.
[Open the validator](https://serhiichuk.dev/tools/llms-txt/) in a browser to run one. An agent that
wants the same check as a callable tool should use `validate_llms_txt` on the
[MCP server](https://serhiichuk.dev/tools/mcp/index.md), which runs the same rules.

It reads the `llms.txt` at the path you give it, walking up to the site root if there is none, then
checks the links it lists. Nothing is stored.

## What it checks

- Checks the structure llmstxt.org describes: H1, blockquote summary, H2 file lists
- Resolves llms.txt at a subpath, walking up to the site root
- Checks every link in the file and reports the ones that do not resolve
- Looks for the v2 link relations, rel=describedby and rel=alternate type=text/markdown
- Labels every finding spec, convention or hygiene
- Writes a paste-ready prompt for a coding agent

## Frequently Asked Questions

### What is llms.txt?

A markdown file that tells language models what a site is and where its important content lives, in a
form they can read without parsing navigation, scripts and boilerplate out of your HTML. It sits at
/llms.txt, or at any subpath such as /docs/llms.txt. It was proposed by Jeremy Howard at
llmstxt.org.

### What changed in llms.txt v2?

Four things, in August 2026. It recommends two standard link relations so a client can find these
files from any page: rel="describedby" points at the llms.txt covering the page, and rel="alternate"
type="text/markdown" at that page's markdown version, as an HTML link element or an HTTP Link header.
Both URL forms for a markdown version are allowed now, page.html.md and page.md, where v1 had only
the first. A file at a subpath has defined meaning: it covers the pages under its path, and the most
specific one applies. And the llms_txt2ctx context-expansion tool left the proposal, taking the
mechanical meaning of the Optional section with it. That section is now a naming convention and
nothing more.

See [what changed in v2](https://llmstxt.org/changes.html).

### What does the spec actually require?

One thing: an H1 with the project or site name. The spec calls it the only required section. A
blockquote summary, content sections and H2 file lists are all described as optional or 'zero or
more'. So a missing H1 is the only structural problem this checker calls an error, and everything
else is labelled by where the rule comes from.

See [the spec's Format section](https://llmstxt.org/#format).

### Is llms-full.txt part of the spec?

No. It appears nowhere in the llmstxt.org spec. It is a widely used convention for a single file with
the full content inlined, so a client does not have to follow every link. This checker reports it as
a convention, never as a spec violation.

See [the spec's full text](https://llmstxt.org/).

### Does having an llms.txt improve my ranking?

There is no evidence that any search engine uses it as a ranking signal, and none of them have said
they do. What it does is give a model reading your site a clean, current description you control,
instead of one inferred from your markup. Treat it as content hygiene for answer engines, not as an
SEO trick.

### Do you store the sites I check?

No. The check runs per request and nothing about the target is written down. It requests llms.txt at
the path you give it and, if nothing is there, at each directory above it up to the root; then
robots.txt, a sibling llms-full.txt, the page the file covers, and a HEAD request per link listed.
Every one of those is a public URL.

## Want this done properly across your estate?

I work on cloud architecture, DevOps and FinOps — including making systems legible to the agents that
now read them.

[Book a call](https://serhiichuk.dev/contact/)
