BlogEngineering

Markdown vs HTML: What AI Actually Cites (Real Data)

We compared markdown mirrors against a comparable HTML-only site using real Cloudflare crawl data — here's the actual difference in AI citations, not a guess.

K
Karlis Bērziņš
Software engineer
Aug 28, 2026
7 min read
Markdown vs HTML: What AI Actually Cites (Real Data)

AI crawlers cite markdown pages far more than HTML pages serving the same content. In a 24-hour window, a site with plain-markdown mirrors of every page pulled 250 AI answer retrievals against 81 for a comparable HTML-only site — roughly 3x, from the same category of content. This isn’t a hunch. It’s Cloudflare’s own AI crawl data, and we can show the numbers because tunovix.com is the markdown side of the comparison.

Why this even needs testing

Every AI system that answers questions from the live web — ChatGPT browsing, Claude, Perplexity, Google’s AI Overviews — has to fetch a page and turn it into something it can actually reason about. HTML wasn’t built for that. It was built for browsers, and it’s full of things that mean nothing to an assistant: nav bars, cookie banners, ad slots, JS-rendered chrome, tracking scripts. A crawler has to strip all of that out before it gets to the actual sentence it wanted.

Markdown skips the whole problem. There’s nothing to strip, because there’s nothing there but the content.

250 vs 81
AI answer retrievals, 24hrs
232 vs 0
demand signals recorded
49% vs 99%
of crawl requests allowed through

That last stat is the counterintuitive one, so it’s worth explaining honestly: the markdown site saw more total crawl traffic (814 requests vs 107) and a lower percentage of it landing as “allowed.” More bots showed up and tried more things — some of that is noise (payload/session variants, retries), not a defect in markdown itself. The number that actually matters — real answers actually retrieved and cited — still came out roughly 3x higher on the markdown side, on top of a larger crawl volume overall. Bots showed up more and got more usable signal per visit.

The mix of who shows up changes too

It’s not just volume — which crawler dominates shifts depending on what you serve:

  • Markdown: Google led by a wide margin (378 allowed requests), with OpenAI, Anthropic, Perplexity, and Amazon’s bot all present in smaller numbers.
  • HTML-only: OpenAI led (63), followed by Microsoft’s Bingbot, Anthropic, ByteDance, and Perplexity — none anywhere near the markdown site’s Google volume.

Different crawlers apparently have different tolerance for how much work they’ll do to parse a page. That’s a real, practical reason to not treat “AI visibility” as one undifferentiated thing — the format you serve shapes which systems bother to come back.

What we actually built (see the numbers happen)

We didn’t estimate this from a whitepaper — we implemented it here first and then looked at the data. Every marketing page on tunovix.com (homepage, tools index, contact, privacy, terms, every blog post — including this one, at /blog/markdown-vs-html-ai-citations-data.md) has a plain-markdown mirror, advertised via a <link rel="alternate" type="text/markdown"> tag in the page <head>, generated from the exact same data the HTML page renders from — so it can never drift out of sync. There’s also a sitewide llms.txt index and a full-content llms-full.txt export, following the emerging llmstxt.org convention. For the mechanics of getting MCP-style AI-agent workflows like this actually wired into a codebase, see AI Agents and MCP Servers vs. WordPress — same underlying idea, different layer.

Where Cloudflare AI Search fits in — a different problem

Markdown mirrors solve passive discoverability: if a crawler visits, it gets clean content instead of a wall of markup. That’s still a waiting game — it only works when something decides to crawl you.

Cloudflare AI Search (built on Vectorize, Cloudflare’s vector database) solves a different problem: active queryability. Instead of hoping a crawler visits and parses the right page, it indexes your whole site — chunked, embedded, hybrid semantic-plus-keyword searchable — and exposes it so an agent can ask a direct question and get back the relevant chunk immediately, no crawling, no guessing which page has the answer. We built this as a public API on tunovix.com (/api/ai-search?q=<question>), specifically for agents rather than site visitors — a question like “does Tunovix build WordPress migrations” returns the actually-relevant chunk directly, ranked by relevance score.

The two aren’t competing approaches — they’re different layers of the same goal. Markdown mirrors make you easy to parse if something visits. AI Search makes you directly answerable without a visit having to happen at all.

What this means if you’re not doing either yet

Three concrete, low-cost moves, in order of effort:

  1. Serve a markdown version of every important page. It doesn’t need to be fancy — a plain .md file at a predictable URL, linked via rel="alternate", generated from whatever data already renders the HTML page (so it can’t go stale).
  2. Publish an llms.txt. A short index pointing agents at your real pages and their markdown counterparts costs almost nothing to maintain and is exactly what the emerging convention expects.
  3. Consider a queryable layer (AI Search, or similar) once you have enough content that “which page has the answer” stops being obvious — this is a bigger lift than the first two, worth it once your site has real depth to search over. This site’s own version of that layer is documented at the API reference.

None of this requires a rebuild. Every one of these was added to an existing Nuxt site without touching the pages themselves — the data each page already renders from just got reused a second time.

If you’re weighing whether this is worth building into your own site — or want an AI agent integration scoped properly instead of guessed at — get a free estimate with our AI Agent Cost Calculator, or tell us what you’re building and we’ll give you a straight answer on scope and cost.

Have a product in mind? Let's scope it this week.

A 30-minute call gets you a rough timeline and cost — no obligation, no sales deck.