Pular para o conteúdo
Segurança de rede

Você deve bloquear rastreadores de IA? Decida por bot, aplique por IP

Bloqueie rastreadores de IA pela função: barre os bots de treinamento, mantenha os bots de busca com IA e responda 403 a GPTBots falsos verificando o IP. Inclui código nginx e Express testado.

PorEquipe GeoIPHubPublicadoTempo de leitura26 min de leitura
Um portão de luz com uma lente de checagem, um nó passando e outro retido, representando a verificação do IP de um rastreador de IA antes de decidir bloqueá-lo

Seu log de acesso mostra GPTBot, ClaudeBot e alguns nomes que você não reconhece. Os guias que você encontra dizem todos a mesma coisa: liste os User-Agents no robots.txt e depois bloqueie as mesmas strings na configuração do servidor.

Esse conselho tem uma falha. Um User-Agent é uma string que o cliente digita, e digitar "GPTBot" não custa nada. Uma lista de bloqueio de nomes barra bots honestos, que teriam obedecido ao robots.txt de qualquer forma, e deixa passar todo scraper que toma emprestado um nome que você permitiu. O nome é uma alegação e o IP é a prova, o mesmo princípio da detecção de bots por IP em geral.

A seguir, classificamos os bots por função, mostramos o que o robots.txt pode e não pode fazer, passamos quatro endereços reais de rastreadores pela nossa API e entregamos uma política em três camadas com código nginx e Express testado. Um GPTBot falsificado recebe 403. Um Googlebot real nunca recebe.

Três camadas translúcidas empilhadas com um feixe passando, sendo desviado e desacelerando, representando uma política de rastreadores em três camadas: robots.txt, IP verificado e limitação de taxa
Três camadas: peça com educação, verifique o IP e depois limite a taxa do resto.

Você deve bloquear rastreadores de IA? Depende da função do bot

Você deve bloquear os rastreadores de IA cuja função você rejeita e manter os que enviam leitores para você. Bots de IA fazem três trabalhos diferentes, e bloquear cada um custa algo diferente.

  • Rastreadores de treinamento coletam páginas que podem treinar modelos futuros. A OpenAI diz que bloquear o GPTBot "indica que o conteúdo de um site não deve ser usado no treinamento de modelos de fundação de IA generativa". Bloqueá-los não custa nada na busca.
  • Bots de busca com IA indexam páginas para que um assistente possa citá-las. A OpenAI diz que sites que bloquearam o OAI-SearchBot "não serão exibidos nas respostas de busca do ChatGPT". Bloqueá-los custa citações e os cliques que elas trazem.
  • Fetchers acionados por usuários carregam uma página porque uma pessoa pediu a um assistente que a lesse. Bloqueá-los quebra o pedido dessa pessoa.

Um publisher com paywall tem um motivo claro para recusar o treinamento. Uma marca que quer ser recomendada por assistentes deve manter os bots de busca. A maioria dos sites acaba dividida: não ao treinamento, sim à busca e um limite de velocidade para os fetchers. Explicamos qual bot da OpenAI bloquear e quanto custa cada escolha em um post separado. Agentes que fazem compras em nome de um usuário são outro problema, tratado em fraude de agentes de compra com IA no checkout.

Quais bots de IA treinam e quais citam você

Esta tabela classifica por função os bots de IA que você tem mais chance de ver, com o que cada operador diz sobre o robots.txt. Cada célula vem da própria página do operador, aberta em 20 de outubro de 2026.

BotOperadorFunçãorobots.txt, nas palavras do operador
GPTBotOpenAITreinamentoDisallow significa que o conteúdo "não deve ser usado no treinamento"
OAI-SearchBotOpenAIBusca com IASites que bloquearam não aparecem nas respostas de busca do ChatGPT
ChatGPT-UserOpenAIColeta acionada por usuárioAs regras do robots.txt "podem não se aplicar"
ClaudeBotAnthropicTreinamentoRespeita robots.txt e Crawl-delay
Claude-SearchBotAnthropicBusca com IARespeita robots.txt e Crawl-delay
Claude-UserAnthropicColeta acionada por usuárioRespeita robots.txt e Crawl-delay
Google-ExtendedGoogleToken para uso por IA, sem rastreadorApenas um token do robots.txt, sem User-Agent próprio
GooglebotGoogleBusca, não é um bot de IA a bloquearOs rastreadores comuns "sempre obedecem às regras do robots.txt ao rastrear automaticamente"
PerplexityBotPerplexityBusca com IANão informado; a Perplexity recomenda permiti-lo
Perplexity-UserPerplexityColeta acionada por usuário"geralmente ignora as regras do robots.txt"
CCBotCommon CrawlArquivo aberto da web que qualquer pessoa pode baixarConsulta o robots.txt primeiro; obedece ao Crawl-delay
Applebot-ExtendedAppleToken para uso em treinamento de IA, sem rastreadorA Apple diz que ele "não rastreia páginas da web"
Meta-ExternalAgentMetaTreinamento e indexaçãoNão informado; a Meta documenta uma regra Disallow para ele
BytespiderByteDanceNão documentado em nenhuma página que conseguimos abrirNão documentado em nenhuma página que conseguimos abrir

A prova é uma questão separada da política. Um bot só pode ser verificado se seu operador publica de onde ele rastreia:

OperadorArquivo de faixasPrefixos em 20 de outubro de 2026DNS reverso documentadoO GeoIPHub verifica
OpenAIgptbot.json, mais searchbot.json e chatgpt-user.json18, 39 e 234Não documentadoSim, os três
Anthropicbots.json, um arquivo para os três bots38 (arquivo datado de 7 de outubro de 2026)Não documentadoSim, uma correspondência é nomeada ClaudeBot
Googlecommon-crawlers.json e mais quatro317 nos rastreadores comunsSim: googlebot.com, google.com, googleusercontent.comSim
Perplexityperplexitybot.json e perplexity-user.json8 e 4Não documentadoSim
Common Crawlccbot.json5Sim, crawl.commoncrawl.org, apenas IPv4Sim
Appleapplebot.json24Sim, applebot.apple.comSim, para o Applebot
MetaNão publicadoNão publicadoNão documentadoApenas correspondência de ASN, verified: false
ByteDanceNão encontramos nenhumNenhum encontradoNão documentadoNão

Antes de copiar uma lista de outro site, confira os nomes. Alguns guias que ranqueiam para esse tema ainda citam anthropic-ai e Claude-Web, que a página atual da Anthropic não lista, e omitem Claude-SearchBot e Claude-User. Uma lista desatualizada bloqueia strings que ninguém envia.

O que o robots.txt pode e não pode fazer

O robots.txt pode dizer aos bots bem-comportados o que você quer, e não pode impedir nada. A RFC 9309, o padrão que o define, diz: "Essas regras não são uma forma de autorização de acesso." Se ignorá-lo tem consequências legais é uma pergunta para um advogado.

Ele ainda é a primeira camada, porque a maioria dos bots nomeados o lê. Este arquivo recusa o treinamento, acolhe a busca com IA e não mexe na Pesquisa Google:

GeoIPHub API
# Training: no User-agent: GPTBot User-agent: ClaudeBot User-agent: CCBot User-agent: Google-Extended User-agent: Applebot-Extended User-agent: Meta-ExternalAgent User-agent: Bytespider Disallow: / # AI search: yes User-agent: OAI-SearchBot User-agent: PerplexityBot Allow: / # Anthropic honours Crawl-delay (seconds between requests) User-agent: Claude-SearchBot Allow: / Crawl-delay: 2

Quatro detalhes decidem se esse arquivo faz o que você pensa:

  • Google-Extended e Applebot-Extended são tokens, não rastreadores. A página de rastreadores comuns do Google, atualizada em 15 de outubro de 2026, diz que "o Google-Extended não tem uma string de user agent de requisição HTTP separada" e que ele "não afeta a inclusão de um site na Pesquisa Google". Nenhuma requisição chega do Google-Extended, então nenhuma regra de IP pode bloqueá-lo. A página do Applebot da Apple diz que o Applebot-Extended também "não rastreia páginas da web".
  • Bloquear o Googlebot para impedir o uso por IA custa a Pesquisa. O mesmo vale para um grupo User-agent: * com Disallow: /.
  • Fetchers acionados por usuários podem ignorar o arquivo. A OpenAI diz sobre o ChatGPT-User que "as regras do robots.txt podem não se aplicar". A Perplexity diz que o Perplexity-User "geralmente ignora as regras do robots.txt".
  • As mudanças não são instantâneas. A OpenAI diz que "pode levar cerca de 24 horas após a atualização do robots.txt de um site para que nossos sistemas se ajustem".

Arquivos mais novos, como llms.txt e ai.txt, são propostas. Assim como o robots.txt, eles pedem e não aplicam.

O erro oposto é colocar rastreadores de busca em uma lista de bloqueio de "bots de IA". O guia para bloquear rastreadores de IA da Contentstack mostra uma edge function cuja lista de bots inclui googlebot e bingbot ao lado de gptbot e claudebot, e responde a todos eles com "Forbidden: AI crawlers are not allowed." Copiada como está escrita, essa regra tira um site da busca do Google e do Bing. Quem se passa pelo Googlebot é um Googlebot falso, um problema diferente com uma solução diferente.

Rastreador real ou falsificação: como funciona a verificação

Você distingue um rastreador real de uma falsificação comparando o IP de conexão com o que o operador nomeado publica. Qual dos três métodos funciona depende do operador.

  • Arquivos de faixas. OpenAI, Anthropic, Perplexity, Common Crawl, Apple e Google publicam listas JSON de seus prefixos. Para OpenAI e Anthropic, esse é o único método, porque seus endereços não têm DNS reverso.
  • DNS reverso com confirmação direta. O guia de verificação do Google manda resolver o IP para um nome, verificar o domínio e depois resolver o nome de volta e confirmar que ele retorna o mesmo IP. Apple e Common Crawl documentam o mesmo método.
  • Requisições assinadas (Web Bot Auth). Um bot assina cada requisição com uma chave publicada. Ainda é um rascunho, tratado na seção sobre a borda mais abaixo.

Nosso guia sobre como verificar um rastreador de IA por IP cobre os três em detalhe. Consultamos quatro endereços de rastreadores às 04:37 UTC de 20 de outubro de 2026, sem chave. Este é o endereço do ClaudeBot, resumido, com a estrutura aninhada mantida e os valores sem edição:

GeoIPHub API
{ "ip": "216.73.216.10", "asn": { "asn": 16509, "org": "AMAZON-02 - Amazon.com, Inc." }, "threat": { "is_crawler": true, "crawler": { "verified": true, "name": "ClaudeBot", "operator": "Anthropic", "category": "ai", "verification_method": "ip_range_list" } }, "scoring": { "fraud_score": 0, "recommended_action": "allow", "detection_methods": ["datacenter_ip", "no_ptr_datacenter", "verified_crawler"] } }

Os outros três, da mesma execução:

IPcrawler.name / operador / categoriaVerificado, métodoPontuação, açãodetection_methodsASN
132.196.86.1GPTBot / OpenAI / aitrue, ip_range_list0, allowdatacenter_ip, no_ptr_datacenter, verified_crawler8075 MICROSOFT-CORP-MSN-AS-BLOCK
66.249.66.1Googlebot / Google / search_enginetrue, ip_range_list0, allowdatacenter_ip, verified_crawler15169 GOOGLE
107.178.192.1GoogleUserTriggeredFetcher / Google / fetchertrue, ip_range_list0, allowdatacenter_ip, rdns_hosting, verified_crawler396982 GOOGLE-CLOUD-PLATFORM

O endereço do GPTBot é o primeiro host de 132.196.86.0/24, o primeiro prefixo no gptbot.json da OpenAI. Depois pedimos os nomes ao DNS, às 04:45 UTC:

GeoIPHub API
$ dig -x 216.73.216.10 +short # ClaudeBot: NXDOMAIN, no name $ dig -x 132.196.86.1 +short # GPTBot: NXDOMAIN, no name $ dig -x 66.249.66.1 +short crawl-66-249-66-1.googlebot.com. $ dig crawl-66-249-66-1.googlebot.com +short 66.249.66.1

Essa é a constatação que a maioria dos guias deixa passar. ClaudeBot e GPTBot não têm registro PTR, então o DNS reverso não consegue verificá-los. O arquivo de faixas é a única verificação. no_ptr_datacenter dispara nos dois, mas a pontuação continua em 0, porque verified_crawler é um sinal que inocenta. Para esses operadores, a ausência de PTR é normal. O Googlebot passa pelos dois caminhos: seu nome resolve de volta para o mesmo endereço.

Há dois limites. O campo category diz "ai" tanto para bots de IA de treinamento quanto para os demais, então o código de política deve se basear em crawler.name. E a consulta vê apenas um IP, nunca o User-Agent, então a API nunca sinaliza uma falsificação. A comparação entre o nome alegado e o nome comprovado acontece no seu código. Você pode fazer a mesma verificação manualmente na nossa ferramenta de consulta de IP.

Uma política em três camadas: pedir, verificar, limitar

Uma política que se sustenta tem três camadas: pedir com o robots.txt, verificar cada alegação de bot contra seu IP e limitar a taxa do que sobrar. Bloqueie por função, aplique por IP e nunca coloque o Googlebot em uma lista de bloqueio de IA.

Camada 1: pedir. O robots.txt carrega sua decisão por bot, mais o Crawl-delay para os operadores que o respeitam.

Camada 2: verificar. Quando um User-Agent nomeia um bot, consulte o IP de conexão e compare os nomes. Se o IP não pertence àquele bot, a requisição recebe 403. Se pertence, aplique sua decisão da camada 1, de modo que um GPTBot verificado que ignora seu Disallow continue sendo recusado.

Camada 3: limitar. Todo o resto recebe um limite de taxa: requisições que não alegam ser bot, bots que não podem ser verificados e fetchers que agem em nome de uma pessoa.

CasoExemploAção
Bot verificado que você permiteGooglebot a partir de 66.249.66.1Servir normalmente, sem limite de taxa
Bot verificado que você recusou e que continua chegandoGPTBot a partir de 132.196.86.1 com o GPTBot bloqueado403
Alegação não verificada: o UA nomeia um bot e o IP não correspondeUA de GPTBot a partir de 216.73.216.10, um endereço da Anthropic403, ou um desafio se preferir
Bot que não pode ser verificadoBytespider, Meta-ExternalAgentLimitar a taxa; o robots.txt é sua única alavanca
Sem alegação de botNavegadores e scrapers que se passam por navegadoresLimitar a taxa por IP

A terceira linha é a que mais ensina. 216.73.216.10 é um rastreador verificado, só que não aquele que a requisição nomeia, então uma verificação que pergunta apenas "isto é um rastreador verificado?" o deixaria entrar. Compare os nomes. Da mesma forma, 107.178.192.1 é um fetcher verificado do Google, mas uma requisição vinda dele que alega ser o Googlebot não é o Googlebot.

Registre em log cada falha da camada 2. Um endereço fora das faixas publicadas geralmente indica uma falsificação, mas pode ser um prefixo que o operador acabou de adicionar. Nossos arquivos de faixas são baixados novamente todos os dias e o banco de dados de consulta é reconstruído diariamente, então um novo prefixo pode levar até cerca de dois dias para ser verificado.

Aplique no nginx e no Express, com um teste de GPTBot falsificado

A aplicação é um pequeno serviço Express que faz a consulta, mais uma configuração nginx que o consulta sobre toda requisição que alega ser um bot. O nginx padrão não consegue chamar uma API HTTP inline, então o módulo auth_request envia uma subrequisição ao verificador e o nginx guarda a resposta em cache. Sem nginx, o mesmo arquivo protege sozinho um app Express.

O verificador compara o User-Agent com os tokens de bots atuais, consulta o IP com GET https://api.geoiphub.com/v1/lookup/{ip} e o cabeçalho x-api-key, guarda o resultado em cache por uma hora e compara threat.crawler.name com o nome alegado. Ele precisa de um mapa de nomes porque a API escreve alguns nomes sem o hífen: OAISearchBot, ChatGPTUser, PerplexityUser. Veja os campos de rastreador na documentação da API.

GeoIPHub API
// bot-gate.js: tier 2 (verify the IP behind a bot claim) and tier 3 (rate-limit the rest). // Tested with Node 24.20.0, Express 5.3.0 and express-rate-limit 8.7.1. const express = require('express'); const { rateLimit } = require('express-rate-limit'); const { BlockList, isIP } = require('node:net'); const API_KEY = process.env.GEOIPHUB_KEY; // production: always set a key const CACHE_MS = 60 * 60 * 1000; // one hour per IP const cache = new Map(); // ip: { at, crawler } // Your policy: User-Agent tokens you refuse even when verified. Everything verified and not listed passes. const BLOCKED = new Set((process.env.BLOCKED_BOTS || 'GPTBot,ClaudeBot,CCBot').split(',')); // Maps each User-Agent token to the crawler.name our API returns for that operator's range file. // Anthropic publishes one file for all three of its bots, so a match comes back as ClaudeBot. const EXPECTED = { 'GPTBot': 'GPTBot', 'OAI-SearchBot': 'OAISearchBot', 'ChatGPT-User': 'ChatGPTUser', 'ClaudeBot': 'ClaudeBot', 'Claude-User': 'ClaudeBot', 'Claude-SearchBot': 'ClaudeBot', 'PerplexityBot': 'PerplexityBot', 'Perplexity-User': 'PerplexityUser', 'CCBot': 'CCBot', 'Googlebot': 'Googlebot', 'bingbot': 'Bingbot', 'Applebot': 'Applebot', }; // Longest tokens first, so "Claude-SearchBot" is not read as a shorter token. const TOKENS = Object.keys(EXPECTED).sort((a, b) => b.length - a.length); // A real crawler never connects from a private or loopback address. const privateNets = new BlockList(); for (const [net, bits] of [['10.0.0.0', 8], ['172.16.0.0', 12], ['192.168.0.0', 16], ['127.0.0.0', 8], ['100.64.0.0', 10]]) privateNets.addSubnet(net, bits, 'ipv4'); privateNets.addSubnet('fc00::', 7, 'ipv6'); privateNets.addAddress('::1', 'ipv6'); function claimedBot(ua = '') { const lower = ua.toLowerCase(); return TOKENS.find((t) => lower.includes(t.toLowerCase())) || null; } async function lookupCrawler(ip) { const hit = cache.get(ip); if (hit && Date.now() - hit.at < CACHE_MS) return hit.crawler; const res = await fetch(`https://api.geoiphub.com/v1/lookup/${ip}`, { headers: API_KEY ? { 'x-api-key': API_KEY } : {}, // keyless only for a local test signal: AbortSignal.timeout(1500), }); if (!res.ok) throw new Error(`lookup ${res.status}`); const data = await res.json(); cache.set(ip, { at: Date.now(), crawler: data.threat.crawler }); return data.threat.crawler; } async function verifyBot(req, res, next) { const claim = claimedBot(req.get('user-agent')); if (!claim) return next(); // no bot claim: tier 3 handles it const ip = req.ip.replace(/^::ffff:/, ''); const family = isIP(ip) === 6 ? 'ipv6' : 'ipv4'; if (privateNets.check(ip, family)) { return res.status(403).send(`unverified ${claim} claim\n`); } let crawler; try { crawler = await lookupCrawler(ip); } catch (err) { // Fail mode: never fail open to "verified". Mark it and let the rate limiter decide. req.botUnverified = true; return next(); } // The API never flags a spoof: it sees only the IP, not the User-Agent. // The spoof check is this comparison, in your code. const verified = crawler.verified === true && crawler.name === EXPECTED[claim]; if (!verified) return res.status(403).send(`unverified ${claim} claim\n`); if (BLOCKED.has(claim)) return res.status(403).send(`${claim} is blocked by policy\n`); req.verifiedBot = crawler.name; return next(); } // Tier 3: everyone without a verified bot name, keyed per IPv4 address or per IPv6 /64. // nginx auth_request understands only 2xx, 401 and 403, so the verifier endpoint answers 403. const limiter = rateLimit({ windowMs: 60 * 1000, limit: 120, ipv6Subnet: 64, skip: (req) => Boolean(req.verifiedBot), handler: (req, res) => res.set('Cache-Control', 'no-store') .status(req.path === '/_verify_bot' ? 403 : 429).send('rate limited\n'), }); const app = express(); app.set('trust proxy', 'loopback'); // only nginx on this host may set X-Forwarded-For // Endpoint for nginx auth_request: 204 lets the request through, 403 stops it. // After a failed lookup, no-store keeps nginx from caching the 204, so the limiter sees every request. app.get('/_verify_bot', verifyBot, limiter, (req, res) => { if (req.botUnverified) res.set('Cache-Control', 'no-store'); res.sendStatus(204); }); // Standalone use without nginx: protect every route. app.use(verifyBot, limiter); app.get('/', (req, res) => res.send('ok\n')); app.listen(3000, '127.0.0.1');

Três escolhas são deliberadas. Se a consulta falha ou leva mais de 1,5 segundo, a requisição nunca é tratada como verificada; ela cai para o limitador de taxa. Atrás do nginx, essa resposta é enviada com no-store, para que o nginx não a guarde em cache e o verificador conte cada requisição contra o mesmo limite. A lista de política contém tokens de User-Agent, então recusar o ClaudeBot não recusa o Claude-SearchBot, mesmo que os dois voltem da consulta como ClaudeBot. trust proxy vale apenas para loopback, porque, caso contrário, um cliente poderia enviar seu próprio X-Forwarded-For e escolher o endereço que você verifica. E apenas alegações de bot são consultadas, então o volume acompanha o tráfego de bots, não as visualizações de página. O plano gratuito cobre 1.500 consultas por dia com uma chave, com todos os campos incluídos.

O lado do nginx mapeia o User-Agent para um bot alegado, pula a subrequisição quando não há alegação e guarda em cache o 204 ou 403 do verificador por endereço e bot durante uma hora, exceto as respostas marcadas com no-store:

GeoIPHub API
# Goes in the http {} block. Tested with nginx 1.30.6 built with --with-http_auth_request_module. # Which bot does the User-Agent claim? Empty means no claim. map $http_user_agent $claimed_bot { default ""; "~*(GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-User|Claude-SearchBot|PerplexityBot|Perplexity-User|CCBot|Googlebot|bingbot|Applebot)" $1; } # Tier 3 key: rate-limit requests with no bot claim. Claims go to tier 2 instead. map $claimed_bot $limit_key { "" $binary_remote_addr; default ""; } limit_req_zone $limit_key zone=perip:10m rate=10r/s; # Cache the verifier's answer per address and claimed bot for one hour. proxy_cache_path /var/cache/nginx/botcheck keys_zone=botcheck:1m max_size=10m inactive=1h; server { listen 8080; location / { limit_req zone=perip burst=20 nodelay; limit_req_status 429; auth_request /_verify_bot; proxy_pass http://127.0.0.1:8000; # your app } location = /_verify_bot { internal; if ($claimed_bot = "") { return 204; } # no claim: no lookup proxy_pass http://127.0.0.1:3000; # bot-gate.js proxy_pass_request_body off; proxy_set_header Content-Length ""; proxy_set_header X-Forwarded-For $remote_addr; proxy_cache botcheck; proxy_cache_key $remote_addr$claimed_bot; proxy_cache_valid 204 403 1h; } }

O nginx -t passou com essa configuração, e a executamos na frente do arquivo Express em 20 de outubro de 2026, às 05:05 UTC. Primeiro, o teste do GPTBot falsificado, pelo nginx, a partir da mesma máquina:

GeoIPHub API
$ curl -s -o /dev/null -w "%{http_code}\n" \ -A "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.4; +https://openai.com/gptbot" \ http://localhost:8080/ 403 $ curl -s -o /dev/null -w "%{http_code}\n" \ -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36" \ http://localhost:8080/ 200

Essa string do GPTBot é o exemplo atual na página de bots da OpenAI. Da sua própria máquina, a requisição vem de 127.0.0.1, que nenhum rastreador usa, então o verificador a recusa antes de qualquer consulta. Para ver a consulta acontecer, chame o arquivo Express diretamente com o endereço que o nginx encaminharia:

GeoIPHub API
$ GPT='Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.4; +https://openai.com/gptbot' $ GB='Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)' $ curl -s -A "$GPT" -H "X-Forwarded-For: 216.73.216.10" http://127.0.0.1:3000/ unverified GPTBot claim $ curl -s -A "$GPT" -H "X-Forwarded-For: 132.196.86.1" http://127.0.0.1:3000/ GPTBot is blocked by policy $ curl -s -A "$GB" -H "X-Forwarded-For: 107.178.192.1" http://127.0.0.1:3000/ unverified Googlebot claim $ curl -s -A "$GB" -H "X-Forwarded-For: 66.249.66.1" http://127.0.0.1:3000/ ok

Siga a primeira linha de ponta a ponta. O User-Agent alega ser o GPTBot. O verificador consulta 216.73.216.10, e a API responde com um rastreador verificado chamado ClaudeBot. ClaudeBot não é GPTBot, então a requisição recebe 403. O endereço real do GPTBot, 132.196.86.1, passa na verificação e é recusado apenas porque esta política recusa o treinamento; com BLOCKED_BOTS=CCBot, ele recebeu 200. Uma alegação de Claude-SearchBot a partir de 216.73.216.10 recebeu 200, porque esta política recusa o token ClaudeBot, não o bot de busca da Anthropic. Uma cópia da configuração nginx usada apenas para teste, que encaminhou os mesmos quatro endereços, retornou 403, 403, 403 e 200. Com a API deixada inacessível de propósito, 130 alegações de bingbot a partir de um endereço, pelo nginx, receberam 120 respostas com status 200 e depois 403s: uma indisponibilidade limita as alegações de bot em vez de deixá-las passar.

Se você testar sem chave, seja breve. Consultas anônimas são limitadas por minuto, e a 30ª chamada dentro de uma janela de 60 segundos já é um 429 que bloqueia seu IP por duas horas.

Limite a taxa do que você não consegue verificar em vez de bloquear

A limitação de taxa é a ferramenta certa para o tráfego que você não consegue comprovar em nenhum sentido: bots não verificáveis, fetchers acionados por usuários e tudo o que não alega ser bot. Para ver quais bots publicam arquivos de faixas e quais não publicam, confira nossa lista arquivo por arquivo. Um limite impede que um scraper copie seu site em uma tarde sem bloquear as pessoas por trás de um fetcher.

Os dois trechos de código já fazem isso. O limit_req do nginx usa o endereço do cliente como chave para requisições sem alegação de bot, a 10 por segundo com um burst de 20. No nosso teste, 40 requisições seguidas retornaram 25 sucessos e 15 respostas com status 429. Ajuste os números e exclua os arquivos estáticos se um único carregamento de página buscar dezenas deles. O limitador do Express usa o /64 como chave para clientes IPv6, porque um assinante geralmente controla um /64 inteiro; veja limitação de taxa de IPv6 por prefixo /64 para saber quando ampliar para /56 ou /48.

O Crawl-delay é a versão educada para os bots que o respeitam. A página de ajuda sobre rastreadores da Anthropic diz "oferecemos suporte à extensão não padrão Crawl-delay do robots.txt", e o FAQ da Common Crawl diz "Obedecemos ao parâmetro Crawl-delay". Outros não. A especificação do robots.txt do Google diz que campos "como crawl-delay não são suportados", e a Apple diz que "o Applebot não segue o crawl-delay". As páginas da OpenAI e da Perplexity não o mencionam.

A camada 2 só pega requisições que nomeiam um bot. Para bloquear scrapers de IA que nunca alegam ser bots, adicione comportamento à camada 3: taxas de requisição, caminhos e a rede de onde a requisição vem. Nosso post sobre como detectar web scraping a partir dos seus logs cobre esses sinais.

Opções na borda: o bloqueio de IA e o pay per crawl da Cloudflare

Atrás da Cloudflare, você pode bloquear rastreadores de IA com uma configuração em vez de código, ou cobrar deles por requisição. Nenhuma das duas opções elimina a necessidade de saber com quais bots você está lidando.

A Cloudflare anunciou em 1º de julho de 2025, em um post modificado pela última vez em 15 de julho de 2026, que estava "mudando o padrão para bloquear rastreadores de IA, a menos que paguem aos criadores pelo conteúdo". Se você também executa suas próprias regras, verifique o que a Cloudflare já bloqueia na sua zona para que as duas camadas estejam de acordo.

Com o pay per crawl, um rastreador que solicita uma página com preço recebe "uma resposta 402 Payment Required, acompanhada de um cabeçalho crawler-price", e pode tentar novamente com intenção de pagamento. Os rastreadores assinam as requisições segundo as propostas do Web Bot Auth para que ninguém possa pagar se passando por outro. A Cloudflare diz que o pay per crawl "está atualmente em beta privado".

O Web Bot Auth ainda não é um padrão. Em 20 de outubro de 2026, o grupo de trabalho webbotauth da IETF tinha um documento do grupo de trabalho, draft-ietf-webbotauth-httpsig-protocol-00, de 1º de setembro de 2026, e nenhuma RFC; o marco de abril de 2026 de seu charter para uma especificação standards-track já passou. Um draft individual, draft-illyes-webbotauth-jafar, propõe um formato JSON comum para os arquivos de faixas de rastreadores. Até que isso se concretize, faixas de IP e DNS reverso são o que você pode verificar.

Meça o que a política mudou

Meça a política registrando o resultado da verificação em toda requisição de bot e depois comparando o antes e o depois.

  • Participação por bot verificado. Registre crawler.name e crawler.verified junto a cada requisição que alegou ser um bot. A participação de alegações que falharam é sua taxa de falsificação. A participação por nome mostra quais operadores realmente rastreiam você.
  • Referências de IA. Conte as visitas com referência de chatgpt.com, perplexity.ai, claude.ai, copilot.microsoft.com e gemini.google.com. Trate essa contagem como um piso, já que parte do tráfego de assistentes chega sem referenciador.
  • Volume de rastreamento. Compare as requisições por dia de cada bot antes e depois de uma mudança. O relatório de Estatísticas de rastreamento do Search Console cobre apenas os rastreadores do Google, então os outros bots precisam vir dos seus próprios logs.

Se as citações caírem depois que você bloquear um bot de busca com IA, você tem sua resposta sobre aquele bot.

Quando revisar sua política de rastreadores de IA

Revise sua política de rastreadores de IA sempre que um operador adicionar um bot, alterar um arquivo de faixas ou aposentar um token, e pelo menos uma vez por trimestre. A página de bots da OpenAI agora lista o OAI-AdsBot, com seu próprio adsbot.json. Nossos feeds de rastreadores não incluem esse arquivo e o código acima não o nomeia, então uma alegação de OAI-AdsBot cai para a camada 3 até que você decida.

Tenha clareza sobre o que esta configuração não consegue fazer:

  • Ela só comprova bots que publicam faixas. Bytespider e Meta-ExternalAgent não podem ser verificados, e uma falsificação de qualquer um deles parece exatamente igual ao bot real.
  • Novos prefixos demoram. Um prefixo adicionado hoje pode levar até cerca de dois dias para ser verificado, então um bot real pode falhar brevemente na camada 2.
  • Bloqueios por IP podem sair pela culatra. A Anthropic avisa que bloquear seus IPs "pode não funcionar corretamente nem garantir de forma persistente uma exclusão, pois isso impede nossa capacidade de ler seu arquivo robots.txt". Mantenha o Disallow no robots.txt mesmo quando a camada 2 o aplica.
  • A consulta não vê o User-Agent. A verificação de falsificação é a comparação de nomes no seu código.
  • A camada 2 não pega scrapers que nunca alegam um nome. Esses são tarefa da camada 3.

Comece pelos seus próprios logs. Escolha um endereço que alegou ser GPTBot ou ClaudeBot nesta semana, passe-o por uma consulta e compare crawler.name com o nome que ele alegou.

Perguntas frequentes

Devo bloquear rastreadores de IA?

Depende da função do bot. Bloqueie rastreadores de treinamento como GPTBot e ClaudeBot se você se opõe a que seu conteúdo treine modelos. Permita bots de busca com IA como OAI-SearchBot se quiser ser citado. Limite a taxa dos fetchers acionados por usuários em vez de depender do robots.txt.

O robots.txt impede rastreadores de IA?

Apenas os que escolhem obedecê-lo. A RFC 9309 diz que suas regras "não são uma forma de autorização de acesso". Um scraper que usa um User-Agent de GPTBot o ignora, então a aplicação precisa verificar o IP de onde a requisição chega.

Bloquear rastreadores de IA prejudica o SEO?

Bloquear o token Google-Extended não afeta a Pesquisa Google; o Google diz que ele "não afeta" a inclusão de um site na Pesquisa. Bloquear o Googlebot para impedir o uso por IA tira você da Pesquisa. Bloquear bots de busca com IA como o OAI-SearchBot deixa você fora das respostas de busca daquele assistente.

Posso bloquear o Google-Extended por IP?

Não. Google-Extended é um token do robots.txt sem User-Agent próprio. Os rastreadores existentes do Google fazem a coleta, então o único controle é uma regra no robots.txt para o token. O Applebot-Extended funciona da mesma forma: a Apple diz que ele não rastreia páginas da web.

Como sei se uma requisição que diz ser do GPTBot é real?

Verifique se o IP de conexão está no gptbot.json publicado pela OpenAI. O DNS reverso não ajuda: os endereços de GPTBot e ClaudeBot que verificamos não têm registro PTR. Uma consulta retorna threat.crawler.verified e o nome do bot, e seu código compara esse nome com o User-Agent.

Todo rastreador de IA pode ser verificado por IP?

Não. Não encontramos nenhum arquivo de faixas da ByteDance para o Bytespider, e a Meta não publica nenhum para o Meta-ExternalAgent, então nenhum dos dois pode ser verificado por IP. Limite a taxa deles em vez de confiar no User-Agent.

Escrito por

Equipe GeoIPHub

A equipe por trás da API do GeoIPHub

Escrito pela equipe do GeoIPHub, as pessoas que constroem a API de inteligência de IP do GeoIPHub e seu scanner. Os rascunhos são preparados com auxílio de IA e editados pela equipe; os exemplos de API são consultas reais à API em produção, salvo quando indicados como ilustrativos.

Compartilhe este artigo
Mais artigos

Artigos relacionados