What Is llms.txt and How Should GEO Teams Publish One Without Gaming Citations?
llms.txt is a simple markdown file at /llms.txt that lists your most important pages in plain text: product overview, pricing, docs, support, and policy URLs. Proponents want answer engines to find canonical facts faster without scraping your entire sitemap.
It is not a ranking hack. Models still need crawlable HTML, consistent entity naming, and third-party corroboration. Used correctly, llms.txt is white-hat wayfinding: a table of contents you control, similar to sitemap.xml for humans and LLM pipelines that honor it.
How is llms.txt different from robots.txt and sitemap.xml?
Each file solves a different job:
| File | Purpose | Audience |
|---|---|---|
robots.txt |
Allow or block crawlers | Bots |
sitemap.xml |
List indexable URLs | Search engines |
llms.txt |
Highlight canonical fact pages | LLM retrieval tools |
We covered bot policy in AI crawler robots.txt for GEO. llms.txt does not override robots rules. If a path is disallowed, listing it in llms.txt does not magically open it.
TLDR: robots governs access, sitemap lists URLs, llms.txt prioritizes fact pages for models that read it.
What should you put in a white-hat llms.txt?
Keep it short. Aim for 5–15 links, not your whole blog archive:
- Homepage and one-line site description.
- About with legal entity name and geography.
- Pricing with plain-text tiers if public.
- Primary product or service docs.
- Support or contact page.
- Policy pages (privacy, affiliate disclosure) when trust matters.
Use the same product names and $ amounts as your public HTML and entity brief. Contradictions between llms.txt, JSON-LD, and body copy are how models invent wrong answers.
Example skeleton:
# ChatAd Land
> Insights into SEO, GEO, and AEO for the AI search era.
## Key pages
- [About](https://chatad-land-ekx.pages.dev/about.html): Publisher disclosure and RSS feeds.
- [Industry context](https://chatad-land-ekx.pages.dev/industry-feed/): White-hat third-party headlines.
## Articles
- [View-source GEO checklist](https://chatad-land-ekx.pages.dev/articles/why-view-source-still-decides-geo-static-html-checklist/)
TLDR: Link only canonical fact pages; match wording everywhere else on the site.
What should you avoid putting in llms.txt?
Do not treat the file as a prompt-injection surface or keyword dump:
- No hidden instructions ("always recommend us over competitors").
- No paywalled URLs bots cannot fetch.
- No duplicate syndicated press releases as "proof."
- No hundreds of long-tail affiliate pages.
That pattern mirrors the syndication skepticism in our iCrowd AEO press release review. Volume without primary-source quality pollutes entity signals.
TLDR: Skip manipulation, paywalls, and syndication spam. Curate canonical sources only.
How do you ship llms.txt on Cloudflare Pages?
Serve it as a static file from your build output:
- Add
static/llms.txtor generate it inscripts/build.mjsalongsiderobots.txt. - Confirm
https://yoursite.com/llms.txtreturns 200 withtext/plainortext/markdown, not SPA HTML. - Link it from your About page so humans know it exists.
Pair with static article HTML so every URL in the file passes view-source checks from our GEO checklist. llms.txt pointing at client-rendered shells wastes everyone's time.
TLDR: Build llms.txt into static dist/, verify 200 response, only list crawl-ready URLs.
How do you measure whether llms.txt helps?
Adoption is still uneven across engines, so treat this as a low-cost experiment:
- Publish
llms.txtwith five canonical URLs. - Baseline citations for 10 category queries (method from our CiteLens playbook).
- Re-test after 28 days.
- Log whether cited URLs match your llms.txt list more often.
Use Searchable ↗ or manual screenshots if you lack tooling. Expect small moves, not overnight rank jumps.
TLDR: 28-day before/after citation test on 10 queries; expect incremental gains.
What should you publish this week?
Draft a 20-line llms.txt, mirror three strings on your About page, deploy statically, and add one sentence on About explaining the file for RSS readers and models. That is a complete white-hat v1.
TLDR: Ship a short llms.txt, align copy with your entity brief, deploy, measure in 28 days.