Open Source
LLM Markdown 1.1: What’s New and How It Works
- AI Agents
- LLM Markdown
- Markdown
- Plugin Development
- WordPress
LLM Markdown 1.1.0 is now available in the WordPress plugin directory. It’s a free, open-source plugin that exposes public WordPress content as Markdown without requiring a separate content model, an external conversion service, or a second publishing workflow.
The 1.1 release focuses on the parts that make the feature usable in production: previewing output, debugging content selection, controlling availability, and helping clients discover Markdown endpoints.
Release summary: Version 1.1 adds Markdown preview and copy tools in the block and Classic Editors; per-post opt-outs; a content-extraction test with selector diagnostics; expanded noindex integrations; and HTTP Link headers for Markdown discovery. Existing .md URLs and the optional, disabled-by-default Accept: text/markdown feature remain in place.
What problem does it solve?
A WordPress article might be assembled from Gutenberg blocks, ACF fields, shortcodes, and custom templates. The browser receives the rendered page, but a content-ingestion tool may only want its title, structure, text, links, tables, and code.
LLM Markdown starts with the server-rendered HTML, selects the meaningful content region, and converts it to Markdown. It doesn’t rewrite your original WordPress content and doesn’t create a parallel set of physical .md files.
For a longer discussion of why I chose that architecture, read The CMS Isn’t the Problem. The Boundary Is., which also has its own Markdown representation.
Try it on a live WordPress site
These are two different representations of the same Compiled Rogue case study:
curl -L https://compiledrogue.com/case-studies/sentinelone/curl -L https://compiledrogue.com/case-studies/sentinelone.mdThe Markdown response uses text/markdown and begins with YAML front matter, including metadata derived from WordPress: title, post ID, content type, slug, timestamps, canonical and Markdown URLs, and optionally an excerpt and public taxonomies when available.
The page itself stays in WordPress. Publish or edit it through the normal workflow; LLM Markdown generates the alternate representation from the public result.
What’s new in 1.1.0?
1. Inspect Markdown without leaving the editor
Both the block editor and Classic Editor now provide a Markdown view, a copy action, and a link to the public .md URL. This lets an editor check what an agent would receive without juggling terminal windows or guessing whether the configured selector is correct.
The block-editor sidebar also shows the last public response status, word count, approximate token count, and document size. The token estimate is a rough size indicator, not a model-specific billing calculation.
The preview reflects the saved public response. It’s intentionally not a way to publish draft or private material through an anonymous Markdown URL.
2. Exclude individual posts
Enabling Markdown for a public post type doesn’t mean every document in it should have a Markdown representation.
Version 1.1 adds Disable Markdown for this content to the editing interface. It leaves the normal HTML URL alone, disables the corresponding Markdown endpoint, suppresses alternate-format discovery, and invalidates the affected cached Markdown.
The opt-out is reversible and doesn’t require excluding the entire post type.
3. Find out what your selectors are really matching
Different WordPress themes put content in different places. The DOM & Selectors tab now includes a Content Extraction Test for a public URL.
It shows the configured selector matches, identifies the selected element, reports when extraction falls back to main, article, or body, and displays a short Markdown preview after exclusions.
This is particularly useful on sites where the actual article is surrounded by navigation, CTAs, forms, related content, or page-builder wrappers.
The selector settings support elements, IDs, classes, descendants, and direct-child relationships. They intentionally don’t attempt to implement every CSS selector feature.
4. Respect more noindex configurations
The optional Honor Noindex setting now covers WordPress search-engine visibility, Yoast SEO, Rank Math, and All in One SEO.
When enabled, supported noindex signals can suppress both the Markdown response and its discovery links. This complements the existing rules for unpublished, password-protected, or otherwise ineligible content; it is not a substitute for authentication or a general-purpose membership system.
Developers can still implement additional access decisions using llm_markdown_can_serve_post and noindex checks through llm_markdown_is_noindex_post.
5. Advertise Markdown in HTTP headers
Eligible HTML pages already include an alternate-format link in the document head. Version 1.1 also emits an HTTP Link header so clients can discover the Markdown representation from the response metadata:
Link: <https://example.com/article.md>; rel="alternate"; type="text/markdown"
The Markdown response, in turn, points back to the canonical HTML URL. This keeps the relationship between the representations explicit.
As with any discovery mechanism, advertising the endpoint doesn’t guarantee that a crawler or AI service will retrieve it.
Existing capabilities worth knowing about
The original feature remains the simplest one: append .md to the permalink of an enabled public post, page, or custom post type. A static front page can also use /index.md.
The Markdown converter supports headings, lists, links, emphasis, blockquotes, inline and fenced code, simple tables, figures, and captions. Images are optional and disabled by default.
Anonymous Markdown responses use temporary WordPress transient caching, with a default lifetime of 12 hours and invalidation tied to content and relevant configuration changes. The Tools tab includes a manual cache-clear action. Failed internal rendering doesn’t cache an empty document; the endpoint returns a non-cacheable 503 response instead.
Optional Accept: text/markdown requests
Header-based Markdown delivery was introduced in 1.0.2 and remains an advanced, opt-in setting in 1.1. A client can request Markdown from the canonical URL:
curl -i \
-H 'Accept: text/markdown' \
https://compiledrogue.com/case-studies/sentinelone/
This sends Vary: Accept on eligible responses, but it must only be enabled after checking your hosting and CDN cache behavior. A cache that doesn’t vary correctly could return HTML to Markdown clients or Markdown to normal visitors. Separate .md URLs avoid that particular ambiguity.
Getting started
- Install LLM Markdown – Markdown Endpoints for AI Agents from WordPress.org.
- Open Settings → Markdown Output and enable the public post types you want to expose.
- Visit an eligible post and open its
.mdURL. - Use the editor tools or DOM & Selectors → Content Extraction Test to confirm that the output includes the meaningful content and excludes page chrome.
- Adjust the main-content and excluded-content selectors if needed. Keep header-based negotiation off unless you’ve tested the caching infrastructure.
For a quick HTTP-level check, try:
curl -I https://compiledrogue.com/case-studies/sentinelone/
curl -I https://compiledrogue.com/case-studies/sentinelone.md
The first response can advertise the alternate Markdown URL through a Link header; the second should identify itself as Markdown. If you don’t see the expected headers, check your CDN and page-cache behavior before assuming WordPress failed to emit them.
What it doesn’t do
LLM Markdown isn’t a crawler, an AI content generator, or a promise of better AI-search rankings. It doesn’t ship an external dashboard, require API keys, or create a second repository of static files.
It does one job: expose the public content you’ve already published in a structured format that compatible tools can request.
That might be exactly what your ingestion workflow needs, and it might not. At least the behavior is explicit and testable.
The plugin is free on WordPress.org. Install it, check a couple of representative pages, and see whether it solves the problem. Ideally, that’s the end of the project. Sorted.