System Markdown Alternate Wordpress Plugin - Rating, Reviews, Demo & Download
Plugin Description
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/markdown
or?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 anOptional
section 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).
- Advanced Custom Fields: add a subtitle and a TL;DR (from ACF fields) as a
Developer filters
The output is customizable through filters:
sysmda_markdown_supported_post_types— post types that expose.md(default: none).sysmda_markdown_excluded_post_formats— post formats that never expose a.md
(default: every non-standard format; return an empty array to serve them all).sysmda_markdown_robots_header— theX-Robots-Tagvalue (''= no header).sysmda_markdown_strict_406— return406when the client accepts neither HTML nor
Markdown (defaulttrue;falsealways serves the HTML default).sysmda_markdown_canonical_url— canonical URL for theLinkheader (''= no header).sysmda_markdown_cache_ttl— cache TTL in seconds (0= disabled).sysmda_markdown_prewarm— rebuild a post’s Markdown cache in the background
after every save instead of on the first request (defaultfalse).sysmda_cache_control— theCache-Controlsent on the URLs the plugin owns
(.mdand/llms.txt); defaultpublic, max-age=0, must-revalidate,''=
no header at all. Setting a freshness lifetime here (s-maxage,max-age)
makes stale Markdown possible: no page cache purges a.mdon save.sysmda_markdown_source_content— raw source content before rendering.sysmda_markdown_rendered_html— cleaned HTML before conversion.sysmda_markdown_preamble— Markdown inserted between the H1 and the body.sysmda_markdown_output— final Markdown.sysmda_markdown_excluded_block_names— Gutenberg blocks to drop.sysmda_markdown_excluded_shortcodes— shortcodes to drop.sysmda_markdown_excluded_classes— CSS classes whose elements are dropped.sysmda_front_matter_enabled— emit the YAML front-matter block at all
(defaulttrue;falsestarts the document at the# Titleheading).sysmda_front_matter_taxonomies— kill switch for thetaxonomies:block
(default: on as soon as one taxonomy is selected;false= never emit it).sysmda_front_matter_taxonomy_slugs— which taxonomies are emitted. Receives
the selection saved in the panel and may narrow it or extend it (return an
empty array to opt out for a post).sysmda_acf_field_keys— ACF fields appended to the source.sysmda_acf_subtitle_key/sysmda_acf_tldr_key— ACF fields for subtitle/TL;DR.sysmda_llms_txt_max_posts— max posts per type in/llms.txt.sysmda_llms_txt_cache_ttl—/llms.txtcache TTL in seconds (0= disabled).sysmda_llms_txt_enriched— enable the enriched/llms.txtoutput (defaultfalse).sysmda_llms_txt_lastmod— append(updated: YYYY-MM-DD)to every/llms.txt
entry (defaultfalse).sysmda_llms_txt_summary— site summary paragraph (enriched mode only).sysmda_llms_txt_key_content— featured content, post IDs or URLs (enriched mode only).sysmda_llms_txt_main_posts— posts per type in the main sections before the
overflow moves toOptional(enriched mode only, default 25).sysmda_llms_txt_footer— free-form block appended at the end (enriched mode only).sysmda_md_hits_bot_patterns— user-agent substrings the hit counter classifies as bot.sysmda_md_hits_retention_days— retention of the daily hit-counter buckets (default 90).
Screenshots
Settings — General: pick the content types that expose a
.md(nothing is served until at least one is ticked) and set the cache TTL. The sidebar reports the/llms.txtstatus at a glance.
Settings — Markdown output: what stays out of the
.md. Excluded shortcodes, blocks and CSS classes (leave empty for the built-in defaults), plus the custom taxonomies added to the front matter and the ACF fields.
Settings — llms.txt: enable the endpoint, the enriched output and the last modified date on each entry, then add the site summary and the curated key content.
Settings — Integrations: the
[sysmda_md_url]and[sysmda_md_download]shortcodes, with the GenerateBlocks and ACF detection status.
Settings — Advanced: the
X-Robots-Tagheader, the opt-in LiteSpeed cache bypass rules and the.mdhit counter, split bot vs human.

