Como bloquear crawlers de IA no seu servidor
Última atualização:
As empresas de IA rastreiam a web para treinar modelos, para alimentar buscas com IA e para buscar páginas quando um usuário pergunta sobre elas. Num servidor pequeno, só a carga já pode ser um problema, e muitos donos de sites não querem que seu conteúdo seja usado para treinamento.
Existem quatro ferramentas, e elas funcionam melhor juntas: o robots.txt para os crawlers que o respeitam, regras de user agent no servidor web para os que se identificam, DNS reverso ou listas de IPs publicadas para distinguir um crawler verdadeiro de um falso, e limites de requisições para todo o resto. Os comandos são para nginx e Apache no Debian, no Ubuntu e na família RHEL.
Saiba com quais crawlers você está lidando
Os principais, em outubro de 2026, segundo a documentação de cada operador. Alguns são crawlers; outros são apenas tokens do robots.txt que controlam como os dados de outro crawler são usados.
| Nome | Operador | O que faz |
|---|---|---|
GPTBot | OpenAI | Rastreia conteúdo que pode ser usado para treinar os modelos da OpenAI. Lista de IPs publicada. |
OAI-SearchBot, ChatGPT-User | OpenAI | Busca do ChatGPT, e páginas buscadas quando um usuário pede. A OpenAI diz que o robots.txt pode não se aplicar ao ChatGPT-User. |
ClaudeBot, Claude-SearchBot, Claude-User | Anthropic | Treinamento, busca e páginas buscadas para um usuário. A Anthropic diz que eles respeitam o robots.txt. Lista de IPs publicada. |
Google-Extended | Apenas um token do robots.txt, sem user agent próprio: controla o uso para o treinamento e o grounding do Gemini. Não afeta a Busca do Google. | |
Applebot-Extended | Apple | Apenas um token do robots.txt: controla o uso do que o Applebot rastreia para o treinamento dos modelos da Apple. |
CCBot | Common Crawl | Monta o dataset do Common Crawl, muito usado para treinar modelos. Verificável por DNS reverso. |
meta-externalagent | Meta | Rastreia para usos como o treinamento de modelos de IA. |
PerplexityBot, Perplexity-User | Perplexity | Busca do Perplexity, e páginas buscadas para um usuário. A Perplexity diz que o Perplexity-User em geral ignora o robots.txt. |
Decida por finalidade. Bloquear os crawlers de treinamento mantém seu conteúdo fora dos próximos conjuntos de treinamento; bloquear a busca com IA e os fetchers acionados por usuários também tira seu site dessas respostas, e das visitas que elas trazem. Para ver quais deles chegam ao seu servidor, conte os user agents no log de acesso:
sudo awk -F'"' '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20Peça para eles ficarem longe com o robots.txt
Coloque um robots.txt na raiz de cada host que você quer cobrir (cada subdomínio tem o seu). Várias linhas User-agent podem compartilhar uma regra:
User-agent: GPTBot
User-agent: ClaudeBot
User-agent: CCBot
User-agent: Google-Extended
User-agent: Applebot-Extended
User-agent: meta-externalagent
Disallow: /Esta lista bloqueia o treinamento e deixa a busca em paz. Adicione OAI-SearchBot, Claude-SearchBot e PerplexityBot para ficar fora da busca com IA também. Mantenha abaixo dela as regras que você já tem para outros crawlers, e nunca escreva User-agent: * com Disallow: /, a não ser que você também queira sair do Google e do Bing.
O que o robots.txt não consegue fazer
- Ele é um pedido. Os crawlers que o respeitam param; os outros não, e nada diz quem é quem.
- Os fetchers acionados por usuários podem não aplicá-lo, segundo os próprios operadores.
- As mudanças demoram: os operadores guardam o arquivo em cache, muitas vezes por até um dia.
- Um scraper que esconde o nome ou finge ser um navegador não é coberto de forma alguma.
Bloqueie por user agent no nginx ou no Apache
O servidor web pode recusar os crawlers que se identificam. Isso os barra mesmo que ignorem o robots.txt, desde que mantenham o nome.
nginx
O map vai no contexto http: os arquivos em /etc/nginx/conf.d/ são incluídos ali pelos pacotes do Debian, do Ubuntu e da família RHEL.
sudo tee /etc/nginx/conf.d/ai-crawlers.conf > /dev/null <<'EOF'
map $http_user_agent $ai_crawler {
default 0;
~*(GPTBot|ClaudeBot|CCBot|meta-externalagent|PerplexityBot) 1;
}
EOFDepois adicione isto dentro de cada bloco server que deve recusá-los, em /etc/nginx/sites-available/ no Debian e no Ubuntu ou em /etc/nginx/conf.d/ na família RHEL:
if ($ai_crawler) {
return 403;
}Teste a configuração, faça o reload e confira: o primeiro curl tem que mostrar 403, o segundo 200 (troque example.com pelo seu site).
sudo nginx -t && sudo systemctl reload nginx
curl -s -o /dev/null -w "%{http_code}\n" -A "GPTBot/1.2" https://example.com/
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/Atenção: Use padrões exatos. Um padrão como bot ou Google também bloqueia o Googlebot e o Bingbot, e seu site some das buscas. Google-Extended e Applebot-Extended não são user agents: eles só fazem sentido no robots.txt.
Apache
Com o mod_rewrite, dentro de cada <VirtualHost> (tanto o da porta 80 quanto o da porta 443) ou no .htaccess do site. As regras de rewrite na configuração principal não valem para os virtual hosts.
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (GPTBot|ClaudeBot|CCBot|meta-externalagent|PerplexityBot) [NC]
RewriteRule ^ - [F]sudo a2enmod rewrite
sudo apachectl configtest && sudo systemctl reload apache2sudo apachectl configtest && sudo systemctl reload httpdNota: No .htaccess, as regras precisam de AllowOverride FileInfo (ou All) para aquele diretório. Em hospedagem compartilhada isso normalmente já está configurado.
Confirme os bots verdadeiros por DNS reverso
Qualquer um pode mandar User-Agent: Googlebot. Os scrapers fazem isso para passar pelas regras que liberam os buscadores. Um crawler verdadeiro é confirmado por DNS reverso com confirmação direta: o endereço resolve para um nome no domínio do operador, e esse nome resolve de volta para o mesmo endereço.
sudo apt install -y bind9-hostsudo dnf install -y bind-utilsip=66.249.66.1
name=$(host "$ip" | awk '/pointer/ {print $NF; exit}' | sed 's/\.$//')
echo "$name"
host "$name" | awk '{print $NF}' | grep -qxF "$ip" && echo "confirmed" || echo "NOT confirmed"- Googlebot:
googlebot.comougoogle.com. Bingbot:search.msn.com. Applebot:applebot.apple.com. CCBot:crawl.commoncrawl.org. - Um nome em outro domínio, ou um que não resolve de volta para o endereço, é falso.
OpenAI, Anthropic, Perplexity e Common Crawl publicam as faixas de endereços dos seus crawlers em JSON (os links estão na documentação de cada operador). Este comando confere um endereço com uma dessas listas:
python3 - 20.171.207.10 https://openai.com/gptbot.json <<'EOF'
import ipaddress, json, sys, urllib.request
ip = ipaddress.ip_address(sys.argv[1])
req = urllib.request.Request(sys.argv[2], headers={"User-Agent": "Mozilla/5.0"})
prefixes = json.load(urllib.request.urlopen(req))["prefixes"]
nets = [ipaddress.ip_network(p.get("ipv4Prefix") or p.get("ipv6Prefix")) for p in prefixes]
print("in the list" if any(ip in n for n in nets) else "NOT in the list")
EOFAs mesmas listas JSON podem ser carregadas num bloco geo do nginx ou no firewall, se você quiser permitir só os crawlers verdadeiros que usam um determinado nome.
Limite a taxa de requisições dos crawlers
Um limite de requisições funciona seja qual for o nome que o crawler usa, e protege o servidor dos que rastreiam rápido demais. No nginx, isto limita cada endereço cujo user agent parece de bot a 30 requisições por minuto, com um pequeno burst; os outros visitantes não entram na conta, porque uma chave vazia não é limitada.
sudo tee /etc/nginx/conf.d/bot-limit.conf > /dev/null <<'EOF'
map $http_user_agent $bot_key {
default "";
~*(bot|crawler|spider|scraper) $binary_remote_addr;
}
limit_req_zone $bot_key zone=bots:10m rate=30r/m;
limit_req_status 429;
EOFDepois, nos blocos server ou location das páginas dinâmicas, e faça o reload como acima:
limit_req zone=bots burst=10 nodelay;Atenção: Atrás de uma CDN ou de um proxy, todas as requisições chegam do endereço do proxy: configure antes set_real_ip_from e real_ip_header, senão o limite vale para todos os visitantes juntos. Os buscadores diminuem o ritmo quando recebem 429, então deixe a taxa folgada.
O Apache não tem um limite de requisições por endereço próprio (o mod_ratelimit limita banda). As opções de sempre são o mod_evasive, uma jail do fail2ban no log de acesso, ou um nginx ou uma CDN na frente.
Quando um crawler ignora tudo
Se um crawler ignora o robots.txt e troca de user agent, bloqueie no firewall os endereços que ele usa (troque a faixa de exemplo):
sudo ufw insert 1 deny from 198.51.100.0/24sudo firewall-cmd --permanent --zone=drop --add-source=198.51.100.0/24
sudo firewall-cmd --reloadComo o InfraFence lida com os crawlers de IA
A gestão de bots do InfraFence lê os logs de acesso do servidor web e reconhece cerca de 1.500 bots a partir de listas públicas atualizadas diariamente. Os crawlers de IA têm uma categoria própria.
- Para cada categoria, ou para um bot específico, você escolhe: permitir, só registrar ou bloquear. As mudanças chegam aos seus servidores em segundos.
- Cada bot vem com uma explicação em linguagem simples: quem o opera, para que serve (treinamento, busca, assistente, agente) e se declara respeitar o robots.txt.
- Quando um bot marcado para bloqueio aparece no log, o endereço dele é banido no firewall. O banimento vem do log, então a requisição que o revelou já foi respondida.
- Os bots que dizem ser um buscador ou outro crawler conhecido, como Googlebot, Bingbot ou Applebot, são conferidos por DNS reverso com confirmação direta, e os falsos são reportados como falsificados.
- As requisições que parecem de bot mas não correspondem a nenhum conhecido são reportadas como bots desconhecidos.
Os crawlers de IA são reconhecidos pelo user agent. Um scraper que esconde o nome fica a cargo do firewall web, que dá uma pontuação a cada visitante pelo que ele faz. O InfraFence não altera o seu robots.txt: os passos acima continuam úteis junto com ele.
Perguntas
- Bloquear crawlers de IA prejudica meu posicionamento no Google?
- Não, se você bloquear os nomes certos. Segundo o Google, o
Google-Extendedno robots.txt não afeta a Busca do Google. Bloquear oGooglebot, ou um padrão que corresponda a ele, afeta. - O robots.txt basta?
- Para os crawlers que o respeitam, sim. Ele não faz nada contra os que o ignoram ou escondem o nome, e é por isso que existem as regras de user agent e os limites de requisições.
- Devo bloquear também os crawlers de busca com IA?
- Depende de você querer aparecer nas respostas das IAs. Bloqueá-los mantém seu conteúdo fora dessas respostas e perde as visitas que elas trazem. Muitos sites bloqueiam os crawlers de treinamento e permitem os de busca.
Teste grátis em 1 servidor
O Starter é gratuito para um servidor, com proteção completa e bloqueio automático. Sem cartão de crédito.
Instale o agente como root, com o seu token no lugar de <TOKEN>:
curl -fsSL https://github.com/infrafence/infrafence-agent/releases/latest/download/install.sh | sudo bash -s -- --token <TOKEN>O token é criado no painel, em Servidores › Adicionar servidor.
