I migliori User Agent per il Web Scraping nel 2026: Perché la Coerenza Vince
Non esiste una stringa magica di user-agent. Nel 2026 il rilevamento convalida tutta la tua identità - UA, Client Hints, TLS e IP insieme. Un Chrome coerente batte una lista di mille UA casuali.
Cerca "miglior user agent per il web scraping" e troverai liste di mille stringhe da ruotare. Quel consiglio è vecchio di un decennio. Nel 2026 il fatto più importante sugli user agents è che non vengono più valutati da soli - i sistemi di rilevamento confrontano il tuo User-Agent con i tuoi Client Hints, la tua stretta di mano TLS e il tuo IP, e qualsiasi discrepanza ti segnala più velocemente di quanto farebbe un'intestazione semplice e onesta. Il miglior user agent non è una stringa intelligente; è un'identità di browser reale e attuale dove ogni livello è d'accordo. Ecco come costruirla, oltre alle stringhe da usare e quelle che ti bloccano a vista.
Cosa fa (e non fa) un user agent
L'intestazione User-Agent è una linea di testo in ogni richiesta HTTP che nomina il browser, la sua versione e il sistema operativo. Una tipica stringa di Chrome appare come Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36. I siti la leggono per servire il layout corretto - e per individuare i bot. Una richiesta che pubblicizza python-requests/2.28.1 o curl/7.68.0 è un bot con un cartellino identificativo; guadagna blocchi istantanei, risposte vuote o reindirizzamenti CAPTCHA. Ma sostituire con una stringa di browser reale è solo il primo passo, perché ora l'UA è il segnale meno affidabile tra diversi.
I Client Hints hanno cambiato tutto
Il moderno Chrome ha ridotto ciò che inserisce nel User-Agent (riduzione UA) e ha spostato i dettagli in un set di intestazioni chiamate Client Hints: Sec-CH-UA, Sec-CH-UA-Mobile e Sec-CH-UA-Platform. Questo è cruciale per gli scraper. Il rilevamento ora controlla se il tuo UA e i tuoi Client Hints raccontano la stessa storia. Dichiarare di essere Chrome 144 su Windows nell'UA mentre i tuoi hints dicono Safari mobile, e sei bloccato istantaneamente - una discrepanza è un segnale più forte di un'intestazione mancante. Quindi il compito non è ruotare gli UA; è spedire un set di intestazioni completo e internamente coerente:
import requests
# One current Chrome identity - UA, Client Hints and Accept all agree
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36",
"Sec-CH-UA": '"Chromium";v="144", "Google Chrome";v="144", "Not?A_Brand";v="24"',
"Sec-CH-UA-Mobile": "?0",
"Sec-CH-UA-Platform": '"Windows"',
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.9",
}
r = requests.get("https://httpbin.org/headers", headers=headers, timeout=15)
print(r.json()["headers"]["User-Agent"]) # confirm the server saw what you sent

Gli user agents che vale la pena usare nel 2026
Poiché Chrome detiene circa il 65% del mercato dei browser, le stringhe attuali di Chrome si mimetizzano meglio - sono l'opzione predefinita più sicura. Mantieni un set piccolo e aggiornato piuttosto che uno gigante e obsoleto:
- Chrome (Windows/macOS/Linux): l'opzione con la migliore integrazione; abbina il token della piattaforma al sistema operativo che stai dichiarando.
- Firefox: utile diversità quando un sito sembra segnalare troppo traffico Chrome.
- Safari (macOS/iOS): prezioso per il pubblico Apple e l'e-commerce.
- Mobile Chrome / Safari: per contenuti ottimizzati per dispositivi mobili e API che servono dati diversi ai telefoni.
E le stringhe che ti segnalano immediatamente: agenti di libreria predefiniti (python-requests, curl, Scrapy, urllib), identificatori headless (HeadlessChrome, PhantomJS), e stringhe malformate o antiche (un UA vuoto, un semplice Mozilla/5.0, o MSIE 6.0). Mantieni sempre le versioni aggiornate - una stringa di Chrome vecchia di tre anni è quasi sospetta quanto nessuna stringa.
Perché ruotare mille UA fallisce
Il consiglio classico - raccogliere mille user agents e ruotarne uno per richiesta - ora ti danneggia attivamente, per due motivi. Primo, la maggior parte delle grandi liste è obsoleta, quindi stai ruotando attraverso stringhe che individualmente sembrano datate. Secondo, e più importante, ruotare solo l'UA lascia ogni altro livello costante: la tua impronta digitale TLS, i tuoi Client Hints, il tuo IP e la tua cadenza di richiesta non cambiano con la stringa. Il rilevamento vede la stretta di mano TLS di una singola macchina che indossa quaranta nomi di browser diversi - il che è molto più anomalo di un'identità onesta. Se devi ruotare, ruota l'intera identità insieme, e mantieni il pool piccolo e aggiornato:
import random
# A SMALL curated pool - each identity ships matching Client Hints
IDENTITIES = [
{"ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36",
"platform": '"Windows"', "mobile": "?0"},
{"ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36",
"platform": '"macOS"', "mobile": "?0"},
]
def headers_for(i):
return {
"User-Agent": i["ua"],
"Sec-CH-UA-Platform": i["platform"],
"Sec-CH-UA-Mobile": i["mobile"],
"Accept-Language": "en-US,en;q=0.9",
}
h = headers_for(random.choice(IDENTITIES)) # rotate identities, never UA alone

Il livello sotto l'intestazione: TLS e IP
Anche un set di intestazioni perfetto può perdere contro la stretta di mano sottostante. Python e Go negoziano TLS in un modo che non corrisponde a Chrome, producendo un'impronta digitale JA3/JA4 che svela la richiesta indipendentemente da ciò che dichiara l'UA - la nostra guida su impronte digitali TLS JA3/JA4 spiega la discrepanza. Questo è anche il motivo per cui lo stesso URL può restituire 200 in un browser e 403 da curl, trattato in perché curl riceve 403 quando il browser funziona. L'ultimo livello è l'IP: un'impronta digitale di Chrome coerente da un IP di datacenter segnalato fallisce comunque. Abbina le tue intestazioni con un exit residenziale affidabile e un ritmo umano - l'intero stack è nella nostra checklist anti-ban, e i segnali di rilevamento in come i siti web rilevano i proxy.
Il risultato pratico: dedica il tuo sforzo alla freschezza e alla coerenza, non alla dimensione della lista. Una dozzina di identità attuali, ciascuna con Client Hints corrispondenti e abbinata a un profilo TLS di browser reale, supererà una lista di diecimila stringhe raschiate. La grande lista ti dà varietà nel campo che il rilevamento ora considera meno affidabile; la coerenza ti dà credibilità in tutti loro contemporaneamente.
Quando smettere di gestire le intestazioni a mano
Mantenere le stringhe UA aggiornate, abbinare i Client Hints, allineare l'impronta digitale TLS e ruotare gli IP affidabili è un tapis roulant di manutenzione. Su obiettivi difficili è più economico affidare l'intero problema delle impronte digitali a un Scraper API che trasporta un'identità di browser reale e coerente - intestazioni, Client Hints, TLS e IP insieme - e la aggiorna man mano che i browser rilasciano nuove versioni. Invi un URL; gestisce il travestimento.
Lascia che lo Scraper API gestisca l'intera impronta digitale
Domande frequenti
Qual è il miglior user agent per il web scraping?
Una stringa di Chrome attuale e reale su una piattaforma comune - Windows o macOS - mantenuta aggiornata, perché la quota di mercato di Chrome del ~65% significa che si mimetizza meglio. Ma la stringa funziona solo quando i tuoi Client Hints, l'impronta digitale TLS e l'IP descrivono tutti lo stesso browser. Non esiste una stringa magica singola; la coerenza è ciò che conta.
Ruotare gli user agents previene i blocchi?
Non da solo. Ruotare l'UA mentre la tua impronta digitale TLS, i Client Hints e l'IP rimangono costanti è più sospetto, non meno - il rilevamento vede una macchina che indossa molti nomi di browser. Ruota l'intera identità insieme, mantieni il pool piccolo e aggiornato, e abbinalo a IP affidabili e a un ritmo umano.
Quali user agents dovrei evitare?
Stringhe di libreria predefinite (python-requests, curl, Scrapy, urllib), identificatori headless (HeadlessChrome, PhantomJS), e qualsiasi cosa malformata o antica - un UA vuoto, un semplice Mozilla/5.0, o vecchie stringhe MSIE. Ognuna ti segnala come automatizzato prima che qualsiasi altro segnale venga controllato.
Devo inviare i Client Hints?
Per i siti moderni, sì. Chrome ha spostato i dettagli del browser in Sec-CH-UA, Sec-CH-UA-Mobile e Sec-CH-UA-Platform, e il rilevamento controlla questi rispetto al tuo User-Agent. Un UA senza Client Hints o, peggio, contraddittori è un comune trigger di blocco - inviali e mantienili coerenti con il tuo UA.
Il miglior user agent per il web scraping nel 2026 non è una stringa che copi da una lista di mille - è una singola identità di browser attuale dove UA, Client Hints, impronta digitale TLS e IP sono tutti d'accordo. Ottieni la coerenza giusta, ruota intere identità piuttosto che stringhe, e supportala con un exit affidabile.