Rastreadores de IA: visitas do GPTBot e do ClaudeBot medidas e bloqueio com robots.txt e nginx

Um crawler de IA é um bot que as empresas de IA usam para coletar páginas da web para treinar modelos, alimentar a busca com IA e responder a perguntas de usuários. Para ver com que frequência esses bots visitam um servidor com Nginx + Apache, comparamos os UAs de 14 dias de logs de acesso do servidor de origem com as faixas de IP que cada empresa publica: as requisições vindas das faixas oficiais somaram 18.605, e reunimos as configurações para bloqueá-los ou permiti-los no robots.txt e no nginx conforme a documentação oficial.
O período é de 4 a 17 de outubro de 2026; requisições respondidas pelo cache na frente, que nunca chegaram ao servidor de origem, e requisições cujo IP real não foi registrado não entram nos números.
1️⃣ Identificar crawlers de IA: UAs no log de acesso e faixas de IP publicadas
Nem toda requisição registrada como GPTBot vem da OpenAI. O UA é um texto que quem faz a requisição escreve e envia, então qualquer um pode fazer requisições com o nome GPTBot ou ClaudeBot.
Por isso, primeiro contamos as requisições por nome de bot pelo UA e depois as comparamos com as faixas de IP que cada empresa publica. Abaixo estão os nomes de bots de IA contados em um dia de logs.
grep -oiE '(GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-User|Claude-SearchBot|PerplexityBot|Perplexity-User|Bytespider|CCBot|Amazonbot|meta-externalagent)/' access.log-20261018 | sort | uniq -c | sort -rn 2968 GPTBot/
2084 ClaudeBot/
622 meta-externalagent/
535 Amazonbot/
167 PerplexityBot/
99 OAI-SearchBot/
30 ChatGPT-User/
21 Claude-User/
17 Claude-SearchBot/
12 Meta-ExternalAgent/
10 Perplexity-User/
7 CCBot/Contar com [/] depois do nome deixa de fora texto que não é nome, como o endereço de contato claudebot@ dentro do UA do Claude-SearchBot, e nomes registrados com maiúsculas e minúsculas diferentes são contados à parte. Em seguida, conferimos na primeira coluna de quais IPs vieram as requisições do GPTBot.
grep 'GPTBot/' access.log-20261018 | awk '{print $1}' | sort | uniq -c | sort -rn | head -5 2524 74.7.x.x
428 185.152.x.x
12 34.53.x.x
1 74.7.x.x
1 172.182.x.xEm requisições que passaram por um CDN ou proxy, a primeira coluna registra o endereço do servidor intermediário, então compare essas linhas usando o endereço da coluna X-Forwarded-For no fim da linha do log. A OpenAI publica as faixas de IP do GPTBot como arquivo JSON.
curl -s https://openai.com/gptbot.json -o gptbot.jsonSe um IP está no arquivo de faixas baixado dá para conferir com o ipaddress, um módulo padrão do Python.
# inrange.py — confere se um IP está num arquivo de faixas JSON
import json, sys, ipaddress
nets = [ipaddress.ip_network(p.get('ipv4Prefix') or p.get('ipv6Prefix')) for p in json.load(open(sys.argv[1]))['prefixes']]
for a in sys.argv[2:]:
ip = ipaddress.ip_address(a)
print(a, 'IN' if any(ip in n for n in nets) else 'OUT')Coloque os IPs a conferir depois do nome do arquivo de faixas.
python3 inrange.py gptbot.json 74.7.x.x 34.53.x.x74.7.x.x IN
34.53.x.x OUTO IP que enviou 2.524 requisições estava dentro das faixas publicadas, e o que enviou 12 estava fora. Anthropic, Perplexity, Apple, Common Crawl, Google e Bing publicam arquivos de faixas no mesmo formato, e para o Amazonbot conferimos se o DNS reverso termina em crawl.amazonbot.amazon. É como o controle de passaportes no aeroporto, que confere o passaporte e não o nome no cartão de embarque.
Comparando 14 dias desse jeito, vimos que 70 IPs se revezaram em 23 nomes de bot, entre eles GPTBot, ClaudeBot e Googlebot, para enviar 48.041 requisições, 57% delas para URLs que procuravam vulnerabilidades, como .php ou .env. Todas as 809 requisições com o nome Google-Extended também vieram desse grupo; pela documentação do Google, o Google-Extended é um token só do robots.txt, sem UA usado em requisições HTTP.
2️⃣ Visitas por UA: 14 dias de medições e tendência semanal
A tabela abaixo mostra as requisições dos 14 dias de 4 a 17 de outubro. Para bots com faixas publicadas, contamos só as requisições de dentro das faixas; os bots que não comparamos com faixas foram contados pelo UA, sem o grupo de imitadores.
| Bot | Empresa | Requisições (14 dias) | Como foi verificado | Grupo de imitadores |
|---|---|---|---|---|
| ClaudeBot | Anthropic | 10,305 | Faixas de IP publicadas | 2,387 |
| PerplexityBot | Perplexity | 3,406 | Faixas de IP publicadas | 2,262 |
| GPTBot | OpenAI | 2,546 | Faixas de IP publicadas | 2,328 |
| OAI-SearchBot | OpenAI | 1,399 | Faixas de IP publicadas | 2,347 |
| ChatGPT-User | OpenAI | 334 | Faixas de IP publicadas | 2,409 |
| Applebot | Apple | 330 | Faixas de IP publicadas | 2,372 |
| CCBot | Common Crawl | 275 | Faixas de IP publicadas | 2,275 |
| Claude-User | Anthropic | 10 | Faixas de IP publicadas | 2,192 |
| Claude-SearchBot | Anthropic | 0 | Faixas de IP publicadas | 2,297 |
| Perplexity-User | Perplexity | 0 | Faixas de IP publicadas | 2,235 |
| Meta-ExternalAgent | Meta | 14,384 | UA | 2,339 |
| Bytespider | ByteDance | 6,569 | UA | 2,336 |
| Amazonbot | Amazon | 3,493 | UA · DNS reverso | 2,379 |
| Googlebot (para comparação) | 10,545 | Faixas de IP publicadas | 3,951 | |
| bingbot (para comparação) | Microsoft | 13,477 | Faixas de IP publicadas | 1,551 |
Entre os crawlers de IA verificados pelas faixas publicadas, o ClaudeBot teve mais requisições, 10.305, seguido do PerplexityBot com 3.406 e do GPTBot com 2.546. Claude-SearchBot e Perplexity-User tiveram zero requisições das faixas publicadas; todas as requisições com esses nomes vieram do grupo de imitadores.
Mesmo depois de filtrar os imitadores, os bots que não foram comparados com faixas continuam sendo um problema. O Meta-ExternalAgent teve mais requisições pelo UA, 14.384, mas a documentação dos crawlers da Meta que consultamos não tem lista de faixas de IP, então ele foi contado só pelo UA.
Semana a semana, o GPTBot oscilou entre 12 e 3.383 requisições, enquanto o ClaudeBot ficou entre 6.930 e 10.217 nas cinco semanas.
3️⃣ Quais URLs eles buscam: tipos de URL e códigos de resposta
Os crawlers de IA não buscam só o texto dos posts. Nos 14 dias, 21% das requisições do Meta-ExternalAgent foram de imagens, enquanto o GPTBot das faixas publicadas pediu o feed RSS 476 vezes e o ClaudeBot pediu o sitemap 314 vezes.
Eles também coletam as URLs das versões em outros idiomas: das faixas publicadas, 1.111 requisições do ClaudeBot e 436 do GPTBot foram para posts em outros idiomas. Os códigos de resposta podem ser contados direto em um dia de logs.
grep 'ClaudeBot/' access.log-20261018 | awk '{print $9}' | sort | uniq -c | sort -rn | head -4 1357 200
665 301
31 304
21 404Mesmo em um dia só, quase um terço é 301, e nos 14 dias 5.915 (57%) das 10.305 requisições do ClaudeBot das faixas publicadas foram 301. Dessas, 4.736 eram requisições sem a [/] final, então o WordPress respondeu com 301 para a URL com [/] e o mesmo post foi requisitado mais uma vez.
4️⃣ Configuração do robots.txt: tokens de treinamento e de busca
O robots.txt serve para bots de treinamento e de busca que coletam automaticamente, mas não para bots que buscam uma página quando o usuário faz uma pergunta. A documentação da OpenAI e da Perplexity avisa que as regras do robots.txt podem não valer para requisições do ChatGPT-User e do Perplexity-User.
Cada empresa divide seus tokens por finalidade e, pela documentação da OpenAI, bloquear um token não afeta a configuração dos outros. Abaixo estão os tokens confirmados na documentação oficial de cada empresa.
| Token do robots.txt | Empresa | Uso | Se bloquear (documentação oficial) |
|---|---|---|---|
| GPTBot | OpenAI | Coleta para treinamento | Sinal para não usar em treinamento |
| OAI-SearchBot | OpenAI | Busca do ChatGPT | Fica fora das respostas da busca do ChatGPT (ainda pode aparecer como link de navegação) |
| ChatGPT-User | OpenAI | Requisição do usuário | As regras do robots.txt podem não valer |
| ClaudeBot | Anthropic | Coleta para treinamento | Material posterior fica fora dos dados de treinamento |
| Claude-SearchBot | Anthropic | Melhorar a qualidade da busca | A visibilidade nos resultados de busca pode cair |
| Claude-User | Anthropic | Requisição do usuário | Não busca páginas para perguntas de usuários |
| PerplexityBot | Perplexity | Busca (não treinamento) | Fica fora dos resultados de busca |
| Perplexity-User | Perplexity | Requisição do usuário | Em geral não segue o robots.txt |
| Google-Extended | Treinamento · grounding do Gemini | Sem efeito na visibilidade ou no ranking na Pesquisa Google | |
| Applebot-Extended | Apple | Treinamento de modelos de base | Sem efeito na visibilidade na busca da Apple |
| meta-externalagent | Meta | Treinamento de modelos de IA etc. | Bloqueado com Disallow (exemplo da documentação) |
Google-Extended e Applebot-Extended não são bots de coleta separados, e sim tokens usados só no robots.txt. Quem coleta são os crawlers já existentes do Google e da Apple, e esses tokens só decidem se o conteúdo coletado pode ser usado para treinar modelos de IA.
Um robots.txt que recusa só a coleta para treinamento e mantém a visibilidade na busca com IA fica assim; a documentação da OpenAI, da Perplexity e da Meta diz que as mudanças podem levar até 24 horas para valer.
# recusa a coleta para treinamento
User-agent: GPTBot
Disallow: /
User-agent: ClaudeBot
Disallow: /
User-agent: Google-Extended
Disallow: /
User-agent: Applebot-Extended
Disallow: /
User-agent: meta-externalagent
Disallow: /
# permite os bots de busca com IA
User-agent: OAI-SearchBot
Allow: /
User-agent: Claude-SearchBot
Allow: /
User-agent: PerplexityBot
Allow: /O robots.txt atual do servidor Nginx + Apache não tem linhas que citem bots de IA.
curl -s https://example.com/robots.txt# vale para todos os bots de buscadores
User-agent: *
# bloqueia as páginas de administração (segurança)
Disallow: /wp-admin/
# permite as chamadas ajax das funções de administração (necessário para o funcionamento normal)
Allow: /wp-admin/admin-ajax.php
# adicionado: bloqueia resultados de busca com spam (proteção de SEO)
Disallow: /search/
Disallow: /?s=
# indica o sitemap (indexação mais rápida)
Sitemap: https://example.com/sitemap_index.xmlSem linhas para bots de IA, as 2.546 requisições do GPTBot das faixas publicadas nos 14 dias não receberam nenhum 403: 2.090 foram respondidas com 200 e 432 com 301. No mesmo período, as requisições de robots.txt das faixas publicadas nos logs de origem foram 36 do Googlebot, 8 do ClaudeBot e 6 do OAI-SearchBot, e nenhuma do GPTBot ou do PerplexityBot. Requisições de robots.txt respondidas pelo cache na frente também não aparecem nos logs de origem.
5️⃣ Bloquear crawlers de IA no nginx e seus limites
Mesmo bloqueando no robots.txt, as requisições que não leem as regras chegam direto ao servidor. No nginx, o [map] põe 1 numa variável quando o UA contém o nome de um bot.
# dentro do bloco http — 1 se o nome de um bot de treinamento estiver no UA
map $http_user_agent $ai_train_bot {
default 0;
~*GPTBot/ 1;
~*ClaudeBot/ 1;
~*Bytespider 1;
~*CCBot/ 1;
}No bloco server, devolva 403 quando essa variável for 1.
# dentro do bloco server
location / {
if ($fake_searchbot) {
return 403;
}
if ($ai_train_bot) {
return 403;
}
# configurações existentes abaixo
}O bloqueio por UA só confere o nome, então requisições falsas são bloqueadas junto com o bot real quando usam o mesmo nome e passam assim que o trocam. Requisições que usam o nome de um bot de busca que você permite só podem ser filtradas pela comparação com as faixas de IP publicadas.
Para permitir o OAI-SearchBot e recusar só as requisições com o mesmo nome vindas de fora das faixas dele, transforme as faixas publicadas numa variável com [geo] e compare junto com o UA.
# dentro do bloco http — faixas publicadas do OAI-SearchBot (coloque o searchbot.json inteiro; abaixo só duas linhas)
geo $oai_search_net {
default 0;
104.210.140.128/28 1;
135.234.64.0/24 1;
}
map $http_user_agent:$oai_search_net $fake_searchbot {
default 0;
~*OAI-SearchBot/.*:0$ 1;
}Se houver um CDN ou proxy na frente, o endereço que o [geo] vê é o do servidor intermediário, então restaure o IP real com real_ip antes de comparar. A documentação da Anthropic avisa que bloquear por endereço IP também impede o bot de ler o robots.txt, então o sinal de recusa pode não chegar direito.
Não colocamos essa configuração no servidor em produção; só verificamos a sintaxe com um arquivo de configuração de teste.
nginx -t -p ./ -c nginx-test/nginx.confnginx: the configuration file ./nginx-test/nginx.conf syntax is ok
nginx: configuration file ./nginx-test/nginx.conf test is successfulComo só a sintaxe do exemplo foi verificada, não conferimos as respostas 403; nos 14 dias de logs, 2.347 das 3.937 requisições com o nome OAI-SearchBot vieram do grupo de imitadores, fora das faixas publicadas.
6️⃣ Cobrar dos crawlers de IA: Pay per crawl e Web Bot Auth
O Pay per crawl é um recurso do Cloudflare AI Crawl Control que permite aos donos de sites definir um preço por zona e cobrar por cada requisição de crawler de IA. Pela documentação oficial consultada em 18 de outubro de 2026, está em beta privado, e a Cloudflare processa o pagamento como Merchant of Record.
Crawlers que enviam a intenção de pagar num cabeçalho da requisição recebem uma resposta 200, e os outros recebem uma resposta [402 Payment Required] com o preço. Se o mesmo crawler for bloqueado com WAF ou Bot Management, a regra de bloqueio tem prioridade sobre a cobrança.
Crawlers que querem pagar precisam provar quem são com o Web Bot Auth. No Web Bot Auth, o bot assina as requisições com uma chave Ed25519 e publica a chave pública em [/.well-known/http-message-signatures-directory], para que o lado que recebe possa verificar a assinatura.
A assinatura vai em três cabeçalhos, [Signature-Agent], [Signature-Input] e [Signature], e identifica o bot por assinatura criptográfica em vez de faixas de IP. O formato padrão do log de acesso do servidor de origem não registra cabeçalhos de requisição, então não conferimos se as requisições de crawlers de IA nos 14 dias tinham assinatura.
As 18.605 requisições de crawlers de IA verificadas pelas faixas de IP publicadas nos 14 dias equivaleram a 77% das 24.022 requisições que o Googlebot e o bingbot enviaram das faixas publicadas no mesmo período. Colocar ou não tokens de treinamento no robots.txt é uma decisão a tomar com os números sem os imitadores, e somar a comparação de faixas a uma contagem semanal de logs permite acompanhar a tendência.
🔢 FAQ & conteúdo recomendado




ℹ️ Aviso de afiliados
O conteúdo deste site contém links de afiliados. Quando um visitante compra um produto ou serviço por meio de um desses links, o site recebe uma comissão do vendedor. O valor que o comprador paga (em promoções, ele diminui ↓) não aumenta por causa disso. Preços, descontos e informações de estoque valem para o momento em que o texto foi escrito e podem ter mudado, por isso confirme com o vendedor antes de comprar. Os produtos são escolhidos e avaliados por critérios próprios, e o recebimento de comissão não influencia a ordem de apresentação nem o conteúdo das avaliações.