System Markdown Alternate
·
Exposes a clean Markdown version of your posts (readable by LLMs, agents and technical tools) by appending .md to the permalink.
System Markdown Alternate publishes a clean, machine-readable Markdown
representation of your content. Append .md to any supported permalink and you
get YAML front matter plus the post body converted to Markdown — with marketing
clutter, forms and navigation widgets stripped out.
https://example.com/my-post/ → HTML
https://example.com/my-post.md → Markdown (front matter + content)
It is built for the era of AI assistants, agents and technical scrapers that prefer plain Markdown over rendered HTML. It is not a generic SEO plugin.
Key features
.mdendpoint for every supported, published, public post.- Content negotiation: the same Markdown is returned for
Accept: text/markdownor?format=markdownrequests. TheAcceptheader is parsed with q-values, so a client that prefers HTML (higher q) still gets HTML. Vary: Accepton negotiable URLs, so caches and CDNs that honour it keep the HTML and Markdown representations of the same address apart. Because some page caches key by URL only and ignoreVary, the negotiated Markdown (and406) responses are also sent non-cacheable, so safety never depends onVaryalone.rel="alternate"link in the<head>of supported singular content.- Correct HTTP headers:
Content-Type: text/markdown,X-Robots-Tag(defaultnoindex, follow) and aLink: rel="canonical"back to the HTML. - Clean conversion: Gutenberg blocks are rendered individually (no injected related/CTA blocks), excluded blocks/shortcodes/CSS classes are removed, code blocks become fenced blocks, URLs are made absolute.
/llms.txtendpoint (optional): an index of your content for LLMs and AI agents. An optional enriched mode (off by default) adds a site summary, a curated “Key content” section, a description for each entry and anOptionalsection for older posts. Another optional toggle appends the last modified date (updated: YYYY-MM-DD) to every entry, so crawlers can spot changed content without re-fetching each URL.- Custom taxonomies in the front matter (optional, nothing selected by default): tick the taxonomies you want and their terms are added as a taxonomies: block, alphabetically ordered. Nothing is ever published automatically: a taxonomy registered by another plugin appears in the panel unticked, and taxonomies with no public term archive are labelled as internal.
- Object cache with proactive invalidation on post edit, plugin update and settings change: a persistent object cache is used when one is available, falling back to transients otherwise.
- Optional
.mdhit counter (off by default): counts how many times the Markdown endpoint is served, split bot vs human. Privacy by design: only aggregate daily totals are stored — no IP addresses, no user-agent strings, no per-visitor data, no cookies, no external calls. - Admin panel to choose which post types are exposed and to tune cache, exclusions and headers — no post type is exposed until you pick one.
- Shortcodes
[sysmda_md_url](the Markdown URL) and [sysmda_md_download] (a link that saves the file instead of opening it). - Optional integrations, shown only when the related plugin is active:
- Advanced Custom Fields: add a subtitle and a TL;DR (from ACF fields) as a preamble between the H1 and the body.
- GenerateBlocks 2.x: a
{{sysmda_md_url}}Dynamic Tag, available automatically, usable in element fields (e.g. a Button URL).
- Developer-extensible: every behaviour above — which content is served, the headers, the caching, the conversion pipeline, the front matter and /llms.txt — is exposed as a WordPress filter. See the FAQ below for examples and a link to the full documented list.
