Markdown para agentes de IA: Accept text/markdown, Content-Signal e Link Headers

Por SEOgrinder · Publicado em · 11 min de leitura

Resposta curta: Markdown para agentes de IA significa que o seu servidor responde ao mesmo endereço com Markdown puro, em vez de HTML, quando o cliente pede isso com o cabeçalho de requisição Accept: text/markdown. Os navegadores continuam recebendo HTML. São poucas linhas de código no servidor ou um recurso de CDN que você liga, e os agentes recebem texto limpo, sem menus e scripts. Um benefício para rankings ou citações em respostas de IA não está comprovado. Trate-o como um extra barato sobre um HTML legível, um bom robots.txt e um sitemap, nunca como substituto deles.

Por que os agentes de IA gostam de Markdown?

Uma página da web é feita para navegadores. Em volta do texto que você quer ler ficam a navegação, um banner de cookies, scripts, classes de estilo e rodapés. O olho de uma pessoa pula tudo isso. Um programa que precisa entregar a página a um modelo de linguagem não consegue pular de graça, porque o modelo tem uma janela de contexto limitada e cada elemento a mais ocupa parte dela.

O Markdown mantém o que importa para a leitura: títulos, parágrafos, listas, tabelas, links. Isso faz dos agentes e de ferramentas parecidas candidatos naturais a pedi-lo, e é também o motivo de a proposta do llms.txt ser escrita em Markdown. Falamos desse arquivo em llms.txt: o que é, como criar e se ele realmente funciona.

A Cloudflare deixa visível o argumento do tamanho. No anúncio do Markdown for Agents, a resposta de exemplo traz um cabeçalho x-markdown-tokens com uma estimativa da quantidade de tokens (725 no exemplo), de modo que o cliente pode avaliar quanto contexto a página vai ocupar.

O que isso não diz é se os grandes sistemas de busca com IA pedem Markdown. O anúncio da Cloudflare mostra dados do Radar sobre respostas em Markdown ao OAI-SearchBot. Isso prova que essas respostas acontecem, não que o crawler as solicita; a OpenAI não documenta isso. Por isso, não afirmamos. O que está documentado é que alguns agentes já pedem Markdown, como mostram as próximas seções.

Negociação de conteúdo: Accept, Vary e Content-Type

A negociação de conteúdo é uma parte antiga do HTTP. Um endereço pode ter várias representações, e o cliente diz qual prefere. Três cabeçalhos sustentam todo o mecanismo:

CabeçalhoEnviado porSignificado
AcceptCliente, na requisiçãoQuais tipos de conteúdo o cliente quer, com pesos opcionais (q=0.8)
Content-TypeServidor, na respostaO que o servidor realmente enviou, aqui text/markdown; charset=utf-8
Vary: AcceptServidor, na respostaA resposta depende do cabeçalho Accept, então os caches não podem misturar as versões

Um navegador envia primeiro text/html e acrescenta o curinga */* como alternativa. Um agente que quer Markdown o nomeia explicitamente, por exemplo Accept: text/markdown ou Accept: text/markdown, text/html;q=0.8. A Cloudflare escreve que agentes de programação comuns, como o Claude Code e o OpenCode, já enviam esses cabeçalhos Accept.

A regra que protege todo mundo é simples: responda com Markdown somente se text/markdown for citado explicitamente e não tiver peso menor do que text/html. O curinga */* nunca deve contar. Senão, um navegador, um verificador de links ou um bot de pré-visualização de redes sociais, que aceitam “qualquer coisa”, receberiam Markdown.

Markdown para agentes de IA com a Cloudflare

Em 12 de fevereiro de 2026, a Cloudflare anunciou o Markdown for Agents. Se o recurso estiver ativado na sua zona (ele está em beta, sem custo, nos planos Pro, Business e Enterprise), uma requisição com Accept: text/markdown recebe o seu HTML convertido para Markdown na hora. O seu servidor de origem não muda.

A resposta de exemplo do anúncio mostra quais cabeçalhos esperar:

content-type: text/markdown; charset=utf-8
vary: accept
x-markdown-tokens: 725
content-signal: ai-train=yes, search=yes, ai-input=yes

É o caminho mais rápido se o seu site já roda atrás da Cloudflare em um desses planos e o resultado convertido parece bom. Confira o resultado com curl (veja “Como testar com curl”) antes de confiar nele. Se você quer controle total sobre o que a versão em Markdown diz, ou se usa outra infraestrutura, monte a versão por conta própria.

Faça você mesmo: um exemplo curto em Node

O esboço a seguir contém as regras acima: Markdown só para um pedido explícito, Vary: Accept nas duas versões, um endereço fixo /index.md para clientes que não negociam e um link canonical no cabeçalho da resposta em Markdown. É um exemplo mínimo, não código de produção.

import http from 'node:http';
import { readFileSync } from 'node:fs';

function wantsMarkdown(accept = '') {
  const weight = new Map();
  for (const part of accept.toLowerCase().split(',')) {
    const [range, ...params] = part.trim().split(';');
    const q = params.find((p) => p.trim().startsWith('q='));
    weight.set(range.trim(), q ? Number(q.trim().slice(2)) : 1);
  }
  const md = weight.get('text/markdown') ?? 0;
  const html = weight.get('text/html') ?? weight.get('text/*') ?? weight.get('*/*') ?? 0;
  return md > 0 && md >= html; // o curinga sozinho nunca seleciona Markdown
}

http.createServer((req, res) => {
  if (req.url === '/index.md' || (req.url === '/' && wantsMarkdown(req.headers.accept))) {
    res.writeHead(200, {
      'Content-Type': 'text/markdown; charset=utf-8',
      'Vary': 'Accept',
      'Link': '<https://example.com/>; rel="canonical"',
    });
    return res.end(readFileSync('index.md'));
  }
  if (req.url === '/') {
    res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8', 'Vary': 'Accept' });
    return res.end(readFileSync('index.html'));
  }
  res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' }); // qualquer outro endereço responde 404
  res.end('Not found');
}).listen(3000);

Três detalhes merecem um olhar mais atento:

  • Vary nas duas versões. A resposta em HTML também precisa de Vary: Accept; do contrário, um cache compartilhado pode guardar o HTML e entregá-lo a um agente que pediu Markdown, ou o contrário.
  • O endereço fixo. /index.md sempre devolve Markdown, não importa o que o cliente envie. Agentes e pessoas podem linkar para ele, e ele funciona onde não é possível definir cabeçalhos. O nosso seogrinder.com/index.md faz exatamente isso.
  • O cabeçalho canonical. A versão em Markdown é uma segunda representação da mesma página. O Google documenta que rel="canonical" pode ser enviado como cabeçalho HTTP em arquivos que não são HTML. É um sinal forte de que a versão em Markdown pertence à página, não uma garantia (Google).

Escreva o arquivo Markdown à mão ou gere-o a partir da mesma fonte do HTML. De qualquer forma, ele deve dizer o mesmo que a página, só que sem a moldura.

O cabeçalho de resposta Link é definido na RFC 8288. Ele indica um endereço relacionado e o tipo de relação, por exemplo Link: </llms.txt>; rel="describedby". A relação describedby é registrada, e o significado dela se encaixa: o recurso linkado descreve este aqui. Um cliente que lê os cabeçalhos de resposta fica sabendo onde está a descrição do seu site antes mesmo de ler o corpo da resposta.

O seogrinder.com envia esse cabeçalho na página inicial e aponta para o próprio llms.txt. Na resposta em Markdown, o mesmo cabeçalho Link carrega também a relação canonical mostrada acima, separada por vírgula.

Se algum agente segue esses links hoje, isso não está comprovado. O custo é uma linha na configuração do servidor.

A linha Content-Signal

Em setembro de 2025, a Cloudflare introduziu uma linha para o robots.txt que diz o que um crawler pode fazer com o seu conteúdo depois de buscá-lo:

Content-Signal: search=yes, ai-input=yes, ai-train=no

search cobre a indexação e os snippets, ai-input significa usar o conteúdo diretamente em respostas de IA, e ai-train significa treinar ou ajustar um modelo. O anúncio da Cloudflare e o site contentsignals.org descrevem o formato. É uma declaração, não uma barreira: ninguém é obrigado a respeitá-la. A Cloudflare diz que os content signals expressam preferências, que não são contramedidas técnicas e que algumas empresas podem simplesmente ignorá-los. Como mostrado acima, o exemplo de Markdown da Cloudflare também traz um cabeçalho de resposta content-signal.

A linha pertence ao seu robots.txt, junto com todas as outras regras para bots de IA. Os detalhes, inclusive o erro comum dos grupos separados por bot, estão em robots.txt para crawlers de IA. O robots.txt do seogrinder.com usa um grupo compartilhado para todos os crawlers e nove identificadores de IA, com Content-Signal: search=yes, ai-input=yes, ai-train=yes.

Como testar com curl

Teste com a mesma ferramenta que um agente usaria. A opção -I mostra só os cabeçalhos:

curl -sI -H "Accept: text/markdown" https://example.com/

Procure quatro coisas na resposta: status 200, content-type: text/markdown, um vary que contenha Accept e um cabeçalho link com o endereço canonical. Este é o resultado para o seogrinder.com, reduzido às linhas relevantes:

HTTP/2 200
content-type: text/markdown; charset=utf-8
vary: Accept
link: </llms.txt>; rel="describedby"; type="text/plain", <https://seogrinder.com/>; rel="canonical"

Depois faça as verificações contrárias. Cada uma delas deve devolver text/html:

curl -sI -H "Accept: text/html" https://example.com/
curl -sI -H "Accept: */*" https://example.com/
curl -sI https://example.com/

Por último, envie -H "Accept: text/markdown, text/html;q=0.8". O Markdown deve vencer, porque tem peso maior.

Como o SEOgrinder verifica

Depois de uma análise, abra a aba Preparação para IA no SEOgrinder. Em “Verificações para agentes de IA” há sete linhas. Três delas dizem respeito a este artigo, e as três ficam no grupo “Extras”:

  • Servir texto em vez de HTML (Markdown Negotiation): cumprido quando uma requisição com Accept: text/markdown devolve Markdown.
  • Levar os agentes até aos teus dados (Link Headers): procura relações úteis no cabeçalho de resposta.
  • Declarar o uso do conteúdo (Content Signals): procura uma linha Content-Signal completa, que cubra ai-train, search e ai-input.

Os pontos em aberto mostram o botão Copiar prompt do agente direto na linha; os pontos cumpridos só o mostram depois que você expande a linha, junto com o texto encontrado. Para um ponto em aberto, o prompt descreve o que criar, mostra o estado atual com curl e dá um comando para conferir o resultado. Para um ponto cumprido, ele pede ao seu assistente de código que revise o que existe, altere só o necessário e pergunte a você antes de remover uma regra que não entenda. Decisões como permitir ou bloquear crawlers de IA continuam com você, e alguns prompts de pontos em aberto sugerem valores de exemplo; por isso, decida primeiro e leia o prompt antes de colá-lo no Claude Code, no Cursor, no GitHub Copilot ou no ChatGPT. Depois clique em Verificar de novo para analisar outra vez. Os relatórios ficam em cache por até 24 horas, e Verificar de novo força uma execução nova (algumas vezes por hora).

O SEOgrinder é franco sobre o grupo “Extras”: são sugestões de fabricantes individuais, e um efeito no Google não está comprovado. A ferramenta também não mede se o ChatGPT, o Gemini ou o Perplexity de fato mencionam a sua marca. Ela verifica a base técnica: as máquinas conseguem acessar e ler a sua página?

Vale o esforço?

Depende do que o seu site oferece. Documentação, páginas de referência, guias longos e bases de conhecimento são o tipo de conteúdo que os agentes buscam para responder a uma pergunta concreta, e uma versão limpa em Markdown é útil nesses casos. Para uma loja pequena ou um negócio local com cinco páginas, o tempo é mais bem gasto no básico: texto presente no HTML sem JavaScript, um robots.txt que deixe os bots de busca entrarem e um sitemap.

Sobre os recursos de IA do próprio Google, o Google diz que não há requisitos adicionais para aparecer nas AI Overviews ou no AI Mode, nem otimizações especiais necessárias; os detalhes estão na documentação do Google. Uma versão em Markdown, portanto, não é requisito ali. Outros assistentes podem se comportar de outra forma, mas ninguém pode prometer que um assistente de IA vai citar a sua página.

Erros comuns

  • Nenhum cabeçalho Vary. Sem Vary: Accept, um cache ou uma CDN pode servir a versão errada ao próximo visitante.
  • Um cache à frente que ignora o cabeçalho. Teste pelo endereço público, não só diretamente no servidor de origem.
  • Markdown para navegadores. Se a sua verificação trata o curinga */* como pedido de Markdown, os visitantes veem texto cru. Teste com um navegador comum.
  • Nenhum link canonical. A versão em Markdown pode então ser tratada como uma página separada. Escolhemos o cabeçalho canonical em vez de noindex porque a versão negociada fica no mesmo endereço da página.
  • Uma versão em Markdown que diz outra coisa. Mantenha o conteúdo igual ao da página HTML, só que sem a moldura. Não temos fonte sobre como os mecanismos de busca tratam diferenças entre as duas, então mantenha-as idênticas.
  • Um arquivo desatualizado. Um index.md escrito à mão que lista a oferta do ano passado leva os agentes ao erro. Gere-o a partir da fonte da página ou coloque-o na sua lista de conferência.
  • Uma página HTML vazia. Se o próprio HTML não tem texto até o JavaScript rodar, o Markdown para agentes não resolve o problema dos outros clientes, como as pré-visualizações de redes sociais. O SEOgrinder aponta as páginas que só são montadas no navegador.

Perguntas frequentes

Markdown para agentes de IA é um fator de ranking?

Não há evidência disso. Veja-o como um formato de entrega para máquinas, não como alavanca de ranking.

O ChatGPT, o Claude ou o Perplexity pedem Markdown?

A Cloudflare escreve que agentes de programação como o Claude Code e o OpenCode já enviam Accept: text/markdown. Para os crawlers de busca dos grandes provedores, não há documentação de que eles peçam Markdown; os dados do Radar da Cloudflare mostram respostas em Markdown ao OAI-SearchBot, o que não prova um cabeçalho de requisição. Portanto, não está comprovado.

Preciso da Cloudflare?

Não. A Cloudflare oferece a conversão como recurso (em beta, nos planos Pro, Business e Enterprise). O esboço em Node acima mostra que poucas linhas de código no servidor bastam, e as mesmas regras podem ser implementadas em qualquer servidor ou framework.

Devo usar negociação de conteúdo ou um endereço .md separado?

Dá para fazer as duas coisas. Um endereço fixo como /index.md é fácil de linkar e de testar. A negociação mantém um único endereço para os dois públicos. O seogrinder.com oferece ambos na página inicial.

Os visitantes comuns chegam a ver a versão em Markdown?

Não, se você seguir a regra do curinga: o Markdown só é enviado quando text/markdown é citado explicitamente e não tem peso menor do que text/html.

Seu próximo passo

Faça a verificação gratuita no SEOgrinder e abra a aba Preparação para IA. Olhe as três linhas de Extras sobre Markdown, Link Headers e Content Signals e decida se o seu site é do tipo que os agentes leem. Se for, copie o prompt do agente, deixe o assistente fazer a alteração, confira o resultado com curl e verifique de novo.

Mais artigos do blog