---
title: "Markdown Content Negotiation: Accept text/markdown Explained"
description: "Markdown content negotiation serves Markdown to clients that send Accept: text/markdown. See the HTTP rules, Vary: Accept, Cloudflare's feature and a test."
url: https://seenlens.com/glossary/markdown-content-negotiation
last_updated: 2026-11-06
---

# What is Markdown content negotiation?

Markdown content negotiation means that a server returns Markdown instead of HTML at the same URL when a client sends Accept: text/markdown. HTTP defines the mechanism in RFC 9110. Cloudflare announced a feature on 12 February 2026 that does this at its edge. The use for AI agents is a vendor feature and a convention, not a standard.

By SeenLens. Last updated: 2026-11-06

## Definition

Content negotiation is the HTTP process in which a client and a server agree on a representation of one resource. In proactive negotiation, the client states its preferences in request headers, and the server chooses. The `Accept` header lists the media types the client prefers. For Markdown, the client asks for `text/markdown`. Browsers do not send it, so they keep receiving HTML at the same URL.

## How does it work?

```text
GET /pricing HTTP/1.1
Host: example.com
Accept: text/markdown, text/html;q=0.8
```

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

# Pricing
...
```

- **Accept.** RFC 9110 section 12.5.1 defines the header. Quality values (`q`) rank the options.
- **Vary.** Section 12.5.5 says that a cache must not reuse a stored response for a later request unless the listed header values match. Without `Vary: Accept`, a cache can hand a Markdown page to a browser, or HTML to an agent.
- **No match.** The server may return 406 Not Acceptable (section 15.5.7) or ignore the header and send a default response. A client cannot rely on proactive negotiation being honored.

## Who sends Accept: text/markdown and who serves it?

- **Cloudflare Markdown for Agents.** Announced on 12 February 2026 as a beta. It converts HTML to Markdown at the edge when a request carries `Accept: text/markdown`. The response has `Content-Type: text/markdown; charset=utf-8`, `Vary: Accept` and a `Content-Signal` header. It is free on the Pro, Business and Enterprise plans, and it converts HTML only. Cloudflare's own example page shrinks from 16,180 tokens as HTML to 3,150 as Markdown, a vendor figure.
- **Clients.** Cloudflare says Claude Code and OpenCode already send the header.
- **Search engines.** Google's guide to AI features says you do not need new machine-readable files, AI text files or markup. OpenAI's crawler documentation does not mention Markdown requests.

SeenLens treats Markdown delivery as optional, because no major agent is confirmed to ask for it. A site that wants to offer Markdown can also link a `.md` version with `rel="alternate"` and `type="text/markdown"`, which is the second route the scan accepts.

## How do I check it?

Run this command and read the headers:

```text
curl -s -D - -o /dev/null -H "Accept: text/markdown" https://example.com/pricing
```

A working setup returns `content-type: text/markdown` and `vary: accept`. The SeenLens scan sends the same header and warns when Markdown is served without `Vary: Accept`. To set it up, follow [serve Markdown to AI agents](https://seenlens.com/fixes/serve-markdown-to-agents). The [GEO audit](https://seenlens.com/tools/geo-audit) runs this check with the other 37.

## Related terms

- [llms.txt](https://seenlens.com/glossary/llms-txt): an index file whose links often point to Markdown pages.
- [Content signals](https://seenlens.com/glossary/content-signals): the usage preference that Cloudflare adds as a header.
- [llms.txt vs agents.md](https://seenlens.com/guides/llms-txt-vs-agents-md) and the [llms.txt checker](https://seenlens.com/tools/llms-txt-checker).

## Frequently asked questions

### What does Accept: text/markdown do?

It tells the server that the client prefers Markdown. A server that supports it returns Markdown. Other servers return HTML.

### Why is Vary: Accept needed?

It tells caches that the response depends on the Accept header. Without it, a cache can serve the wrong version to the next visitor.

### Does Google use the Markdown version of my page?

Google's documentation for AI features does not mention it. Google says you need no new files for these features.

### Is this different from llms.txt?

Yes. The llms.txt file is one index at one URL. Content negotiation changes the format of each page at its own URL.

### Can I do this without Cloudflare?

Yes. Any server or framework can read the Accept header and return Markdown with `Vary: Accept`. Cloudflare offers it as a managed feature.

## Sources

- [RFC 9110: HTTP Semantics](https://www.rfc-editor.org/rfc/rfc9110.html) (proactive negotiation, Accept, Vary, 406, checked 2026-11-06)
- [Cloudflare: Markdown for Agents](https://blog.cloudflare.com/markdown-for-agents/) (announcement, 12 February 2026, token example, clients, checked 2026-11-06)
- [Cloudflare docs: Markdown for Agents](https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/) (response headers, plans, limits, checked 2026-11-06)
- [Google: AI features and your website](https://developers.google.com/search/docs/appearance/ai-features) (no new machine-readable files needed, checked 2026-11-06)
