{"id":357687,"date":"2026-08-28T19:08:47","date_gmt":"2026-08-28T19:08:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/markdown-layer-for-ai\/"},"modified":"2026-08-28T19:11:43","modified_gmt":"2026-08-28T19:11:43","slug":"morick-markdown-layer-ai","status":"publish","type":"plugin","link":"https:\/\/dsb.wordpress.org\/plugins\/morick-markdown-layer-ai\/","author":23553699,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.4.1","stable_tag":"1.4.1","tested":"7.1","requires":"5.3","requires_php":"7.2","requires_plugins":null,"header_name":"Morick Markdown Layer for AI","header_author":"Morick Tokyo","header_description":"Adds an AI-agent-friendly Markdown layer to your existing site. Serves Markdown via ?ai=1 or the Accept: text\/markdown header, generates \/llms.txt, prints alternate links, and provides an admin checklist with per-page manual Markdown overrides.","assets_banners_color":"ffffff","last_updated":"2026-08-28 19:11:43","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/morick.tokyo.jp\/wp-plugins\/morick-markdown-layer-ai\/","header_author_uri":"https:\/\/morick.tokyo.jp\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":43,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.4.1":{"tag":"1.4.1","author":"moricktokyo","date":"2026-08-28 19:11:43","revision":3670846}},"upgrade_notice":{"1.4.0":"<p>First WordPress.org release. Admin UI language is now English with a bundled Japanese translation.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3670841,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3670841,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3670841,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3670841,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3670841,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.4.1"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[15643,2353,226124,244604,4608],"plugin_category":[],"plugin_contributors":[278121],"plugin_business_model":[],"class_list":["post-357687","plugin","type-plugin","status-publish","hentry","plugin_tags-agents","plugin_tags-ai","plugin_tags-llm","plugin_tags-llms-txt","plugin_tags-markdown","plugin_contributors-moricktokyo","plugin_committers-moricktokyo"],"banners":{"banner":"https:\/\/ps.w.org\/morick-markdown-layer-ai\/assets\/banner-772x250.png?rev=3670841","banner_2x":"https:\/\/ps.w.org\/morick-markdown-layer-ai\/assets\/banner-1544x500.png?rev=3670841","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/morick-markdown-layer-ai\/assets\/icon.svg?rev=3670841","icon":"https:\/\/ps.w.org\/morick-markdown-layer-ai\/assets\/icon.svg?rev=3670841","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>AI assistants and crawlers (GPTBot, ClaudeBot, Perplexity, and others) increasingly read the web to answer users' questions. HTML pages built for humans are heavy and noisy for them: navigation, scripts, and styling bury the actual content.<\/p>\n\n<p>Morick Markdown Layer for AI adds a lightweight, machine-friendly <strong>Markdown layer<\/strong> on top of your existing site - without changing your theme, your URLs, or anything your human visitors see.<\/p>\n\n<h4>What it does<\/h4>\n\n<ul>\n<li><strong>Markdown version of every page.<\/strong> Append <code>?ai=1<\/code> to any post, page, or archive URL and the plugin returns clean Markdown (with YAML frontmatter: title, description, canonical URL, dates, categories) instead of HTML.<\/li>\n<li><strong>Content negotiation.<\/strong> Clients that send an <code>Accept: text\/markdown<\/code> header receive Markdown at the normal URL - no query parameter needed.<\/li>\n<li><strong>\/llms.txt generation.<\/strong> The plugin dynamically serves an <code>llms.txt<\/code> index: your site name, description, and a link list of all Markdown-enabled pages, so AI agents can discover your content in one request.<\/li>\n<li><strong>Alternate link tags.<\/strong> Each HTML page advertises its Markdown version via <code>&lt;link rel=\"alternate\" type=\"text\/markdown\"&gt;<\/code> in the head, which is how AI crawlers actually discover and follow the Markdown layer.<\/li>\n<li><strong>Admin checklist.<\/strong> A dashboard screen lists every target page with its status (Auto \/ Manual \/ Excluded), body length, sortable columns, status filters, and title search.<\/li>\n<li><strong>Manual Markdown override.<\/strong> For template-driven landing pages whose HTML converts poorly, write Markdown by hand per page. Manual Markdown always wins over auto conversion.<\/li>\n<li><strong>Automatic exclusion.<\/strong> Pages whose converted body falls below a configurable length threshold are excluded automatically (thin content is worse than no content for AI consumption).<\/li>\n<li><strong>No dependencies.<\/strong> The HTML-to-Markdown converter is a self-contained DOM walker. No Composer packages, no external services, no API calls, no data leaves your server.<\/li>\n<\/ul>\n\n<h4>How conversion is resolved<\/h4>\n\n<p>For each Markdown request the plugin resolves in this order:<\/p>\n\n<ol>\n<li>Manual Markdown exists for the page - serve it (threshold ignored).<\/li>\n<li>Otherwise, if the auto-converted body meets the length threshold - serve the auto conversion.<\/li>\n<li>Otherwise the page is excluded: no Markdown is served and no alternate link is printed.<\/li>\n<\/ol>\n\n<h4>SEO safety<\/h4>\n\n<p>The Markdown response sends a <code>Link: &lt;original-url&gt;; rel=\"canonical\"<\/code> HTTP header pointing back to the HTML page, plus <code>Cache-Control: no-store<\/code>, so the Markdown layer does not compete with your HTML pages in search engines.<\/p>\n\n<h4>Performance<\/h4>\n\n<p>Converted Markdown is cached per page in transients and invalidated automatically when the post is saved. The archive (<code>llms.txt<\/code>) and page lists are capped and filterable via the <code>mdlai_post_types<\/code> and <code>mdlai_list_limit<\/code> hooks.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>morick-markdown-layer-ai<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install through the WordPress Plugins screen.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Open the <strong>Markdown Layer<\/strong> menu in your dashboard.<\/li>\n<li>Choose the target post types and taxonomies, set the body length threshold, and save.<\/li>\n<li>Verify: open any page with <code>?ai=1<\/code> appended, and open <code>\/llms.txt<\/code>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20change%20what%20human%20visitors%20see%3F\"><h3>Does this change what human visitors see?<\/h3><\/dt>\n<dd><p>No. Regular visitors receive your normal HTML. Markdown is only served when a client explicitly asks for it (<code>?ai=1<\/code> or an <code>Accept: text\/markdown<\/code> header).<\/p><\/dd>\n<dt id=\"will%20the%20markdown%20pages%20hurt%20my%20seo%3F\"><h3>Will the Markdown pages hurt my SEO?<\/h3><\/dt>\n<dd><p>The Markdown response carries a canonical HTTP header pointing to the original HTML URL and a no-store cache policy. Search engines are directed to treat the HTML page as the canonical version.<\/p><\/dd>\n<dt id=\"do%20ai%20crawlers%20actually%20use%20this%3F\"><h3>Do AI crawlers actually use this?<\/h3><\/dt>\n<dd><p>In our production measurements, AI crawlers discovered the Markdown layer through the alternate link tags within days of release and began fetching Markdown versions directly - in some cases skipping the HTML entirely. Adoption varies by vendor and grows over time.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20pages%20with%20very%20little%20content%3F\"><h3>What happens to pages with very little content?<\/h3><\/dt>\n<dd><p>Pages whose converted body is shorter than the threshold (default 20 characters) are excluded: no Markdown version, no alternate link. You can still serve them by writing manual Markdown on the checklist screen.<\/p><\/dd>\n<dt id=\"where%20is%20manual%20markdown%20stored%3F\"><h3>Where is manual Markdown stored?<\/h3><\/dt>\n<dd><p>In post meta \/ term meta on your own database (<code>_mdlai_manual<\/code>). Uninstalling the plugin removes its settings and caches but intentionally preserves your manual Markdown, so you do not lose hand-written content if you reinstall. Delete the meta keys manually if you want a complete wipe.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20call%20any%20external%20service%3F\"><h3>Does the plugin call any external service?<\/h3><\/dt>\n<dd><p>No. Everything runs locally. Nothing is sent anywhere.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4.1<\/h4>\n\n<ul>\n<li>Renamed to \"Morick Markdown Layer for AI\" (distinctive branding). Text domain updated.<\/li>\n<li>Removed bundled translation files (translations will be served via translate.wordpress.org).<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>First public release on WordPress.org.<\/li>\n<li>Internationalization: all admin strings are translatable; Japanese translation bundled.<\/li>\n<li>Hardened input sanitization (<code>REQUEST_URI<\/code>, <code>HTTP_ACCEPT<\/code>, list table parameters).<\/li>\n<li>llms.txt intro line is now translatable.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Manual Markdown save date is reflected in the frontmatter <code>modified<\/code> field.<\/li>\n<li>Editor textarea now pre-fills with the auto-converted draft when no manual Markdown exists.<\/li>\n<li>Images are normalized to one per line.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Admin checklist rebuilt on WP_List_Table: sortable columns, status filter views, title search, pagination.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Accept header negotiation, llms.txt generation, alternate link output.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial internal release: ?ai=1 Markdown serving with automatic HTML-to-Markdown conversion.<\/li>\n<\/ul>","raw_excerpt":"Adds an AI-agent-friendly Markdown layer to your existing site: ?ai=1 URLs, Accept header negotiation, \/llms.txt, and alternate links.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/dsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/357687","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/dsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/dsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=357687"}],"author":[{"embeddable":true,"href":"https:\/\/dsb.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/moricktokyo"}],"wp:attachment":[{"href":"https:\/\/dsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=357687"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/dsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=357687"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/dsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=357687"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/dsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=357687"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/dsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=357687"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/dsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=357687"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}