Módulo 2: Descoberta para agentes de IA: robots.txt, sitemap, Link e DNS-AID | Curso O4AI

Módulo 2 · Curso O4AI

Descoberta: robots.txt, sitemap, Link e DNS-AID

Antes de ler ou agir, um agente precisa saber o que existe. Este módulo cobre os quatro mecanismos de descoberta que os scanners verificam, do mais antigo (robots.txt, de 1994) ao mais novo (DNS-AID, rascunho de 2026), e mostra como eles se encadeiam para que um agente vá do domínio até a API certa sem adivinhar.

RFC 9309 sitemaps.org RFC 8288 RFC 8615 DNS-AID SVCB

Aula 1

robots.txt (RFC 9309) como porta de entrada

O robots.txt nasceu em 1994 como convenção informal e virou padrão em 2022, com a RFC 9309 (Robots Exclusion Protocol). Ele fica sempre na raiz do host, em /robots.txt, e é o primeiro arquivo que crawlers e muitos agentes buscam. Para O4AI ele tem três funções: dizer o que pode ser rastreado, apontar o sitemap e, como você verá no módulo 4, declarar preferências de uso por IA.

O que a RFC 9309 define

  • O arquivo é agrupado por linhas User-agent, seguidas de regras Allow e Disallow. Um crawler segue o grupo cujo nome casa com o seu, e o grupo * só se nada mais casar.
  • Quando duas regras casam, vale a mais específica (o caminho mais longo). Em empate entre Allow e Disallow, vale o Allow.
  • Os curingas * (qualquer sequência) e $ (fim do caminho) são suportados.
  • O arquivo deve ser servido como text/plain em UTF-8. Respostas 4xx significam "sem restrições"; erros 5xx significam "não rastreie" até o arquivo voltar.
  • Crawlers devem processar pelo menos 500 KiB do arquivo e podem fazer cache por até 24 horas.

robots.txt mínimo e válido

# https://exemplo.com.br/robots.txt
User-agent: *
Allow: /
Disallow: /admin/
Disallow: /carrinho
Disallow: /*?sessao=

Sitemap: https://exemplo.com.br/sitemap.xml

Um ponto que confunde: o robots.txt é um pedido, não um controle de acesso. Ele não impede um bot de acessar nada, e listar caminhos sensíveis em Disallow só serve para mostrá-los a quem lê o arquivo. Área privada se protege com autenticação. O robots.txt organiza o comportamento dos bots que respeitam regras, e é esse comportamento que os scanners de O4AI medem.

O que o scanner verifica

Que /robots.txt responde 200, com tipo text/plain, e que tem pelo menos uma diretiva User-agent válida. É a checagem mais fácil de passar e, segundo a Cloudflare, 78% dos grandes domínios já passam.

Fontes desta aula: RFC 9309: Robots Exclusion Protocol

Aula 2

Sitemap XML e a referência no robots.txt

O sitemap é um arquivo XML que lista as URLs que você quer que sejam encontradas, com metadados como a data da última modificação. O protocolo é mantido em sitemaps.org desde 2006 e é aceito por todos os grandes buscadores. Para um agente, o sitemap é a forma mais barata de ter uma visão completa do site sem rastrear link por link.

sitemap.xml

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://exemplo.com.br/curso-o4ai.html</loc>
    <lastmod>2026-11-11</lastmod>
  </url>
</urlset>

Regras que fazem diferença

  • Cada arquivo aceita até 50 mil URLs e 50 MB sem compressão. Acima disso, use um sitemap index que aponta para vários arquivos (o relatório de exemplo deste curso mostra um site com sitemap.xml e um segundo sitemap temático).
  • Use URLs absolutas e canônicas. Uma URL no sitemap que redireciona ou devolve 404 ensina o agente a desconfiar do arquivo.
  • lastmod só ajuda se for verdadeiro. Datas que mudam a cada build sem mudança de conteúdo fazem o crawler ignorar o campo.
  • Referencie o sitemap no robots.txt com a linha Sitemap:, que pode aparecer várias vezes e fica fora dos grupos de user-agent.

Para agentes, vale pensar no sitemap junto com os formatos do módulo 3. Se cada página tem uma versão Markdown, o llms.txt funciona como um "sitemap comentado" para modelos, e o sitemap XML continua sendo a lista completa e verificável.

Fontes desta aula: sitemaps.org: Sitemaps XML format

Aula 3

Cabeçalhos Link (RFC 8288): descoberta em cada resposta

A RFC 8288 (Web Linking) define o cabeçalho HTTP Link, que expressa a mesma ideia do elemento <link> do HTML, mas em qualquer resposta, inclusive em JSON, PDF ou imagem. Cada link tem um destino e um tipo de relação (rel). Para um agente, o cabeçalho Link é valioso porque aparece em uma simples requisição HEAD, sem precisar baixar e interpretar o HTML.

Resposta da página inicial com cabeçalhos Link

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Link: </.well-known/api-catalog>; rel="api-catalog"; type="application/linkset+json",
      </llms.txt>; rel="describedby"; type="text/plain",
      </index.md>; rel="alternate"; type="text/markdown",
      </.well-known/agent-skills/index.json>; rel="agent-skills"; type="application/json"

Relações mais usadas em O4AI

relAponta paraOrigem
api-catalogO catálogo de APIs em /.well-known/api-catalogRFC 9727
service-descDescrição legível por máquina de uma API (ex.: OpenAPI)RFC 8631
service-docDocumentação para humanos da APIRFC 8631
describedbyUm recurso que descreve o atualRegistro IANA
alternateOutra representação, como a versão MarkdownHTML / IANA
sitemapO sitemapUsado em linksets
agent-skillsO índice de Agent SkillsProposta Agent Skills discovery
mcpO MCP Server CardProposta de comunidade

A checagem dos scanners é simples: a página inicial precisa ter pelo menos um cabeçalho Link útil para agentes. No relatório que inspirou este curso, a falha "No Link headers found on target page" é uma das mais comuns, porque o HTML costuma ter <link rel="alternate">, mas o servidor não envia o cabeçalho equivalente.

O cabeçalho Link conecta este módulo aos outros. Ele aponta para o API Catalog (módulo 5), para o índice de skills e o Server Card (módulo 6) e para a versão Markdown (módulo 3). Pense nele como o "índice remissivo" do site, entregue em cada resposta.

Cuidado com o tamanho

Cabeçalhos muito grandes podem ser cortados por proxies e CDNs. Mantenha no cabeçalho só as relações de descoberta mais importantes e coloque o resto no API Catalog, que é um linkset em JSON feito para isso.

Fontes desta aula: RFC 8288: Web Linking · RFC 8631: Link Relation Types for Web Services · RFC 8615: Well-Known URIs

Aula 4

DNS-AID: descoberta de agentes pelo DNS

Todos os mecanismos anteriores dependem de uma requisição HTTP. O DNS-AID (DNS for AI Discovery) propõe que a descoberta comece um passo antes, no DNS, que é distribuído, tem cache em todo lugar e pode ser assinado com DNSSEC. A proposta é o rascunho draft-mozleywilliams-dnsop-dnsaid na IETF, escrito por autores da Infoblox, da Deutsche Telekom e independentes. É um rascunho individual: ainda não é padrão e muda entre versões.

Os nomes

O rascunho reserva o rótulo _agents sob o domínio da organização e define nomes previsíveis:

  • _index._agents.exemplo.com.br: ponto de entrada, que leva ao índice dos agentes da organização.
  • _mcp._agents.exemplo.com.br: serviços que falam MCP.
  • _a2a._agents.exemplo.com.br: agentes que falam A2A.
  • <id>._mcp._agents.exemplo.com.br: um serviço específico, com apelidos amigáveis apontando para ele.

Os registros

O DNS-AID não cria tipos novos de registro. Ele usa SVCB e HTTPS (RFC 9460), os mesmos registros que navegadores já consultam para descobrir HTTP/3. Em ServiceMode (prioridade maior que zero), o registro aponta o host do serviço e carrega parâmetros como alpn (protocolos aceitos) e port. Em AliasMode (prioridade zero), funciona como apelido.

Zona DNS com DNS-AID (adaptado dos exemplos do rascunho)

; ponto de entrada
_index._agents.exemplo.com.br. 3600 IN SVCB 1 agentes.exemplo.com.br. (
    alpn="h2,h3" port=443 )

; servidor MCP
_mcp._agents.exemplo.com.br. 3600 IN HTTPS 1 mcp.exemplo.com.br. (
    alpn="h3,h2" port=443 mandatory="alpn,port" )

; apelido para um serviço específico
faturamento._mcp._agents.exemplo.com.br. 300 IN SVCB 0 a4k2f9._mcp._agents.exemplo.com.br.

O rascunho também prevê chaves de parâmetro próprias, ainda com números provisórios (como key65001 para uma URN de capacidade e key65010 para os protocolos aceitos), um registro TXT de desafio para validar o domínio e o uso opcional de TLSA (DANE) para fixar o certificado.

DNSSEC é obrigatório

O texto é explícito: uma zona pública usada para descoberta de agentes deve usar DNSSEC, e o agente deve usar um resolvedor que valide as assinaturas e tratar respostas inválidas como falha. A razão é que um registro forjado no DNS mandaria o agente para um servidor MCP falso, que poderia receber dados ou instruções maliciosas.

Como o scanner testa

No relatório de exemplo, o scanner faz consultas DoH (DNS sobre HTTPS) por SVCB, HTTPS e TXT em _index._agents, _a2a._agents e _mcp._agents, com e sem www. Respostas NXDOMAIN em todas resultam em "DNS-AID well-known entrypoint records not found". Você pode reproduzir com:

dig +short _index._agents.exemplo.com.br SVCB
dig +short _mcp._agents.exemplo.com.br HTTPS
curl -s -H 'accept: application/dns-json' \
  'https://cloudflare-dns.com/dns-query?name=_index._agents.exemplo.com.br&type=SVCB'

Vale implementar?

Se você não tem um servidor MCP ou agente A2A público, não há o que anunciar e o DNS-AID não faz sentido ainda. Se tem, o custo é baixo (alguns registros e DNSSEC ligado), mas lembre que o rascunho pode mudar nomes e parâmetros. Documente a versão que você seguiu.

Fontes desta aula: IETF: draft-mozleywilliams-dnsop-dnsaid · RFC 9460: SVCB e HTTPS · specification.website: DNS-AID

Erros comuns na descoberta

  • robots.txt servido como HTML. Frameworks de página única devolvem o index.html para qualquer caminho. O scanner vê status 200, mas o conteúdo é inválido.
  • Sitemap com URLs que redirecionam. Comum depois de migração de http para https ou de mudança de barra final.
  • Link apenas no HTML. O agente que faz HEAD ou que pede Markdown nunca vê o <link> do HTML. Envie o cabeçalho.
  • DNS-AID sem DNSSEC. Pelo rascunho, registros não assinados não devem ser usados pelo agente. Publicar sem DNSSEC é trabalho perdido.
  • Bloquear tudo no robots.txt por medo de IA. Um Disallow: / para * tira o site também do buscador. As regras por finalidade ficam no módulo 4.

Aplicação prática: monte a camada de descoberta

  1. Valide o robots.txt: status 200, text/plain, grupo * e linha Sitemap:.
  2. Confira que todas as URLs do sitemap respondem 200 e são canônicas. Um script com curl em laço resolve.
  3. Adicione na página inicial o cabeçalho Link com pelo menos rel="alternate"; type="text/markdown" (que você implementa no módulo 3) e, se tiver API, rel="api-catalog".
  4. Se você já tem um servidor MCP público, ligue o DNSSEC e publique _mcp._agents e _index._agents.

Siglas e termos deste módulo

DNS-AID:
DNS for AI Discovery, descoberta de agentes via DNS.
SVCB:
Service Binding, registro DNS que descreve como se conectar a um serviço (RFC 9460).
DNSSEC:
DNS Security Extensions, assinaturas criptográficas para respostas DNS.
DoH:
DNS over HTTPS, consultas DNS feitas por HTTPS.
ALPN:
Application-Layer Protocol Negotiation, lista de protocolos aceitos (h2, h3).
DANE / TLSA:
Mecanismo para publicar no DNS o certificado esperado de um serviço.
IANA:
Internet Assigned Numbers Authority, que mantém os registros de nomes e parâmetros.

Perguntas frequentes

O robots.txt impede que uma IA leia meu site?
Não. Ele é um pedido que bots bem-comportados seguem. Não é controle de acesso. Para impedir de fato, é preciso bloquear no servidor ou CDN, de preferência com identificação verificável, como Web Bot Auth.
Preciso de sitemap se meu site é pequeno?
É recomendado. Ele custa pouco, ajuda buscadores e agentes a ter a lista completa de páginas e é uma das checagens básicas de prontidão.
Qual a diferença entre o cabeçalho Link e a tag link do HTML?
O conteúdo é equivalente, mas o cabeçalho aparece em qualquer resposta HTTP, inclusive em HEAD e em formatos que não são HTML. Para agentes, que muitas vezes não interpretam o HTML, o cabeçalho é mais confiável.
DNS-AID já é padrão?
Não. É um rascunho individual na IETF, em evolução. Implemente apenas se você tiver serviços de agente para anunciar, com DNSSEC, e acompanhe as versões.
Posso testar DNS-AID sem mexer na zona de produção?
Sim. Use um subdomínio de teste com DNSSEC e consulte os registros com dig ou DoH. Os registros SVCB e HTTPS já são suportados pela maioria dos provedores de DNS modernos.