O log de acesso é o arquivo em que o servidor do site anota cada pedido que recebe: de onde veio, quando, o que pediu, que resposta levou e com que nome o visitante se apresentou. É nele que a visita do GPTBot e dos outros robôs de IA fica registrada. O Google Analytics não serve para isso: o GA4 só conta quem carrega o código de medição, esses robôs em geral leem o HTML sem rodar JavaScript, e o próprio Google tira da conta o tráfego de robôs conhecidos. Abaixo, o caminho até o arquivo e o que apareceu quando abrimos o do próprio Nota do Site.
Onde fica o log de acesso do seu site?
Depende de quem cuida do servidor. Cada pedido vira uma linha: uma pessoa abrindo a página inicial, um robô buscando o sitemap, um script atrás de uma tela de login esquecida.
Hospedagem compartilhada com cPanel. No painel, procure Raw Access, na área de Métricas. Há um arquivo compactado (.gz) por domínio, com o registro bruto do Apache ou do Nginx, e uma lista de arquivos antigos. Ligue a opção que guarda uma cópia na pasta logs da sua conta depois de cada processamento das estatísticas, senão o histórico some. Se o item não aparece, a hospedagem desligou o recurso no seu plano: peça o arquivo ao suporte.
Servidor próprio ou VPS. No Nginx, o formato padrão se chama combined e o caminho depende da instalação; nos pacotes de Debian e Ubuntu, costuma ser /var/log/nginx/access.log. No Apache, procure a diretiva CustomLog na configuração. Em Debian e Ubuntu ela costuma apontar para /var/log/apache2/access.log; em Red Hat e derivados, para /var/log/httpd/access_log. Os arquivos antigos são rotacionados e ganham finais como .1 e .2.gz.
Site atrás de uma CDN. A CDN, a rede que entrega cópias do site a partir de servidores perto do visitante, muda duas coisas no log. Sem ajuste, o IP registrado passa a ser o da CDN, e não o de quem pediu. A Cloudflare manda o endereço original no cabeçalho CF-Connecting-IP e ensina a gravá-lo, no Nginx com o módulo realip e no Apache com o mod_remoteip. E o que ela entrega do próprio cache nunca chega ao seu servidor, portanto não vira linha.
No Nota do Site, o Nginx usa real_ip_header CF-Connecting-IP, mas só acredita nesse cabeçalho quando o pedido chega das faixas que a Cloudflare publica em cloudflare.com/ips, listadas com set_real_ip_from. A trava importa: sem ela, quem falasse direto com o servidor poderia escrever ali qualquer IP, até um da lista do Google. Um script renova essas faixas toda segunda-feira, no Nginx e no firewall, que só abre as portas 80 e 443 para a Cloudflare. É por isso que o IP de cada linha do nosso log é o de quem fez o pedido, e a conferência da tabela mais abaixo vale.
Para enxergar o que o cache esconde, a Cloudflare tem o painel AI Crawl Control (antes chamado AI Audit). Pela documentação conferida em 3 de novembro de 2026, ele existe em todos os planos, inclusive no grátis, e mostra os pedidos de cada robô de IA, os aceitos e os que falharam, os códigos de resposta e os caminhos mais pedidos.
No nosso caso, a Cloudflare não acrescenta nada ao robots.txt: em 3/11/2026, o arquivo servido em www.notadosite.com.br era exatamente o que o site gera, liberando todos os robôs, e o log mostra os de IA recebendo 200. Se o seu site passa por uma CDN, abra o robots.txt publicado e compare com o que você escreveu.
Construtor de sites ou plataforma de loja. Nem toda plataforma fechada entrega o log bruto. Procure "logs de acesso" na central de ajuda dela antes de desistir.
Como ler uma linha do log?
Toda linha segue o mesmo molde. Este é um exemplo no formato combined, com IP fictício:
203.0.113.45 - - [28/Oct/2026:09:14:02 -0300] "GET /blog/sitemap-xml HTTP/1.1" 200 18342 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.4; +https://openai.com/gptbot"
| Pedaço | O que informa |
|---|---|
203.0.113.45 |
O IP de origem. É com ele que você confere se o robô é quem diz ser |
[28/Oct/2026:09:14:02 -0300] |
Data, hora e fuso do servidor |
"GET /blog/sitemap-xml HTTP/1.1" |
O método (GET é leitura), o endereço pedido e a versão do protocolo |
200 |
O código de resposta que o servidor devolveu |
18342 |
O tamanho da resposta, em bytes |
"-" |
O referenciador, a página de onde o visitante veio; robô quase nunca informa |
"Mozilla/5.0 ... GPTBot/1.4 ..." |
O user-agent, o nome com que o visitante se apresenta |
O user-agent é o campo que você vai filtrar. Só que ele é texto livre, e qualquer programa escreve ali o nome que quiser.
Como separar os robôs de IA do resto?
Com quatro comandos, no terminal do servidor ou no seu computador depois de baixar o arquivo. Os exemplos usam o caminho do Nginx; troque pelo seu.
Quantos pedidos cada robô fez, somando os arquivos antigos compactados (o zgrep lê os dois tipos):
zgrep -ohE 'GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-User|Claude-SearchBot|PerplexityBot|Perplexity-User|Googlebot|bingbot|Applebot|Amazonbot' /var/log/nginx/access.log* | sort | uniq -c | sort -rn
Quais endereços um robô pediu, do mais pedido para o menos:
awk -F'"' '/ClaudeBot/ {split($2, r, " "); print r[2]}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20
Que códigos de resposta ele recebeu:
awk -F'"' '/ClaudeBot/ {split($3, s, " "); print s[1]}' /var/log/nginx/access.log | sort | uniq -c
E a lista de IPs que usaram um nome, que vai servir na conferência seguinte:
awk '/Googlebot/ {print $1}' /var/log/nginx/access.log | sort -u > ips.txt
Um cuidado que aprendemos aqui: ferramenta de monitoramento também deixa rastro. O validador do Nota do Site testa o próprio site todo dia fingindo ser cada um dos robôs de IA, para saber se o servidor atende. São linhas com o nome do GPTBot que nunca passaram pela OpenAI. Antes de contar, tire do log os IPs dos seus próprios testes.
Como saber se o robô é verdadeiro?
Pelo IP, nunca pelo nome. As empresas publicam as faixas de endereço dos seus robôs, e algumas aceitam também a conferência por DNS reverso, a consulta que devolve o nome registrado para um IP.
| Empresa | Onde está a lista de IPs | Outra forma de conferir |
|---|---|---|
| OpenAI | openai.com/gptbot.json, openai.com/searchbot.json e openai.com/chatgpt-user.json |
— |
| Anthropic | claude.com/crawling/bots.json |
— |
common-crawlers.json (Googlebot) e os arquivos dos coletores acionados por usuários, na documentação do Search Central |
DNS reverso terminado em googlebot.com, google.com ou googleusercontent.com | |
| Microsoft | bing.com/toolbox/bingbot.json |
A ferramenta Verify Bingbot, que confere um IP por vez |
| Perplexity | perplexity.ai/perplexitybot.json e perplexity.ai/perplexity-user.json |
— |
| Apple | search.developer.apple.com/applebot.json |
DNS reverso em applebot.apple.com |
| Amazon | Na página de IPs do Amazonbot, no portal de desenvolvedores da Amazon | — |
Pelo DNS reverso, que serve para poucos IPs. O Google descreve a conferência em duas etapas com o comando host. Primeiro, pergunte qual nome responde por aquele IP:
host 66.249.66.1
Se a resposta terminar num domínio do Google, como crawl-66-249-66-1.googlebot.com, faça o caminho inverso e veja se o nome leva ao mesmo IP:
host crawl-66-249-66-1.googlebot.com
A volta é obrigatória: quem controla um IP registra para ele o nome reverso que quiser, mas não consegue fazer o domínio do Google apontar de volta.
Pela lista publicada, que serve para muitos IPs. Baixe o arquivo da empresa e cruze com o ips.txt. Como todas as listas da tabela usam a mesma estrutura (prefixes, com ipv4Prefix ou ipv6Prefix), este trecho em Python serve para qualquer uma delas:
curl -s https://openai.com/searchbot.json -o lista.json
python3 - lista.json ips.txt <<'FIM'
import ipaddress, json, sys
redes = [ipaddress.ip_network(p.get('ipv4Prefix') or p.get('ipv6Prefix')) for p in json.load(open(sys.argv[1]))['prefixes']]
for linha in open(sys.argv[2]):
ip = ipaddress.ip_address(linha.strip())
print(ip, 'na lista' if any(ip in r for r in redes) else 'FORA DA LISTA')
FIM
A lista da Amazon vem dentro da própria página, e não num arquivo: copie o bloco para um lista.json antes de rodar. E baixe tudo de novo a cada conferência, porque as faixas mudam. Em 3 de novembro de 2026, o arquivo do GPTBot tinha sido gerado em 22 de setembro, o da Anthropic em 20 de outubro e o do Google naquele mesmo dia.
O que o log do Nota do Site mostrou em 13 dias?
Fizemos o exercício com o nosso servidor. Juntamos o log do Nginx desde a estreia do site, em 22/10/2026, até 3/11/2026: 13 dias, 11.868 pedidos, cerca de 80 páginas públicas. Os pedidos de teste do nosso validador, 21 por robô, ficaram de fora. A coluna de IP compara cada endereço com a lista publicada pela empresa; Amazonbot e CCBot ficaram sem essa conferência.
| Robô (pelo user-agent) | Pedidos | Dias com visita (de 13) | Endereços distintos | IP na lista / fora dela | O que mais pediu |
|---|---|---|---|---|---|
| Googlebot | 810 | 13 | 131 | 709 / 101 | posts 319, robots.txt 147, ferramentas 100 |
| Bingbot | 382 | 13 | 83 | 374 / 8 | posts 137 |
| Amazonbot | 334 | 5 | 320 | — | posts 267; 129 respostas 405 e 88 respostas 404 |
| ClaudeBot | 273 | 12 | 106 | 264 / 9 | sitemap 136, posts 68, robots.txt 31 |
| OAI-SearchBot | 127 | 9 | 108 | 117 / 10 | posts 80 |
| GoogleOther | 116 | 13 | 91 | 116 / 0 | posts 82 |
| Applebot | 101 | 8 | 92 | 101 / 0 | posts 65 |
| ChatGPT-User | 28 | 10 | 11 | 22 / 6 | página inicial 17 |
| PerplexityBot | 23 | 7 | 16 | 14 / 9 | página inicial 7, posts 6 |
| GPTBot | 10 | 7 | 3 | 6 / 4 | sitemap 6, página inicial 3 |
| Claude-User | 5 | 2 | 5 | 0 / 5 | ferramentas 2, post 1 |
| CCBot (Common Crawl) | 7 | 1 | 7 | — | só endereços inexistentes (404) |
| Claude-SearchBot, Perplexity-User, meta-externalagent, Bytespider | 0 | — | — | — | nenhuma visita real no período |
O que dá para ler daí:
- O ClaudeBot veio em 12 dos 13 dias. Dos 273 pedidos que fez, 136 buscaram o sitemap: ele consultou o mapa do site mais vezes do que leu posts.
- Entre os robôs de IA, quem mais leu posts foi o OAI-SearchBot, o que alimenta a busca do ChatGPT: 80 pedidos a posts.
- O GPTBot, robô de treino da OpenAI, quase não apareceu: 10 pedidos em 13 dias, vindos de 3 endereços.
- Nome emprestado é comum. Dos 810 pedidos que se diziam Googlebot, 101 (12%) saíram de IPs fora da lista do Google. O mesmo vale para 10 dos 127 do OAI-SearchBot, 9 dos 23 do PerplexityBot e 9 dos 273 do ClaudeBot. Quem conta só pelo nome infla o número e corre o risco de liberar no firewall quem não devia.
- O Amazonbot concentrou 334 pedidos em 5 dias, quase um endereço diferente por pedido, com 129 respostas 405 (o servidor não aceitou o método usado) e 88 respostas 404. Padrão assim pede que você abra as linhas, e não só a contagem.
- Os 5 pedidos do Claude-User vieram de IPs fora da lista da Anthropic. A ajuda da empresa não diz se essa lista cobre esse robô, então o certo é registrar que os endereços não estavam na lista publicada, sem chamá-los de falsos.
- Claude-SearchBot, Perplexity-User, meta-externalagent e Bytespider não fizeram nenhuma visita real. Num site com menos de duas semanas, ausência não é sinal de bloqueio.
Fora da IA, apareceram AhrefsBot (204 pedidos), MJ12bot (101 num dia só) e YandexBot (113). Robôs e scripts sem nome conhecido somaram 1.131 pedidos; 363 levaram 403 e 166 levaram 404, quase sempre atrás de endereços que nunca existiram aqui, o desenho de uma varredura em busca de falhas. Outros 6.901 pedidos não se apresentaram como robô: pessoas e robôs com cara de navegador, que o log sozinho não separa.
Trate esses números como um caso para aprender a ler o log, e não como média do mercado: um site só, recém-lançado, em menos de duas semanas. Além disso, o nosso servidor está atrás da Cloudflare, e as páginas que ela entregou direto do cache não deixaram rastro aqui, então o total real dos robôs fica acima da tabela.
Robô de treino, de busca ou a pedido: o que cada visita indica?
Depende da função do robô, e o quadro das três funções, empresa por empresa mostra quem é quem. No log, a leitura muda conforme o grupo:
- Treino (GPTBot, ClaudeBot): a página pode entrar na coleta para os próximos modelos. A visita não prova que o texto foi usado.
- Busca (OAI-SearchBot, Claude-SearchBot, PerplexityBot): a página entra no índice que a IA consulta para responder com link. Visitas frequentes mostram que o site está sendo acompanhado.
- A pedido de uma pessoa (ChatGPT-User, Claude-User, Perplexity-User): alguém, numa conversa, fez a IA abrir aquela página naquela hora. No nosso log, 17 dos 28 pedidos do ChatGPT-User foram à página inicial.
Pedidos ao robots.txt e ao sitemap são o robô conferindo as regras e o mapa antes de ler. A OpenAI avisa que o GPTBot e o OAI-SearchBot podem acrescentar a marca robots.txt ao user-agent quando buscam esse arquivo, o que ajuda a separar essas linhas.
Quais códigos de resposta merecem atenção?
Seis códigos contam quase toda a história. O efeito de cada um sobre o Google está na documentação dele; as empresas de IA não publicam regra equivalente, mas um 403 barra qualquer robô do mesmo jeito.
| Código | O que aconteceu | O que fazer |
|---|---|---|
| 200 | A página foi entregue | Nada: é o esperado |
| 304 | O robô perguntou se a página mudou, e não tinha mudado | Nada: ele reaproveita a cópia que já tem |
| 403 | O servidor recusou o pedido | Se o robô é de busca e verdadeiro, procure a regra de firewall, CDN ou plugin de segurança que o barra |
| 404 | Ninguém tem página naquele endereço | Se ela já existiu, redirecione com 301; se nunca existiu, ignore |
| 429 | Pedidos demais em pouco tempo | Afrouxe o limite de taxa para os robôs verificados; o Google trata o 429 como servidor sobrecarregado e reduz o ritmo |
| 503 | Servidor indisponível | Veja o horário dos erros; o Google também desacelera e, se o erro persiste, a página sai do índice |
Usar 403 para segurar o ritmo de um robô é má ideia: o Google trata a página recusada como inexistente, e ela pode sair do índice.
O 403 para um robô de busca de IA, com o robots.txt liberado, é o caso que mais engana o dono do site. A causa costuma ser uma regra genérica contra robôs, e a chave de robôs de IA no painel da Cloudflare é um exemplo comum. A correção é uma regra de liberação que exija o nome do robô e o IP dentro da lista oficial, colocada antes das regras de bloqueio. Para conferir de fora, a análise completa do validador repete o pedido da sua página se passando por cada robô de IA e mostra quem é recusado. O teste sai da nossa infraestrutura, com endereços que não pertencem às empresas de IA, e um firewall que olha a origem pode responder a ele de um jeito e ao robô de outro. O log tira a dúvida.
O que o log não mostra?
Tudo o que não chegou ao seu servidor. Na prática, ficam de fora:
- O que a CDN serviu do cache. Um robô pode ter lido a página sem deixar linha.
- Robôs disfarçados, que caem junto com as pessoas.
- O uso do conteúdo. Nenhuma linha diz se o texto entrou num treino ou numa resposta.
- A pessoa que veio da IA. Quem clica num link dentro do ChatGPT chega como visita comum; para isso, meça as pessoas que chegam vindas do ChatGPT e de outras IAs no GA4.
- A visão do Google sobre o rastreamento. Para o Googlebot, o gráfico de rastreamento que o Search Console guarda complementa o log com o tempo de resposta e as falhas de disponibilidade.
- O passado distante. O que a rotação já apagou não volta.
O que fazer com o que o log mostrou?
Cada achado leva a uma tarefa diferente:
- Robô de busca verdadeiro recebendo 403 ou 503: ajuste o firewall ou a CDN com a regra de nome e IP descrita acima e confira de novo uma semana depois.
- Robô de busca que nunca aparece: confira na ferramenta que lê o seu robots.txt como cada robô de IA se o arquivo o barra. Se estiver liberado, dê tempo: site novo demora a entrar no radar.
- Muitos 404 de um mesmo robô: separe os endereços que já foram seus (redirecione) dos inventados (ignore).
- Volume grande de um nome com IP fora da lista: bloqueie pelo IP ou pelo comportamento, nunca pelo nome, para não derrubar o robô verdadeiro junto.
- Robô que pede o sitemap e quase não lê páginas: abra o sitemap e veja se ele lista as páginas certas, com datas de atualização reais.
Guarde uma cópia do log todo mês. A comparação entre um mês e o seguinte diz mais do que qualquer número isolado.