One-V LLM Serve makes every public page on your WordPress site available as clean Markdown at the same URL with a .md extension — zero configuration required.
https://example.com/about/ HTML page for humans
https://example.com/about.md clean Markdown for AI
AI systems — ChatGPT, Perplexity, ClaudeBot, Google AI Overviews, and most RAG pipelines — parse Markdown far more efficiently than HTML. When these systems encounter an HTML page, they must strip navigation, headers, footers, sidebars, scripts, and tracking pixels before they can read the actual content. This noise introduces errors, increases token cost, and leads to lower-quality outputs.
The Markdown file contains a configurable YAML frontmatter block followed by the page title, headings in correct hierarchy, and the body text. Nothing else.
title, date, modified, url, description, image, tags, categories, lang, type)/llms.txt discovery file at the site root following the llmstxt.org convention/category/news.md, /tag/foo.md, custom taxonomies?format=markdown query parameter as an alternative to the .md URL on any singular pagethe_content filterLink: rel="alternate"; type="text/markdown" HTTP header on every HTML page<link rel="alternate"> tag in <head> for HTML-based discoveryAllow: /*.md$ directive in robots.txtX-Robots-Tag: index, follow on .md responsesAccess-Control-Allow-Origin: * on .md and /llms.txt so browser-based AI clients can fetch themsave_post, on ACF field value saves, on any ACF field group change, and on plugin settings saveovls_markdown filter for the final Markdown outputovls_frontmatter filter for adding, removing, or modifying frontmatter fieldsovls_content_queries filter for the HTML extraction XPath cascadeEach request to /about.md is captured by a WordPress rewrite rule and routed through the plugin’s content generator. The generator runs the post through apply_filters( 'the_content', ... ) — the same pipeline WordPress uses on the front end — so Classic Editor, Gutenberg, and shortcodes all work without separate code paths. The rendered HTML is converted to Markdown via league/html-to-markdown, then cached in a WordPress transient.
The cache is invalidated automatically on save_post, on ACF field/group changes, and whenever plugin settings are saved. A manual Clear cache button is also available on the settings page.
There are three equivalent ways to request the Markdown version of a page:
.md extension — https://example.com/about.md?format=markdown query — https://example.com/about/?format=markdownLink: rel="alternate" header — returned by every HTML pageThe .md URL is the recommended canonical form.
When Advanced Custom Fields is active, ACF field rendering is opt-in at two levels:
Supported ACF types: text, textarea, wysiwyg, url, email, link. Each selected field is rendered under a ## Field Label heading. Empty fields are skipped.
This plugin is provided “as is”, without warranty of any kind, express or implied, in accordance with the GNU General Public License v2 or later. The authors and contributors are not liable for any direct, indirect, incidental, special, or consequential damages — including but not limited to data loss, lost profits, business interruption, search-ranking changes, or third-party claims — arising from the use of, or inability to use, this software, even if advised of the possibility of such damages.
By installing and activating the plugin you acknowledge that:
.md URLs and /llms.txt serve the same content as their HTML counterparts and are intended to be crawled and consumed by AI systems and third-party LLMs.Nothing in this disclaimer is intended to exclude or limit liability for matters that cannot lawfully be excluded under the consumer-protection laws of your jurisdiction. For the full legal terms see the GPLv2 license at https://www.gnu.org/licenses/gpl-2.0.html.