Generate and Validate llms.txt
WebEverything runs locally in your browser — nothing is uploaded
`llms.txt` is a Markdown file at your site root that tells a large language model what the site is and which pages are worth reading, using a short fixed structure: `# Site name`, `> one-line summary`, then some `## Sections` each holding a list of `- [Title](https://example.com): note`. This tool does not guess what your site contains. The link list is yours to supply — “generating” site structure with a model has exactly one outcome: it invents URLs that do not exist, and the file is then read as fact by crawlers and models. So this tidies your list into the spec and validates it item by item. Validation matters more than tidying. A malformed llms.txt raises no error anywhere: browsers ignore it, search engines ignore it, and only the model reading it quietly gets less than you meant. So a missing site name, a missing summary, a link that is not absolute (a model has no domain to resolve it against), a repeated URL, or a section with no links under it all get called out. There is also `llms-full.txt`: the same format with each page’s content inlined. That needs fetching your pages, and this tool makes no network requests, so it does not do it — concatenate the page text yourself if you need it. ⚠️ llms.txt and robots.txt are not the same kind of file — see the FAQ.
Features
- Tidies a site name, summary and link list into a spec-conformant llms.txt
- Keeps an `## Optional` section per the spec — it marks what can be skipped when space runs out
- Reports structure problems: no site name / no summary / no links at all
- ⚠️ Flags links that are not absolute — the reader is a model, with no domain to resolve them against
- Reports repeated URLs and sections that have no links under them
- Derives a title from the address for links that lack one (`/blog/how-to-ship` → `How To Ship`), and says so, so you can check it
- Accepts several common forms: `Title | url`, `url | note`, or an existing `[Title](https://example.com)`
- The report is wrapped in a comment, so pasting it into the file does not affect parsing
- Nothing is uploaded and no server is involved
How to use
- Put the site name on the first line (`# Name`, or just a line) and a `> summary` on the second
- Split with `## Section` headings, one link per line under each
- A link can be just a URL, or `Title | url | note`
- The result updates as you type; the trailing comment lists anything worth fixing
FAQ
- How is llms.txt different from robots.txt?
- Two entirely different things. `robots.txt` is a permission file for crawlers: which paths may be fetched and which may not, a site stating its position on automated access. `llms.txt` is a reading guide for models that consume content: what the site is and which pages are worth reading, a recommendation list. One says “you may or may not come here”, the other says “start with these”. They sit in the same root directory, do not affect each other, and neither requires the other to exist.
- Why not generate it automatically?
- Because it would have to invent things. To “automatically” produce a link list, the tool would need to know which pages your site has — and it makes no network requests, so it could only guess from the site name. Guessed URLs are fake, and the whole purpose of the file is to be read as fact: a 20-link llms.txt with 8 dead links is far worse than a hand-written list of 12 that are right. So this tidies and validates: the content is yours, and the tool makes it conform and points out the problems.
- Why must links be absolute?
- Because the reader is a model, not a browser. A browser seeing `/tool/json-format` knows to prepend the current domain; a model receives a piece of text detached from the site, with no notion of “the current domain” — it can only copy the fragment, and the link is dead. A relative URL in llms.txt is as good as missing, so those get listed one by one.
- What is the `## Optional` section for?
- It is a convention in the spec: content in that section may be skipped when space runs short. Its purpose is to give a model something to trade away when its context is tight — core pages belong in the sections above, nice-to-haves (about pages, changelogs, subscribe links) go here. So do not put anything important in it; that is its only job.
Related tools
robots.txt Generator
WebGenerate a robots.txt: allow everything, block AI training crawlers, block everything or use a custom list, plus paths, Sitemap and Crawl-delay.
Markdown Preview
TextWrite Markdown on the left, see it rendered on the right — heading anchors, a table of contents, highlighted code blocks. Pasted HTML stays text.
HTML to Markdown
TextConvert HTML to Markdown: headings, lists, tables, links, images and code fences in GitHub style, with Markdown syntax characters escaped.
URL Parser
WebParse a URL into scheme, host, port, path, query parameters and fragment, with each parameter shown raw and decoded. Runs entirely in your browser.
User-Agent Parser
WebParse a user agent into browser, version, OS, device type and engine, and see which rules matched. Pattern matching only. Runs entirely in your browser.
HTTP Status Codes
WebLook up an HTTP status code for its meaning, 1xx–5xx class, typical uses and common traps. Runs entirely in your browser.