Servir markdown para agente de IA: o ganho é de ingestão, e o risco é de cache

Servir markdown quando o agente pede melhora a ingestão do seu conteúdo, e não a sua posição no Google. O ganho é texto limpo para o modelo, e a armadilha é o cache guardar markdown na URL e servir...

Servir markdown para agente de IA: o ganho é de ingestão, e o risco é de cache
Neste artigo
  1. Por que servir markdown muda alguma coisa?
  2. Qual é a armadilha que quase ninguém documenta?
  3. O cabeçalho Vary resolve?
  4. Qual detalhe faz a regra funcionar ou não?
  5. Como conferir que está certo?
  6. O que fazer primeiro se o site é seu?

Servir markdown quando o agente pede Accept: text/markdown melhora a ingestão do seu conteúdo, não a sua posição no Google. O ganho é entregar texto limpo, sem menu, rodapé e script no meio, que é o lixo que faz o modelo citar você errado. O risco, medido em produção, é o cache guardar a resposta em markdown na URL e servir isso para gente.

Por que servir markdown muda alguma coisa?

O crawler de LLM precisa arrancar o texto do meio do seu HTML. Nesse processo ele às vezes cola pedaço de menu dentro do parágrafo, perde a tabela e atribui a você uma frase que era do rodapé. Entregar markdown pela mesma URL elimina esse passo inteiro. O modelo recebe título, lista e tabela já delimitados, e gasta menos token para chegar ao conteúdo. O efeito aparece na qualidade da citação, não na posição do link azul.

Vale dizer o que isso não é. Não existe sinal de ranqueamento associado a servir markdown, e nenhum buscador declarou usar o formato como critério. Quem vender negociação de conteúdo como alavanca de posição está inventando. O que se compra aqui é precisão do que o assistente lê antes de resumir você, e isso importa porque a citação errada circula igual à certa.

Qual é a armadilha que quase ninguém documenta?

A chave de cache da Cloudflare não inclui o cabeçalho Accept, e a do cache de página da hospedagem também não. Chave customizada com Accept é recurso de plano Enterprise. O resultado é direto: com negociação ligada, o primeiro formato pedido naquela URL fica guardado, e o próximo visitante recebe o formato errado. Se um agente passar antes do seu leitor, o leitor recebe markdown cru no navegador.

Medi isso em produção em 07/09/2026, na mesma URL, alternando só o cabeçalho do pedido.

Ordem dos pedidosO que o navegador passou a receberData da mediçãoFonte
Markdown primeiromarkdown, com a página quebrada para gente07/09/2026coleta própria em produção
HTML primeiroHTML, e o agente nunca recebia markdown07/09/2026coleta própria em produção
Depois da correçãocada um recebe o seu, nas 3 chamadas seguidas07/09/2026coleta própria em produção

O cabeçalho Vary resolve?

Não sozinho. Mandar Vary: Accept na origem é correto e barato, e ele instrui o cache a guardar uma cópia por formato pedido. O problema é que a Cloudflare não respeita esse cabeçalho por padrão, e o cache de página da hospedagem também não. Mande assim mesmo, para o proxy que respeitar, e não conte com ele como proteção. A correção que funcionou de verdade tem duas metades, e as duas precisam existir ao mesmo tempo para o teste passar.

A primeira metade é uma Cache Rule que desliga o cache quando o pedido é de markdown, casando em http.request.headers["accept"][0] contains "text/markdown". A segunda é Cache-Control: no-store, private na resposta do arquivo .md, aplicada na origem, para cobrir a camada que a regra da Cloudflare não alcança. Testei as duas separadas antes de juntar, e nenhuma delas sozinha segurou as três chamadas seguidas do teste.

Qual detalhe faz a regra funcionar ou não?

Em Cache Rules, quando duas regras casam com o mesmo pedido, vale a última, e não a primeira. Criar o bypass antes da regra de cache do site não adianta: a regra do site sobrescreve e o cf-cache-status volta como HIT. O bypass tem de ser a última da lista. Foi esse detalhe que custou horas, porque a configuração parecia certa e o comportamento continuava errado.

Como conferir que está certo?

A sequência abaixo revela o envenenamento, e ela tem de passar nas três chamadas, nessa ordem. Se a terceira devolver markdown, o cache está contaminado e o seu site está quebrado para leitor humano.

curl -sI -H 'Accept: text/html'     https://exemplo.com/
curl -sI -H 'Accept: text/markdown' https://exemplo.com/
curl -sI -H 'Accept: text/html'     https://exemplo.com/

Confira também que o arquivo .md não virou página indexável por acidente. Ele precisa ficar fora do sitemap, sem link apontando para ele no HTML, com X-Robots-Tag: noindex na resposta, e a URL terminada em .md deve responder 404 quando alguém digita o endereço direto. O conteúdo continua acessível pela negociação, que é o caminho pretendido. Sem esse cuidado você troca uma melhoria de ingestão por conteúdo duplicado, e esse é um negócio ruim.

O que fazer primeiro se o site é seu?

Comece pela geração do markdown a partir da fonte do artigo, e nunca da página já renderizada. Converter o HTML publicado traz header, CTA e rodapé junto, que é exatamente o que se queria remover. Depois confira a tabela: é ela, com número, data e fonte, que torna o texto citável, e é ela que mais quebra na conversão automática. Por último, transforme link relativo em absoluto, porque o agente lê o arquivo fora do contexto do site.

WA in X