Traccia dei redirect

Un sito ha quattro porte d’ingresso: http e https, ognuna con e senza www. Questa traccia le percorre tutte e quattro, annota ogni passaggio e controlla che arrivino tutte allo stesso indirizzo HTTPS.

Oppure prova github.com, bbc.co.uk

Un sito, quattro indirizzi

Per una persona, sembrano tutti lo stesso posto:

http://example.com/
http://www.example.com/
https://example.com/
https://www.example.com/

Un browser o un crawler dei motori di ricerca vede quattro origini distinte. Lo schema può cambiare, il nome host può cambiare, e niente nella struttura del web dice che debbano restituire lo stesso contenuto. Intanto un volantino stampato, un vecchio segnalibro e un link in un post di forum di cinque anni fa ne useranno ciascuno uno diverso.

Un redirect li lega insieme. Il server salta la pagina e risponde con uno stato a tre cifre della serie 300 più un header Location che indica un altro indirizzo, e il browser ci va. Un sito ordinato sceglie uno dei quattro come indirizzo vero e fa rispondere gli altri tre con un solo redirect verso di esso.

I codici di stato che spostano i visitatori

CodiceSignificatoUsalo per
301Spostato in modo permanenteDa HTTP a HTTPS, da www a senza www, una pagina rinominata. I browser lo mettono in cache e i motori di ricerca spostano la voce dell’indice al nuovo indirizzo.
308Permanente, metodo conservatoCome il 301, ma un POST resta un POST. Comune sulle piattaforme più recenti.
302Trovato (temporaneo)Una deviazione per il login, una pagina di manutenzione, un test A/B.
307Temporaneo, metodo conservatoCome il 302 per moduli e API. I browser mostrano un 307 anche per un passaggio a HTTPS dovuto a HSTS che fanno da soli.
303Vedi altroMandare il browser a una pagina di risultato dopo l’invio di un modulo.

La traccia stampa il codice di ogni passaggio nella colonna Percorso, nell’ordine in cui il server li ha restituiti.

Come viene giudicata la traccia

Il nostro server richiede ciascuno dei quattro indirizzi e segue fino a otto redirect. La destinazione raggiunta dalla maggior parte di essi viene presa come indirizzo principale del sito, e ogni punto di partenza viene confrontato con essa.

Indirizzo finale / 1 passaggio
La variante è l’indirizzo principale, o ci arriva con un solo redirect. È questo l’obiettivo.
2 passaggi o più
Una catena, per esempio da http://www a https://www a https://. Funziona, ma ogni passaggio in più costa un intero andata e ritorno, spesso da 100 a 300 ms su un telefono.
Redirect temporaneo
Un 302, 303 o 307 lungo il percorso. Quando la regola dovrebbe essere permanente, lascia i motori di ricerca incerti su quale indirizzo tenere.
Indirizzo diverso
La variante finisce da un’altra parte, quindi il sito esiste in due versioni. Valutato come errore.
Fallito
Nessuna risposta. Valutato come errore per il dominio nudo e come avviso per www.

Una destinazione che non è HTTPS è sempre un errore. Sulla pagina finale, la traccia analizza anche l’HTML alla ricerca di contenuti misti, cioè script, fogli di stile, frame, destinazioni di moduli, immagini e media ancora indicati con http://. I browser bloccano i primi quattro tipi, quindi quelli sono errori, mentre immagini e media sono avvisi. Infine legge il link rel="canonical" e ti avvisa se indica un nome host diverso da quello a cui portano i redirect.

Scrivere la regola una sola volta

Le catene compaiono quando due livelli fanno ciascuno metà del lavoro, come un pannello di hosting che forza HTTPS e un plugin che poi toglie il www. Manda ogni variante direttamente all’indirizzo finale con una sola regola.

nginx

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://example.com$request_uri;
}
server {
    listen 443 ssl;
    server_name www.example.com;
    return 301 https://example.com$request_uri;
}

Apache (.htaccess)

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,R=301]

Su Cloudflare, attiva «Always Use HTTPS» e aggiungi una regola di redirect per il nome host. Il nome www ha bisogno di un proprio record DNS e deve essere coperto dal certificato, altrimenti i visitatori non arrivano nemmeno al redirect. L’analisi del certificato TLS lo verifica.

Viene tracciata solo la home page, e solo i redirect inviati come codici di stato HTTP. Un redirect fatto in JavaScript o con un tag <meta http-equiv="refresh"> non viene seguito, e le pagine interne possono obbedire ad altre regole. I contenuti misti vengono rilevati nel sorgente HTML, quindi le risorse aggiunte dopo dagli script sfuggono.

Domande frequenti

Qual è la differenza tra un redirect 301 e un 302?

Un 301 dice che lo spostamento è permanente. I browser lo ricordano e i motori di ricerca sostituiscono il vecchio indirizzo con il nuovo. Un 302 dice che l’indirizzo originale è ancora quello giusto e che la deviazione può finire. Usa 301 o 308 per le regole HTTPS e www.

Il mio sito deve usare il www oppure no?

Al posizionamento non importa. Il dominio nudo è più corto. La forma con www può essere un CNAME, che alcune configurazioni di CDN e hosting richiedono. Quello che conta è che uno faccia redirect verso l’altro.

Le catene di redirect danneggiano la SEO?

Una catena di due o tre passaggi trasmette ancora i segnali di posizionamento, e Googlebot segue fino a dieci passaggi in tutto. Quello che perdi è velocità per ogni visitatore che entra dal percorso lungo, e ogni anello in più della catena è una cosa in più che può rompersi.

Cosa sono i contenuti misti?

Una pagina HTTPS che carica una risorsa in semplice http://. I browser bloccano script, fogli di stile e frame di questo tipo, e provano a passare le immagini in HTTPS. Di solito è un residuo di un passaggio a HTTPS in cui i vecchi indirizzi sono rimasti nei contenuti.

Ho corretto un redirect ma il browser va ancora al vecchio indirizzo. Perché?

I browser mettono in cache le risposte 301, a volte per mesi. Prova in una finestra privata o con curl -I http://example.com, oppure ripeti la traccia qui. Il nostro server non tiene cache tra un controllo e l’altro.