Documentation menu

WordPress plugin

Serve posts, pages and WooCommerce products as markdown from your own WordPress install. Free forever, GPL-2.0-or-later, and it makes no outbound request of any kind.

What it does

When a request for one of your pages carries Accept: text/markdown, the plugin answers with that page’s content as markdown instead of HTML. Same URL, same substance, different format. There is nothing to configure — activate it and it works.

RequestResponse
A browser, or anything human-shapedUntouched. WordPress renders the page.
Googlebot or bingbot, even asking for markdownThe canonical HTML. Always.
Accept: text/markdownThat page’s content as markdown, at the same URL
A known agent (ChatGPT-User, ClaudeBot, …)Markdown
An unidentified agent that did not askHTML — we never guess a format
GET /llms.txtAn index of your content

Posts and pages render with their title, publication and update dates, author, categories and tags, and the body. WooCommerce products render with name, price, availability, stock, SKU, categories and attributes.

Install

Install and activate the plugin. That is the whole setup. To check it is working:

bash
curl -H "Accept: text/markdown" https://your-site.com/your-page/

You should get markdown. Loading the same URL in a browser is unchanged.

Nothing leaves your server

It also stores nothing: no new database tables, no options, no files. The only trace it leaves is a rewrite rule for /llms.txt, which is flushed on uninstall.

Your SEO is untouched

The detection tables are compared, mechanically, against @rebilder/agent-detect — the same tables the hosted gateway uses. Adding a pattern to one and not the other fails the build.

Caching

Nothing is generated

Every value in the markdown is read from WordPress or WooCommerce. No AI model runs at any point. No price is recalculated, rounded, or estimated: WooCommerce’s own stored value is printed as-is with your shop’s currency, and a discount is only shown when WooCommerce says the product is on sale — comparing the two numbers ourselves would be us deciding what is on sale.

Availability comes from is_in_stock(), WooCommerce’s own computed truth, rather than from inventory arithmetic. An agent that disagrees with your Add to Cart button is worse than no agent at all.

What it does not do

  • No Agent Readability Score. Scoring stays server-side in TypeScript — we publish determinism guarantees about it, and a second implementation is a second chance to contradict them. Use the scanner instead.
  • No agent traffic log. The plugin sends us nothing, so there is nothing for a Console to show. That is the trade for the no-telemetry guarantee.
  • Markdown is rendered on request rather than pre-generated on save. It is always fresh and there is nothing to invalidate; for a human visitor the plugin reads two headers and gets out of the way.

Deeply nested markup is worth knowing about: PHP’s HTML parser refuses documents nested more than 256 elements deep, which a page-builder theme can genuinely produce. The plugin detects that case and falls back to the post’s plain text — formatting lost, words kept — rather than serving an empty body.