Pular para o conteúdo
conquisto
← Experimentos

Quase publiquei que o Itaú bloqueia o ChatGPT

Meu estudo tinha um número forte e um controle metodológico que parecia sólido. A verificação final derrubou os dois — e o motivo é algo que quem mede bots precisa saber: WAFs modernos não olham o User-Agent.

Eu tinha o número. Depois de ler o robots.txt de 500 dos maiores sites brasileiros, o achado mais forte não estava no arquivo — estava em quem não deixava nem ler o arquivo: 51 domínios devolviam HTTP 403, e não eram sites pequenos. Itaú, Santander, Magazine Luiza, iFood, OLX.

A manchete se escrevia sozinha: “os maiores sites do Brasil bloqueiam robôs de IA no firewall, e o robots.txt nem chega a importar”. Bonito, novo, e alinhado com a tese da ferramenta que eu tinha acabado de construir.

Faltava uma coisa: provar que era bloqueio a robôs, e não o site inteiro fora do ar ou recusando qualquer coisa que não fosse gente.

O controle que parecia resolver

Montei o que achei ser um teste limpo. Mesmo momento, mesma origem, mesmos sites, três User-Agents diferentes:

  • ConquistoBot — meu robô, honesto mas desconhecido
  • GPTBot — robô conhecido, o que interessa de verdade
  • Chrome — o controle negativo: se o navegador passa e os robôs não, é bloqueio a robôs

O resultado foi exatamente o esperado: 34 domínios responderam ao Chrome e recusaram os dois robôs. Bloqueio diferencial confirmado, mesmo IP, mesmo segundo. Eu já estava escrevendo o parágrafo com os nomes das marcas.

A verificação que derrubou tudo

Antes de publicar nome de empresa, refiz na mão alguns casos com curl. E o resultado não bateu:

itau.com.br           chrome=403   gptbot=403
santander.com.br      chrome=403   gptbot=403
natura.com.br         chrome=403   gptbot=403
estadao.com.br        chrome=200   gptbot=403   ← só este confirmou

No meu script, o “Chrome” passava. No curl, com a mesma string de User-Agent, tomava 403 igual ao robô. Se as duas coisas não podem ser verdade ao mesmo tempo, o problema estava no meu experimento.

E estava. O meu “Chrome” nunca foi um Chrome. Era Python com uma string de User-Agent dizendo que era.

O que eu não sabia

WAFs modernos — Cloudflare, Akamai, Imperva — praticamente ignoram o User-Agent para essa decisão. Eles olham a impressão digital da conexão TLS: a ordem exata das cifras oferecidas no handshake, as extensões, a versão do protocolo, o formato dos cabeçalhos HTTP. Essa assinatura (JA3, JA4 e parentes) é característica de cada cliente, e um navegador de verdade tem uma que nenhuma biblioteca de script reproduz.

Ou seja: urllib do Python, curl e um Chrome real são três clientes distintos aos olhos do firewall, independentemente do que digam sobre si mesmos. Meu controle negativo não controlava nada. Ele só provava que dois scripts diferentes recebem tratamentos diferentes — o que não diz nada sobre robôs de IA.

O que sobrou de sólido foi um único caso, o Estadão, onde a diferença apareceu com o mesmo cliente trocando só o User-Agent. Um caso não sustenta uma manchete.

O que fiz em vez disso

Cortei o achado. O estudo saiu com a base menor e defensável — os 317 sites cujo robots.txt eu consegui ler e interpretar — e a camada de firewall virou uma seção de limitações, explicando por que não deu para medir e o que precisaria para medir direito.

Perdi a manchete e fiquei com um número mais chato: quatro em cada cinco sites brasileiros nunca decidiram nada sobre robôs de IA, e quem decidiu costuma bloquear demais. É menos espetacular e tem a vantagem de ser verdade.

Nenhuma marca foi citada como bloqueadora. Se eu tivesse publicado a primeira versão, teria afirmado publicamente que grandes bancos brasileiros barram o ChatGPT com base num experimento que não provava isso.

O que fica

Para quem for medir bots: só dá para simular um navegador com um navegador. Playwright, Puppeteer ou similar, com engine real. Qualquer coisa abaixo disso mede o seu script, não o site. É o que vou usar na próxima rodada.

Para quem lê estudo de marketing: desconfie de achado que depende de “simulamos um navegador”. Pergunte qual cliente foi usado. Na maior parte das vezes a resposta é uma biblioteca de HTTP, e a conclusão não se sustenta.

Para mim: o passo que salvou isso não foi esperto, foi burocrático — reverificar na mão antes de publicar nome de empresa. Estava tudo pronto para sair. Se eu tivesse confiado no meu próprio script, o erro estaria no ar com o selo de “dados originais”.

Receba os experimentos

Um e-mail quando sai ferramenta nova ou experimento com dados. Sem spam, sem "newsletter semanal" só para ocupar caixa de entrada.

Me manda um e-mail que eu te incluo na lista.