401 Unauthorized: guida all’autenticazione HTTP

Che cosa significa una risposta HTTP 401 Unauthorized, come differisce da 403 Forbidden, come Google tratta le pagine protette dall’autenticazione e quali sono le implicazioni SEO.

Prima pubblicazione: 28 giu 2026 · Ultimo aggiornamento: 22 ago 2026 · Advanced
Lingue
1 segnale di evidenza in questa pagina

401 Unauthorized significa che la richiesta non contiene credenziali di autenticazione valide: il server vuole che tu effettui l’accesso. È diverso da 403 Forbidden (le credenziali sono state fornite ma l’accesso è negato), ma per l’indicizzazione Google li tratta allo stesso modo: Googlebot non invia credenziali, quindi il contenuto di una pagina che restituisce 401 di fatto non esiste per Google, non viene indicizzato e scompare dall’indice nel tempo se lo era già. Un 401 non è automaticamente negativo: è il modo corretto per proteggere siti di staging e aree riservate ai membri; è un problema solo quando colpisce una pagina che vuoi posizionare. Non ha effetto sul crawl rate, nonostante il mito comune.

TL;DR — 401 Unauthorized è un errore client (RFC 9110 §15.5.2, che ha sostituito RFC 7235) e significa che la richiesta non contiene credenziali di autenticazione valide, comprese credenziali inviate ma rifiutate, non solo credenziali mai inviate; un 401 conforme invia anche un header WWW-Authenticate che indica lo schema atteso. È diverso da 403, un rifiuto che non richiede quella challenge e può non avere alcun rapporto con le credenziali, ma Google tratta tutti i 4xx tranne 429 allo stesso modo per l’indicizzazione: il contenuto “non esiste”, quindi non viene indicizzato e gli URL indicizzati in precedenza scompaiono nel tempo. Poiché il normale Googlebot non invia mai credenziali, un 403 a Googlebot è, secondo le parole di Google, di solito una configurazione errata del server. 401/403 non hanno effetto sul crawl rate complessivo del sito (un mito ripetuto spesso), anche se un singolo URL che continua a restituire 4xx viene riesplorato meno spesso nel tempo. Un 401 è il modo corretto e approvato da Google per proteggere contenuti davvero privati; è un problema solo quando colpisce una pagina che vuoi indicizzare. Per i contenuti a pagamento esiste una strada autorizzata che non consiste in un 401 generalizzato.

Che cos’è davvero un 401

401 Unauthorized è una risposta di errore del client. La definizione di MDN è la formulazione tecnica più chiara:

“The HTTP 401 Unauthorized client error response status code indicates that a request was not successful because it lacks valid authentication credentials for the requested resource. This status code is sent with an HTTP WWW-Authenticate response header that contains information on the authentication scheme the server expects the client to include to make the request successfully.” (traduzione) «Il codice di stato di errore client HTTP 401 indica che una richiesta non ha avuto successo perché non contiene credenziali di autenticazione valide per la risorsa richiesta. Questo codice viene inviato con un header di risposta HTTP WWW-Authenticate che contiene informazioni sullo schema di autenticazione che il server si aspetta che il client includa per completare correttamente la richiesta.»

Evidence for this claim A 401 response means the request lacks valid authentication credentials and the response must include a WWW-Authenticate challenge. Scope: RFC 9110 defines the status semantics and required challenge header; it does not prescribe a site's authentication product or login flow. Confidence: high · Verified: IETF: RFC 9110 §15.5.2 — 401 Unauthorized

Da qui vale la pena ricavare due cose. Primo, “authentication”: chi effettua la richiesta non ha dimostrato chi è. Di solito significa credenziali mancanti, non valide o scadute, ma un 401 può anche seguire credenziali inviate e rifiutate; non presumere che non ci sia affatto un header di autenticazione senza controllare la richiesta. Secondo, un 401 conforme alla specifica deve contenere un header WWW-Authenticate: secondo RFC 9110 §15.5.2, che ha sostituito il precedente RFC 7235, comunica al client quale schema o quali schemi si aspetta (HTTP Basic Auth, un token Bearer, un flusso con cookie di sessione e così via). Se stai facendo il debug di un 401, quello è il primo header da controllare: se esiste e quale schema nomina. Evidence for this claim A 401 response means the request lacks valid authentication credentials and the response must include a WWW-Authenticate challenge. Scope: RFC 9110 defines the status semantics and required challenge header; it does not prescribe a site's authentication product or login flow. Confidence: high · Verified: IETF: RFC 9110 §15.5.2 — 401 Unauthorized

Nella mia guida ai codici di stato riassumo il 401 così: “the client hasn’t identified or verified itself when needed” (traduzione) «il client non si è identificato o verificato quando era necessario.» È tutta l’idea: nessuno ha ancora dichiarato chi è.

401 vs 403 Forbidden: la distinzione che conta

È qui che la maggior parte delle persone diventa vaga, quindi rendiamola netta. In una riga:

  • 401 = “Chi sei?”: le credenziali sono mancanti o non valide; autentica il client e riprova.
  • 403 = “So chi sei, ma no”. La richiesta è stata capita, ma l’accesso è negato indipendentemente dalle credenziali.

MDN la descrive allo stesso modo:

“A 401 Unauthorized is similar to the 403 Forbidden response, except that a 403 is returned when a request contains valid credentials, but the client does not have permissions to perform a certain action.” (traduzione) «Un 401 Unauthorized è simile alla risposta 403 Forbidden, salvo che un 403 viene restituito quando una richiesta contiene credenziali valide ma il client non ha i permessi per eseguire una determinata azione.»

Nella mia guida traccio la stessa differenza: 401 è “the client hasn’t identified or verified itself when needed” (traduzione) «il client non si è identificato o verificato quando era necessario», mentre 403 è “the client is known but doesn’t have access rights” (traduzione) «il client è noto ma non ha i diritti di accesso». Autenticazione contro autorizzazione.

Questa frase è una scorciatoia affidabile, ma se devi scegliere tra i due codici nel codice o in una regola WAF esiste un test di protocollo più preciso: 401 richiede la challenge WWW-Authenticate, perché RFC 9110 la rende obbligatoria; 403 non la richiede, poiché un rifiuto 403 può dipendere da ragioni del tutto estranee alle credenziali (blocco IP, regola di permessi, criterio di rate limit). Quindi “erano presenti le credenziali?” da solo non basta per distinguerli: un 401 può seguire credenziali rifiutate, non solo mancanti. Se devi decidere quale codice restituire, chiediti invece: sto emettendo una challenge di autenticazione (401) o un rifiuto netto (403)?

Ecco la sfumatura SEO non ovvia, ed è il punto di Google sul 403. Il normale Googlebot non invia mai credenziali. Quindi un 403 servito specificamente a Googlebot significa, secondo le parole di Google, che il server sta sbagliando:

“HTTP 403 means that the user agent provided credentials, but was not granted access. However, Googlebot never provides credentials, so your server is returning this error incorrectly. The page will not be indexed.” (traduzione) «HTTP 403 significa che lo user agent ha fornito credenziali, ma non ha ottenuto l’accesso. Tuttavia Googlebot non fornisce mai credenziali, quindi il server sta restituendo questo errore in modo errato. La pagina non verrà indicizzata.»

È un diagnostico utile. Un 401 a Googlebot può essere intenzionale (la pagina è protetta per scelta). Un 403 a Googlebot indica di solito una configurazione errata: Googlebot non ha inviato credenziali, quindi nulla dovrebbe attivare per lui una risposta “credenziali rifiutate”. Se vedi 403 sulle pagine che Googlebot dovrebbe raggiungere, sospetta prima CDN, WAF o configurazione del server. (Questo descrive i crawler comuni di Google. Google documenta crawler speciali e fetcher attivati dagli utenti come categorie separate, con comportamenti propri: non presumere che la regola “non invia mai credenziali” valga per ogni integrazione di prodotto Google senza controllare.)

401 Unauthorized403 Forbidden
SignificatoCredenziali mancanti/non valide: “chi sei?”Richiesta capita ma accesso negato: “ti conosco, ma no”
Header richiestoWWW-Authenticate (RFC 9110)Nessuno richiesto
Trigger tipicoLogin wall, token scaduto, Basic Auth, timeout della sessioneRegole di permessi, blocchi IP/geografici, regole WAF, restrizioni di directory
Per GooglebotPuò essere intenzionale (pagina protetta)Di solito configurazione errata del server (Googlebot non invia credenziali)
Risultato dell’indicizzazioneNon indicizzato; scompare nel tempoNon indicizzato; scompare nel tempo

L’ultima riga è la conclusione: per l’indicizzazione Google li tratta allo stesso modo.

Come tratta Google le pagine 401

Il documento di Google sui codici di stato HTTP è netto sulla famiglia 4xx:

“Google doesn’t use the content from URLs that return 4xx status codes. If a URL was previously used but is now returning 4xx status code, Google systems will stop using the URL over time. In the case of Google Search, Google doesn’t index URLs that return a 4xx status code, and URLs that are already indexed and return a 4xx status code are removed from the index.” (traduzione) «Google non usa il contenuto degli URL che restituiscono codici di stato 4xx. Se un URL era usato in precedenza ma ora restituisce un codice di stato 4xx, i sistemi Google smetteranno di usarlo nel tempo. In Google Search, Google non indicizza gli URL che restituiscono un codice di stato 4xx e gli URL già indicizzati che restituiscono un codice di stato 4xx vengono rimossi dall’indice.» Evidence for this claim Google does not index 4xx URLs and removes already-indexed 4xx URLs over time. Scope: Google's crawler documentation supports the Search indexing outcome for 401 responses; it does not address access decisions for private users. Confidence: high · Verified: Google: How HTTP status codes affect Google's crawlers

E 401 non è un’eccezione all’interno di quella famiglia. Nella tabella del documento, 401 (unauthorized) e 403 (forbidden) sono righe separate che condividono una sola spiegazione:

“All 4xx errors, except 429, are treated the same: Google crawlers inform the next processing system that the content doesn’t exist.” (traduzione) «Tutti gli errori 4xx, tranne 429, sono trattati allo stesso modo: i crawler Google informano il sistema di elaborazione successivo che il contenuto non esiste.»

Quindi l’esito è binario, non un declassamento. Una pagina che restituisce 401 non “si posiziona più in basso”: non viene indicizzata affatto o viene rimossa completamente se prima era indicizzata. Non esiste una penalizzazione parziale. Questo coincide con la tesi di base della mia guida: i 4xx fanno uscire le pagine dall’indice. Questo articolo è l’approfondimento specifico sui 401.

Una precisazione sui tempi: la rimozione avviene “nel tempo”, non al primo fetch errato. I documenti Google descrivono un processo graduale e il sistema di crawling è stato storicamente descritto come tollerante verso errori di breve durata prima di considerare un URL realmente scomparso.

Il mito del crawl rate: il 401 NON rallenta il crawling

Questo punto confonde molti articoli altrimenti validi, quindi voglio essere preciso. Un 401 (o 403) non rallenta il crawl rate di Google. Google lo dice direttamente:

“Don’t use 401 and 403 status codes for limiting the crawl rate. The 4xx status codes, except 429, have no effect on crawl rate.” (traduzione) «Non usare i codici di stato 401 e 403 per limitare il crawl rate. I codici di stato 4xx, tranne 429, non hanno effetto sul crawl rate.»

È importante perché troverai consigli secondo cui proteggere pagine dietro un 401 “risparmia crawl budget” o “spreca crawl budget”: entrambe le formulazioni sono sbagliate. Solo 429 e segnali di tipo 5xx, come 503, dicono a Googlebot di rallentare. Un 401 non è un throttle: è un segnale di indicizzazione “il contenuto non esiste”, punto. Se vuoi davvero rallentare temporaneamente un crawl, usa 429/503, non 401/403.

Una precisazione sull’ambito, perché è facile confondere queste due affermazioni: “nessun effetto sul crawl rate” riguarda il crawl rate complessivo del sito. Separatamente, Google dice che un singolo URL che continua a restituire 4xx viene riesplorato meno spesso nel tempo: la frequenza dei tentativi diminuisce gradualmente. Sono ambiti diversi: il crawl budget del sito non viene limitato, ma un URL che continua specificamente a restituire 401 viene controllato meno spesso mentre Google ne riduce la priorità.

Esiste anche un caso speciale: un 401 su una pagina normale e un 401 sullo stesso /robots.txt non vengono trattati allo stesso modo. Se il file robots.txt restituisce un 4xx diverso da 429 (compreso 401), Google lo tratta come se non esistesse alcun robots.txt: presume che quel file non imponga restrizioni al crawl, non che l’intero sito sia irraggiungibile. Non mettere /robots.txt dietro lo stesso muro di autenticazione delle pagine private.

Un 401 è sempre un problema? No.

Un 401 è un bug solo quando è involontario su una pagina che vuoi pubblica. Se la pagina è davvero privata, un 401 è il modo corretto per tenerla fuori dalla ricerca ed è ciò che raccomanda Google. John Mueller lo ha detto chiaramente (riportato da Search Engine Journal): l’approccio ideale è un’autenticazione lato server che impedisca agli utenti normali di vedere il contenuto, “that would include GoogleBot” (traduzione) «e questo includerebbe GoogleBot». (Riportato da Search Engine Journal a partire da un hangout Google del 2019; trattalo come una dichiarazione del rappresentante accuratamente parafrasata, non come una citazione verificata per frammento.)

L’autenticazione lato server, che è ciò che produce un 401, è il meccanismo raccomandato per nascondere contenuti non pubblici, prima di robots.txt, proprio perché blocca davvero l’accesso invece di limitarsi a chiedere ai bot di non entrare.

Quindi il quadro decisionale è semplice:

  • Deve restare 401: ambienti di staging, aree riservate ai membri, strumenti interni e qualsiasi contenuto realmente privato. Funziona come progettato. Non “correggerlo”.
  • Va corretto: una pagina pubblica e indicizzabile che restituisce 401 per errore, per un falso positivo CDN/WAF, Basic Auth rimasto attivo, token scaduto o conflitto tra plugin/middleware.

Implicazioni SEO e la trappola “da me funziona”

I modi pratici in cui può fallire:

  • Le pagine che vuoi indicizzare restano invisibili finché il cancello non viene rimosso.
  • Le pagine che prima si posizionavano scompaiono se iniziano a restituire 401.
  • La trappola “da me funziona”: chi esegue il test è autenticato, ha effettuato l’accesso o usa un IP in allowlist, mentre il crawler no. La guida di Google per il caso 401 dice: “You can verify this error by visiting the page in incognito mode.” (traduzione) «Puoi verificare questo errore visitando la pagina in modalità in incognito.» Meglio ancora, testa senza autenticazione con curl -I https://example.com/page oppure usa URL Inspection/Live Test di Search Console.

Quando devi davvero lasciar passare un crawler reale, verificalo tramite IP / reverse-DNS, mai affidandoti soltanto allo user-agent: gli user-agent sono facilissimi da falsificare, quindi inserire “Googlebot” in allowlist per nome è una falla di sicurezza, non una soluzione.

E i contenuti a pagamento o riservati agli abbonati?

Un 401 generalizzato a tutti, Googlebot compreso, non è l’unica opzione se vuoi che i contenuti protetti continuino a posizionarsi. Google supporta l’indicizzazione dei contenuti a pagamento tramite i dati strutturati isAccessibleForFree, insieme alla concessione dell’accesso alle identità crawler dedicate di Google per i contenuti riservati ad abbonati o utenti registrati. Il punto del markup è:

“This structured data helps Google differentiate paywalled content from the practice of cloaking, which violates spam policies.” (traduzione) «Questi dati strutturati aiutano Google a distinguere i contenuti a pagamento dalla pratica del cloaking, che viola le norme antispam.»

L’avvertenza incorporata è questa: servire silenziosamente il contenuto completo solo a Googlebot, senza dichiararlo nei dati strutturati, è cloaking, un rischio rispetto alle norme antispam. Se vuoi indicizzare contenuti protetti, usa il metodo approvato (markup + accesso al crawler), non un bypass silenzioso.

Come correggere un 401 indesiderato

  1. Conferma che sia davvero indesiderato. La pagina dovrebbe essere pubblica? Se è staging o riservata ai membri, non c’è nulla da correggere.
  2. Rimuovi il requisito di autenticazione dalle pagine pubbliche: elimina Basic Auth rimasto (.htaccess/nginx), correggi i token scaduti e risolvi i conflitti tra plugin/middleware.
  3. Controlla CDN/WAF e non presumere di sapere già quale strato abbia emesso il 401. La risposta, insieme al suo header WWW-Authenticate, dimostra che è avvenuta una challenge; non dice da dove proviene: applicazione, proxy di identità/autenticazione, regole di gestione dei bot della CDN o del WAF e server d’origine possono generarla. I falsi positivi delle regole edge di bot management sono una causa comune: ispeziona i log a ogni livello e verifica Googlebot tramite reverse DNS prima di inserire eccezioni in allowlist.
  4. Lascia passare i crawler verificati tramite IP/reverse-DNS, non tramite user-agent.
  5. Non usare 401 per deindicizzare una pagina che potresti rendere pubblica: usa invece noindex (lasciando consentito il crawling). Un login wall serve a contenuti che devono essere realmente privati.
  6. Valida la correzione con il Live Test di URL Inspection, ma considera il superamento una conferma del fetch attuale, non una garanzia. Google non si impegna su una tempistica fissa per ricrawl, reindicizzazione o recupero del ranking dopo la correzione di un 401: un Live Test riuscito dimostra che il fetch live di Google è passato, non che crawling programmato o indicizzazione siano aggiornati. Lascia passare tempo e ricontrolla il report Page Indexing invece di aspettarti un’inversione immediata.

Per il flusso completo di diagnosi, correzione e validazione in Google Search Console specifico dello stato Page Indexing “Blocked due to unauthorized request (401)”, consulta l’articolo compagno dedicato: questo pezzo resta al livello di protocollo e concetti.

Bing

Bing si comporta sostanzialmente allo stesso modo: un URL che restituisce 401 (o 403) a Bingbot è inaccessibile e non viene indicizzato. Bingbot ha bisogno di accesso non autenticato proprio come Googlebot e va verificato tramite gli intervalli IP pubblicati per l’allowlist, non tramite lo user-agent.

Try it live

This is a real endpoint on this site — not a simulation. Hit it from the button, open it in a new tab, or curl -i it from your terminal, and the server answers with the actual status code this article is about.

Open in new tab ↗

Add an expert note

Pin an expert quote

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