To create an llms.txt file: write a Markdown file with your site name as an H1, a one-line summary, and a few curated lists of links, then save it at yoursite.com/llms.txt. Claude Code can draft the whole thing from your sitemap in about ten minutes, which is most of why this guide exists.
The harder question is whether you should bother, so let me answer that first and honestly, because it changes how much effort this deserves.
Should you even create one?
For ranking and AI citations, no. Google has said plainly that it does not use llms.txt for Search or for AI Overviews, and there is no confirmed evidence that ChatGPT, Claude, or Perplexity read it when they decide who to cite. I walked through all of that, with the documentation, in does Google use llms.txt. Nothing in this guide contradicts it. If anyone tells you generating an llms.txt is an AEO tactic, they are selling something the evidence does not support.
So why write one at all? Because it is a near-zero-cost bet on agentic browsing, the emerging case where AI agents navigate and operate your site rather than just read it. A clean llms.txt may help those agents find your important pages faster. That is the entire upside, and it is speculative. The reason to do it is that the cost is an afternoon, you control the file completely, and Claude Code drops the cost to ten minutes. Build it if being early on agentic browsing appeals to you. Do not build it expecting traffic.
The syntax takes ten minutes. The discipline is refusing to treat a ten-minute file as if it ticked the AEO box.
What an llms.txt file contains
The llms.txt proposal, introduced in 2024 by Answer.AI co-founder Jeremy Howard, defines a small, strict-enough Markdown structure. The following pieces, in order:
- An H1 with the name of your site or project. This is the only strictly required line.
- A blockquote summary: one or two sentences describing what the site is, prefixed with
>. Optional but worth including, because it is the first thing a model reads. - Optional detail paragraphs: any prose that helps a model understand context, with no headings.
- H2 sections of links: each section groups related links written as
- [Page name](https://url): short description. This is the body of the file. - An "Optional" H2 section: a special heading whose links a model can skip when it needs a shorter context. Put genuinely secondary pages here.
A minimal, valid example looks like this:
# PropSaaS Growth
> SEO, AEO, and content systems for PropTech, FinTech, and B2B SaaS companies building serious organic growth.
## Core pages
- [Services](https://propsaasgrowth.com/services/): SEO, AEO, content, and AI enablement engagements
- [Blog](https://propsaasgrowth.com/blog/): explainers on AEO, AI search, and technical SEO
- [Case studies](https://propsaasgrowth.com/case-studies/): results from live engagements
## Key explainers
- [AEO vs SEO for B2B SaaS](https://propsaasgrowth.com/blog/aeo-vs-seo-b2b-saas/): what changes when AI engines answer the query
- [How to rank in ChatGPT](https://propsaasgrowth.com/blog/how-to-rank-in-chatgpt/): an engine-by-engine playbook
## Optional
- [The Compound newsletter](https://propsaas-growth-digital-inc.beehiiv.com): weekly issues
That is the whole specification in practice. There is also llms-full.txt, a separate, heavier file that concatenates the actual full text of your key pages into one document so an agent can read everything in a single request. Treat llms.txt as the map and llms-full.txt as the territory. Start with the map. Most sites never need the second file, and it is far more annoying to keep current.
Where the file goes
At the root of your domain, reachable at https://yoursite.com/llms.txt. Same convention as robots.txt and sitemap.xml: a known filename at a known location so a machine can guess the URL without being told. It cannot sit in a subfolder.
In practice that means the file goes in whatever directory your platform serves the root from:
- Static sites and most frameworks: the
public/orstatic/directory, next torobots.txt. - WordPress: the site root via your host's file manager or SFTP, the same place
robots.txtlives. - Hosted builders: wherever the platform lets you add a root-level file or custom asset.
Serving it is usually a non-event: a .txt extension returns text/plain on most hosts by default, and plain text is fine even though the content is Markdown. The one thing to actually verify is that the URL returns the file and not a 404 or a styled error page. Open yoursite.com/llms.txt in a browser, or run curl -I https://yoursite.com/llms.txt and confirm a 200.
Creating it with Claude Code
You could write the file by hand. The reason to use Claude Code is that the tedious part, reading every page and writing an accurate one-line description for each, is exactly what it is good at, and it works directly in your repo so the file lands in the right place. Here is the workflow I use.
1. Point it at your sitemap
Open Claude Code in your project and give it your sitemap as the source of truth for what exists. The sitemap is already the curated list of URLs you want indexed, which makes it the right starting set:
Read my sitemap at public/sitemap.xml. For each URL,
fetch the page and note its title and a one-sentence
description of what it covers. Group them into logical
sections.
2. Have it draft a spec-valid file
Then ask for the file itself, and be explicit about the format so the output is valid rather than a generic summary:
Write an llms.txt file following the llmstxt.org spec:
an H1 with the site name, a one-line blockquote summary,
then H2 sections of links in the form
"- [name](url): description". Put secondary pages under
an "## Optional" heading. Save it to public/llms.txt.
3. Curate, because the model will not
This is the step that matters, and the only one a tool cannot do for you. Claude Code will happily list every URL in your sitemap. Your job is to cut it back to the pages that actually represent the site: core product and services, your best explainers, primary docs. Strip the thin pages, duplicate variants, and utility pages like privacy and cookie policies. A model meeting your site through this file should see your sharpest ten or fifteen pages, not a full crawl. If you would not want an agent to summarize a page first, it does not belong near the top.
4. Place it and verify
Because Claude Code wrote the file straight into public/, it is already in the right spot. Deploy, then confirm it serves:
curl -s https://yoursite.com/llms.txt | head -20
If that returns your file, you are done. The same workflow regenerates it later: when you ship new pages, re-run the prompt, or wire it into a build step so the file rebuilds itself. I took the same hands-on, Claude-Code-in-the-repo approach when I made propsaasgrowth.com agent-native in an afternoon against Cloudflare's agent-readiness audit, and an llms.txt is one small part of that larger surface.
What to realistically expect
Nothing, in the short term, and that is the correct expectation. You will not see a ranking change, a traffic change, or a measurable lift in how often AI engines cite you, because none of those systems are committed to reading the file. What you will have is a clean, machine-readable map of your site that costs you almost nothing to maintain and positions you for a future that may or may not arrive on schedule.
The trap is letting a file you can generate in ten minutes feel like progress on AEO. It is not. The work that demonstrably moves AI citations is structural and slower: direct-answer openings, real FAQ blocks, named-entity binding, and earning mentions in sources AI engines already trust. That is the actual job, covered in AEO vs SEO for B2B SaaS and, engine by engine, in how to rank in ChatGPT. Generate the llms.txt because it is cheap and you like being early. Then close the file and go do the work that counts.
For the broader technical foundation, see our Technical SEO service: CWV, schema, internal linking, and AI crawler access.
Frequently asked questions
What is the difference between llms.txt and llms-full.txt?
llms.txt is a short index file: an H1 site name, a one-line summary, and curated lists of links with descriptions. llms-full.txt is a single large file that concatenates the actual full text of your key pages into one document, so an AI agent can read everything in one request. Use llms.txt as the map and llms-full.txt as the territory. Most sites start with llms.txt alone; llms-full.txt is optional and heavier to maintain.
Where exactly does the llms.txt file go?
At the root of your domain, served at https://yoursite.com/llms.txt, the same location pattern as robots.txt and sitemap.xml. On most static sites and frameworks that means dropping the file into your public or static directory. It must be reachable at the root path, not nested in a subfolder, for agents to find it where the convention expects.
What content type should llms.txt be served as?
Plain text is fine. Serving it as text/plain or text/markdown both work, and most hosts will return text/plain for a .txt extension by default. The file content is Markdown, but the extension is .txt by convention, so you do not need to configure anything special on most platforms. Just confirm the URL returns the file rather than a 404 or an HTML error page.
Can Claude Code keep my llms.txt updated when my site changes?
Yes. Because the file is generated from your sitemap and pages, you can re-run the same Claude Code prompt whenever you publish, or wire it into a build step or scheduled job so the file regenerates automatically. The human part that does not automate well is curation: deciding which pages deserve a spot and which to leave out. That judgment is the whole value of the file.
Will an llms.txt file generated by Claude Code help me rank or get cited?
No, and no tool changes that. Google has said it does not use llms.txt for Search or AI Overviews, and there is no confirmed evidence that ChatGPT, Claude, or Perplexity read it when choosing citations. Claude Code makes the file correct and fast to produce, but the file itself is an agentic-browsing convenience, not a ranking or citation factor. Treat it as cheap future-proofing, not an AEO tactic.
How long should an llms.txt file be, and what should I leave out?
Shorter and curated beats long and complete. The point is to hand a model your most important pages, not a full crawl. Include your core product, services, key explainers, and primary docs. Leave out thin pages, duplicate variants, utility pages like privacy and cookie policies, and anything you would not want an agent to summarize first. Put genuinely secondary links under an Optional section so a model running on a tight context can skip them.
