Todo scraper que define um header User-Agent escolhe uma versão de navegador, e quase nenhum deles jamais a altera. A string entra em um arquivo de configuração no dia em que o projeto começa, e o projeto continua se anunciando como aquele navegador por anos. Enquanto isso, os navegadores reais avançam: o Chrome lançou 13 versões principais entre o final de setembro de 2025 e o final de setembro de 2026.
Essa defasagem importa? Sistemas anti-bot sabem quais versões de navegador os visitantes reais usam, então uma versão que ninguém mais usa há anos se destaca. Medimos o quanto, solicitando as homepages de 397 sites importantes enquanto declarávamos cinco versões diferentes do Chrome, da versão atual até uma com seis anos e meio.
Principais conclusões
- Versões declaradas mais antigas foram recusadas com mais frequência, sempre. 17,1% das homepages desafiaram ou bloquearam a versão atual do Chrome; 19,9% recusaram uma versão com um ano e 22,7% uma com seis anos e meio.
- O efeito ocorreu em apenas uma direção. 22 sites que serviram a versão atual recusaram a mais antiga; nenhum site recusou a versão atual e serviu uma antiga.
- Duas requisições idênticas para a versão atual produziram resultados idênticos nos 397 sites, então as diferenças não são ruído.
- Sites atrás do Akamai reagiram primeiro: 9 dos 11 sites que recusaram uma versão com apenas um ano eram protegidos pelo Akamai. Sites protegidos pelo Cloudflare, em sua maioria, só reagiram à versão mais antiga.
- Mantenha a versão atualizada, mantenha-a consistente com o restante da requisição e verifique-a em uma programação regular, como faria com qualquer dependência.
Como medimos
Pegamos 400 sites aleatoriamente entre as homepages da nossa consulta anterior de stack anti-bot dos 1.000 domínios principais no ranking Tranco. Em 5 de outubro de 2026, solicitamos cada homepage seis vezes, com um segundo de intervalo e em ordem aleatória por site, com uma string User-Agent padrão do Chrome no Windows declarando estas versões:
| Versão declarada | Lançamento estável | Idade no teste |
|---|---|---|
| Chrome 154, solicitado duas vezes | 22 de setembro de 2026 | Atual |
| Chrome 141 | 30 de setembro de 2025 | Cerca de 1 ano |
| Chrome 129 | 17 de setembro de 2024 | Cerca de 2 anos |
| Chrome 110 | 7 de fevereiro de 2023 | Cerca de 3,5 anos |
| Chrome 80 | 4 de fevereiro de 2020 | Cerca de 6,5 anos |
A requisição repetida para a versão atual é o controle: se um site varia por conta própria, isso aparece como uma diferença entre essas duas. Todas as requisições vieram do mesmo cliente HTTP Python e da mesma conexão; apenas o número da versão no User-Agent mudou. Três sites não responderam a pelo menos uma requisição e foram excluídos, restando 397.
O que encontramos
| Versão declarada | Servido | Desafiado | Bloqueado | Desafiado ou bloqueado |
|---|---|---|---|---|
| Chrome 154, primeira requisição | 329 | 42 | 26 | 17,1% |
| Chrome 154, repetição | 329 | 42 | 26 | 17,1% |
| Chrome 141 | 318 | 43 | 36 | 19,9% |
| Chrome 129 | 315 | 43 | 39 | 20,7% |
| Chrome 110 | 314 | 43 | 40 | 20,9% |
| Chrome 80 | 307 | 52 | 38 | 22,7% |
As duas requisições para a versão atual concordaram em todos os sites, o que facilita a leitura do restante da tabela: cada diferença é o número da versão.
Contando apenas os sites que serviram a versão atual nas duas vezes, o número que recusou a versão mais antiga cresceu de forma constante com a idade dela:
| Versão declarada | Sites que serviram a versão atual, mas recusaram esta |
|---|---|
| Chrome 141, 1 ano | 11 |
| Chrome 129, 2 anos | 14 |
| Chrome 110, 3,5 anos | 15 |
| Chrome 80, 6,5 anos | 22 |
Nenhum site fez o oposto. Uma versão desatualizada nunca ajudou.
Quem reage, e como
Cruzar os sites com a proteção detectada na consulta anterior mostra que os fornecedores traçam o limite em pontos diferentes:
- Um ano foi suficiente para o Akamai. Dos 11 sites que recusaram o Chrome 141, 9 eram protegidos pelo Akamai; todos os 11 responderam com HTTP 403, e 10 desses foram bloqueios simples em vez de desafios.
- O Cloudflare reagiu à versão muito antiga. Dos 22 sites que recusaram o Chrome 80, 10 eram protegidos pelo Cloudflare e retornaram um desafio; mais 9 eram Akamai.
- Páginas raramente avisaram o visitante. Apenas dois sites exibiram uma mensagem do tipo “atualize seu navegador” para o Chrome 80 que não exibiram para a versão atual. A maioria simplesmente recusou.
Isso é consistente com o funcionamento do gerenciamento de bots. Um visitante real em um navegador com um ano de idade é incomum, e em um com seis anos, raro, então uma versão antiga é um sinal fraco por si só e um sinal mais forte combinado com qualquer outra coisa incomum na requisição.
O código
A função abaixo executa a mesma comparação em qualquer URL: ela solicita a página declarando cada versão, em ordem aleatória, e retorna o status, o resultado e o tamanho para cada uma, além de indicar se a página informa ao visitante que seu navegador está desatualizado. Liste uma versão duas vezes para obter um controle de ruído.
import random
import re
import time
import requests
CHROME = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/{v}.0.0.0 Safari/537.36"
OUTDATED = re.compile(r"(browser (is|you are using is) (not supported|out of date|outdated|no longer supported)"
r"|update your browser|upgrade your browser|unsupported browser|outdated browser)", re.I)
def classify(response):
"""served, challenged or blocked, from the status and well-known challenge markers."""
body = response.text[:20000].lower()
if (response.headers.get("cf-mitigated", "").lower() == "challenge"
or response.headers.get("x-amzn-waf-action", "").lower() == "challenge"
or "captcha-delivery.com" in body):
return "challenged"
if response.status_code in (401, 403, 405, 429) or response.status_code >= 500:
return "blocked"
return "served"
def ua_drift_check(url, versions, pause=1.0, seed=None):
"""Request the same URL claiming each Chrome version, in random order, and compare what comes back.
A version may be listed twice, as a control for how much the site varies on its own."""
order = list(enumerate(versions))
random.Random(seed).shuffle(order)
results = [None] * len(versions)
for i, v in order:
headers = {"User-Agent": CHROME.format(v=v), "Accept": "text/html,*/*;q=0.8", "Accept-Language": "en-US,en;q=0.9"}
try:
r = requests.get(url, headers=headers, timeout=20)
results[i] = {"version": v, "status": r.status_code, "outcome": classify(r), "bytes": len(r.content),
"outdated_notice": bool(OUTDATED.search(r.text))}
except requests.RequestException as e:
results[i] = {"version": v, "error": type(e).__name__}
time.sleep(pause)
return results
Execute-o contra os sites dos quais você depende antes e depois de uma mudança de User-Agent, e mantenha os resultados: se um alvo começar a recusar a versão que você envia, você saberá se a versão é o motivo.
Limites da medição
- Homepages, uma rede, um momento. Páginas mais profundas, outros países e outros momentos podem se comportar de maneira diferente.
- Não é um navegador. Nosso cliente enviou um User-Agent do Chrome a partir de uma biblioteca HTTP em Python, então cada requisição já tinha uma impressão digital de rede que não correspondia ao Chrome, como explicado em fingerprinting de TLS e HTTP/2. A comparação isola o efeito do número de versão; ela não mostra como um navegador real de cada versão se sairia.
- A base não é zero. 17% das homepages recusaram até mesmo a versão atual vinda deste cliente, o que é um lembrete de que um User-Agent correto é necessário, mas não suficiente.
Também devemos assumir uma constatação sobre nós mesmos. Nossa consulta anti-bot no início da semana usou um User-Agent do Chrome 129: uma string com dois anos, copiada de um script mais antigo. Por esta medição, isso custou alguns pontos percentuais de homepages.
Mantendo seu User-Agent atualizado
- Trate-o como uma dependência. Coloque a versão do navegador em um único lugar, e atualize-a em uma programação regular; o Chrome lança uma nova versão principal a cada quatro semanas, aproximadamente.
- Fique dentro de poucas versões da atual. Em nossos dados, uma versão com um ano de idade já era recusada com mais frequência do que a atual.
- Mantenha tudo consistente. Uma versão atual do Chrome com uma ordem de headers antiga, client hints ausentes ou uma impressão digital de rede que não é de navegador ainda é inconsistente; configurando os headers e o User-Agent corretos cobre o conjunto completo.
- Use uma identidade por sessão. Alternar versões dentro de uma sessão é mais suspeito do que qualquer versão isolada.
- Teste em CI. Uma verificação programada dos alvos principais com a configuração atual e a anterior detecta a defasagem antes que ela apareça em seus dados; executando scrapers em CI/CD mostra como configurar isso.
- Acompanhe a taxa de recusa. Um aumento lento em 403s e desafios é o sintoma típico de defasagem; isso pertence a um score de saúde do alvo.
Conclusão
Uma versão de navegador não é uma configuração que você escolhe uma única vez. Em nossa medição de 397 sites importantes, cada ano de defasagem na versão declarada do Chrome aumentou as recusas, o efeito nunca ocorreu na direção contrária, e alguns serviços de proteção reagiram a uma versão com apenas um ano de defasagem.
Mantenha a versão atualizada, mantenha o restante da requisição consistente com ela, e meça o efeito nos alvos que importam para você. É uma das melhorias de confiabilidade mais baratas que um projeto de scraping pode fazer.
Fontes e referências
- Chromium Dash, cronograma de lançamentos, para datas de lançamento estável e a versão atual.
- Tranco, lista Q2K34.
- Requisições feitas pela Shifter em 5 de outubro de 2026 usando o código acima.