# Markdown negotiation

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

**[Content](/docs/content)** · checked once per host (item type `markdown_negotiation`) · 2 checks that can fail it

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** (L2)

Several independent organisations run it in production, though it is still niche on the open web. Direction of travel: ▲ rising, as of 2026-10-03.

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.

| Adopter | Depth | Evidence |
|---|---|---|
| Cloudflare (Markdown for Agents) | production | [blog.cloudflare.com](https://blog.cloudflare.com/markdown-for-agents/) |
| Vercel | production | [vercel.com](https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents) |

## 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.

| Check | Kind | Raises | On whose authority |
|---|---|---|---|
| Markdown Negotiation HTML Body | high severity | usability | specification: [HTTP Semantics: Content-Type, Vary and proactive negotiation](https://www.rfc-editor.org/rfc/rfc9110.html) |
| Markdown Negotiation Missing Vary | medium severity | usability | specification: [HTTP Semantics: Content-Type, Vary and proactive negotiation](https://www.rfc-editor.org/rfc/rfc9110.html) |
| Markdown Negotiation HTML Missing Vary | informational | nothing | specification: [HTTP Semantics: Content-Type, Vary and proactive negotiation](https://www.rfc-editor.org/rfc/rfc9110.html) |
| Markdown Negotiation Partially Assessed | coverage note | nothing | our own coverage |

## Examples

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

**Correct**

```text
# 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 wrong**

```text
# 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

| Document | Revision | Kind |
|---|---|---|
| [RFC 9110 — HTTP Semantics: Content-Type, Vary and proactive negotiation](https://www.rfc-editor.org/rfc/rfc9110.html) | Published RFC, June 2022 | specification |
| [RFC 7763 — The text/markdown media type](https://www.rfc-editor.org/rfc/rfc7763.html) | Published RFC, March 2016 | specification |
| [Cloudflare — Markdown for Agents](https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/) | Living document | guidance |

Last re-read against the published documents: 2026-10-05.
