September 1, 2026
llms.txt for a Small Business Site: What to Actually Put In It
llms.txt is a plain-text file at your site's root that tells an AI model what your business is and which pages matter. Put in the business name, one line on what you do, where you work, how to reach you, then a short flagship list ahead of the full page index. Adoption is unproven. Ship one anyway — it costs an hour.
What llms.txt actually is, in plain terms
The idea is small. You publish a file called llms.txt at the root of your domain — yoursite.com/llms.txt — written in markdown. It gives an AI model a clean, stripped-down summary of the business: who you are, what you do, where you do it, and the handful of pages that matter most.
The reasoning behind it is sound. A model that reads your homepage reads everything on your homepage. Nav menus. A cookie banner. A footer full of links. Legal boilerplate. A phone number repeated four times. None of that describes the business, and all of it competes for attention. A model reading a clean index has less to sift through and less to get wrong.
It is not a sitemap. A sitemap is a flat machine list of every URL you have, with no ranking and no judgment — it answers "what exists." llms.txt is supposed to answer "what matters." That difference is the whole point of the file, and it is also the part most people skip.
Does anything actually read llms.txt?
Before anything else, the part most articles bury: llms.txt is a proposed convention, not a standard. No major AI company has publicly committed to honouring it, and there is no public evidence that any specific assistant reads it today.
That is the accurate state of it as of writing. Not "early days." Not "gaining traction." It is a good idea that plenty of sites have shipped and that no large model provider has confirmed it uses.
So if someone sells you llms.txt as a ranking factor, or as the reason ChatGPT will start recommending you, they are overselling it. There is no measurement to point at. Anyone showing you a chart of llms.txt results is showing you a chart of something else.
robots.txt started life the same way — a proposal with no authority behind it that stuck because enough sites shipped it. llms.txt might follow that path. It might not.
So why bother shipping one?
Because the stake really is that small, and one of the returns does not depend on adoption at all.
- It costs almost nothing. On a site that already has its content organized, this is a generated file, not a project.
- It is trivially machine-readable. Plain text, markdown headings, one link per line. Nothing to parse badly.
- The downside is zero. It adds no weight to any page, breaks nothing, and slows nothing down. If it is never read, you lost almost nothing.
- Writing it forces a useful question. "What are the five pages that actually matter here?"
That last one is the real return. Most business owners cannot answer it. The nav is full. The footer is fuller. Everything is presented as equally important, which means nothing is signalled as important — to a model, to Google, or to a human. Sitting down to pick five pages is a positioning exercise disguised as a technical task. Do it once and you will usually find two pages that should be merged and one that should not exist.
What to actually put in it, section by section
Here is the structure that works, in order, with the failure mode attached to each part.
| Section of the file | What goes in it | The mistake to avoid |
|---|---|---|
| Business name (top heading) | The name people actually search for, on its own line as a markdown # heading. | Adding a tagline or keywords to the name. The name is an entity, not a headline. |
| One-line description | A single sentence a human would say out loud: what you do and who for. | Writing a headline instead of a sentence. |
| Location and service area | Where you're based and the regions you actually serve, listed plainly. | Claiming a service area you can't cover, or omitting it entirely. |
| Contact | One line pointing at the way you want to be reached. | Listing four channels, two of which nobody monitors. |
| Flagship pages | Three to six pages, ordered. The ones that define the business. | Making it ten. Ten flagships is no flagships. |
| Pages | The full list of real pages, titles and URLs. | Including thank-you pages, tag archives, and dead legacy URLs. |
| Articles / news | Your published posts, newest first. | Hand-listing them so a new post never appears. |
The name and the one-line description
Top of file, the business name as a markdown heading. Directly under it, one line describing what you do — the version you would say to a neighbour, not the version written for a search engine. If you cannot say it in one sentence, that is a positioning problem the file just found for you.
Where you are and who you serve
Two lines. An office or base location if you have one, and the regions you actually work in. This is the part that helps most for a local or service-area business, because "who does this near me" is exactly the question an assistant gets asked. Keep it honest — a service area you list but cannot cover produces a bad lead and a bad review.
How to get in touch
One line, pointing at the channel you actually want. Ours points at the contact form and nothing else, because that is genuinely how we take work. Yours might be a phone line. Pick the one you answer.
The flagship list — the only part with judgment in it
Everything else in this file is mechanical. This part is not.
A flagship list is three to six pages, in deliberate order, that a stranger would need to read to understand the business. For a service company that is usually the core services plus proof. Ours lists the services and the case-study page — nothing else gets in.
The discipline is in what you leave out. If a page is on the list because someone worked hard on it, or because it once ranked, or because it would hurt feelings to remove it, take it off. A signal that points everywhere points nowhere.
Then the full page and article lists
After the flagships, the complete inventory: real pages first, then articles newest to oldest. Titles and absolute URLs, one per line. This part should be generated, never curated — its job is completeness, and the flagship section above it has already done the ranking.
Four ways an llms.txt goes wrong
- Dumping every URL with no hierarchy. A flat list of every link on the site signals nothing. Completeness is fine once a flagship section sits above it doing the ranking — without that, you have rebuilt your sitemap in a worse format.
- Letting it go stale. Hand-written files rot. Six months on, it lists a service you dropped and misses the posts you published. Now the file actively misinforms — worse than not having one.
- Keyword-stuffing the description. "Affordable professional plumbing services Toronto GTA Mississauga emergency 24/7" is not a description. A model reading that learns you write like spam — the opposite of the impression you wanted.
- Writing it for a crawler. If no human would recognize the voice, the file is wrong. Language models are trained on human writing. Plain sentences read better to them for the same reason they read better to people.
Should you generate llms.txt or write it by hand?
Staleness is the failure mode that kills these files, and it has a clean fix: build the file from the same data the site is built from. On a static site, llms.txt should be a route, not a document.
Ours is built exactly that way. The name, description, office and service area come from the one site-config file the rest of the site reads. The flagship list is generated from the services data, so a renamed service renames itself in the file. The page and article lists come from the same content index that builds the pages themselves and the sitemap. Publish a post and it appears in /llms.txt on the next build. Nobody remembers to update anything, because there is nothing to remember.
The same pattern is running on batsandwildlife.ca/llms.txt, one of the brands we build, with one extra bit of paranoia we build in: its flagship list is defined by slug, and a slug that no longer resolves to a published post breaks the build rather than shipping a dead link. That is the standard worth copying — not "we'll check it quarterly," but "it is structurally impossible for this to drift."
The only hand-maintained part should be the flagship ordering. That is where judgment belongs, and judgment does not go stale on its own.
Where llms.txt sits next to the work that is proven
This matters more than anything else in the post. llms.txt is the cheap optional extra you add after the fundamentals, never instead of them. In order:
- Server-rendered content a crawler can actually read. If your copy only appears after JavaScript runs, some crawlers see an empty page. Nothing downstream matters until this is true.
- Schema and structured data. This is a real, documented standard. Search engines publish how they consume it, and it is the machine-readable layer any AI system is best positioned to read. That is the opposite of llms.txt in evidence terms. We wrote the practical version in the schema a service business actually needs, including the types that get people in trouble.
- Entity clarity. One consistent name, one consistent description, one consistent service area, everywhere you appear. Models assemble their picture of you from many sources, and inconsistency reads as two different businesses. That is most of why ChatGPT recommends your competitor instead of you.
- Pages that answer questions directly. Lead with the answer, then explain. Content that answers in the first paragraph is content that is easy to quote.
- Then llms.txt. An hour of work, unproven upside, zero downside.
Get the order backwards and you have a beautifully organized index pointing at pages nothing wants to cite. That whole stack is what our AI SEO work is — and every piece of it is running on live sites you can open, like thecritterguy.ca, one of the brands we build: static, schema-first, and served without a database or a plugin.
Open ours, then open yours
This is the part you can check in one click. Open x-veen.com/llms.txt. It is a real file on this domain, generated at build time by the route described above — not an example written for a blog post.
Read it top to bottom. It takes a minute. Then type your own domain with /llms.txt on the end and see what comes back. Three outcomes:
- A 404. Normal. Now you know what to build, and you know it is a small job, not a project.
- A flat wall of every URL on the site. Add a flagship section and cut it to five. That is the entire fix.
- A file that disagrees with your live site. It is hand-maintained and it has rotted. Generate it instead.
Then do the exercise even if you never ship the file: write down the five pages that actually matter, in order. If that list is hard to write, the problem was never the file.
If you want the whole stack built properly — server-rendered, schema-first, entity-consistent, with the cheap extras on top — see the live builds and then start with the contact form. One form, one thread, a real reply from the people who do the work. All of it in-house from Mississauga.