---
title: "AR-READ-09: Advertise a markdown mirror | Agent Ready Checklist"
description: "AR-READ-09 (MAY, Read layer): Advertise a markdown mirror. What it asks, the evidence, the command that verifies it and the fix on 19 platforms."
canonical: https://agentreadychecklist.com/checklist/ar-read-09
site: "Agent Ready Checklist"
last_updated: 2026-11-05
section: "Checklist"
---

# AR-READ-09: Advertise a markdown mirror | Agent Ready Checklist

> AR-READ-09 (MAY, Read layer): Advertise a markdown mirror. What it asks, the evidence, the command that verifies it and the fix on 19 platforms.

Source: https://agentreadychecklist.com/checklist/ar-read-09
Site: Agent Ready Checklist
Last reviewed: 2026-11-05
Agent endpoints: https://agentreadychecklist.com/llms.txt (index), https://agentreadychecklist.com/openapi.json (API), https://agentreadychecklist.com/mcp (MCP server), https://agentreadychecklist.com/ask (search)
Access: https://agentreadychecklist.com/auth.md (no key). Pricing: https://agentreadychecklist.com/pricing.md (free).

# AR-READ-09: Advertise a markdown mirror

AR-READ-09 is a MAY on the read layer: Advertise a markdown mirror with <link rel="alternate" type="text/markdown"> or an equivalent HTTP Link header. It applies to docs and content sites. 19 of 19 platforms have a recipe below, 9 of them workarounds. The kit check markdown-negotiation tests it with one command.

## The requirement

Identifier

AR-READ-09

Level

MAY

Layer

Read

Applies to

docs and content sites

Checked by

Ora, matched on this site, Verify Kit markdown-negotiation

Ora check

[markdown-link-alternate](#ora)

The statement

Advertise a markdown mirror with <link rel="alternate" type="text/markdown"> or an equivalent HTTP Link header.

## Why

-   Ora's lab found (published 2026-10-21): agents requested markdown on about 65% of web fetches and chose markdown 96% of the time when they named a format; format did not decide task success.vendor claim, 2026-10-21: [github.com/agentready-org/standard/blob/main/spec/spec.md](https://github.com/agentready-org/standard/blob/main/spec/spec.md), read 2026-11-04
-   2,259 of 3,470 web fetches (65.1%) requested markdown; 2,259 of 2,361 fetches that named a format (95.7%) chose it.primary source, 2026-08-28: [vercel.com/kb/guide/make-your-site-readable-by-ai-agents](https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents), read 2026-11-04
-   Only Claude Code, OpenCode and Cursor of 7 agents tested sent Accept: text/markdown by default as of February 2026, per a Checkly study Cloudflare cites.secondary source, 2026-04-17: [blog.cloudflare.com/agent-readiness/](https://blog.cloudflare.com/agent-readiness/), read 2026-11-04

## How to verify

### [Markdown negotiation and mirror](https://agentreadychecklist.com/kit/markdown-negotiation/)

```bash
curl -fsSL https://agentreadychecklist.com/kit/verify.sh | bash -s -- https://example.com --only=markdown-negotiation
```

Sends Accept: text/markdown and checks the response Content-Type starts with text/markdown and Vary includes Accept; separately looks for <link rel="alternate" type="text/markdown"> or a Link header.

**It cannot prove:** Does not compare the markdown to the HTML for drift; a FAIL is not a spec violation because AgentReady does not require negotiation.

### The one-line version

curl -s <url> | grep -io "<link\[^>\]\*rel="alternate"\[^>\]\*text/markdown\[^>\]\*>" or curl -sI <url> | grep -i "^link:.\*text/markdown".

## Verify with Ora

One check in Ora's catalogue (contract 1.38.0, read 2026-11-05) read this row. Each entry says what the check looks at and why this page lists it.

-   `markdown-link-alternate` Markdown alternate link Tests that pages advertise a markdown twin with a rel=alternate link or a Link header, and that the advertised target serves markdown. A bonus check, marked emerging. Access, 1 point, bonus, emerging; catalogue applicability domain-only. Listed because: same name, `alternate`.

### Run just these checks

```bash
curl -s -X POST https://ora.ai/api/scan/checks -H 'content-type: application/json' -d '{"url":"https://example.com","checkIds":["markdown-link-alternate"]}'
```

This calls the endpoint Ora documents for re-verifying a fix. It sends no cache, returns a result for each id and no total score, and spends one scan from the daily budget. Replace the URL with yours. [How to re-verify one fix](https://agentreadychecklist.com/guides/re-verify-one-fix-with-ora/).

### Or audit the whole site

```bash
npx ax@0.10 audit https://example.com --min-score 70
```

### Related checks

This check reads something near the row but asks for more than the row does. A site that meets the row can score nothing or lose points on it, so it is not counted as a test of the row and is left out of the command above.

-   `link-headers-discovery` HTTP Link headers (RFC 8288) Reads HTTP Link headers that advertise the sitemap, markdown alternates, API service descriptions and the API catalog. The row accepts a Link header as one way to advertise the markdown mirror and asks for no more, so a site that meets the row scores nothing here. Access, 1 point, bonus, required; catalogue applicability domain-only.

Exit code 1 means the score is below the number you passed, so the same line gates a deploy: [the CI recipe](https://agentreadychecklist.com/guides/gate-deploys-on-agent-readiness-in-ci/). [Why this site recommends Ora, and where it falls short](https://agentreadychecklist.com/verify-with-ora/).

## In the crawl

This row has one crawl rate. Each panel splits the 2026-11-04 crawl into ten bands of 1,000 ranks, on a 0 to 100 percent scale.

Accept: text/markdown returns text/markdown

3.4% overall

Reachable sites in the Tranco top 10,000 on which the check ran, 2026-11-04. Left is ranks 1 to 1,000.

Numbers behind the chart

| Rate | 1 to 1,000 | 1,001 to 2,000 | 2,001 to 3,000 | 3,001 to 4,000 | 4,001 to 5,000 | 5,001 to 6,000 | 6,001 to 7,000 | 7,001 to 8,000 | 8,001 to 9,000 | 9,001 to 10,000 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Accept: text/markdown returns text/markdown | 4% | 2% | 4% | 5% | 4% | 4% | 2% | 3% | 3% | 3% |

## Fix it on your platform

### Next.js (App Router)recipe

Use generateMetadata to emit alternates.types\["text/markdown"\] per page, or add a Link header in next.config.js headers(): { key: "Link", value: "</docs/x.md>; rel=\\"alternate\\"; type=\\"text/markdown\\"" }.

Next.js 16.x (npm latest 16.4.5, read 2026-11-04); docs at nextjs.org/docs/app. Read 2026-11-04. [nextjs.org/docs/app/api-reference/functions/generate-metadata](https://nextjs.org/docs/app/api-reference/functions/generate-metadata). [All Next.js (App Router) recipes](https://agentreadychecklist.com/platforms/nextjs-app-router/#ar-read-09)

### Astrorecipe

Generate a twin per entry with src/pages/\[…slug\].md.ts (getStaticPaths over the collection, return entry.body) and link it with the alternate link tag in the layout.

Astro 7.x (npm latest astro 7.4.5, @astrojs/sitemap 3.7.4, read 2026-11-04). Read 2026-11-04. [docs.astro.build/en/guides/endpoints/](https://docs.astro.build/en/guides/endpoints/). [All Astro recipes](https://agentreadychecklist.com/platforms/astro/#ar-read-09)

### Nuxtrecipe

Add the alternate link with useHead, or set a Link header per pattern with routeRules { "/docs/\*\*": { headers: { Link: "<…>; rel=\\"alternate\\"; type=\\"text/markdown\\"" } } }.

Nuxt 4.x (npm latest nuxt 4.6.4, @nuxtjs/robots 7.0.2, @nuxtjs/sitemap 9.1.0, read 2026-11-04). Read 2026-11-04. [nuxt.com/docs/guide/concepts/rendering](https://nuxt.com/docs/guide/concepts/rendering). [All Nuxt recipes](https://agentreadychecklist.com/platforms/nuxt/#ar-read-09)

### SvelteKitrecipe

Add the alternate link in <svelte:head>, or call setHeaders({ Link: "<…>; rel=\\"alternate\\"; type=\\"text/markdown\\"" }) in load.

SvelteKit (npm latest @sveltejs/kit 3.1.1, read 2026-11-04); docs at svelte.dev/docs/kit. Read 2026-11-04. [svelte.dev/docs/kit/load](https://svelte.dev/docs/kit/load). [All SvelteKit recipes](https://agentreadychecklist.com/platforms/sveltekit/#ar-read-09)

### Remix and React Router (framework mode)recipe

Add the alternate link via links(), or return a Link header from the route headers export.

React Router framework mode (npm latest react-router 8.5.1; Remix v2 @remix-run/node 2.17.5, read 2026-11-04); docs at reactrouter.com. Read 2026-11-04. [reactrouter.com/how-to/headers](https://reactrouter.com/how-to/headers). [All Remix and React Router (framework mode) recipes](https://agentreadychecklist.com/platforms/remix-react-router/#ar-read-09)

### Plain static hosting (Netlify, Vercel static, Cloudflare Pages, GitHub Pages, S3 and CloudFront)recipe

Upload page.md twins and either add the alternate link tag in each page or a \_headers rule per path: "/docs/\*" then " Link: </docs/:splat.md>; rel=\\"alternate\\"; type=\\"text/markdown\\"" (check placeholder support on your host).

Host documentation as published on 2026-11-04 (no version numbers; config files \_headers, \_redirects, vercel.json, 404.html). Read 2026-11-04. [developers.cloudflare.com/pages/configuration/headers/](https://developers.cloudflare.com/pages/configuration/headers/). [All Plain static hosting (Netlify, Vercel static, Cloudflare Pages, GitHub Pages, S3 and CloudFront) recipes](https://agentreadychecklist.com/platforms/static-hosting/#ar-read-09)

### WordPress and Elementorrecipe

Advertise a mirror with a header: `add_action('send_headers', function(){ header('Link: </docs/page.md>; rel="alternate"; type="text/markdown"', false); });` The mirror itself needs a plugin or a static .md file.

WordPress 7.1.4 (core release from the version-check API), Elementor 4.3.6 (plugin directory, updated 2026-11-02), Yoast SEO 28.8 noted for llms.txt; docs read 2026-11-04. Read 2026-11-04. [developer.wordpress.org/reference/hooks/send\_headers/](https://developer.wordpress.org/reference/hooks/send_headers/). [All WordPress and Elementor recipes](https://agentreadychecklist.com/platforms/wordpress-elementor/#ar-read-09)

### Shopify (Online Store 2.0 themes)workaround

Response headers are not editable. Because the storefront negotiates markdown on the same URL, add `<link rel="alternate" type="text/markdown" href="{{ canonical_url }}">` to theme.liquid head after confirming the template answers markdown.

Hosted SaaS, Online Store 2.0 Liquid themes, docs read 2026-11-04; storefront behaviour probed live on one Shopify store the same day. Read 2026-11-04. [shopify.dev/docs/storefronts/themes/seo/metadata](https://shopify.dev/docs/storefronts/themes/seo/metadata). [All Shopify (Online Store 2.0 themes) recipes](https://agentreadychecklist.com/platforms/shopify/#ar-read-09)

### Webflowworkaround

Response Link headers are not editable. With Markdown for Agents on, the same URL answers markdown, so a Head code `<link rel="alternate" type="text/markdown" href="https://example.com/page">` points at it; without it, there is no mirror to advertise.

Hosted SaaS, help center articles read 2026-11-04 (updated dates 2024-10-14 to 2026-10-29). Read 2026-11-04. [help.webflow.com/hc/en-us/articles/50435871026195-Markdown-for-AI-agents](https://help.webflow.com/hc/en-us/articles/50435871026195-Markdown-for-AI-agents). [All Webflow recipes](https://agentreadychecklist.com/platforms/webflow/#ar-read-09)

### Framerrecipe

Markdown is served at the same URL and at `?md`. Advertise it with head Custom Code `<link rel="alternate" type="text/markdown" href="https://example.com/page?md">`. A Link response header is not possible: it is not on the Custom Headers allowlist.

Hosted SaaS, help articles read 2026-11-04 (marked updated 2026-09-15). Read 2026-11-04. [framer.com/help/articles/make-site-readable-by-ai-agents/](https://www.framer.com/help/articles/make-site-readable-by-ai-agents/). [All Framer recipes](https://agentreadychecklist.com/platforms/framer/#ar-read-09)

### Wix (Wix Editor and Wix Studio)workaround

No markdown twin and no header control on Wix-managed sites. Not possible on this platform; workaround: Wix Headless, or a CDN in front that converts HTML to markdown.

Hosted SaaS, help center read 2026-11-04. Read 2026-11-04. [dev.wix.com/docs/go-headless/wix-managed-headless/full-integration-astro/feature-guides/seo/about-seo-support](https://dev.wix.com/docs/go-headless/wix-managed-headless/full-integration-astro/feature-guides/seo/about-seo-support). [All Wix (Wix Editor and Wix Studio) recipes](https://agentreadychecklist.com/platforms/wix/#ar-read-09)

### Squarespace (version 7.1)workaround

No markdown twin and no header control. Not possible on this platform; workaround: a CDN in front that converts HTML to markdown.

Hosted SaaS, version 7.1 sites, help center read 2026-11-04 (articles updated 2026-07-17 to 2026-11-03). Read 2026-11-04. [support.squarespace.com/hc/en-us/articles/205815908-Customize-parts-of-your-site-with-code-injection](https://support.squarespace.com/hc/en-us/articles/205815908-Customize-parts-of-your-site-with-code-injection). [All Squarespace (version 7.1) recipes](https://agentreadychecklist.com/platforms/squarespace/#ar-read-09)

### HubSpot CMS (Content Hub)workaround

No markdown twin and no header control. Not possible on this platform; workaround: a CDN or reverse proxy that converts HTML to markdown.

Hosted SaaS, Content Hub, knowledge base and developer docs read 2026-11-04. Read 2026-11-04. [knowledge.hubspot.com/domains-and-urls/create-and-manage-url-redirects](https://knowledge.hubspot.com/domains-and-urls/create-and-manage-url-redirects). [All HubSpot CMS (Content Hub) recipes](https://agentreadychecklist.com/platforms/hubspot-cms/#ar-read-09)

### Docusaurusworkaround

No .md output per page. Copy source .md files into the build in a postbuild script and add <link rel="alternate" type="text/markdown"> per page through a swizzled DocItem head, or send a Link header from the host.

3.10.2 (npm @docusaurus/core latest, read 2026-11-04). Read 2026-11-04. [docusaurus.io/docs/api/docusaurus-config](https://docusaurus.io/docs/api/docusaurus-config). [All Docusaurus recipes](https://agentreadychecklist.com/platforms/docusaurus/#ar-read-09)

### Mintlifyrecipe

Automatic: pages carry <link rel="alternate" type="text/markdown" href="/docs/<page>.md"> (seen live 2026-11-04) and every page is available with a .md suffix.

Hosted SaaS, docs read 2026-11-04. Read 2026-11-04. [mintlify.com/docs/ai/markdown-export](https://mintlify.com/docs/ai/markdown-export). [All Mintlify recipes](https://agentreadychecklist.com/platforms/mintlify/#ar-read-09)

### GitBookrecipe

Automatic <link rel="alternate" type="text/markdown"> on each page and a .md URL for every page.

Hosted SaaS, docs read 2026-11-04. Read 2026-11-04. [gitbook.com/docs/getting-started/llm-ready-docs](https://gitbook.com/docs/getting-started/llm-ready-docs). [All GitBook recipes](https://agentreadychecklist.com/platforms/gitbook/#ar-read-09)

### ReadMeworkaround

Pages answer Accept: text/markdown and .md URLs, but a <link rel="alternate" type="text/markdown"> tag is not documented; rely on Link headers and the Agent Hint Banner.

Hosted SaaS, docs read 2026-11-04. Read 2026-11-04. [docs.readme.com/main/docs/ai-discoverability](https://docs.readme.com/main/docs/ai-discoverability). [All ReadMe recipes](https://agentreadychecklist.com/platforms/readme/#ar-read-09)

### Salesforce B2C Commerce (SFRA and PWA Kit / Composable Storefront)workaround

No markdown mirror. Put a Cloudflare zone or Worker in front and enable Markdown for Agents; it adds the markdown variant at the edge.

Hosted SaaS (B2C Commerce help release 264.0.0); PWA Kit retail-react-app 10.3.0 and pwa-kit-runtime 3.21.0 on npm, read 2026-11-04. Read 2026-11-04. [developers.cloudflare.com/fundamentals/reference/markdown-for-agents/](https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/). [All Salesforce B2C Commerce (SFRA and PWA Kit / Composable Storefront) recipes](https://agentreadychecklist.com/platforms/salesforce-commerce-cloud/#ar-read-09)

### Adobe Commerce and Magento Open Sourceworkaround

No markdown mirror. Use Cloudflare Markdown for Agents in front, or a Fastly snippet that adds a Link header to a markdown endpoint you host.

2.4.9 (GitHub tag published 2026-05-12; 2.4.10-alpha1 tagged 2026-10-13); release notes read 2026-11-04. Read 2026-11-04. [developers.cloudflare.com/fundamentals/reference/markdown-for-agents/](https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/). [All Adobe Commerce and Magento Open Source recipes](https://agentreadychecklist.com/platforms/adobe-commerce/#ar-read-09)

## What it does not do

-   A mirror does not fix an HTML page that lacks the answer.
-   A mirror nothing links to is a file nothing fetches.

## Common mistakes

-   Mirror drifts from the HTML because it is built from a different source.
-   Relative href that breaks under a trailing slash.

## Related

-   Term: [Markdown mirror](https://agentreadychecklist.com/glossary/markdown-mirror/)
-   Term: [Link header](https://agentreadychecklist.com/glossary/link-header/)

## Sources

-   [github.com/agentready-org/standard/blob/main/spec/spec.md](https://github.com/agentready-org/standard/blob/main/spec/spec.md)read 2026-11-04
-   [vercel.com/kb/guide/make-your-site-readable-by-ai-agents](https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents)read 2026-11-04
-   [blog.cloudflare.com/agent-readiness/](https://blog.cloudflare.com/agent-readiness/)read 2026-11-04
-   [nextjs.org/docs/app/api-reference/functions/generate-metadata](https://nextjs.org/docs/app/api-reference/functions/generate-metadata)read 2026-11-04
-   [docs.astro.build/en/guides/endpoints/](https://docs.astro.build/en/guides/endpoints/)read 2026-11-04
-   [nuxt.com/docs/guide/concepts/rendering](https://nuxt.com/docs/guide/concepts/rendering)read 2026-11-04
-   [svelte.dev/docs/kit/load](https://svelte.dev/docs/kit/load)read 2026-11-04
-   [reactrouter.com/how-to/headers](https://reactrouter.com/how-to/headers)read 2026-11-04
-   [developers.cloudflare.com/pages/configuration/headers/](https://developers.cloudflare.com/pages/configuration/headers/)read 2026-11-04
-   [developer.wordpress.org/reference/hooks/send\_headers/](https://developer.wordpress.org/reference/hooks/send_headers/)read 2026-11-04
-   [shopify.dev/docs/storefronts/themes/seo/metadata](https://shopify.dev/docs/storefronts/themes/seo/metadata)read 2026-11-04
-   [help.webflow.com/hc/en-us/articles/50435871026195-Markdown-for-AI-agents](https://help.webflow.com/hc/en-us/articles/50435871026195-Markdown-for-AI-agents)read 2026-11-04
-   [framer.com/help/articles/make-site-readable-by-ai-agents/](https://www.framer.com/help/articles/make-site-readable-by-ai-agents/)read 2026-11-04
-   [dev.wix.com/docs/go-headless/wix-managed-headless/full-integration-astro/feature-guides/seo/about-seo-support](https://dev.wix.com/docs/go-headless/wix-managed-headless/full-integration-astro/feature-guides/seo/about-seo-support)read 2026-11-04
-   [support.squarespace.com/hc/en-us/articles/205815908-Customize-parts-of-your-site-with-code-injection](https://support.squarespace.com/hc/en-us/articles/205815908-Customize-parts-of-your-site-with-code-injection)read 2026-11-04
-   [knowledge.hubspot.com/domains-and-urls/create-and-manage-url-redirects](https://knowledge.hubspot.com/domains-and-urls/create-and-manage-url-redirects)read 2026-11-04
-   [docusaurus.io/docs/api/docusaurus-config](https://docusaurus.io/docs/api/docusaurus-config)read 2026-11-04
-   [mintlify.com/docs/ai/markdown-export](https://mintlify.com/docs/ai/markdown-export)read 2026-11-04
-   [gitbook.com/docs/getting-started/llm-ready-docs](https://gitbook.com/docs/getting-started/llm-ready-docs)read 2026-11-04
-   [docs.readme.com/main/docs/ai-discoverability](https://docs.readme.com/main/docs/ai-discoverability)read 2026-11-04
-   [developers.cloudflare.com/fundamentals/reference/markdown-for-agents/](https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/)read 2026-11-04
-   [ora.ai/api/checks, contract 1.38.0](https://ora.ai/api/checks?utm_source=agentreadychecklist.com&utm_medium=referral&utm_campaign=requirement)read 2026-11-05
-   [ora.ai/llms-full.txt](https://ora.ai/llms-full.txt?utm_source=agentreadychecklist.com&utm_medium=referral&utm_campaign=requirement)read 2026-11-05
-   [registry.npmjs.org/ax, the ax README](https://registry.npmjs.org/ax)read 2026-11-05

Verify with Ora

The scanner this site recommends for the whole checklist. 132 checks, a score out of 100, no account.

`npx ax@0.10 audit <url> --min-score <n>`

[Why Ora, and its limits](https://agentreadychecklist.com/verify-with-ora/)

Fix it on

-   [Next.js (App Router)recipe](#p-nextjs-app-router)
-   [Astrorecipe](#p-astro)
-   [Nuxtrecipe](#p-nuxt)
-   [SvelteKitrecipe](#p-sveltekit)
-   [Remix and React Router (framework mode)recipe](#p-remix-react-router)
-   [Plain static hosting (Netlify, Vercel static, Cloudflare Pages, GitHub Pages, S3 and CloudFront)recipe](#p-static-hosting)
-   [WordPress and Elementorrecipe](#p-wordpress-elementor)
-   [Shopify (Online Store 2.0 themes)workaround](#p-shopify)
-   [Webflowworkaround](#p-webflow)
-   [Framerrecipe](#p-framer)
-   [Wix (Wix Editor and Wix Studio)workaround](#p-wix)
-   [Squarespace (version 7.1)workaround](#p-squarespace)
-   [HubSpot CMS (Content Hub)workaround](#p-hubspot-cms)
-   [Docusaurusworkaround](#p-docusaurus)
-   [Mintlifyrecipe](#p-mintlify)
-   [GitBookrecipe](#p-gitbook)
-   [ReadMeworkaround](#p-readme)
-   [Salesforce B2C Commerce (SFRA and PWA Kit / Composable Storefront)workaround](#p-salesforce-commerce-cloud)
-   [Adobe Commerce and Magento Open Sourceworkaround](#p-adobe-commerce)

Last reviewed 2026-11-05. AgentReady v2.0, read 2026-11-04.
