User Agent e SEO

Cos'è un user agent — l'header HTTP che crawler e browser usano per identificarsi, il token robots.txt rispetto alla stringa completa, e come verificare che un bot sia reale.

Prima pubblicazione: 24 giu 2026 · Ultimo aggiornamento: 3 ago 2026 · Advanced
Lingue
2 segnali di evidenza in questa pagina

Un user agent è l'header HTTP che ogni client — browser, crawler o bot — invia per identificarsi. Due cose vengono confuse: la *stringa* completa dell'user agent nell'header della richiesta, e il *token* breve dell'user agent (Googlebot, bingbot, Google-Extended) che si usa in robots.txt. Il token è una sottostringa della stringa (RFC 9309); alcuni token, come Google-Extended, non hanno alcuna stringa di richiesta. La stringa è facilmente falsificabile — Google afferma che la sua è 'spesso falsificata' — quindi non fidarti mai per il controllo degli accessi. Verifica Googlebot/Bingbot tramite DNS inverso più una ricerca diretta, o contro gli intervalli IP pubblicati. E attenzione alle insidie: AdsBot e Google-Safety ignorano `User-agent: *`, i numeri di versione e i caratteri jolly nella riga del token vengono ignorati, la corrispondenza non fa distinzione tra maiuscole e minuscole, e servire contenuti diversi a un UA bot rispetto agli utenti è cloaking.

TL;DR — Uno user agent è l’header della richiesta HTTP che qualsiasi client invia per identificarsi; è un metadato opzionale fornito dal client, non un’identità autenticata. Il suo valore è la stringa dello user agent. Distinta da questa è la token dello user agent (product token) usata in robots.txt — RFC 9309 dice che DOVREBBE essere una sottostringa della stringa, una convenzione forte con eccezioni documentate (Google-Extended non ha alcuna stringa di richiesta). Il matching è case-insensitive, i numeri di versione/wildcard nella riga del token vengono ignorati, vince il gruppo più specifico, e i gruppi con lo stesso token si uniscono ma non si uniscono mai con *. La stringa è banalmente falsificabile — Google chiama la propria “often spoofed” — quindi verifica tramite DNS inverso + diretto (dietro qualsiasi proxy/CDN, usa l’IP reale del client) contro googlebot.com/google.com/googleusercontent.com per Google o search.msn.com per Bing, oppure confronta gli intervalli IP pubblicati — e anche una richiesta verificata prova solo che una richiesta è arrivata, non che la pagina è stata indicizzata, recuperata o usata per l’addestramento dell’IA. AdsBot e Google-Safety ignorano User-agent: *. Chrome sta anche congelando i dettagli dalle stringhe UA del browser (User-Agent reduction); Client Hints sono il sostituto strutturato ma opt-in, e nessuno dei due sostituisce la verifica del crawler. L’adattamento dello user agent può essere legittimo, ma mostrare in modo ingannevole ai crawler contenuti materialmente diversi può essere cloaking.

Evidence for this claim HTTP User-Agent is a request field containing product information supplied by the client; it is descriptive text and not proof of identity. Scope: HTTP semantics for User-Agent. Confidence: high · Verified: IETF RFC 9110: User-Agent Evidence for this claim robots.txt User-agent matching is defined by the Robots Exclusion Protocol and controls crawler access, not authentication or general HTTP content negotiation. Scope: RFC 9309 robots matching behavior. Confidence: high · Verified: IETF RFC 9309: Robots Exclusion Protocol

L’header, la stringa e il token

Tre cose, e tenerle distinte è la maggior parte di questo argomento.

  • L’header. User-Agent è un header HTTP di richiesta. Ogni client lo invia: il tuo browser, curl, un crawler, un bot. Secondo RFC 9110 (lo standard di base della semantica HTTP), è un campo opzionale che il client compila — metadati descrittivi forniti dal client, non un’identità autenticata verificata dal server.
  • La stringa. Il valore dell’header — una riga libera che descrive il software, la versione, il motore di rendering e talvolta il sistema operativo.
  • Il token. L’identificatore breve usato nelle righe User-agent: di robots.txt per indirizzare un crawler — Googlebot, bingbot, Google-Extended.

La relazione è la parte che confonde le persone. RFC 9309 (lo standard formale del Robots Exclusion Protocol) dice che il token “SHOULD be a substring of the identification string that the crawler sends… in the case of HTTP, the product token SHOULD be a substring in the User-Agent header.” Questo è un SHOULD, non un MUST — una convenzione forte che lo standard raccomanda, non un requisito rigido a cui ogni crawler è meccanicamente vincolato. Google-Extended (sotto) è l’esempio più chiaro di un’ eccesione documentata a questa regola. Non leggere la regola della sottostringa come universale solo perché Google la segue per la maggior parte dei suoi token. Il token è parte di la stringa quando un provider ne fornisce uno; indirizzi il token in robots.txt e leggi la stringa nei tuoi log.

Evidence for this claim A robots.txt user-agent line selects a crawler product token, not an arbitrary full HTTP User-Agent string; RFC 9309 says the token should be a substring of the identification string, but this SHOULD-level convention has documented product-specific exceptions and is not authentication. Scope: robots.txt parsing and matching Confidence: high · Verified: Robots Exclusion Protocol

La stessa formulazione di Google su come i suoi bot si identificano è utile qui: “Google’s crawlers identify themselves through three things: the HTTP user-agent request header, the source IP address of the request, and the reverse DNS hostname of the source IP.” Nota che lo user agent è solo uno dei tre — gli altri due sono come lo verifichi effettivamente.

Google-Extended: un token senza stringa

L’illustrazione più chiara di token ≠ stringa è Google-Extended. Controlla se Google può usare i tuoi contenuti per l’addestramento e il grounding di Gemini — e non ha nessuna stringa user-agent di richiesta HTTP dedicata. La scansione stessa viene eseguita con le stringhe Googlebot esistenti; Google-Extended esiste solo come token di controllo robots.txt. Non vedrai mai “Google-Extended” in un header di richiesta nei tuoi log.

La conseguenza pratica: bloccare Google-Extended influisce solo sull’uso del tuo contenuto per l’addestramento dell’IA — non impedisce a Googlebot di eseguire la scansione e l’indicizzazione per la Ricerca. Sono decisioni separate controllate da token separati. (Per un quadro più ampio dei bot che leggono il tuo sito, vedi AI crawler e crawler.)

Stringhe user-agent di Googlebot

Googlebot è “evergreen” — gira su una versione recente di Chrome e la versione di Chrome nella sua stringa viene aggiornata periodicamente (dal dicembre 2019). Ecco perché la versione appare come segnaposto W.X.Y.Z:

Googlebot Smartphone (mobile):

Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/W.X.Y.Z Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)

Googlebot Desktop:

Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Chrome/W.X.Y.Z Safari/537.36

Due cose da interiorizzare. Primo, non hardcodare la versioneW.X.Y.Z cambia e fare matching su di essa si romperà. Abbina invece il token stabile Googlebot. Secondo, non puoi separare mobile e desktop in robots.txt. Entrambe le varianti condividono l’unico token Googlebot, quindi una regola robots.txt si applica a entrambe.

Token dei crawler di Google

Google gestisce un’intera famiglia di crawler e fetcher, ognuno con il proprio token. Quelli che incontrerai più spesso:

CrawlerToken robots.txtNote
GooglebotGooglebotRicerca, Immagini, Video, News, Discover — mobile + desktop condividono questo token
Googlebot ImageGooglebot-ImageGoogle Immagini
Googlebot VideoGooglebot-VideoRicerca video
Googlebot NewsGooglebot-NewsUsa varie stringhe Googlebot
Google StoreBotStorebot-GoogleShopping
Google-InspectionToolGoogle-InspectionToolAlimenta gli strumenti di test di Ricerca
GoogleOtherGoogleOtherRicerca/fetch interni
Google-ExtendedGoogle-ExtendedSolo robots.txt — addestramento Gemini, nessuna stringa di richiesta

E quelli che infrangono le regole usuali — i crawler speciali che ignorano User-agent: *:

  • AdsBot (AdsBot-Google) e AdsBot Mobile (AdsBot-Google-Mobile) — non obbediscono al wildcard. Per bloccarli devi nominarli esplicitamente.
  • AdSense (Mediapartners-Google) — stesso discorso; ignora il * globale.
  • Google-Safety — usato per il rilevamento di malware/abusi; ignora robots.txt completamente.

L’implicazione è quella che la gente si perde: User-agent: * non blocca AdsBot o Google-Safety. Se “blocchi tutti i bot” con un wildcard e presumi che AdsBot sia sparito, non lo è. (Questo è esattamente il tipo di sorpresa che porta una pagina in territorio indicizzata ma bloccata da robots.txt — vedi robots.txt per la storia completa del controllo.)

Stringhe user-agent di Bingbot

Bing ha ricostruito la stringa di Bingbot nel 2022 per riflettere che esegue il rendering con Microsoft Edge. Le stringhe attuali:

Bingbot Desktop:

Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) Chrome/W.X.Y.Z Safari/537.36

Bingbot Mobile:

Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/W.X.Y.Z Mobile Safari/537.36 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)

Il token robots.txt è semplicemente bingbot. La cosa da osservare: dopo il 2022, la stringa di Bingbot sembra quasi esattamente un vero browser Chrome/Edge — l’unico indizio è il frammento bingbot/2.0 al suo interno. Se hai qualsiasi logica che filtra o rileva bot in base allo UA, quel cambiamento conta.

Come robots.txt abbina effettivamente un token

Alcune regole governano quale gruppo di regole un crawler obbedisce (secondo la specifica robots.txt di Google e RFC 9309):

  • Vince la corrispondenza più specifica. Google “determina il gruppo corretto di regole trovando… il gruppo con lo user agent più specifico che corrisponde allo user agent del crawler.” Un gruppo Googlebot batte un gruppo * per Googlebot.
  • I gruppi con lo stesso token si fondono — ma mai con *. Più gruppi che nominano lo stesso agente vengono combinati in uno. Un gruppo con agente specifico e il gruppo * non vengono fusi; * è solo il fallback quando nulla di specifico corrisponde.
  • Case-insensitive. Sia il nome del campo che il valore — Googlebot, googlebot, GOOGLEBOT sono equivalenti.
  • I numeri di versione e i wildcard nella riga del token vengono ignorati. Secondo Google, “sia googlebot/1.2 che googlebot* sono equivalenti a googlebot.” Non puoi scrivere User-agent: Googlebot* per corrispondere a una famiglia — il * lì non fa nulla.

Quindi una riga User-agent: accetta un token e lo confronta come una sottostringa semplice (senza distinzione tra maiuscole e minuscole) dell’identità del crawler — nessun blocco di versione, nessun carattere jolly al suo interno.

Perché non puoi fidarti della stringa — e come verificarla

La stringa user-agent è testo libero. Qualsiasi cosa può impostarla. Una riga di curl può dichiarare di essere Googlebot, e molti strumenti e bot malevoli fanno esattamente questo per superare i blocchi. Google lo dice nella propria documentazione su Googlebot: “l’header della richiesta HTTP user-agent usato da Googlebot è spesso falsificato da altri crawler.” Come ho scritto nella mia guida a Googlebot, “Molti strumenti SEO e alcuni bot malevoli fingono di essere Googlebot. Questo può permettere loro di accedere a siti web che cercano di bloccarli.”

Quindi non prendere mai una decisione di accesso o di contenuto basandoti solo sulla stringa. Verifica invece.

Un prerequisito prima di entrambi i metodi: ottieni il vero IP di origine. Se il tuo sito è dietro un proxy inverso, un bilanciatore di carico o una CDN, l’indirizzo nel tuo log di accesso predefinito potrebbe essere l’IP del proxy, non quello del crawler — hai bisogno dell’IP client originale (di solito inoltrato in un header come X-Forwarded-For, configurato correttamente sul tuo proxy) altrimenti nessuno dei due metodi di verifica ha senso.

Metodo 1 — DNS inverso + diretto (ideale per controlli a campione). I due passaggi di Google:

  1. “Esegui una ricerca DNS inversa sull’indirizzo IP di accesso dai tuoi log, usando il comando host. Verifica che il nome di dominio sia googlebot.com, google.com o googleusercontent.com.”
  2. “Esegui una ricerca DNS diretta sul nome di dominio recuperato al passaggio 1… Verifica che sia lo stesso indirizzo IP di accesso originale dai tuoi log.”

Per Bingbot, la stessa danza in due passaggi, ma il nome host deve terminare con search.msn.com (non un dominio con marchio Bing — una sorpresa comune). I comandi sono nella scheda Script.

Metodo 2 — intervalli IP pubblicati (ideale su larga scala). Google non pubblica una lista bianca statica per l’hardcoding (“questi intervalli di indirizzi IP possono cambiare”), ma pubblica file JSON CIDR leggibili da macchina che puoi confrontare (common-crawlers.json e i file dei crawler più ampi). Bing ora pubblica anche i suoi intervalli. Ho creato uno strumento di verifica IP di Googlebot proprio per questo — incolla gli IP e li classifica. Bing Webmaster Tools ha anche uno strumento integrato “Verifica Bingbot”.

Il DNS è migliore per un controllo una tantum dei log; il confronto degli intervalli IP è migliore per la verifica su larga scala. Usa quello che preferisci — ma usane uno. E tratta sia i nomi host attesi che i file di intervalli come attuali da oggi, non permanenti — Google e Bing hanno cambiato questi percorsi in passato (i file JSON degli intervalli IP sono stati spostati e rinominati da quando questo articolo è stato scritto), quindi ricontrolla il documento di verifica live se una ricerca che funzionava smette di corrispondere.

Una corrispondenza UA non è una prova dei risultati a valle

Anche una richiesta completamente verificata — IP reale di Googlebot, DNS inverso confermato in avanti, tutto torna — prova solo una cosa: quella richiesta è arrivata al tuo server. È tentatore trasformarla in un’affermazione molto più grande, ma ciascuna di queste è un fatto separato che richiede prove separate:

  • Richiesta ricevuta — una richiesta con quel user agent ha raggiunto il tuo server. (Ciò che la verifica dei log dimostra realmente.)
  • Identità confermata — la richiesta proviene realmente dal crawler che dichiara di essere. (Ciò che il reverse DNS / il controllo degli intervalli IP aggiunge.)
  • Contenuto recuperato e renderizzato — il crawler ha renderizzato correttamente la pagina (nessun errore, nessuna risorsa bloccata). Non è garantito solo perché una richiesta è arrivata.
  • Indicizzato — l’URL è entrato nell’indice di ricerca. Un recupero riuscito non garantisce l’indicizzazione.
  • Usato per il recupero, la citazione o l’addestramento — soprattutto per i crawler AI (Google-Extended, GPTBot e altri), una scansione non è la prova che i tuoi contenuti siano stati recuperati per una risposta specifica, citati o usati nell’addestramento del modello. Questi sono passaggi separati, per lo più non osservabili, a valle della scansione.

Un hit verificato di Googlebot nei tuoi log è un segnale reale — semplicemente non spingerlo oltre ciò che mostra realmente.

Web Bot Auth: dove sta andando la verifica

Nel 2026 Google ha iniziato a sperimentare Web Bot Auth“un protocollo crittografico sperimentale usato per autenticare le richieste inviate dai bot.” L’idea è di “andare oltre gli header facilmente falsificabili verso un’identità verificata e disaccoppiare l’identità dell’agente dagli indirizzi IP.” I bot firmano crittograficamente le loro richieste; i siti verificano la firma rispetto alle chiavi pubbliche pubblicate da Google, e le richieste firmate portano un header Signature-Agent. L’avvertenza di Google conta: “Non firmiamo ogni richiesta di un particolare agente. Assicurati di ricorrere ai metodi consolidati di verifica dei bot.” Quindi è additivo, non una sostituzione — il reverse DNS e gli intervalli IP rimangono la tua base oggi.

Anche i browser stanno diventando più difficili da analizzare dalla stringa UA

Tutto quanto sopra riguarda i crawler, ma la stessa lezione “non fidarti troppo della stringa” si applica ai browser, e sta diventando più forte. Chrome ha implementato gradualmente la User-Agent reduction: congelare o rendere meno precise parti della sua stringa UA (versione completa del browser, versione del sistema operativo, modello del dispositivo) invece di riportarle esattamente, così la stringa non può essere usata per identificare un utente specifico. La stessa formulazione di Google: “La granularità e l’abbondanza di dettagli possono portare all’identificazione dell’utente. La disponibilità predefinita di queste informazioni può portare a un tracciamento occulto.” In pratica, ciò significa che l’analisi della stringa UA per la versione esatta di browser/OS/dispositivo — analisi, rilevamento del dispositivo, triage dei bug — è sempre più inaffidabile e lo sarà sempre di più.

La sostituzione che Chrome raccomanda è User-Agent Client Hints (UA-CH): dati strutturati che il browser invia solo quando un server lo richiede esplicitamente. Gli hint a bassa entropia (marchio del browser, versione principale, flag mobile) vengono inviati per impostazione predefinita; gli hint ad alta entropia (versione esatta, versione della piattaforma, modello del dispositivo) richiedono che il server accetti tramite un header di risposta Accept-CH prima — una negoziazione esplicita, non una trasmissione. Due avvertenze prima di affidartici: è un meccanismo della famiglia Chrome/Chromium, non qualcosa che ogni browser invia, e anche dove è supportato, “il valore può essere vuoto, non restituito o popolato con un valore variabile.” I Client Hints risolvono il problema della stringa del browser; non sono un meccanismo di verifica dei crawler — Google e Bing verificano ancora i propri crawler tramite DNS e intervalli IP, non tramite Client Hints.

Targeting e cloaking basati sullo user agent

La mossa allettante — “rileva Googlebot dal suo UA e servigli qualcosa di speciale” — è sia tecnicamente fragile che una violazione delle policy.

Fragile, perché Google non esegue la scansione con un solo UA. Dovresti gestire correttamente Googlebot (mobile e desktop), Google-InspectionTool, AdsBot, GoogleOther e altri, da IP rotanti — praticamente impossibile da inserire in una whitelist in modo pulito.

Una violazione delle policy, perché servire contenuti diversi a un crawler rispetto agli utenti è cloaking: “presentare contenuti diversi a utenti e motori di ricerca con l’intento di manipolare il posizionamento nei risultati di ricerca e ingannare gli utenti.” La penalità va da una retrocessione algoritmica alla completa deindicizzazione. Nota la riga: l’adattamento legittimo (layout responsive, negoziazione dei contenuti) è accettabile — è lo scambio del contenuto stesso tra bot e utenti che sfocia nel cloaking.

Per capire dove si colloca lo user agent nel flusso più ampio, vedi crawling (l’hub) e crawler. Per controllare cosa quei bot possono recuperare, vedi robots.txt.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.