Check your llms.txt: the six things a valid file needs

llms.txt is a plain-text file at the root of your site, written for language models and the agents built on them: what the site is, who it is for, and where the important pages are. It is a convention proposed in 2024, not a standard, and no search or answer engine has committed to using it for ranking. It is still the cheapest place to publish the one-sentence description you want repeated, and a growing number of agents and developer tools read it.

Most published files fail for mechanical reasons rather than content: the server returns the HTML 404 page with a 200 status, the content type is text/html, or the file is a copy of the sitemap. This page is the checklist. The AstraVerify scan runs the first three checks automatically and reads the file so you can judge the rest.

The six checks

CheckPassCommon failureTested by the scan
1. Locationhttps://yourdomain.com/llms.txt on the canonical host, reachable over HTTPSOnly on www when apex is canonical, or the reverseYes
2. Status200, possibly after one redirectA 200 that is actually the site's not-found page; a 404 from a framework routeYes
3. Content typetext/plain or text/markdowntext/html, because a single-page app answers every path with index.htmlYes (the file must also not begin with an HTML tag)
4. StructureA # heading with the site name, a > blockquote with the one-sentence definition, then sections of - [Title](URL): description linksA paste of the sitemap, or a marketing page in MarkdownShown in the report excerpt
5. The definitionOne sentence saying what the site or product is, for whom, doing what; the same sentence as the first paragraph of the home pageA slogan ("Trust, simplified") that names nothingShown in the excerpt; the home page check tests the definitional paragraph
6. LinksAbsolute URLs on the canonical host, each with a one-line description, all returning 200Relative paths, or links to pages that redirect or need loginNo; check them by hand

A file that passes

Keep it short. The point is a summary a model can take in whole, not a second website. Ten to thirty links is plenty for most sites; a documentation site can add an "Optional" section for the long tail, which readers under a size limit may skip.

Example record
Name
llms.txt
Type
text/plain
Value
# Yourbrand > Yourbrand is accounting software for freelancers in the UK. It files VAT returns, chases invoices and connects to UK bank feeds. ## Product - [Features](https://yourdomain.com/features): what the product does, by module - [Pricing](https://yourdomain.com/pricing): plans and what each includes - [Security](https://yourdomain.com/security): data location, backups, access controls ## Help - [Guides](https://yourdomain.com/guides): setup and how-to articles - [Contact](https://yourdomain.com/contact): support hours and email ## Optional - [Changelog](https://yourdomain.com/changelog): release notes

Fixing the status and content type

  • Static hosting (Netlify, Vercel, Cloudflare Pages, Firebase Hosting, GitHub Pages): put llms.txt in the public folder; it is served as text/plain by extension. If a single-page app rewrite catches every path, add llms.txt to the rewrite exceptions or list it as a static file first.
  • WordPress: several SEO plugins now write llms.txt for you; otherwise upload the file to the web root by FTP or the hosting file manager, next to robots.txt.
  • Nginx: a plain file in the document root is enough; if a location block proxies everything to an app, add location = /llms.txt { root /var/www/site; } above it.
  • Frameworks with catch-all routes (Next.js, Rails, Django, Laravel): serve it from the static or public directory, not from a route, so the 200 and content type come from the web server.

What the scan does with the file

The Answer-engine readiness component of the Discoverability score gives four points for an llms.txt that returns 200 as text/plain or text/markdown, is not HTML, and has more than a token of content. The report shows the first 600 characters so you can see what a model would read. The definitional-paragraph check on the home page is scored separately; the two together are what gives an assistant something to quote when it is asked what your company does.

What llms.txt does not do

  • It does not control crawling. Allowing or blocking AI crawlers is done in robots.txt and at your CDN.
  • It does not replace structured data. JSON-LD tells search engines and answer engines what your pages are; llms.txt is prose for a model.
  • It does not need llms-full.txt. The full variant (all documentation in one file) is useful for developer tools with a docs site and unnecessary for most businesses.

Frequently asked questions

Does Google or ChatGPT read llms.txt?
Neither has said it uses the file for search or answers. Some agents, coding assistants and documentation tools read it. Publish it because it costs a minute and states your own description in your own words; do not expect a ranking change from it.
My file is there but the scan says text/html. Why?
The server answered the request with your application page instead of the file, usually because a single-page app rewrites every path to index.html. Add the file to the static exceptions so the web server serves it directly.
Should llms.txt list every page?
No. List the pages that explain what you are and what you offer, with one line each. A model reading the file needs orientation, not a sitemap; the sitemap already exists for that.
Plain text or Markdown?
The convention is Markdown structure in a .txt file served as text/plain or text/markdown. Either content type passes; text/html fails.

Check your own domain. The scan shows your live records, a score out of 100 and the exact record to publish for each fix.

Related guides

Canonical: https://astraverify.com/llms-txt-checker