Vai al contenuto principale

Guide / I codici di stato HTTP spiegati

301 vs 302: reindirizzamenti permanenti e temporanei

Un 301 dice che la risorsa si è spostata permanentemente e il nuovo URL dovrebbe sostituire ovunque quello vecchio; un 302 dice che lo spostamento è temporaneo e l'URL originale è ancora quello reale. I motori di ricerca agiscono su questa differenza, motivo per cui il codice sbagliato ti costa posizionamenti.

Cosa dicono i due codici a un client

Entrambi i codici inviano il client all'indirizzo nell'header Location, e per un visitatore sembrano identici. La differenza sta in cosa fa tutto il resto con l'informazione. Un 301 invita client e crawler ad aggiornare i propri record: sostituire il segnalibro, riscrivere il link, indicizzare la destinazione invece della sorgente. Un 302 chiede loro di continuare a usare l'URL originale e prendere solo una deviazione questa volta. I browser possono mettere in cache un 301 e smettere del tutto di chiedere al server; un 302 non è memorizzabile in cache per impostazione predefinita a meno che la risposta non dica diversamente.

Quando usare quale

  • Usa 301 per un cambio di dominio, una migrazione da HTTP a HTTPS, una canonicalizzazione da non-www a www, una ristrutturazione permanente degli URL, una pagina unita o rinominata, o una pagina prodotto ritirata che punta al suo sostituto più vicino.
  • Usa 302 per una pagina di manutenzione, un A/B test, una scelta di landing geografica o linguistica che potresti cambiare, un URL di campagna a breve termine, o una destinazione temporanea "torna più tardi".

Non usare mai un 301 per qualcosa che intendi invertire. Poiché i client lo mettono in cache, i visitatori di ritorno possono continuare ad atterrare sulla destinazione temporanea molto tempo dopo che hai eliminato la regola, e non c'è modo di raggiungere le loro cache. L'errore opposto: lascia un 302 su uno spostamento permanente e il vecchio URL resta indicizzato, quello nuovo compete con esso, e i segnali restano divisi.

Conseguenze SEO

La documentazione di Google afferma che un reindirizzamento permanente è un segnale che la destinazione del reindirizzamento dovrebbe essere trattata come l'URL canonical, mentre un reindirizzamento temporaneo non lo è, quindi l'URL originale mantiene il suo posto nell'indice. In pratica:

  • Un 301 consolida l'equity dei link sulla destinazione e, nel tempo, sostituisce il vecchio URL nell'indice con quello nuovo.
  • Un 302 generalmente lascia l'URL sorgente indicizzato. I motori di ricerca cercano di interpretare l'intento, quindi un 302 di lunga durata può alla fine essere trattato come permanente, ma non dovresti fare affidamento sul fatto che venga indovinato correttamente.
  • Le catene di reindirizzamento diluiscono il beneficio e rallentano la scansione. Punta i vecchi URL direttamente alla destinazione finale.
  • Reindirizzare molte pagine ritirate verso la homepage tende a essere trattato come un soft 404 invece che come uno spostamento. Reindirizza verso la pagina equivalente più vicina, oppure restituisci un 410 se non c'è nulla di equivalente.
  • Qualunque cosa tu scelga, mantienila coerente con i tuoi tag canonical e con la tua sitemap. Segnali contraddittori sono peggio di uno leggermente non ottimale.

307 e 308: le versioni che preservano il metodo

Le definizioni originali di 301 e 302 erano ambigue riguardo al metodo HTTP, e i client si sono assestati su un comportamento che lo standard ora descrive come storico: quando seguono un 301 o 302 dopo una POST, molti client cambiano il metodo in GET e scartano il corpo. Per una pagina è innocuo. Per un endpoint di form o un'API distrugge la richiesta e non riporta nulla.

307 Temporary Redirect ha lo stesso significato di 302, e 308 Permanent Redirect ha lo stesso significato di 301, con un requisito aggiunto a entrambi: il metodo e il corpo devono essere preservati. Quindi per URL che ricevono solo richieste GET, 301 e 302 vanno bene e sono ciò che si aspetta la maggior parte degli strumenti. Per qualsiasi cosa che accetta POST, PUT, PATCH o DELETE, usa 308 per uno spostamento permanente e 307 per uno temporaneo. Se vuoi specificamente che una POST sia seguita da una GET su un altro URL, è a questo che serve 303 See Other.

Come controllare quale codice restituisce un URL

  1. Leggi la riga di stato e la destinazione senza seguire il reindirizzamento:
    curl -sI https://example.com/old-page | grep -Ei "^(HTTP|location|cache-control)"
    La riga di stato mostra 301, 302, 307 o 308, e Location mostra dove punta.
  2. Segui l'intera catena e conta i salti, così puoi vedere se un reindirizzamento è diventato tre:
    curl -sIL -o /dev/null -w "%{num_redirects} hops, final %{http_code}, %{url_effective}\n" https://example.com/old-page
  3. Testa con una POST se l'endpoint ne accetta una. Se la richiesta arriva alla destinazione come una GET senza corpo, cambia la regola in 307 o 308.
  4. Cambia il codice dove viene generato. Può essere l'applicazione, la configurazione del web server, una regola .htaccess, oppure la CDN. Se due livelli reindirizzano entrambi, vince quello più esterno e la regola interna è invisibile.
  5. Verifica con una cache fredda. Un browser che ha già messo in cache un 301 continua a obbedirgli, quindi conferma con curl o una finestra privata prima di concludere che la modifica non abbia attecchito.
  6. Dopo uno spostamento permanente, mantieni il reindirizzamento in posizione. Rimuoverlo più tardi lascia bloccato ogni link e segnalibro che punta ancora al vecchio URL.

Sorvegliare un reindirizzamento dopo averlo impostato

Un reindirizzamento che cambia codice, inizia a fare loop o perde il suo certificato TLS lascia l'URL sorgente ancora rispondente, quindi niente sembra rotto finché il traffico non cala. I controlli esterni che registrano il codice di stato esatto e seguono la catena lo fanno emergere alla prossima esecuzione, ed eseguirli da molte reti distingue un cambio di regola globale da un problema regionale di CDN. HostTracker monitora siti web dal 2004 ed esegue controlli da oltre 300 postazioni in 158 città. Vedi cosa restituisce un URL in questo momento con lo strumento di controllo HTTP, e leggi la guida completa alla famiglia di reindirizzamenti 3xx per i codici ai due lati di questi due.

Controlla ora

Esegui il controllo gratuito sul tuo sito, senza bisogno di un account.

HTTP check

Monitora in modo permanente

Ricevi un avviso appena qualcosa si rompe: HostTracker controlla da oltre 300 località e ti avvisa via e-mail, SMS, Slack, Telegram e altro.

Funzionalità di HostTracker

Altro in questa sezione: I codici di stato HTTP spiegati