Why it matters
Without X-Robots-Tag: noindex or a canonical Link header, .md mirrors can be indexed as duplicates; mirrors carrying different facts than the HTML risk looking like cloaking.
How to fix it
Send X-Robots-Tag: noindex and Link: <html-url>; rel="canonical" on Markdown responses, keep them out of the sitemap, and generate them from the same source as the HTML.
Example
// app/md/[[...slug]]/route.ts
return new Response(md, {
headers: {
'Content-Type': 'text/markdown; charset=utf-8',
'X-Robots-Tag': 'noindex',
Link: '<' + htmlUrl + '>; rel="canonical"',
Vary: 'Accept',
},
})References
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.
unstructured-contentLong content with no lists, tables or subheadingswall-of-textParagraphs longer than 150 wordsvague-headingsGeneric section headings ("Overview", "More", "Details")markdown-alternateNo working Markdown alternate for this content pagemarkdown-negotiation-varyAccept: text/markdown negotiation without Vary: Acceptmarkdown-negotiationNo Markdown response for Accept: text/markdownllms-txt-missingNo /llms.txtllms-txt-error/llms.txt returns a server error