WordPress llms.txt: What It Is, How to Add One, and Whether It Does Anything
Publish an llms.txt file on WordPress three different ways, and know exactly what the evidence says about whether any AI company actually reads it.
Published
llms.txt is a plain markdown file you place at the root of your domain — https://example.com/llms.txt — listing your best pages with a one-line description for each, so a language model can find your useful content without crawling your entire navigation. It is a proposal, not a standard, and no major AI provider has publicly confirmed that it reads or acts on the file.
Both halves of that matter. The format is real, well-specified, and takes about twenty minutes to publish. The benefit is unproven, and a lot of what is currently being sold around it is not honest about that.
What the file actually looks like
The proposed format is markdown with a defined shape: an H1 with your site name, an optional blockquote summary, then H2 sections containing bullet lists of links, each with a short description after a colon. A section named “Optional” signals content that can be skipped when context is tight.
# Odie Themes
> Free WordPress tools and technically honest guides for theme
> and image configuration problems.
## Guides
- [Why WordPress images look blurry after upload](https://example.com/guides/wordpress-image-blurry-after-upload): Why the 2560px cap creates a -scaled file and how to raise or disable it.
- [WordPress llms.txt](https://example.com/guides/wordpress-llms-txt): What the file is, how to add one, and what it does not do.
## Tools
- [Robots.txt generator](https://example.com/tools/wordpress-robots-txt-generator): Build a robots.txt with correct AI crawler rules.
## Optional
- [About](https://example.com/about): Who runs the site.
That is the whole specification worth knowing. Links should be absolute. Descriptions should be one sentence and factual, not marketing copy — the entire premise is that a machine is reading it, and padded adjectives waste the tokens you were trying to save.
You will also see llms-full.txt, a companion convention holding the full markdown text of your content in one file. It is far heavier and even less evidenced than llms.txt. Skip it unless you have a specific reason.
The honest part
No public documentation from OpenAI, Anthropic, Google, or Perplexity states that their crawlers or retrieval systems consume llms.txt. Google has publicly indicated it does not use it for search. Site owners do see requests for the file in server logs, but a fetch is not evidence that the content shaped any answer — plenty of bots probe for files speculatively.
So be careful with the claims you accept:
| Claim you will see | Status |
|---|---|
| ”llms.txt is the new robots.txt for AI” | False. robots.txt is documented and honored; llms.txt is a proposal. |
| ”Adding llms.txt improves your Google rankings” | No evidence. Google has not said it uses the file. |
| ”ChatGPT reads your llms.txt” | Unconfirmed by OpenAI. |
| ”It’s a cheap file to publish” | True, and this is the only solid argument for it. |
The reasonable position is cheap optionality. A static text file costs you one upload, zero page-load time, and no risk. If the convention gets adopted, you already have one. If it never does, you lost twenty minutes. That is a fine trade — just do not let anyone bill it as an AI visibility strategy.
Adding it to WordPress
Option 1: static file at the root (recommended)
Write the file locally, then upload it over SFTP into the same directory as your wp-config.php and index.php.
WordPress does not intercept it, because the default rewrite block in .htaccess only routes requests that do not already match a real file or directory:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
A real llms.txt on disk fails the !-f condition, so Apache serves it directly and PHP never runs. Nginx setups using try_files $uri $uri/ /index.php behave the same way.
One caveat: some managed WordPress hosts block SFTP writes to the web root, or run the site from a read-only container image. If that is your setup, options 2 and 3 are your path.
Option 2: a plugin
Search the WordPress plugin directory for “llms.txt” — several plugins now generate the file from your published posts and pages, and some SEO plugins have added it as a feature. That is genuinely useful if you publish often, because a hand-written list goes stale.
The trade-off is real, though. You are adding a plugin, a settings page, and an update surface in exchange for automating a file nobody has confirmed reading. Auto-generated lists also tend to dump every post with the excerpt as its description, which produces a long, undifferentiated file — the opposite of the curated map the format was designed for. If you use a plugin, prune what it outputs.
Option 3: serve it from your theme with a filter
If you cannot write to the web root but can edit code, drop a small mu-plugin at wp-content/mu-plugins/llms-txt.php that intercepts the request and serves a file kept inside your theme:
<?php
// wp-content/mu-plugins/llms-txt.php
add_action( 'init', function () {
$path = parse_url( $_SERVER['REQUEST_URI'] ?? '', PHP_URL_PATH );
if ( '/llms.txt' !== $path ) {
return;
}
$file = get_stylesheet_directory() . '/llms.txt';
if ( ! is_readable( $file ) ) {
return;
}
header( 'Content-Type: text/plain; charset=utf-8' );
readfile( $file );
exit;
} );
An mu-plugin is used rather than functions.php so the file survives a theme switch and a theme update. If you do put it in functions.php, use a child theme.
Verify it is actually served
Do not assume. Check the status code and the content type:
curl -sI https://example.com/llms.txt
You want 200 and Content-Type: text/plain. Two failure modes are common:
- You get a 200 but the body is your 404 page. WordPress swallowed the request. The file is not where you think it is, or a plugin is hijacking the route.
- You get
Content-Type: text/html. Something is rendering it through the theme. Fix the header before worrying about the content.
Then open the URL in a browser and read it. If a link 404s or points at http:// when your site is HTTPS, fix it — a broken map is worse than no map.
What actually controls AI crawlers today
If your real goal is influencing how AI systems treat your site, robots.txt is the file that is documented, honored, and in force right now. GPTBot, ClaudeBot, PerplexityBot, CCBot, and Google-Extended are all named user agents with published behavior, and robots.txt decides whether they may fetch your pages at all.
That is the lever with an actual mechanism behind it. Build yours with the robots.txt generator, which lets you allow or block each AI crawler explicitly instead of guessing at the syntax. Get that right first, then add llms.txt as the cheap speculative extra.
What not to do
Do not block AI crawlers in robots.txt and publish an llms.txt at the same time. People do this by accident — one file invites the model in, the other slams the door. The door wins.
Do not put an llms.txt in a subfolder. The convention is root-level only. A file at /blog/llms.txt is a file nothing will look for.
Do not paste your whole sitemap into it. Four hundred links with generic excerpts is a crawl dump, not a curated map, and it defeats the only stated purpose of the format. Twenty to fifty genuinely useful pages is the right size for most sites.
Do not delay real work for it. Page speed, clean HTML, accurate structured data, and content people actually cite are known to matter. llms.txt is not known to matter. Order your effort accordingly.
FAQ
Questions
What is llms.txt in WordPress?
It is a plain markdown file placed at your site root, reachable at yoursite.com/llms.txt, that lists your most useful pages with a one-line description each. The idea is that a language model reading it gets a clean map of your content instead of crawling your navigation, ads, and cookie banners.
Do AI companies actually read llms.txt?
There is no public confirmation from OpenAI, Anthropic, Google, or Perplexity that they fetch or use llms.txt. Some server logs show requests for the file, but a request is not the same as the content influencing an answer. Treat any claim of proven ranking benefit as unsupported marketing.
Where does llms.txt go on a WordPress site?
The root of your domain, the same place robots.txt lives, so the URL is yoursite.com/llms.txt with no subfolder. Upload it next to your WordPress index.php file over SFTP. WordPress serves real files directly because its rewrite rules only pass through requests that do not match an existing file.
Is llms.txt the same as robots.txt?
No. robots.txt is an established convention that AI crawlers like GPTBot, ClaudeBot, and PerplexityBot document and honor, and it controls whether they may fetch your pages at all. llms.txt is an unratified proposal that suggests what to read. One is enforced today, the other is speculative.
Does adding llms.txt help SEO or rankings?
There is no evidence it affects Google rankings, and Google has not said it uses the file. It costs almost nothing to publish, so the reasonable case for adding it is cheap optionality rather than measurable benefit. Do not deprioritize page speed, structured data, or content quality for it.
Should I use a plugin or a static file for llms.txt?
Use a static file if your best pages rarely change, because it adds zero PHP execution and cannot break. Use a plugin if you publish often and want the list rebuilt automatically. A plugin adds a dependency and some overhead for a file nobody has confirmed reading, so start static.