llms.txt is a text file in the root of your website that tells AI systems what matters on the site and where it lives. The name deliberately echoes robots.txt, but the job is different: robots.txt controls what a crawler must not touch, llms.txt offers what a language model should preferably read.
What the file is and is not
Technically llms.txt is simple: a Markdown file at your-domain.com/llms.txt. No new format, no programming, just structured text. The idea behind it assumes that your actual HTML pages carry a lot of clutter for a language model — navigation, ads, scripts — and that a tidy map of the important content raises the chance of being cited correctly.
Worth putting in context: llms.txt is a young proposal, not a standard every major provider is guaranteed to read. Treat it as a cheap addition, not a replacement for good, clearly structured pages. The real work of getting AI answers to cite you still happens in the copy itself, as described in getting found in ChatGPT. The technical neighbour of this file is structured data for AI answers: llms.txt shows where something is, the markup says what it means.
What belongs in it
The layout is deliberately simple and made of four building blocks. At the very top an H1 with the name of the website. Below it a blockquote with one sentence saying what the site offers and for whom. After that one or two ordinary paragraphs may follow, carrying the things that sit nowhere else in compact form: how long the business has existed, which area it serves, what is included. And finally sections with ## headings, each holding a list of links, every link with a short description after it.
The links should point to your best, self-contained content: the pages that answer a question completely. Not the contact page, not the imprint. A curated selection of ten strong pages is worth more than a complete list of all two hundred.
One section has a special role: ## Optional. Whatever sits there counts as expendable — systems short on space may skip it. That is where everything belongs that is part of the site but answers no question: about, contact, press.
A complete example to copy
The bare scaffold first — this is the entire format, four building blocks and nothing else:
# Site name
> One sentence saying what the site offers and for whom.
One or two short paragraphs with the facts that sit nowhere else in compact form: since when, for whom, what is included.
## Section name
- [Page title](https://your-domain.com/page): half a sentence on what the page answers.
- [Another page](https://your-domain.com/other): same pattern.
## Optional
- [About us](https://your-domain.com/about): history, team, contact.
Here is a finished file for a small service business. Copy it, replace the name, the domain, the descriptions and the sections with your own, and you have a usable llms.txt within half an hour.
# Harper Kitchens
> Kitchen studio in Bristol that plans, delivers and installs fitted kitchens for private customers with its own fitters.
The business has been running since 1998. Measuring up and planning are free, and installation is done by employed fitters rather than subcontractors. We work within 50 kilometres of Bristol. The showroom is open Tuesday to Saturday, with appointments available outside those hours.
## Services
- [Kitchen planning](https://harperkitchens.com/planning): the path from first sketch to 3D design, with timings and appointments.
- [Installation](https://harperkitchens.com/installation): what happens on fitting day, how long it takes, what has to be ready beforehand.
- [Measuring up](https://harperkitchens.com/measuring): free on-site measuring, which measurements we take and why they decide the price.
## Prices
- [Price overview](https://harperkitchens.com/prices): price ranges by kitchen size, delivery costs, payment terms.
- [Finance](https://harperkitchens.com/finance): instalments from 24 months, requirements and a worked example.
## Guides
- [What does a fitted kitchen cost?](https://harperkitchens.com/guides/cost): price ranges by specification, with a worked example for 12 square metres.
- [How to measure a kitchen](https://harperkitchens.com/guides/measuring): a walkthrough of every measurement needed for a binding quote.
- [Choosing appliances](https://harperkitchens.com/guides/appliances): energy ratings, installation dimensions, and what comes back to bite you when retrofitting.
## Optional
- [About us](https://harperkitchens.com/about): history of the business, the team, the showroom.
- [Contact](https://harperkitchens.com/contact): opening hours, directions, phone number.
Three details in this example matter more than they look. First, every link is complete, with https:// and the domain, never a relative path like /prices — the file is often read detached from where it lives. Second, each description says what is on the target page, not what it is called: "price ranges by kitchen size" helps, "our prices" does not. Third, the running text at the top carries facts that appear nowhere else in such compact form. That is exactly the part a model quotes when somebody asks who fits kitchens around Bristol.
Alongside llms.txt there is a proposal for an llms-full.txt: the same idea, but with the full text of your most important pages instead of just links. For a small website that is rarely worth the upkeep. Start with the short file; the long one can be generated later from the same CMS.
How to create and place it
You write the file by hand or generate it from your CMS and place it so it is reachable at /llms.txt. On most setups that means putting the file in the public root and opening it once in the browser to confirm it is served as plain text, not wrapped in an HTML shell.
Where the root is depends on the system. On a static site it is the public or static folder, next to robots.txt. In WordPress it is the installation directory, again beside robots.txt; plugins that generate the file write it there or serve it from a rewrite rule. In a framework that renders every unknown path as an HTML page, an exception for /llms.txt is needed, otherwise a crawler gets a styled 404 with a friendly headline instead of your Markdown.
Generating rather than typing is worth it as soon as the list of pages changes regularly. The starting point is your sitemap: take the pages you would send a journalist to, not all of them, and write the descriptions by hand anyway, because that half sentence is the part a generator cannot invent.
One honest note: Traffalyzer has an llms.txt of its own, and the best test is to open your own file and read it as if you were the model. Does it say exactly what someone would need to know about you to recommend you correctly? If not, what is missing is not the file but the page behind it.
Whether anything actually reads it
Two prerequisites decide this before any content question does. The crawlers have to be allowed in: a robots.txt that blocks the AI bots wholesale also blocks the file written for them, and the bot shields built into CDN and hosting products fire even earlier, before robots.txt is ever consulted. Which bot belongs to which answer system, and which ones to let through, is in controlling AI crawlers. And the file has to come back as text. Open it in a private window: plain Markdown is right, a rendered page is not.
After that, the server log answers the question directly. Search the access log for llms.txt and look at the user agents fetching it. OAI-SearchBot, PerplexityBot or Claude-SearchBot showing up means the file is in circulation. Nothing at all over several weeks is a useful result too: it says the half hour is spent and the next one belongs somewhere else.
The other half of the answer is on the visitor side, and it needs GA4 rather than the log. Whether the answer systems send anyone at all, and whether those visitors behave better than your average, becomes visible as its own channel in about ten minutes; the setup and its blind spots are in measuring AI traffic in GA4. Between the two you get an honest picture that neither source gives alone: the log says whether you are being read, GA4 says whether being read pays.
The three mistakes that make the file useless
The complete list. Two hundred links with a description each is not a map, it is the sitemap with extra steps. The whole value of the file is the selection: it tells a system with limited attention where to start.
Facts that live only in the file. Anything a model should be able to state about you belongs on a real page as well. The file is a pointer, not a second version of your website, and a claim it makes alone is exactly the kind of unbacked statement answer systems discount.
A file that outlives its links. Put llms.txt on the same list as your sitemap when you relaunch. A map pointing at URLs that no longer exist is worse than no map, because it spends a crawler's fetches on error pages and costs you the credibility the file was meant to build.
Whether the effort pays off
For a small website, llms.txt is written in half an hour and nearly maintenance-free afterwards. If that half hour turns up a second time, spend it on AI structured data: the file points at your best pages, the markup pins down the facts on them. The possible gain is small in volume but high in quality: someone who arrives through an AI answer has often half-decided already. That relationship is what makes AI visibility a lever of its own beside classic search, as described among the four levers in increasing website traffic.
Frequently asked questions
What is llms.txt?
A Markdown file in a website's root (/llms.txt) that offers AI systems a tidy map of the most important content. It complements robots.txt but does not replace it: robots.txt controls access, llms.txt recommends content.
How do I create an llms.txt?
Write a Markdown file with an H1 as the site name, a short description paragraph and ## sections with lists of links to your best pages. Then place it so it is reachable at your-domain.com/llms.txt as plain text.
What does an llms.txt look like?
Like a short Markdown page: an H1 with the site name, below it a blockquote with one sentence about what you offer, then ## sections holding lists of links, each link followed by half a sentence about the content. A complete example to copy sits further up in this piece.
What is the difference between llms.txt and llms-full.txt?
llms.txt is a map: links plus a short description each. llms-full.txt instead carries the full text of your most important pages in Markdown. The short file you write by hand; the long one only pays off if you can generate it automatically from your CMS.
Do ChatGPT and Google read llms.txt?
llms.txt is a young proposal, not a guaranteed standard. Not every provider reads it reliably. Treat it as a cheap addition; real AI visibility comes from clearly structured, self-contained pages.
Where does the llms.txt go in WordPress?
Into the installation's root directory, next to robots.txt, so that it is reachable at your-domain.com/llms.txt. Plugins that generate the file either write it there or serve it through a rewrite rule. Test it in a private window: what comes back must be plain Markdown, not a rendered page.
How do I tell whether anyone reads my llms.txt?
In the server log. Search the access log for llms.txt and look at the user agents: OAI-SearchBot, PerplexityBot or Claude-SearchBot mean the file is being fetched. Whether it also brings visitors is a separate question, answered by an AI channel in GA4.
How often does the file need updating?
Whenever the pages it points at change, and always after a relaunch. Dead links in the file are worse than a missing file, because a system fetching them wastes its attempts on error pages. Beyond that it is nearly maintenance-free.