agentic‑readiness docs
/
Scan at scale Blog Build one › Run a scan ›

DocsContentMarkdown negotiation

Markdown negotiation

Markdown served to agents that ask for it with Accept: text/markdown.

adoption Early productiontrend ▲ risingchecked once per sitechecks 2verified 2026-10-05
Set up Markdown negotiation on your site How to answer a request for Markdown with Markdown from the same address, and keep caches from mixing it up with the HTML.
Free Serve Markdown by negotiation

Why an agent cares

An agent that sends Accept: text/markdown gets the page as clean text from the same address, without a separate twin to find. It only works if the answer really is Markdown, and if caches are told the address varies by Accept, or browsers can be handed the Markdown.

Adoption

Early production. Several independent organisations run it in production, though it is still niche on the open web.

Direction of travel: ▲ rising, as at .

A setting rather than a project: Cloudflare offers it as an edge toggle and docs platforms turn it on by default. A 2026-10-03 check found 14 well-known sites answering a Markdown request with Markdown, Cloudflare, Vercel and Stripe's docs among them.

AdopterDepthEvidence
Cloudflare (Markdown for Agents)productionblog.cloudflare.com
Vercelproductionvercel.com

What we check

Absence is never a finding. Every check below runs only when this technology is detected, so a site that has not adopted this is not assessed on it and appears in no report. 2 of these 4 can fail it. In Lumar these appear once per site, in the site-wide results of each crawl.
CheckSeverityRaisesOn whose authority
Markdown Negotiation HTML Bodyhighusabilityspecification: HTTP Semantics: Content-Type, Vary and proactive negotiation
Markdown Negotiation Missing Varymediumusabilityspecification: HTTP Semantics: Content-Type, Vary and proactive negotiation
Markdown Negotiation HTML Missing Varyinformationalnothingspecification: HTTP Semantics: Content-Type, Vary and proactive negotiation
Markdown Negotiation Partially Assessedcoverage notenothingour own coverage

Examples

Both run through the same checks as a live scan: the first passes, the second is flagged.

correcttext
# markdownNegotiation: the home page asked for with Accept: text/markdown.
# The answer is Markdown, labelled as Markdown, and says it varies by Accept.
GET / HTTP/1.1
Accept: text/markdown

HTTP/1.1 200 OK
Content-Type: text/markdown; charset=utf-8
Vary: Accept

# Example Store

> Handmade goods, shipped worldwide.

- [Catalog](https://example.com/catalog.md)
- [Shipping and returns](https://example.com/shipping.md)
present but wrongtext
# markdownNegotiation: the home page asked for with Accept: text/markdown.
# markdownNegotiationHtmlBody: labelled text/markdown, but the body is the HTML web page.
# markdownNegotiationMissingVary: no Vary: Accept, although the same address serves HTML to browsers.
GET / HTTP/1.1
Accept: text/markdown

HTTP/1.1 200 OK
Content-Type: text/markdown; charset=utf-8
Vary: Accept-Encoding

<!doctype html>
<html lang="en"><head><title>Example Store</title></head>
<body><h1>Example Store</h1><p>Handmade goods, shipped worldwide.</p></body></html>

Specifications

DocumentRevisionKind
RFC 9110 — HTTP Semantics: Content-Type, Vary and proactive negotiationPublished RFC, June 2022specification
RFC 7763 — The text/markdown media typePublished RFC, March 2016specification
Cloudflare — Markdown for AgentsLiving documentguidance

Last re-read against the published documents: .