CiteStat/Wiki/Markdown content negotiation — Accept: text/markdown for AI agents

Markdown content negotiation — Accept: text/markdown for AI agents

AI Search & GEO

TL;DR

Content negotiation lets one URL return HTML to a browser and markdown to an AI agent that sends Accept: text/markdown. The markdown must be the same page, not a site summary, and the response must carry Vary: Accept so caches keep the two apart.

Explain Simply

A restaurant gives a printed menu to guests at the table and a plain text list to the delivery driver who asks for one. Same dishes, two formats. Handing the driver the restaurant's brochure instead of the menu would be wrong.

How it works: HTTP content negotiation is part of the web's core standard (RFC 9110): the client lists the formats it accepts in the Accept header and the server picks one. An agent that prefers markdown sends Accept: text/markdown (often with text/html as a fallback). The server answers with Content-Type: text/markdown; charset=utf-8 and Vary: Accept.

Who uses it: Cloudflare launched "Markdown for Agents" on 12 February 2026: on Pro, Business and Enterprise zones it converts HTML to markdown at the edge when a request asks for it, and adds an x-markdown-tokens estimate. Cloudflare names Claude Code and OpenCode as agents that already send the header. Large documentation sites (Cloudflare, Stripe, Vercel, Anthropic) answer it.

Why markdown: the same page costs far fewer tokens. Cloudflare measured its announcement post at 16,180 tokens as HTML and 3,150 as markdown, an 80% cut. Navigation, scripts and styles are gone; headings, lists, tables and links stay.

Related standards: the llms.txt spec suggests a .md copy at the page URL plus .md, and a Link: <…>; rel="alternate"; type="text/markdown" header can point to it. Negotiation, the .md copy and the Link header can all exist together.

⚡Why It Matters

Coding assistants and AI agents read pages to answer a user right now. Markdown gives them your content without the page chrome, so more of it fits in their context. It is not a Google ranking signal: Google's AI features read the normal HTML index. Treat it as a low-cost way to be easy to use for agents, after the basics (server-rendered HTML, robots.txt that lets AI crawlers in).

🔍How CiteStat Checks

CiteStat requests the scanned URL itself with Accept: text/markdown, text/html, */* (what agents send) and passes it only when all three hold: the response is text/markdown, its title (front-matter title: or first # heading) starts the page's H1 or <title> — so a site summary served for every URL does not count — and it carries Vary: Accept. A different document or a missing Vary is a medium finding. On the home page, a summary named for the site counts as the page. To test any page yourself, compare curl -H 'Accept: text/markdown' <url> with the normal page.

CiteStat Score Impact

One of the 9 core checks on the Agent Readiness card (score = core checks passed / 9 × 10). It does not change the headline SEO score.

Fix Difficulty

Editor: Hard | Developer: Medium | AI Agent: Medium