Redirect temporaneo 307

Cos'è un redirect temporaneo 307, come preserva rigorosamente il metodo HTTP a differenza di un 302, dove compare (HSTS e spostamenti temporanei) e come Google lo tratta per la SEO.

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

Un redirect temporaneo 307 significa per Google la stessa cosa di un 302: un segnale debole e temporaneo che non trasferisce il posizionamento dell'URL originale alla destinazione, quindi non c'è un motivo di ranking per preferire l'uno all'altro. La vera differenza rispetto a un 302 è una garanzia della specifica: un 307 non deve cambiare metodo o corpo della richiesta, quindi un POST resta un POST. Questo conta per moduli, API e framework moderni (Next.js usa 307 per impostazione predefinita), ma è irrilevante per i normali redirect di pagine GET. Il 307 che confonde più persone non è affatto un redirect: è l'artefatto solo-browser prodotto da HSTS quando aggiorna http a https, con un corpo di 0 byte che il server non ha mai inviato; un redirect checker o una richiesta curl semplice (non solo una nuova sessione in incognito, che non può ignorare un dominio precaricato in HSTS) mostra il vero codice di stato.

In breve — Un 307 è un redirect temporaneo che, secondo RFC 9110, non deve cambiare il metodo della richiesta: è la garanzia forte che un 302 non offre. Per la SEO è un non-evento: la documentazione di Google lo elenca come “Equivalent to 302 (traduzione) «equivalente a 302» (un segnale debole e temporaneo), e Mueller ha detto che la scelta tra 307 e 302 «non importa davvero» per la ricerca: conta se il redirect deve funzionare per traffico POST/API. Il 307 che confonde davvero le persone è l’artefatto HSTS: un «redirect» solo del browser, da 0 byte, che il server non ha mai inviato e che compare quando il browser aggiorna da http a https da solo. Ha due casi funzionalmente non correlati; distinguerli è tutto il lavoro.

Un 307 ha due casi completamente diversi

Questa è l’idea che organizza tutto ciò che segue e viene direttamente dalla mia guida sui codici di stato, dove il 307 ha due voci separate: “307 Temporary Redirect – Has the same functionality as a 302 redirect, except you can’t switch between POST and GET” (traduzione) «Redirect temporaneo 307: ha la stessa funzionalità di un redirect 302, salvo che non puoi passare da POST a GET» e “307 HSTS Policy – Forces the client to use HTTPS when making requests instead of HTTP.” (traduzione) «Policy HSTS 307: obbliga il client a usare HTTPS invece di HTTP nelle richieste». Condividono un numero e quasi nient’altro:

  1. 307 come redirect temporaneo reale emesso dal server — scelto deliberatamente (o impostato come default da un framework) per preservare metodo HTTP e corpo in una richiesta non-GET.
  2. 307 come artefatto HSTS del browser — non è affatto una risposta del server. Il browser aggiorna internamente http a https e etichetta quell’aggiornamento come 307.

Confondere questi due casi è la fonte più comune di confusione sui 307. Li esaminerò uno alla volta.

Caso 1: il 307 reale — cosa richiede davvero la specifica

RFC 9110 (l’attuale specifica sulla semantica HTTP) è inequivocabile al §15.4.8:

“The 307 (Temporary Redirect) status code indicates that the target resource resides temporarily under a different URI and the user agent MUST NOT change the request method if it performs an automatic redirection to that URI.” (traduzione) «Il codice di stato 307 (redirect temporaneo) indica che la risorsa di destinazione risiede temporaneamente sotto un URI diverso e che l’user agent NON DEVE cambiare il metodo della richiesta se esegue un redirect automatico verso quell’URI.»

Evidence for this claim RFC 9110 defines 307 Temporary Redirect as a temporary move and requires clients not to change the request method when following it automatically. Scope: HTTP semantics for real server 307 responses, not browser-internal HSTS displays. Confidence: high · Verified: IETF: RFC 9110 §15.4.8 — 307 Temporary Redirect

Quel «MUST NOT» è un requisito vincolante, non un suggerimento. Confrontalo con la sezione sul 302 (§15.4.3), che documenta apertamente il caos storico che il 307 è nato per risolvere: “For historical reasons, a user agent MAY change the request method from POST to GET for the subsequent request. If this behavior is undesired, the 307 (Temporary Redirect) status code can be used instead.” (traduzione) «Per ragioni storiche, un user agent PUÒ cambiare il metodo della richiesta da POST a GET per la richiesta successiva. Se questo comportamento è indesiderato, si può usare invece il codice di stato 307 (redirect temporaneo).» In altre parole, il 307 esiste proprio per eliminare l’ambiguità POST→GET che i client più vecchi avevano con 302.

MDN esprime in termini pratici la stessa distinzione:

“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. 307 and 302 responses are identical when the request method is GET.” (traduzione) «La differenza tra 307 e 302 è che 307 garantisce che il client non cambi metodo e corpo della richiesta quando esegue la richiesta reindirizzata. Con 302, i client più vecchi cambiavano erroneamente il metodo in GET. Le risposte 307 e 302 sono identiche quando il metodo della richiesta è GET.»

È l’ultima frase a contare di più per la SEO. Quasi ogni redirect che interessa a chi si occupa di SEO — da una vecchia pagina a una nuova — è una richiesta GET, e per le La garanzia di preservazione del metodo entra in gioco solo quando il metodo non è GET: reinvio di moduli, endpoint API, destinazioni webhook, passaggi POST di checkout o autenticazione. La specifica garantisce metodo e corpo, ma non fissa da sola il comportamento esatto di ogni client per header, credenziali o richieste cross-origin durante il replay: verificalo con il client reale invece di presumere un comportamento byte per byte. Se confronti i due codici per lo spostamento di una pagina normale, il confronto è trattato in dettaglio nell’articolo dedicato a 302 vs. 307; qui si presuppone che tu conosca già il concetto base di redirect temporaneo e ci si concentra su ciò che è specifico del 307.

302 vs. 303 vs. 307 in una tabella

Tutti e tre rientrano nella categoria «temporanea» della RFC, ma non si comportano allo stesso modo sui due assi che contano davvero: preservazione del metodo e cache:

CodiceMetodo nel redirect automaticoMemorizzabile euristicamente in cache?
302 FoundPuò cambiare POST in GET (comportamento storico dei client; non un requisito RFC)No
303 See OtherRecupera deliberatamente la destinazione con GET o HEADNo
307 Temporary RedirectNON DEVE cambiare il metodoNo

Nessuno dei tre è memorizzabile euristicamente per impostazione predefinita: un 307 (come 302 e 303) ha bisogno di un segnale esplicito di freschezza (Cache-Control, Expires ecc.) prima che una cache lo conservi senza richiederlo di nuovo.

Caso 1, continua: come Google tratta un 307 reale per la SEO

In breve: esattamente come un 302. La documentazione di Google sui codici di stato HTTP elenca la riga del 307 come “Equivalent to 302 (traduzione) «equivalente a 302» e la riga del 302 da cui eredita il comportamento spiega cosa significa:

“By default, Google’s crawlers follow the redirect, and Google systems use the redirect as a weak signal that the redirect target should be processed.” (traduzione) «Per impostazione predefinita, i crawler di Google seguono il redirect e i sistemi Google lo usano come segnale debole per elaborare la destinazione del redirect.»

«Debole» è la parola operativa: un redirect temporaneo non consolida la canonicalizzazione sulla destinazione come fa uno permanente. La guida Google Redirect e Google Search raggruppa 302, 303 e 307 sotto la categoria “temporary” (traduzione) «temporanei» e descrive direttamente il comportamento: “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 lo usa come segnale che la destinazione debba essere canonica.» La stessa pagina inquadra così l’intento: “If you just want to send users to a different page temporarily, use a temporary redirect.” (traduzione) «Se vuoi solo mandare temporaneamente gli utenti a una pagina diversa, usa un redirect temporaneo.»

Evidence for this claim Google's indexing pipeline does not use a temporary 302, 303, or 307 redirect as a signal that the redirect target should be canonical. Scope: redirect crawling, indexing, and canonicalization Confidence: high · Verified: Redirects and Google Search

Subito dopo le righe del 307 e del 308, Google aggiunge la cautela da ricordare:

“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) «Anche se Google tratta questi codici allo stesso modo, ricorda che sono semanticamente diversi. Usa il codice appropriato per il redirect, così altri client, per esempio lettori elettronici e altri motori di ricerca, possono trarne vantaggio.»

Google quindi mette 307 e 302 nello stesso bucket ai fini del ranking, ma ti dice comunque di scegliere il codice semanticamente corretto. Questa è tutta la risposta SEO. Evidence for this claim Google treats 307 as equivalent to 302 for Search while noting that the HTTP semantics differ. Scope: Google Search redirect handling; clients still need the semantically appropriate status code. Confidence: high · Verified: Google: HTTP status codes and Search John Mueller lo ha detto in modo ancora più diretto nell’episodio 51 del podcast «Parliamo di redirect», spiegando che “with 307, 308, it also forwards POST requests” (traduzione) «con 307 e 308 vengono inoltrate anche richieste POST», a differenza di 301/302, che inoltrano richieste GET, e poi arrivando al punto:

“I think for SEO, it doesn’t really matter. It’s more like, I don’t know… Does it work for APIs or not? And usually, APIs are not something that you need to have indexed directly in Search.” (traduzione) «Penso che per la SEO non importi davvero. È più una questione del tipo: funziona per le API oppure no? E di solito le API non sono qualcosa che devi indicizzare direttamente nella Ricerca.»

Non c’è alcun vantaggio di ranking nel convertire i redirect temporanei in 307. L’unico motivo valido per sceglierlo è preservare metodo e corpo, oppure adottarlo come preferenza generale per rendere il sistema più resistente al futuro: ci tornerò alla fine.

Caso 1, continua: default di framework e CDN

Sempre più domande del tipo «perché questo è un 307?» non riguardano scelte deliberate: sono default del framework. La funzione redirect() di Next.js usa 307 per default e la documentazione spiega chiaramente perché, sotto il titolo «Perché redirect usa 307 e 308?»: “The redirect() method uses a 307 by default, instead of a 302 temporary redirect, meaning your requests will always be preserved as POST requests.” (traduzione) «Il metodo redirect() usa 307 per default invece di un redirect temporaneo 302, quindi le richieste vengono sempre preservate come richieste POST». (Next.js usa specificamente 303 nelle Server Actions e offre permanentRedirect() per il caso 308.) Se vedi 307 che non hai scritto a mano, controlla se il framework o la piattaforma edge li usa come default per i redirect non-GET: di solito è la risposta, ed è spesso quella corretta.

Caso 2: il «307 fantasma» HSTS che il server non ha mai inviato

Questo è il territorio davvero poco trattato e il motivo per cui un articolo dedicato ai 307 è utile. Quando un sito invia un header Strict-Transport-Security (HSTS), dice al browser di caricarsi da quel momento solo via https. Alla prossima richiesta alla versione http, il browser passa a https da solo, senza parlare con il server, e mostra quell’aggiornamento interno come «307» negli strumenti di sviluppo e nei crawler.

John Mueller ha spiegato il meccanismo sul suo sito personale:

“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. 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) «Dopo aver visto l’URL HTTPS con l’header HSTS, Chrome si comporterà come se vedesse un redirect 307 la prossima volta che provi ad accedere alla pagina HTTP. Il server non sta restituendo un 307: Chrome te lo mostra così per spiegare che sta eseguendo lui il redirect.»

Il corpo da 0 byte è l’indizio: come aggiunge Mueller, “the 307 isn’t actually a redirect at all, it’s just a placeholder.” (traduzione) «il 307 non è davvero un redirect, è solo un segnaposto». La mia guida sui redirect spiega così la conseguenza pratica per gli audit: “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. The initial hit (without cache) will have a server response code that’s likely a 301 or a 302. But your browser will show you a 307 for subsequent requests which makes it more difficult to troubleshoot. You will need to use a fresh Incognito session to see the returned status code.” (traduzione) «Quando i server richiedono ai client solo connessioni HTTPS (policy HSTS), Google non vedrà il 307 perché è memorizzato nel browser. Il primo accesso senza cache avrà probabilmente una risposta 301 o 302, mentre il browser mostrerà 307 nelle richieste successive. Per vedere il codice restituito devi usare una nuova sessione in incognito.»

Cosa vede davvero Googlebot con HSTS (e come è cambiata la storia)

Vale la pena leggere insieme due dichiarazioni di Google distanti cinque anni. Nel dicembre 2015 Zineb Ait Bahajji (allora in Google) disse, secondo Search Engine Roundtable, “With HSTS implemented, Googlebot sees a 301 redirect (try it with Fetch as Google). The 307 is just an ‘internal redirect’.” (traduzione) «Con HSTS attivo, Googlebot vede un redirect 301 (prova con Fetch as Google). Il 307 è solo un “redirect interno”.» Nell’ottobre 2020 l’inquadramento di Mueller in un video Ask Google Webmasters, riportato da Search Engine Journal, era leggermente diverso: “In short, [Googlebot] doesn’t interact with them. 307 redirects are generally not real redirects.” (traduzione) «In breve, [Googlebot] non interagisce con loro. I redirect 307 in genere non sono redirect reali.» In entrambi i casi il crawler non vede lo stesso «307» che una persona vede negli strumenti di sviluppo: gli strumenti e l’infrastruttura di crawling sono cambiati (Fetch as Google è stato ritirato a favore di URL Inspection), ma il punto di fondo vale da almeno un decennio: nel caso HSTS non c’è un vero 307 emesso dal server. Considera la frase del 2020 come indicazione corrente e quella del 2015 come contesto storico.

La conseguenza operativa importante è questa: HSTS è una comodità del browser, non un meccanismo per far scoprire URL ai crawler. I proprietari dei siti hanno comunque bisogno di un vero redirect lato server (un 301 autentico) da http a https se vogliono che quel percorso funzioni per i crawler.

Come tratta Bing un 307

Onestamente? C’è una lacuna documentale. Non ho trovato alcuna dichiarazione pubblica di Bing che nomini il 307 o, nello specifico, il 307 prodotto da HSTS. Le indicazioni di Bing sui redirect (il post del 2011 Gestire i redirect – 301, 302 e canonical e quello del 2020 Migrazione di siti con Bing) coprono solo la distinzione permanente- temporaneo 301/302: nessun riferimento a 307, 308 o HSTS. Invece di presumere la parità con Google, diciamolo chiaramente: Bing non ha pubblicato nulla di specifico sui 307. Il fenomeno resta reale e rilevante per i crawler indipendentemente dal motore — lo Spider SEO di Screaming Frog offre l’opzione «Respect HSTS Policy» proprio perché HSTS influisce sul crawling — ma questa è documentazione di uno strumento, non una dichiarazione di Bing.

Quando scegliere deliberatamente un 307

Scegli un 307 (invece di un 302) ogni volta che perdere il metodo o il corpo originale romperebbe qualcosa:

  • Endpoint API e destinazioni webhook che ricevono POST/PUT/PATCH.
  • Flussi di invio moduli (POST) che fanno redirect dopo l’elaborazione.
  • Passaggi POST di checkout o login tra host diversi.
  • Qualsiasi caso in cui la richiesta trasporta un corpo che non puoi permetterti di perdere.

Per un normale spostamento da pagina a pagina, per Google 302 e 307 sono indistinguibili, quindi entrambi vanno bene sul piano SEO. Se stai gestendo la versione permanente della stessa logica di preservazione del metodo, il rapporto è 301-vs-308: 308 sta a 301 come 307 sta a 302.

La mia preferenza dichiarata, espressa nella guida sui redirect, è più netta del solito «non importa»: *“my preferred order would be: 307 / 302 / 303

Meta refresh 0 / HTTP refresh 0.”* (traduzione) «il mio ordine preferito sarebbe: 307 / 302 / 303 > Meta refresh 0 / HTTP refresh 0». Metto 307 prima tra le opzioni temporanee: usarlo in modo coerente protegge sempre il metodo, che è più o meno l’argomento della «completezza» sollevato anche da Mueller. E qualunque codice tu scelga, controlla che un 307 reale (o l’artefatto HSTS) non diventi un hop in una catena di redirect più lunga: ogni hop aggiunge latenza e riduce l’efficienza.

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.