Draft an llms.txt file
Generate a concise file that points language-model tools toward the site's most important public pages.
Free, no signup. Build a clean llms.txt that points LLMs at your key pages, or paste one you already have and check that it's well-formed.
| Check | Status when healthy |
|---|---|
| H1 | One site-name H1 |
| Summary | A short blockquote is recommended |
| Links | Grouped, absolute HTTPS URLs |
| Size | Keep the map concise (under ~20 KiB) |
llms.txt is a community proposal
(llmstxt.org), not an official standard.
No major AI crawler is documented to read it today. Treat it as low-effort, low-risk housekeeping —
not a ranking lever. If you want to influence what AI systems can access, that's
robots.txt and your on-page content, not this file.
More on how AI crawlers actually work → Upload your own access log to the Log File Analyzer. Its browser-local /llms.txt report distinguishes verified AI crawler requests, unverifiable crawler claims, spoofed claims, other traffic, and no observation in the supplied period. A request is retrieval evidence only—not proof of rankings, citations, or broad provider adoption.
The Optional section (a crawler may skip it) is emitted last automatically — just name a section “Optional”.
Runs entirely in your browser — nothing you paste is uploaded or stored. Anonymous run-level outcome counters may be used for aggregate research; URLs, domains, IPs, and identifiers are never included, and no statistic is released below 100 runs.
We fetch only <domain>/llms.txt (nothing else) — browsers can't, because of CORS.
Runs entirely in your browser — nothing you paste is uploaded or stored. Fetch by URL sends only the domain to our server to retrieve /llms.txt (browsers can't — CORS); validation still runs locally. Anonymous run-level outcome counters may be used for aggregate research; URLs, domains, IPs, and identifiers are never included, and no statistic is released below 100 runs.
Fill in a site name, a summary, two sections, and an Optional link, and the generator emits this
llms.txt — one # title, a > summary blockquote,
## section headings with Markdown link rows, and the Optional section
moved to the end:
# Acme Docs
> Acme builds developer tools. This file maps our docs, guides, and API reference.
## Docs
- [Getting started](https://acme.example/docs/start): 5-minute quick start
- [API reference](https://acme.example/docs/api): every endpoint and field
## Guides
- [Authentication](https://acme.example/guides/auth): tokens, scopes, rotation
## Optional
- [Changelog](https://acme.example/changelog)
Example data — captured by running this page's own validator against the file above
https:// links grouped under sections, and no duplicates. See
what each severity means ↓.llms.txt. Read llms.txt
for why this is a proposal, not a directive.# title) and a one-line summary (the > blockquote).
Optionally add a Site URL so off-site links get flagged.https:// URL, and optional notes. Or hit
Prefill from sitemap.xml to auto-bucket URLs by their first path segment./llms.txt for you. Read the error/warning/info pills and the parsed-structure preview.+ saves the current site or page. Use ☆ beside any saved site, page, or list to favorite it. Recent check history appears below.
Target filled from your local choices.
Saved targets, named lists, and recent check summaries remain only in this browser.
Looking ahead — not something to do today. llms.txt and per-page Markdown are proposals no major AI crawler is documented to consume yet.
llms.txt is a directory — one file pointing at your key pages. The more interesting
idea, once AI clients adopt it, is content negotiation: same URL, two representations.
Serve HTML to browsers and a clean Markdown rendering to LLM clients,
and decide which at the edge.
A Cloudflare Worker picks the representation from the request — either
Accept: text/markdown or a known AI user-agent — and emits
Vary: Accept (or Vary: User-Agent) so shared caches don't hand the wrong
variant to the wrong client.
It's exactly the move behind this site's hybrid /robots.txt —
same bytes, only the Content-Type label negotiated — just extended to actual content,
and to a real body difference rather than only a header.
This tool does two jobs: it generates a well-formed llms.txt from a
simple form (or a sitemap you upload), and it validates one you paste or fetch from
a live domain. Both run entirely in your browser. For context on why this file is optional
housekeeping rather than a ranking move, see
how AI crawlers actually work and
the llms.txt explainer.
The validator groups findings into three severities, shown as pills:
# title, a malformed list item that isn't a [title](url) link, a
relative (non-absolute) URL, or an empty file.> summary, an http:// link, a duplicate URL, a second
# H1, or links that appear before any ## section.### heading
that isn't part of the structure, or a file large enough (past 20 KiB) to have stopped being a
concise map.A green result means the file is well-formed against the proposal. The result summary is deliberately blunt that this validates form only and cannot guarantee any AI system consumes the file.
The generate/parse/validate engine (src/lib/tools/llms-txt.ts) is pure TypeScript with
no DOM and no network calls, so everything you do in the Generate and
paste flows happens locally in your browser — your draft never leaves the page.
The parser reads line by line: it recognises the # title, a >
blockquote summary, ## section headings, and Markdown link list items, while skipping
the insides of fenced ``` code blocks so they aren't misread as directives. It then
runs file-level checks — required title, recommended summary, duplicate URLs, absolute-URL and
HTTPS rules, and size — and rolls everything into the error/warning/info tally.
The one server touch is Fetch by URL: browsers can't fetch another site's
/llms.txt because of CORS, so a small SSRF-guarded, cached proxy
(/api/llms-fetch) pulls only that exact path — nothing else on the domain — and hands
the body back for validation.
It validates the form of the file against the community proposal — it cannot tell
you whether any AI crawler reads it, because none is documented to. It checks link syntax
(absolute, HTTPS, well-formed Markdown) but does not crawl the links to confirm they resolve or
return the content you claim. The sitemap prefill is a starting point, not a curation step — an
llms.txt is only useful if you trim it to your genuinely important pages. And this is
not a lever for AI visibility: what AI systems can access is governed by your
robots.txt and your on-page content.
Not in any documented way. llms.txtllms.txt is a proposed (not adopted) Markdown file at /llms.txt that gives AI systems a curated map of a site's most important pages. Proposed by Jeremy Howard in 2024, it's read mostly by coding agents like Claude Code — not search crawlers — and Google ignores it. is a community proposal from llmstxt.org, not an official standard, and no major AI crawlerA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. (OpenAI, Google, Anthropic, Perplexity) has published support for reading it. Treat it as low-effort, low-risk housekeeping — a tidy map of your best pages — not a ranking lever. What AI systems can actually reach is governed by your robots.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere. and your on-page content.
One required "# " H1 title (your site name), a recommended "> " blockquote one-line summary right after it, then "## " section headings (Docs, Guides, Blog) each containing Markdown link list items in the form "- [title](url): optional notes". A special "## Optional" section holds links a crawler may skip. Every link URL should be an absolute https:// address the LLM can fetch directly.
At the root of your domain, served at https://site.example/llms.txt — the same location convention as robots.txt. This validator can fetch that exact path for any domain (via a small server-side proxy, because browsers cannot fetch cross-origin) so you can check a live file without pasting it.
The form of the file against the proposal, not whether anything reads it. It flags a missing H1 title (error), missing summary (warning), malformed or relative link URLs, http:// links, duplicate URLs, links that appear before any section, deep "### " headings that are not part of the structure, off-site links, and files large enough to have stopped being a concise map. It cannot and does not guarantee any AI system consumes the file.
Small. It is a directory of links, not a copy of your content. The validator raises an informational note once a file passes about 20 KiB, because at that size it has usually stopped being a concise map and started duplicating pages. If you want to serve full clean content to LLMs, that is per-page Markdown and content negotiation, not a bigger llms.txt.
Upvote what you want most. New ideas can be submitted from the floating Feedback menu; requests appear here once approved, and the most-wanted rise to the top.
You won't be emailed about that request anymore.
Loading…
New requests are reviewed before they appear here.
Where this tool helps
Generate a concise file that points language-model tools toward the site's most important public pages.
Paste or fetch llms.txt and check its H1, summary, absolute links, duplicates, and off-site destinations.
Catch formatting and URL problems locally before publishing the document at the site root.
Explain that llms.txt is a community proposal, not an official standard that major AI crawlers are documented to follow.
Watch the full workflow
llms dot t-x-t is a community proposal, not a supported ranking directive. I’ll show you appropriate use cases, how to generate and validate a file, the required structure, the built-in template and sample result, main features, limitations, deployment steps, and stronger evidence to check next.
The file is a proposed Markdown directory that points at important pages. No major A-I crawler is documented to consume it today, so treat it as low-cost housekeeping, not a ranking factor, access control, or adoption signal. Robots dot t-x-t and page content remain more consequential.
It can provide a concise map for documentation, product help, research, guides, or other stable canonical resources. It should not duplicate full pages, replace navigation or sitemaps, include every U-R-L, or promise A-I citations. Curate pages that are public, useful, current, and directly fetchable.
Enter a site name, optional site U-R-L, one-line summary, and optional details, or insert the canonical template. Add named sections and link rows manually or prefill from a sitemap. The generator updates and self-validates locally as you edit.
A well-formed file has one hash title, a recommended blockquote summary immediately after it, double-hash section headings, and Markdown list links with absolute H-T-T-P-S U-R-Ls and optional notes. A section named Optional is emitted last so clients may skip it.
The left pane shows the exact file bytes and the right pane previews the Markdown. Check the title, summary, section order, link labels, absolute destinations, and notes. Remove generic or duplicate pages. The share link stores compressed state in the U-R-L fragment rather than uploading the draft.
Switch to Validate, paste a file, and run the local parser. You may instead fetch only slash l-l-m-s dot t-x-t from a public domain through the guarded proxy. The clean sample returns zero errors and warnings, which confirms structure only—not crawler use.
Errors cover missing title, empty files, malformed links, and relative U-R-Ls. Warnings cover missing summary, insecure links, duplicates, extra top-level titles, or links outside sections. Information notes cover misplaced summaries, off-site links, deep headings, or a file larger than about twenty kibibytes.
Review each line-level finding and the parsed title, summary, sections, and links. A green result only says the syntax matches the proposal. It does not check whether destinations return two hundred, contain the claimed information, allow crawling, or are consumed by any A-I system.
Features include live generation, removable sections and links, sitemap prefill, automatic Optional ordering, copy, download, fragment-based sharing, paste validation, public-root fetching, issue counts, and a parsed preview. Build l-l-m-s-full is experimental and should not turn the directory into a content dump.
The validator checks form, not adoption, link health, factual accuracy, crawl permission, ranking, citation, or A-I visibility. Sitemap grouping is only a starting point and must be curated. Fetching is limited to the conventional root path. A valid file can still be useless, stale, inaccessible, or ignored.
Download the file, review it with content owners, and serve it at slash l-l-m-s dot t-x-t with a successful response and readable text. Check every listed U-R-L, redirects, canonicals, robots rules, authentication, and maintenance ownership. Revalidate after edits and remove obsolete destinations.
Document the publication date, scope, owner, validator result, and link checks. Then use access logs to distinguish verified A-I crawler requests, unverifiable claims, spoofed identities, ordinary traffic, and no observation. Retrieval is still not proof of training, citation, rankings, or provider-wide support.
Publish the reviewed file at the root, confirm its response and links, and update it when your key pages change. Keep robots controls and on-page content as the real access foundations, and use server logs to look for verified retrieval instead of assuming adoption or visibility impact.