302 vs. 307: redirect temporanei

302 e 307 sono entrambi redirect temporanei: la differenza è che 307 garantisce che il metodo HTTP non cambi. Perché Google li tratta allo stesso modo, quando 307 è la scelta giusta e cos'è il «307 fantasma» di HSTS.

Prima pubblicazione: 2 lug 2026 · Ultimo aggiornamento: 8 ago 2026 · Advanced
Lingue
1 segnale di evidenza in questa pagina

302 e 307 sono entrambi redirect temporanei e Google li elabora allo stesso modo: la sua documentazione definisce 307 «equivalent to 302» e Mueller ha detto che «for SEO, it doesn't really matter» tra le coppie temporanee e permanenti; nessuno dei due codici segnala che la destinazione debba diventare canonica, anche se Google non ha pubblicato una formula di PageRank o valore dei link per nessuno dei due. La differenza reale è la preservazione del metodo: un follow automatico di 307 deve mantenere lo stesso metodo (un POST resta un POST), mentre 302 permette al client di convertire POST in GET; corpo e credenziali dipendono comunque dal client specifico, quindi vanno verificati. Usa 307 quando perdere il metodo sarebbe un problema — API, moduli, flussi POST/webhook/checkout — ma attenzione alla ripetizione di richieste non idempotenti (un pagamento o un ordine possono essere inviati di nuovo dopo un redirect); usa 302 per i normali redirect GET (geolocalizzazione/lingua, test A/B, mobile↔desktop) e tratta i redirect di manutenzione in base alla risorsa, non come una regola automatica. Due insidie: un 307 nella scheda Network del browser è spesso il «307 fantasma» di HSTS che il server non ha mai inviato (un'etichetta dell'interfaccia di Chrome, non una garanzia del protocollo), e Bing non ha pubblicato indicazioni specifiche sul confronto 302-vs-307. Il mio ordine preferito per i redirect temporanei è 307 / 302 / 303 prima di meta/HTTP refresh; tuttavia il default 307 comporta trade-off, quindi controlla header di cache, supporto dei client legacy e idempotenza prima di applicarlo ovunque.

TL;DR — 302 e 307 sono entrambi redirect temporanei e Google li elabora nello stesso modo: la sua documentazione dice che 307 è “equivalent to 302,” (traduzione) «equivalente a 302,» e Mueller ha detto “for SEO, it doesn’t really matter” (traduzione) «per la SEO non importa davvero» tra le coppie temporanee e permanenti. Nessuno dei due codici segnala che la destinazione debba diventare canonica e Google non ha pubblicato una ripartizione dichiarata di PageRank o valore dei link tra loro. La differenza reale è la preservazione del metodo: un follow automatico di 307 deve mantenere lo stesso metodo (un POST resta un POST), mentre 302 lascia che il client converta POST in GET; byte esatti del corpo, credenziali e comportamento cross-origin dipendono ancora dal client, quindi verifica invece di presumere. Scegli 307 quando perdere il metodo rompe qualcosa — API, moduli, flussi POST/webhook/checkout/autenticazione — ma fai attenzione alla ripetizione non idempotente (un pagamento o ordine reindirizzato può essere inviato di nuovo). Un 302 semplice va bene per i normali redirect GET, inclusa la raccomandazione esplicita di Google per i test A/B. Attenzione al «307 fantasma» di HSTS (un’etichetta dell’interfaccia Chrome, non una garanzia del protocollo), alle specificità dei framework (Next.js documenta 303 per Server Actions e 307 altrove: controlla la tua versione invece di generalizzare ad altre piattaforme) e al fatto che Bing non ha indicazioni distinte sul confronto 302-vs-307. Il mio ordine preferito per i redirect temporanei è 307 / 302 / 303 prima di meta/HTTP refresh; tuttavia usare 307 come default non è gratuito, quindi controlla header di cache, supporto dei client legacy e salvaguardie di idempotenza.

Sono entrambi temporanei: da qui si parte

Prima di tutto: 302 e 307 appartengono alla stessa categoria. Google raggruppa 302 (Found), 303 (See Other) e 307 (Temporary Redirect) come «redirect temporanei» e il suo comportamento per tutti e tre è lo stesso: “Googlebot follows the redirect, but the indexing pipeline doesn’t use the redirect as a signal that the redirect target should be canonical.” (traduzione) «Googlebot segue il redirect, ma la pipeline di indicizzazione non usa il redirect come segnale che la destinazione debba essere canonica.» In parole semplici, un redirect temporaneo mantiene per default canonico l’URL sorgente: non consegna alla destinazione i segnali della sorgente come fa un redirect permanente (301/308).

Evidence for this claim Google Search does not use a 302, 303, or 307 temporary redirect itself as a signal that the target should be canonical, although other signals can still lead to target indexing or selection. Scope: temporary redirects Confidence: high · Verified: Redirects and Google Search

È esattamente il confronto della fascia permanente spostato di un livello: 301/308 sono la coppia permanente, 302/307 quella temporanea e la logica «il numero più alto preserva il metodo» è identica in entrambe.

L’unica differenza reale: preservazione di metodo e corpo

Ecco la distinzione che conta davvero, in una frase: quando un client segue automaticamente un 307, la specifica HTTP corrente (RFC 9110) gli impone di mantenere lo stesso metodo della richiesta; 302 lascia al client la libertà di cambiare POST in GET. È una garanzia a livello di specifica sul metodo, non una garanzia assoluta su ogni byte del corpo, sulle credenziali o su un comportamento cross-origin: questi aspetti dipendono dal client specifico che implementa il redirect. Verificali con una richiesta reale invece di presumere che 307 ripeta ogni cosa in modo identico in ogni caso.

Il motivo dell’ambiguità è una storia di specifiche che vale la pena raccontare, perché molti articoli affermano il fatto senza spiegare il perché. Nell’epoca HTTP/1.0, il testo della specifica di 302 diceva tecnicamente che i client non avrebbero dovuto cambiare il metodo quando seguivano il redirect; i primi browser (Netscape, poi tutti gli altri) lo ignorarono e convertirono silenziosamente i metodi diversi da GET, soprattutto POST, in GET su un 302. Quel comportamento incoerente ma universale divenne lo standard di fatto. HTTP/1.1 (RFC 2616, 1999, poi confluita in RFC 7231 e nell’attuale RFC 9110) formalizzò la separazione in due codici espliciti per chiudere la confusione:

  • 303 (See Other) — recupera la destinazione del redirect con GET o HEAD (non semplicemente «sempre GET»: RFC 9110 permette entrambi i metodi sicuri), il comportamento voluto per «POST, poi redirect a una pagina risultato che si può ricaricare senza rischi».
  • 307 (Temporary Redirect) — metodo preservato rigorosamente in un follow automatico, per specifica; RFC 9110 non obbliga però ogni client a seguire il redirect.

MDN riassume bene la conseguenza pratica: “The difference between 307 and 302 is that 307 guarantees that the client will not change the request method and body when the redirected request is made. With 302, older clients incorrectly changed the method to GET.” (traduzione) «La differenza tra 307 e 302 è che 307 garantisce che il client non cambi metodo e corpo della richiesta quando effettua la richiesta reindirizzata. Con 302, i client più vecchi cambiavano erroneamente il metodo in GET.» Quindi 307 non ha aggiunto tanto una nuova capacità, quanto eliminato un’ambiguità: è la versione garantita dalla specifica di ciò che un 302 ben comportato avrebbe dovuto fare da sempre. I browser moderni sono molto più coerenti del caos dell’epoca Netscape, ma 307 elimina l’ambiguità per specifica invece che per convenzione.

Affiancati:

Tipo di richiesta302307
Redirect di una pagina con GET sempliceVa bene: ripetuto come GETVa bene: ripetuto come GET
POST + dati del moduloLa specifica permette al client di cambiarlo in GET (RFC 9110 §15.4.3): il comportamento varia secondo il clientMetodo preservato nel follow automatico: normalmente anche il corpo viaggia, ma verifica byte e credenziali esatti per il tuo client
API / non-GET (PUT, DELETE, webhook)La specifica tratta in modo specifico POST: non presumere che ogni metodo diverso da GET venga convertito allo stesso modoMetodo preservato dalla specifica; conferma corpo, credenziali e comportamento cross-origin per il client che effettua davvero la chiamata

Due note di precisione da tenere a mente: la possibilità di conversione della RFC per 302 nomina POST, non ogni metodo — non trasformarla in “302 always breaks PUT/DELETE (traduzione) «302 rompe sempre PUT/DELETE» senza controllare il client specifico. Inoltre nessuno dei due codici è memorizzabile per default solo per il suo status: RFC 9111 non elenca 302 o 307 tra i codici memorizzabili euristicamente dal solo status; la cache dipende ancora dagli header espliciti Cache-Control/Expires, non dal codice di redirect scelto.

Evidence for this claim Do not generalize the RFC's 302 POST-to-GET allowance into a claim that PUT, DELETE, or every non-GET method will change; client-specific evidence is required. Scope: 302, 303, and 307 responses Confidence: high · Verified: RFC 9110: HTTP Semantics

La mia definizione su Ahrefs è coerente con il punto sulla preservazione del metodo: “A 307 redirect is the same as a 302 redirect, except it retains the HTTP method (POST, GET) of the original request when performing the redirect.” (traduzione) «Un redirect 307 è uguale a un redirect 302, ma conserva il metodo HTTP (POST, GET) della richiesta originale quando esegue il redirect.»

Evidence for this claim RFC 9110 defines both 302 and 307 as temporary redirects; 307 forbids changing the request method, while 302 permits POST-to-GET rewriting for historical reasons. Scope: HTTP semantics for 302 and 307 responses. Confidence: high · Verified: IETF: RFC 9110 §§15.4.3, 15.4.8

Google tratta 302 e 307 in modo diverso per la SEO?

No, e Google è insolitamente esplicita. È un argomento consolidato e poco controverso, proprio come 301-vs-308.

Nella documentazione di Google sui codici di stato HTTP, la riga di 302 dice che i crawler di Google seguono il redirect e lo usano come segnale debole che la destinazione debba essere elaborata, mentre la riga di 307 dice, testualmente, “Equivalent to 302.” (traduzione) «Equivalente a 302.» Google aggiunge poi la cautela che vale allo stesso modo per le coppie 302/307 e 301/308: “While Google treats these status codes the same way, keep in mind that they’re semantically different. Use the status code that’s appropriate for the redirect so other clients (for example, e-readers, other search engines) may benefit from it.” (traduzione) «Google tratta questi codici allo stesso modo, ma ricorda che sono semanticamente diversi. Usa il codice appropriato per il redirect, così anche altri client, come lettori elettronici e altri motori di ricerca, possono trarne vantaggio.»

Questa è la risposta sul trattamento dei crawler. Google tratta i due codici allo stesso modo per come Googlebot recupera e segue il redirect e chiede soltanto di scegliere il codice semanticamente corretto affinché i client non Google si comportino bene. Evidence for this claim Google treats 307 as equivalent to 302 for Search while noting that the two status codes are semantically different. Scope: Google Search redirect handling; HTTP clients still need the appropriate status code. Confidence: high · Verified: Google: HTTP status codes and Search

Una precisazione importante, perché manca in molti articoli: l’equivalenza nel trattamento dei crawler è un’affermazione diversa dal risultato di indicizzazione. La guida di Google su redirect e Ricerca Google raggruppa 302, 303 e 307 come «redirect temporanei» e afferma che “the indexing pipeline doesn’t use the redirect as a signal that the redirect target should be canonical.” (traduzione) «la pipeline di indicizzazione non usa il redirect come segnale che la destinazione debba essere canonica.» È una garanzia reale e utile, ma non promette che l’URL sorgente continui a posizionarsi o che la destinazione non possa mai essere indicizzata attraverso altri segnali. Tratta «302 e 307 sono elaborati allo stesso modo» e «nessuno dei due è un segnale canonico per la destinazione» come due affermazioni separate, entrambe vere; non come una dichiarazione che i due codici trasferiscano PageRank o valore dei link in modo identico, cosa che la documentazione di Google non afferma in nessuna direzione.

John Mueller dice la stessa cosa con parole sue. Nell’episodio del podcast «Parliamo di redirect», Martin Splitt chiese direttamente perché 307 e 308 esistano accanto a 301 e 302. Mueller: “I had to look this up recently. And usually, with a 301 and 302, what is forwarded are GET requests.” (traduzione) «Ho dovuto verificare questa cosa di recente. Di solito, con 301 e 302 vengono inoltrate richieste GET» … “And with 307, 308, it also forwards POST requests.” (traduzione) «Con 307 e 308 vengono inoltrate anche richieste POST.» Poi arriva la citazione che chiude la questione SEO con una conclusione pratica: per la SEO non importa davvero; la domanda è se il redirect funziona per le API, che di solito non sono contenuti da indicizzare direttamente nella Ricerca.

La cornice è importante: l’intero motivo per preferire 307 a 302 è una domanda di funzionalità («funziona per le API?»), non di ranking. Non esiste una fonte primaria credibile che rivendichi un vantaggio SEO nell’uno o nell’altro senso.

Bing tratta 302 e 307 in modo diverso?

Sinceramente: Bing non lo ha dichiarato. Le sue indicazioni pubbliche sui redirect (il post del 2011 «Gestire i redirect – 301, 302 e canonical» e quello del 2020 «Migrazione di siti con Bing») discutono solo della separazione permanente-vs-temporaneo 301-vs-302 e non nominano mai 307 o 308. Diversamente dal tema 301-vs-308, per il quale Fabrice Canel ha rilasciato una dichiarazione diretta, non ho trovato una dichiarazione di un rappresentante Bing specifica su 302-vs-307.

Lo dico chiaramente invece di presumere la parità: non esiste una dichiarazione Bing che differenzi specificamente 302 e 307. Esiste un comportamento documentato di Bing da conoscere per i redirect temporanei in generale: se Bingbot vede lo stesso 302 abbastanza volte di seguito, inizia a trattarlo come 301 e a consolidare in avanti, ma Bing non ha confermato pubblicamente che questo comportamento valga anche per 307 ripetuti. Trattalo come una vera lacuna documentale, non come un fatto su 307.

Quando 307 è la scelta tecnicamente corretta

Qualsiasi redirect in cui perdere il metodo o il corpo originali romperebbe qualcosa:

  • API ed endpoint webhook — un POST/PUT/DELETE che deve arrivare al nuovo URL con metodo e payload intatti.
  • Invii di moduli (flussi POST) — come ha detto Mueller, “if you have a— I’d almost say like a broken setup, that you have a form on one domain and the results are forwarded to a different one, then you would use the 307, 308.” (traduzione) «se hai, direi quasi, una configurazione difettosa in cui hai un modulo su un dominio e i risultati vengono inoltrati a un altro, useresti 307 o 308.»
  • Passaggi di checkout, pagamento e login/autenticazione POST — ovunque perdere silenziosamente il corpo faccia fallire la transazione.

Una nota di sicurezza: la garanzia di 307 sulla preservazione del metodo vale in entrambe le direzioni. Se la richiesta originale non era idempotente — un addebito, un ordine o qualsiasi azione con effetti collaterali — un follow automatico di 307 ripete quella richiesta esatta al nuovo URL. Di solito è ciò che vuoi, ma significa anche che un retry del client o una catena di redirect può inviare più volte la stessa chiamata non idempotente. Inserisci controlli di idempotenza (una chiave di idempotenza o un controllo dei duplicati) sull’endpoint che riceve, anziché presumere che il redirect renda sicuro il replay.

Un motivo frequente per cui gli sviluppatori incontrano 307 senza sceglierlo: alcuni framework e piattaforme edge usano per default un codice che preserva il metodo per le richieste non-GET. Next.js è l’esempio documentato più chiaro: la funzione redirect() restituisce 303 quando viene chiamata da una Server Action e 307 negli altri contesti supportati, secondo il riferimento API corrente; controlla quindi la documentazione della tua versione di Next.js invece di presumere che valga un codice unico per tutto il framework. Anche altri framework, CDN e load balancer variano per prodotto e versione: verifica lo status effettivo restituito dalla piattaforma invece di presumere che corrisponda a quello di una piattaforma apparentemente simile. Vedere un 307 o 303 inatteso spesso significa che la piattaforma sta applicando consapevolmente una logica basata sul metodo, non che sia configurata male; verifica comunque il tuo ambiente specifico.

Quando 302 resta il default pragmatico

Redirect temporanei standard su richieste GET semplici: non c’è un metodo da preservare, quindi la garanzia di 307 non ti dà nulla:

  • Redirect geografici o linguistici (con la consueta cautela di non bloccare completamente i contenuti in base alla regione).
  • Test A/B e split test — la guida di Google sui test dei siti dice esplicitamente di usare 302, non 301, per le varianti di test reindirizzate, proprio perché il redirect è temporaneo.
  • Redirect di modalità manutenzione / «torno presto» — ma solo quando esiste una risorsa reale a cui mandare i visitatori; se l’intero sito non è disponibile, la guida di Google indica 503 (service unavailable) invece di un redirect. E se ciò che reindirizzi è una richiesta non-GET, come checkout o chiamata API verso la pagina di manutenzione, 307 ripeterà la richiesta al nuovo URL: non è automaticamente sicuro se la chiamata ha effetti collaterali, quindi non usarlo per abitudine senza verificare.
  • Redirect mobile↔desktop (m-dot) — l’esempio di Mueller in cui 302 è specificamente il codice giusto: “a 302 redirect would be the right one because next time someone goes there, you don’t really know if they want to go to the mobile version or the desktop version.” (traduzione) «un redirect 302 sarebbe quello giusto perché la prossima volta non sai davvero se la persona vorrà la versione mobile o quella desktop.» La destinazione corretta dipende dal visitatore, quindi non è uno spostamento permanente.

Il «307 fantasma» di HSTS: un 307 che il server non ha inviato

Questa sezione merita un titolo proprio perché è un argomento completamente diverso dalla scelta del codice di redirect e confonderli genera vera difficoltà nel debug delle catene.

Se un sito invia l’header HSTS (Strict-Transport-Security) su HTTPS, il browser lo memorizza e, al successivo tentativo di raggiungere la versione http://, aggiorna la richiesta a https:// da solo: l’URI viene riscritto prima che la richiesta tocchi la rete. Le versioni attuali di Chrome mostrano questo aggiornamento interno nei DevTools come 307, ma non lo ha emesso il server; l’etichetta esatta, il conteggio dei byte o la presentazione dell’header dipendono dalla versione di Chrome e dall’interfaccia, non sono un requisito della specifica HTTP o HSTS. Non trattare quindi «307» come un’etichetta garantita in ogni browser o versione futura. John Mueller lo ha spiegato sul suo sito: “After seeing the HTTPS URL with the HSTS header (for example, with any redirect from the HTTP version), Chrome will act like it’s seeing a 307 redirect the next time you try to access the HTTP page.” (traduzione) «Dopo aver visto l’URL HTTPS con l’header HSTS (per esempio con un qualsiasi redirect dalla versione HTTP), Chrome agirà come se vedesse un redirect 307 la prossima volta che provi ad accedere alla pagina HTTP.» E il chiarimento decisivo: “Your server’s not returning a 307, Chrome is just showing it to you as such to explain that it’s doing the redirect for you.” (traduzione) «Il tuo server non sta restituendo un 307: Chrome te lo mostra così solo per spiegare che sta eseguendo lui il redirect.»

Ho segnalato la stessa cosa nei miei contenuti sui codici di stato: esiste perfino un significato distinto, “307 HSTS Policy” (traduzione) «307 HSTS Policy» («obbliga il client a usare HTTPS»), separato da “307 Temporary Redirect.” (traduzione) «307 Temporary Redirect». La sfumatura SEO è: “When web servers require clients to only use HTTPS connections (HSTS policy), Google won’t see the 307 because it’s cached in the browser.” (traduzione) «Quando i server web richiedono ai client di usare solo connessioni HTTPS (policy HSTS), Google non vedrà il 307 perché è memorizzato nel browser.» Se noti un 307 nella scheda Network che non hai configurato, prima di cercare una regola di redirect errata controlla se è semplicemente HSTS che sta eseguendo l’upgrade HTTP→HTTPS.

Miti comuni

  • «307 non trasferisce lo stesso valore SEO di 302». Non supportato: la documentazione di Google dice che 307 è «Equivalent to 302» per il trattamento del redirect e nessuno dei due codici è considerato un segnale che la destinazione debba essere canonica. Google però non ha pubblicato una formula precisa di PageRank o valore dei link per nessuno dei due, quindi non affermare un trasferimento esattamente uguale (o diverso) in una delle due direzioni: la tesi corretta è che Google li elabora allo stesso modo, non che abbia quantificato il valore trasferito.
  • «302 è la scelta più sicura/raccomandata perché è più chiaro come lo trattano i motori». Esagerato. Il trattamento di 307 da parte di Google è documentato allo stesso modo («Equivalent to 302»): non è un caso in cui un codice sia meglio compreso dai motori. Semmai 307 offre una garanzia funzionale (preservazione di metodo e corpo) che 302 non offre. (Alcune guide di terze parti dicono il contrario: vedi la nota nella scheda risorse.)
  • «Un 307 nella scheda Network del browser significa che il server ha configurato male un redirect». Spesso falso: se HSTS è attivo e hai già caricato la versione HTTPS, quel 307 è l’upgrade HTTP→HTTPS di Chrome, non una risposta del server.
  • «I 302 convertono sempre POST in GET, quindi non usarli mai per un modulo». Esagerato per i browser moderni. La conversione POST→GET era un problema reale e documentato nei client vecchi: è il motivo per cui esiste 307 come opzione garantita, non la prova che ogni 302 odierno perda i dati POST. 302 è ambiguo, non universalmente rotto.
  • «Sostituisci tutti i redirect temporanei con 307 per migliorare il ranking». Falso e cambiamento inutile: non c’è alcun vantaggio di ranking. L’unico motivo valido per preferire 307 è una necessità concreta di preservare metodo/corpo (o una scelta generale di rendere il comportamento più a prova di futuro).
  • «303 e 307 sono praticamente uguali». No: 303 impone esplicitamente che il follow-up usi GET (è costruito per i flussi POST-redirect-pagina-risultato), mentre 307 preserva metodo e corpo originali. Sono opposti sul piano funzionale, anche se è facile confonderli perché sono elencati insieme.

La mia raccomandazione

Per i redirect temporanei, il mio ordine di implementazione preferito è 307 / 302 / 303, prima di meta refresh (0) e HTTP refresh (0). In realtà metto 307 sopra 302, non perché aiuti la SEO (non lo fa), ma perché usando sempre il codice che preserva il metodo raramente devi ricordarti di cambiare più avanti: un redirect GET semplice funziona bene come 307 e, il giorno in cui reindirizzi un modulo o un’API, sei già coperto. È un argomento di completezza, non un’opzione senza costi: una policy 307-di-default deve comunque gestire la cache con la stessa disciplina di qualsiasi redirect, funzionare per i client legacy che supporti davvero e avere salvaguardie di idempotenza per ogni destinazione che non sia un semplice fetch GET. Mueller ha espresso la stessa idea di completezza: “if you always use them, then you’re always safe.” (traduzione) «se li usi sempre, allora sei sempre al sicuro.» Detto questo, un 302 semplice va benissimo e, per il caso specifico m-dot, 302 è tecnicamente la scelta più corretta.

Dove si colloca questo confronto

302 e 307 sono due dei codici di redirect temporanei 3xx e ciascuno ha il proprio approfondimento in questo cluster, accanto alla coppia permanente (301, 308), al fratello che usa sempre GET (303) e ai confronti tra fratelli — il 301-vs-308 della fascia permanente (stessa logica di preservazione del metodo, un livello sopra) e il 301-vs-302 permanente-vs-temporaneo — oltre ai rischi operativi, catene e loop di redirect. Per l’intera famiglia delle risposte del server, consulta l’hub dei codici di stato HTTP; il tipo di redirect è anche uno dei segnali di canonicalizzazione trattati nella canonicalizzazione.

Try it live

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

Open in new tab ↗
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.