INSIGHTS — 04 · TECHNICAL GEO
llms.txt: the complete guide (spec, example, generator, and whether it works)
Search engines were built to crawl. Language models are built to read. llms.txt is a small concession to that difference: one plain-text file at the root of your site that tells a model what you are, who you serve, and where the important pages live, in the format it reads best. This guide covers the specification, a worked example for an ordinary business, the mistakes that make the file useless, and the question everyone asks first: does anything actually read it?
If you just want the file, the free llms.txt generator builds one from a short form. Read on if you want to understand what you are shipping.
What llms.txt is
The proposal comes from llmstxt.org, published in September 2024. The idea is borrowed from robots.txt and sitemap.xml: a well-known path that machines can check without guessing. Where those two files speak to crawlers, llms.txt speaks to a model at answer time. It is written in Markdown because models parse Markdown well and because humans can read it too.
The file is deliberately short. It is not your whole site. It is the page you would hand a new employee on day one: what we do, for whom, where, and which five pages explain the rest.
The format, exactly
The specification is small enough to hold in your head:
| Element | Required | What goes there |
|---|---|---|
# Name |
Yes | One H1, the name of the business, product or project |
> Summary |
Recommended | One blockquote: what it is, for whom, where, in one or two sentences |
| Free paragraphs | Optional | Any Markdown except headings: key facts, aliases, coverage, contact |
## Section |
Optional, repeatable | An H2 followed by a list of links: - [Title](URL): one line of context |
## Optional |
Optional | A section by that exact name whose links a model may skip when short on context |
That is the whole thing. No front matter, no tags, no JSON.
A companion file, llms-full.txt, may contain the full text of every linked page concatenated, so a model can read everything in one fetch. It is optional and only worth maintaining if it is generated automatically from the same source as the pages.
A worked example for a business
Here is a complete, realistic llms.txt for a regional fabrication shop. Every line is the kind of fact an engine can lift into an answer:
# Northline Fabrication
> Custom steel and aluminum fabrication for industrial and commercial clients across Ontario, from a 30,000 sq ft shop in Hamilton. Also known as Northline Fab and Northline Metal Works.
Serving Ontario since 2004. CWB certified to CSA W47.1. Typical lead time 2–4 weeks. Delivery included within 150 km of Hamilton. Contact: [email protected], +1 905 555 0100.
## Services
- [Structural steel](https://northlinefab.example/services/structural-steel/): beams, columns, platforms and stairs, engineered and stamped
- [Sheet metal](https://northlinefab.example/services/sheet-metal/): laser cutting to 25 mm, CNC bending, powder coating in house
- [Aluminum welding](https://northlinefab.example/services/aluminum/): TIG and MIG, marine and architectural grades
## Pricing and lead times
- [How we quote](https://northlinefab.example/pricing/): what drives cost, typical ranges by job type, how to send drawings
## Company
- [About](https://northlinefab.example/about/): team, certifications, shop equipment list
- [Projects](https://northlinefab.example/projects/): completed work with photos and specifications
## Optional
- [News](https://northlinefab.example/news/): shop updates and hiring
Notice what the example does. It names the business and its aliases so a model can connect spellings. It states the service area, certification and lead time as facts, not adjectives. Every link carries one line of context so the model knows what it will find before fetching. And it says nothing it cannot back up on the linked page.
What to put in yours
Work through these in order. If you cannot fill one in with a fact, leave it out rather than writing filler.
- Name and aliases. The legal name, the trading name, common misspellings, the old name if you rebranded. Models connect entities by string, and an alias you forgot is a recommendation you lose.
- One-sentence summary. What you do, for whom, and where. “Commercial roofing contractor for property managers in Calgary and southern Alberta” beats “Your trusted partner for all your roofing needs” in every way that matters.
- Hard facts. Founded year, certifications, service area with distances, lead times, minimum order, languages spoken, hours. These are the details engines quote.
- Key pages with context. Five to fifteen links. Services first, then pricing or how-to-buy, then proof (projects, reviews, certifications), then company. One line each, written as a description, not a slogan.
- Contact. An email and a phone number that match what is on your site, your Google Business Profile and your directories.
The mistakes that make it useless
Serving HTML at /llms.txt. Single-page frameworks and some hosts return the app shell for any unknown path. The file appears to exist, returns 200, and contains your whole JavaScript bundle. Check with a plain fetch, not a browser.
Letting it go stale. A file that advertises a page that now redirects, or a price from two years ago, is worse than no file. Generate it from the same data as the site, or put a reminder on the calendar.
Writing marketing copy. Superlatives carry no information. Facts do.
Listing everything. Fifty links is a sitemap. The point of the file is selection.
Blocking the crawlers anyway. An llms.txt behind a firewall rule that returns 403 to GPTBot helps nobody. Check robots.txt and the CDN’s bot settings first.
llms.txt vs robots.txt vs sitemap.xml vs schema
| File | Audience | Purpose | Format |
|---|---|---|---|
| robots.txt | Crawlers | Permission: which paths which bots may fetch | Directives |
| sitemap.xml | Crawlers | Discovery: every URL you want indexed, with dates | XML |
| Schema (JSON-LD) | Search engines | Entity data on each page: organization, service, FAQ | JSON |
| llms.txt | Language models | Curated summary and reading list for answer time | Markdown |
They do not replace each other. A prepared site has all four, and the facts in each one agree.
Does it actually work?
Honest answer: nobody outside the engine companies knows for certain, and the public signals point to “not yet, officially.”
- Google has stated that its systems do not use
llms.txt, and compared it to the old keywords meta tag. - OpenAI, Anthropic and Perplexity document their crawlers and their robots.txt tokens; none has documented reading
llms.txt. - On the publisher side, adoption has grown steadily, particularly among developer documentation sites, where the file is often generated automatically.
So why ship it? Three reasons that hold even if no engine ever reads the file directly:
- It costs nothing. A text file, served once, cached forever.
- It forces the discipline. Writing the file makes you state your facts plainly and notice where your site does not. Most businesses discover their service area or lead time is written nowhere on their site.
- Model behaviour changes without announcement. Retrieval systems already fetch well-known paths on speculation. Being there first is cheap; being there late is invisible.
What llms.txt will not do is rescue a site that engines cannot read. If your content only renders after JavaScript runs, your specifications live in PDFs, or your firewall blocks AI crawlers, fix those first. The file is a summary of a readable site, not a substitute for one.
Platform notes
- Static sites (Astro, Hugo, Eleventy, Next.js export): put the file in the public directory, or better, generate it at build time from the same data that builds the pages so it cannot drift.
- WordPress: several SEO plugins now emit a basic
llms.txt; check that it lists real pages with real descriptions, not auto-generated titles. - Shopify: apps exist, or you can serve the file through a redirect to a text asset; confirm the content type is text/plain.
- Webflow and Squarespace: upload as a hosted text file and add a 301 from
/llms.txt, or use the platform’s custom-file feature where available. - Single-page apps (React, Vue): configure the host to serve the static file before the catch-all route.
Make one now
The llms.txt generator turns a short form into a correctly formatted file you can copy or download. Fill in facts, not slogans, and check the file in a plain fetch once it is live. If you would rather know whether AI engines currently recommend you before you start, the free audit below measures exactly that.
Questions people ask
What is llms.txt?
A proposed standard (llmstxt.org, September 2024) for a Markdown file served at /llms.txt that gives language models a concise, curated overview of a site: an H1 with the name, a blockquote summary, and H2 sections of links with short descriptions. It is meant to be read at answer time, not crawled like a sitemap.
Does Google or ChatGPT actually use llms.txt?
As of this writing, no major engine has publicly confirmed that it reads llms.txt, and Google has said it does not use the file. Adoption on the publisher side is growing, and the file costs nothing to serve. Treat it as a low-cost fact sheet and a discipline for keeping your key facts current, not as a ranking lever.
What is the difference between llms.txt and llms-full.txt?
llms.txt is the short index: name, summary, links. llms-full.txt is the optional long version that inlines the full text of the linked pages so a model can read everything in one request. Most businesses only need the short one.
Where do I put the file and what content type should it have?
At the root of your domain, https://yourdomain.com/llms.txt, served as text/plain or text/markdown with UTF-8 encoding. Do not let a single-page app return your HTML shell for that path; that is the most common mistake we see.
Is llms.txt a replacement for robots.txt, sitemap.xml or schema markup?
No. robots.txt controls crawler access, sitemap.xml lists URLs for indexing, schema markup describes entities on each page for search engines. llms.txt is a human-readable summary for language models. A well-prepared site has all four, saying the same things.
( WHERE YOU STAND )
Does AI recommend you?
We put twenty real buyer questions about your category and market to Gemini and ChatGPT and send you a PDF showing who they cite instead of you, plus fourteen technical checks. Free, no call required.
Request the free audit