---
title: "Accept: text/markdown negotiation without Vary: Accept (geo/markdown-negotiation-vary)"
description: "geo/markdown-negotiation-vary: If the same URL serves HTML or Markdown depending on Accept, both responses need Vary: Accept, or a CDN can cache Markdown and…"
canonical: https://void-design.vercel.app/rules/geo/markdown-negotiation-vary
lastModified: 2026-09-16
---

# Accept: text/markdown negotiation without Vary: Accept

`geo/markdown-negotiation-vary` · severity **warn** · category AI search · detected by `void geo` and `void audit`

## Why it matters

If the same URL serves HTML or Markdown depending on Accept, both responses need Vary: Accept, or a CDN can cache Markdown and serve it to browsers. Next.js 16.3.5 overwrites a custom Vary on prerendered HTML responses (verified).

## How to fix it

Prefer explicit .md URLs. Only negotiate where the proxy runs before the cache, and add Vary: Accept at the CDN.

## References

- https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Vary

## More ai search rules

`void geo` reports 41 rules in this category. Generative-engine optimisation: whether AI crawlers that don't run JavaScript see the same content, valid and visible JSON-LD, an explicit AI robots policy, llms.txt, Markdown mirrors and answer-first writing.

- `wall-of-text` Paragraphs longer than 150 words — [geo/wall-of-text](https://void-design.vercel.app/rules/geo/wall-of-text)
- `vague-headings` Generic section headings ("Overview", "More", "Details") — [geo/vague-headings](https://void-design.vercel.app/rules/geo/vague-headings)
- `markdown-alternate` No working Markdown alternate for this content page — [geo/markdown-alternate](https://void-design.vercel.app/rules/geo/markdown-alternate)
- `markdown-mirror-indexable` Markdown mirror can compete with the HTML page, or diverges from it — [geo/markdown-mirror-indexable](https://void-design.vercel.app/rules/geo/markdown-mirror-indexable)
- `markdown-negotiation` No Markdown response for Accept: text/markdown — [geo/markdown-negotiation](https://void-design.vercel.app/rules/geo/markdown-negotiation)
- `llms-txt-missing` No /llms.txt — [geo/llms-txt-missing](https://void-design.vercel.app/rules/geo/llms-txt-missing)
- `llms-txt-error` /llms.txt returns a server error — [geo/llms-txt-error](https://void-design.vercel.app/rules/geo/llms-txt-error)
- `llms-txt-invalid` /llms.txt doesn't follow the llms.txt format — [geo/llms-txt-invalid](https://void-design.vercel.app/rules/geo/llms-txt-invalid)

Detected by `void geo` and `void audit`. Explain it in a terminal: `void rules geo/markdown-negotiation-vary`
