Como verificar os logs do servidor em busca de crawlers de IA
Procure no campo user agent do seu log de acesso tokens como GPTBot, OAI-SearchBot, ClaudeBot, Claude-SearchBot e PerplexityBot, e depois veja os códigos de status que eles receberam. Só o user agent não prova nada, então confira cada IP de origem na lista de IPs publicada pelo fornecedor ou, no caso de Google e Apple, por DNS reverso e direto.
O robots.txt diz o que você pede aos crawlers. O seu log de acesso mostra o que realmente aconteceu: quais crawlers de IA vieram, quais páginas pediram e o que o seu servidor respondeu. É a evidência mais direta que você tem e não exige nada além dos arquivos de log e de um terminal. Os exemplos abaixo usam o formato combined de log, que o nginx e o Apache usam por padrão.
Neste artigo
- Como é a visita de um crawler de IA em um log de acesso?
- Como conto as visitas de crawlers de IA?
- O que cada crawler realmente recebeu?
- Como verifico se uma visita realmente veio da OpenAI, da Anthropic ou da Perplexity?
- Como verifico o Googlebot, o Applebot e o CCBot?
- Como são os crawlers de IA falsos?
- O que os logs não conseguem mostrar?
Como é a visita de um crawler de IA em um log de acesso?
No formato combined, cada linha traz o IP do cliente, a hora, a linha da requisição, o código de status, o tamanho da resposta, o referenciador e o user agent. O nginx o define como $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent", e o formato combined do Apache tem os mesmos campos. Uma visita do crawler de treinamento da OpenAI fica assim:
20.171.206.5 - - [12/Nov/2026:10:00:01 +0000] "GET /pricing HTTP/1.1" 200 5120 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.4; +https://openai.com/gptbot"
Os tokens a procurar são os que os fornecedores documentam: GPTBot, OAI-SearchBot e ChatGPT-User (OpenAI); ClaudeBot, Claude-SearchBot e Claude-User (Anthropic); PerplexityBot e Perplexity-User (Perplexity); Googlebot, Applebot, meta-externalagent, meta-webindexer e CCBot. Você nunca verá Google-Extended nem Applebot-Extended. O Google diz que o Google-Extended não tem uma string de user agent separada, e a Apple diz que o Applebot-Extended não rastreia; os dois são apenas tokens de robots.txt.
Como conto as visitas de crawlers de IA?
Dividir cada linha pelo caractere de aspas coloca o user agent no campo 6. Conferir só esse campo evita falsos positivos de URLs que por acaso contêm o nome de um bot. Este comando conta as visitas por crawler no log atual e nos rotacionados e compactados:
zcat -f /var/log/nginx/access.log* \
| awk -F'"' '{print $6}' \
| grep -Eo 'GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-SearchBot|Claude-User|PerplexityBot|Perplexity-User|Googlebot|bingbot|Applebot|meta-externalagent|meta-webindexer|CCBot' \
| sort | uniq -c | sort -rn
Ajuste o caminho para o Apache, geralmente /var/log/apache2/access.log* ou /var/log/httpd/access_log*. O zcat -f lê tanto arquivos simples quanto compactados em gzip. Se falta um crawler que você esperava, isso por si só não prova um bloqueio: ele pode simplesmente não ter visitado no período que os seus logs cobrem.
O que cada crawler realmente recebeu?
As visitas importam menos que as respostas. Um crawler que recebe 403 em toda requisição visitou, mas não leu nada. Estes comandos mostram os códigos de status, os caminhos mais requisitados e se o crawler buscou o robots.txt:
# Status codes returned to PerplexityBot
zcat -f /var/log/nginx/access.log* | awk -F'"' '$6 ~ /PerplexityBot/ {split($3, s, " "); print s[1]}' | sort | uniq -c
# Most requested paths for OAI-SearchBot
zcat -f /var/log/nginx/access.log* | awk -F'"' '$6 ~ /OAI-SearchBot/ {split($2, r, " "); print r[2]}' | sort | uniq -c | sort -rn | head -20
# Did ClaudeBot fetch robots.txt, and what did it get?
zcat -f /var/log/nginx/access.log* | awk -F'"' '$6 ~ /ClaudeBot/ && $2 ~ /robots\.txt/ {split($3, s, " "); print s[1]}' | sort | uniq -c
O que você quer ver são principalmente 200. Muitos 403 ou 429 apontam para uma regra de firewall ou limite de taxa. Respostas 5xx no robots.txt são graves: pelo RFC 9309, um crawler que recebe um erro de servidor no robots.txt deve presumir que o site inteiro está bloqueado.
Se o seu site fica atrás de uma CDN, duas coisas mudam. As requisições que a CDN bloqueia nunca chegam à sua origem, então não aparecem nos logs dela; verifique os eventos de segurança da própria CDN. E, a menos que você restaure o IP do visitante, a origem registra o endereço da CDN. A Cloudflare, por exemplo, envia o IP original no cabeçalho CF-Connecting-IP e registra por padrão um IP da Cloudflare.
Como verifico se uma visita realmente veio da OpenAI, da Anthropic ou da Perplexity?
Esses fornecedores publicam as faixas de IP que seus agentes usam: a OpenAI em openai.com/gptbot.json, openai.com/searchbot.json e openai.com/chatgpt-user.json; a Anthropic em claude.com/crawling/bots.json; a Perplexity em perplexity.ai/perplexitybot.json e perplexity.ai/perplexity-user.json. A Anthropic diz que um IP de origem presente na lista dela indica que o crawler vem da Anthropic. Nenhum dos três documenta verificação por DNS reverso, então use as listas.
Os arquivos têm o mesmo formato, uma lista prefixes com entradas ipv4Prefix ou ipv6Prefix, então um pequeno script confere um IP em qualquer um deles:
python3 - 20.171.206.5 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": "log-check"})
prefixes = json.load(urllib.request.urlopen(req))["prefixes"]
nets = [ipaddress.ip_network(p.get("ipv4Prefix") or p.get("ipv6Prefix")) for p in prefixes]
print(ip, "listed" if any(ip in n for n in nets) else "NOT listed")
EOF
Para listar os IPs que se declararam um determinado crawler, execute awk -F'"' '$6 ~ /GPTBot/ {split($1, a, " "); print a[1]}' no log e passe o resultado por sort | uniq -c | sort -rn. Confira cada um na lista correspondente. As listas mudam, então baixe-as de novo em vez de guardar uma cópia antiga.
Como verifico o Googlebot, o Applebot e o CCBot?
Google, Apple e Common Crawl documentam uma verificação por DNS reverso e direto. Consulte o nome do host do IP, confira o domínio dele, depois consulte esse nome de host e confirme que ele aponta de volta para o mesmo IP:
host 66.249.66.1
# 1.66.249.66.in-addr.arpa domain name pointer crawl-66-249-66-1.googlebot.com.
host crawl-66-249-66-1.googlebot.com
# crawl-66-249-66-1.googlebot.com has address 66.249.66.1
No Google, o nome do host deve terminar em googlebot.com, google.com ou googleusercontent.com, conforme o crawler; o Google também publica suas faixas, com o Googlebot em common-crawlers.json. Na Apple, deve estar em applebot.apple.com, com faixas em applebot.json. No Common Crawl, deve estar sob crawl.commoncrawl.org, e o Common Crawl alerta que outros crawlers usam falsamente o nome CCBot.
Como são os crawlers de IA falsos?
Scrapers costumam tomar emprestado o user agent de um crawler conhecido para driblar filtros. Sinais típicos:
- O user agent cita um crawler, mas o IP não está na lista publicada por aquele fornecedor, ou o DNS reverso dele não confere.
- A origem é uma rede residencial ou um provedor de nuvem que o fornecedor não lista.
- O cliente nunca requisita o robots.txt, ou requisita caminhos que o robots.txt bloqueia para aquele crawler.
- A taxa ou o padrão de requisições difere bastante do tráfego verificado sob o mesmo nome, por exemplo rajadas contra endpoints de busca ou de login.
O problema inverso também existe: um crawler que usa um user agent comum de navegador não pode ser identificado pela linha do log. Em 2025, a Cloudflare disse ter observado a Perplexity rastreando com user agents não declarados, parecidos com os de navegadores, a partir de IPs fora das faixas publicadas dela; a Perplexity contestou essa versão e atribuiu parte do tráfego a um serviço de terceiros. Os logs sozinhos não resolvem casos assim, e é por isso que a verificação pelas faixas de IP publicadas importa nos dois sentidos.
O que os logs não conseguem mostrar?
Os logs mostram o que chegou ao seu servidor. Eles não mostram o que a sua CDN bloqueou antes da origem, se uma página que retornou 200 continha o texto ou só uma casca de scripts, nem se um crawler seria aceito se viesse hoje. Também cobrem apenas o período que você guarda, e sites com pouco movimento podem receber crawlers de IA raramente.
Em uma conta da AISeeWhy, você pode enviar um log de acesso no formato combined (simples ou .gz, até 50 MB); ele é analisado e descartado, e as requisições de cada crawler de IA são contadas com seus códigos de status e conferidas nas faixas de IP que os fornecedores publicam.
Perguntas frequentes
Por que não vejo o Google-Extended nos meus logs?
O Google diz que o Google-Extended não tem uma string de user agent separada. O rastreamento é feito pelos crawlers já existentes do Google, e o token só controla como o conteúdo pode ser usado. O mesmo vale para o Applebot-Extended, que a Apple diz que não rastreia.
Posso confiar no user agent dos meus logs?
Não. Qualquer pessoa pode enviar qualquer user agent. Trate-o como uma declaração e confirme-o pelas faixas de IP publicadas pelo fornecedor ou, no caso de Google, Apple e Common Crawl, por uma consulta de DNS reverso e direto.
Meus logs não mostram visitas de crawlers de IA. Estou bloqueado?
Não necessariamente. O crawler pode ainda não ter visitado, a sua CDN pode tê-lo bloqueado antes da origem, ou os seus logs podem registrar só os endereços IP da CDN. Verifique os eventos de segurança da CDN e teste a página com o user agent de cada crawler.
O tráfego do ChatGPT-User é de um crawler?
A OpenAI diz que o ChatGPT-User é usado em certas ações do usuário e não é usado para rastrear a web de forma automática. As visitas dele costumam seguir uma pessoa perguntando ao ChatGPT sobre uma página, por isso aparecem em pequeno número.
Fontes
- nginx: ngx_http_log_module (formato combined de log)
- Apache HTTP Server 2.4: arquivos de log
- OpenAI: visão geral dos crawlers da OpenAI
- Anthropic: a Anthropic rastreia dados da web, e como os donos de sites podem bloquear o crawler?
- Perplexity: crawlers da Perplexity
- Google: verificação de crawlers e fetchers do Google
- Google: crawlers comuns, incluindo o Google-Extended
- Apple: sobre o Applebot
- Common Crawl: CCBot
- RFC 9309: Robots Exclusion Protocol
- Cloudflare: restaurar os IPs originais dos visitantes
- Cloudflare: a Perplexity usa crawlers furtivos e não declarados para burlar diretivas de bloqueio de rastreamento
- Perplexity: agentes ou bots? Entendendo a IA na web aberta