Reindirizzamento 301

Il termine reindirizzamento 301 si riferisce all’inoltro permanente di un indirizzo web a un altro. Vi spieghiamo il contesto tecnico e vi mostriamo come impostare il reindirizzamento 301 con il file htaccess sul server.

A cosa servono i reindirizzamenti 301?

Il reindirizzamento 301 (conosciuto anche come inoltro 301 o redirect 301, in inglese) è il tipo di reindirizzamento più conosciuto. Il numero 301 si riferisce al codice di stato HTTP sottostante. Mentre il codice di stato 404 indica che la risorsa richiesta non può essere trovata, i codici 300 indicano i reindirizzamenti. Di norma, i reindirizzamenti 301 servono a prevenire gli errori 404.

Di seguito trovate un riepilogo dei più importanti codici di stato relativi ai reindirizzamenti:

Codice di stato http Spieazione
200 OK Il server ha trovato una risorsa all’indirizzo richiesto e la restituisce.
301 Moved Permanently La risorsa all’indirizzo richiesto è permanentemente disponibile a un nuovo indirizzo restituito dal server. Il vecchio indirizzo non è più valido.
203 Found La risorsa all’indirizzo interrogato è temporaneamente disponibile a un nuovo indirizzo restituito dal server. Il vecchio indirizzo potrebbe essere nuovamente valido in futuro.
303 See Other Simile a 302, ma solo le richieste GET sono consentite quando si richiama l’indirizzo temporaneo.
307 Temporary Redirect Simile a 302; a differenza di 303, il client può cambiare il metodo HTTP (GET, POST, PUT, ecc.) quando richiama l’indirizzo temporaneo.
404 Not Found Il server non riesce a trovare una risorsa all’indirizzo richiesto.

Inoltro 301 per la migrazione dei contenuti

I contenuti web, noti anche come risorse, si trovano agli indirizzi web. A volte le risorse vengono migrate, cioè il contenuto rimane lo stesso, ma l’indirizzo cambia. È il caso, ad esempio, del passaggio da HTTP a HTTPS, dello spostamento di un sito su un nuovo dominio o dell’adattamento della struttura dei link per l’ottimizzazione per i motori di ricerca. In tutti i casi, è opportuno evitare che gli utenti che accedono agli indirizzi esistenti non arrivino da nessuna parte.

Se il server non può assegnare una risorsa a un indirizzo, restituisce l’errore HTTP 404 “Not Found”. Una situazione fastidiosa per gli utenti che non possono accedere alla risorsa desiderata. Se l’indirizzo viene richiamato da un crawler invece che da un umano, gli errori 404 portano alla deindicizzazione della risorsa associata. Entrambi gli scenari vanno evitati il più possibile dai gestori dei siti web.

Reindirizzamenti 301 per l’ottimizzazione per i motori di ricerca

Oltre alla modifica dell’indirizzo dei contenuti web, i reindirizzamenti 301 sono essenziali per l’ottimizzazione per i motori di ricerca (SEO) e l’online marketing. Questi vengono utilizzati per creare i cosiddetti “pretty URL”, importanti per la SEO e i “canonical URL”. Anche i link shortener popolari per la distribuzione delle pagine di destinazione sui social media, si basano internamente su reindirizzamenti di tipo 301.

Perché gli inoltri 301 sono così importanti per la SEO? A differenza dei reindirizzamenti 302, 303 e 307, solo il reindirizzamento 301 trasferisce il “link juice” dell’indirizzo originale al nuovo indirizzo. Se un motore di ricerca ha indicizzato un contenuto e lo ha valutato positivamente, l’indirizzo può essere reindirizzato tramite 301 senza perdere la valutazione. È così che i reindirizzamenti 301 rendono possibili strategie SEO complesse come la strategia multidominio.

Come funzionano i reindirizzamenti 301?

I reindirizzamenti 301 entrano in gioco nello scambio tra server web e client. Il server indica al client che la risorsa desiderata non è più disponibile all’indirizzo web (URL) richiesto e lo trasferisce all’indirizzo ora valido. Il client può essere il browser di un utente umano o un bot di un motore di ricerca.

  1. Il client tenta di accedere alla risorsa dell’URL.
  2. Il server risponde con il codice di stato 301 “Moved Permanently” e passa il nuovo URL per l’accesso alla risorsa HTTP location header.
  3. Il client memorizza il nuovo URL nella cache; gli accessi futuri al vecchio URL passano immediatamente al nuovo URL.
  4. Il client tenta di recuperare la risorsa con il nuovo URL.

Il processo può essere illustrato con il popolare strumento di rete cURL Richiamiamo la pagina web di IONOS all’indirizzo http://ionos.it e usiamo l’opzione –head per visualizzare l’HTTP response header:

curl --head http://ionos.it

Il server IONOS risponde con il codice di stato HTTP “301 Moved Permanently”, il location header contiene il nuovo indirizzo https://www.ionos.it/. Come potete vedere, il sito web si trova sul sottodominio WWW e utilizza il protocollo HTTPS. Successivamente, istruiamo ulteriormente cURL a seguire il reindirizzamento 301 con l’opzione –location:

curl --head --location http://ionos.it

Ora cURL produce gli header di due connessioni. Con la seconda chiamata, il server risponde con il codice di stato “200 OK”; la risorsa è stata trovata, il contenuto viene trasmesso nel corpo della risposta. Lo stesso processo viene eseguito in background nel browser quando si inserisce l’indirizzo.

Definire il reindirizzamento 301 tramite il file htaccess

Abbiamo visto quale ruolo svolgono gli inoltri 301 nello scambio tra server e client. Ma come si possono impostare i reindirizzamenti 301 sul server? Esistono vari approcci; uno dei più utilizzati è quello di definire le direttive di reindirizzamento nel file htaccess del server web Apache. Affinché questo funzioni, i moduli Apache corrispondenti devono essere attivi:

Direttive Modulo Apache Spiegazione
Redirect mod_alias Reindirizzamento semplice
Rewrite mod_rewrite Reindirizzamento complesso

Reindirizzamenti semplici per l’inoltro 301 nel file htaccess

Vediamo innanzitutto come si possono definire semplici reindirizzamenti di tipo 301 nel file htaccess. A tale scopo utilizziamo le direttive di reindirizzamento del modulo mod_alias. Queste sono adatte per inoltrare un URL sul server a un altro URL. Lo schema è abbastanza semplice:

Redirect 301 "/source_path" "target_URL"

Per prima cosa reindirizziamo un URL del server a un altro URL interno. La barra all’inizio indica l’inizio del percorso dell’URL, cioè la parte dopo il dominio:

Redirect 301 "/old.html" "/new.html"

Se invece vogliamo fare riferimento a un URL esterno, lo indichiamo come destinazione:

Redirect 301 "/old.html" "http://example.com/new.html"

È anche possibile definire reindirizzamenti 301 di intere directory nel file htaccess utilizzando la direttiva redirect. Reindirizziamo tutti gli URL che iniziano con il componente di percorso “it” a un sottodominio:

Redirect 301 "/it/" "http://it.example.com/"

Lo stesso schema può essere usato per inoltrare tutti gli URL di un dominio:

Redirect 301 "/" "http://other.example.com/"

Se desiderate reindirizzare molti indirizzi individuali che seguono un certo schema, annotare i singoli reindirizzamenti diventa complicato abbastanza in fretta. In questo caso, potete usare la direttiva RedirectMatch, che utilizza un’espressione regolare per riconoscere gli schemi ed estrarre parti di essi:

RedirectMatch 301 regex URL

Vi mostriamo qui un esempio di voce RedirectMatch che estrae la categoria e l’ID di un articolo dai parametri GET e li riscrive nel percorso:

RedirectMatch 301 "/article.php?cat=(.*)&id=(.*)" "/articles/$1/$2/"

Immaginiamo che il dominio sia example.com. Allora l’URL sarebbe http://example.com/article.php?cat=web&id=42 reindirizzato a http://example.com/articles//web/42/.

Reindirizzamenti complessi per il reindirizzamento 301 nel file htaccess

Per creare reindirizzamenti 301 per casi d’uso complessi, si possono usare le direttive di rewrite del modulo di reindirizzamento di Apache mod_rewrite. Questo può essere usato per definire e interrogare le condizioni di inoltro, impostare e leggere variabili d’ambiente e definire regole di inoltro con espressioni regolari.

Con mod_rewrite è possibile concatenare le regole di reindirizzamento; il modulo fornisce una sorta di mini-linguaggio di programmazione per trasformare gli URL e attivare i reindirizzamenti. Si raccomanda cautela, perché un uso scorretto può causare cicli infiniti.

Le direttive di riscrittura iniziano con la riga “RewriteEngine on”. Seguono condizioni di reindirizzamento opzionali RewriteCond, concluse da una o più regole di reindirizzamento RewriteRule. Il comportamento delle condizioni e delle regole di reindirizzamento può essere influenzato da opzioni chiamate “flag”. Per attivare un reindirizzamento 301, una delle regole deve contenere i flag L,R=301:

RewriteEngine on
RewriteCond TestString CondPattern [flags]
RewriteRule URL_path Substitution [L,R=301]

All’interno delle regole e delle condizioni di inoltro è possibile accedere a numerose variabili di intestazione e di server nella forma %{HTTP_HOST}, %{REQUEST_URI}, ecc. Queste possono essere collegate da operatori ed elaborate con funzioni. In questo modo, è possibile realizzare quasi tutti i reindirizzamenti desiderati, anche se la sintassi non è esattamente intuitiva.

Vediamo un esempio di reindirizzamento 301 utilizzando mod_rewrite. Vogliamo utilizzare URL canonici per evitare contenuti duplicati sul nostro sito web. Ciò significa che tutti gli URL devono iniziare con HTTPS e WWW, indipendentemente dal modo in cui i visitatori e le visitatrici accedono ai contenuti.

Definiamo due condizioni di inoltro, che colleghiamo con il flag OR. La prima condizione verifica se HTTPS è disattivato, la seconda controlla se il dominio è privo dell’iniziale WWW. Tramite il flag NC, disattiviamo la distinzione tra maiuscole e minuscole. Se una delle due condizioni è vera, reindirizziamo alla versione HTTPS-WWW dell’URL tramite un reindirizzamento 301. Utilizziamo l’espressione regolare (. *), che raccoglie qualsiasi URL, e la inseriamo dopo il dominio utilizzando $1:

RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule (.*) https://www.example.com/$1 [L,R=301]

Quali sono i problemi e i pericoli dell’utilizzo dei reindirizzamenti 301?

I reindirizzamenti 301 sono uno strumento standard nello sviluppo web e nella SEO. Tuttavia, è necessario prestare attenzione quando li si imposta; se vengono utilizzati in modo improprio, si rischiano seri problemi. Il server potrebbe bloccarsi o il sito potrebbe perdere la posizione conquistata sui motori di ricerca.

Danneggiamento del file htaccess durante la modifica manuale

Il file htaccess configura il server web Apache a livello di directory. Anche la più piccola modifica errata a questo file può facilmente portare a un sito web inaccessibile. In questo caso si verifica il famigerato errore 500 o la schermata bianca, “White Screen of Death”, su WordPress.

È meglio fare una copia del file htaccess prima di modificarlo. Potete farlo facilmente dalla riga di comando. Passiamo alla directory web pubblica del sito e usiamo il comando cp:

cp -a .htaccess _htaccess

Se si verificano errori dopo la modifica del file htaccess, ripristiniamo la versione originale:

cp -a _htaccess .htaccess

Reindirizzamenti concatenati e cicli di reindirizzamento

I reindirizzamenti sono utili, ma “costano” un ciclo completo di richiesta-risposta. Se si utilizzano reindirizzamenti concatenati, gli utenti devono aspettare, il che comporta un aumento della frequenza di rimbalzo. I motori di ricerca valutano negativamente anche le pagine che reindirizzano più volte di seguito. Come regola generale, si possono cambiare al massimo tre reindirizzamenti in successione.

I cicli di reindirizzamento, in cui due indirizzi vengono inoltrati all’infinito l’uno verso l’altro, sono fatali. Per gli utenti, ciò crea l’errore ERR_TOO_MANY_REDIRECTS. La risorsa desiderata non può quindi essere raggiunta. In generale, si dovrebbero testare i reindirizzamenti appena impostati con cURL per assicurarsi che si raggiunga il risultato desiderato.

Avvelenamento accidentale della cache quando si usa l’inoltro 301

Un uso scorretto del reindirizzamento 301 può causare problemi in seguito. A differenza dei reindirizzamenti temporanei di tipo 302, 303 e 307, il reindirizzamento 301 indica al client di memorizzare nella cache il nuovo URL. Se si desidera tornare all’URL originale in un secondo momento, questa richiesta non viene ricevuta dai client, che invece continuano a connettersi con il nuovo URL. Per ovviare a questo problema, si possono utilizzare reindirizzamenti temporanei o impostare l’intestazione di cache control su un valore adeguato.

Quando si definisce la regola redirect 301 nel file htaccess, si imposta l’intestazione di cache control a un’ora. Questo assicura che le successive modifiche alla destinazione del reindirizzamento arrivino a tutti i client:

ExpiresActive on
ExpiresDefault "access plus 1 hour"
Redirect 301 / https://www.example.com/

Se utilizzate reindirizzamenti complessi con direttive di riscrittura, potete ricorrere a un trucco per impostare l’intestazione di cache control. Definite una variabile d’ambiente limitcache come parte della regola di inoltro 301. Quindi impostate l’intestazione, leggendo la variabile d’ambiente come condizione. Questo assicura che l’intestazione corretta sia impostata durante l’inoltro:

RewriteRule ^.* http://www.example.com/ [L,R=301,E=limitcache:1]
Header always set Cache-Control "max-age=3600" env=limitcache
Consiglio

Avete seguito un reindirizzamento 301 e ora il browser si rifiuta di accedere all’indirizzo originale? Basta aggiungere al vecchio indirizzo una “query string” con qualsiasi contenuto nella forma ?foo=bar e costringere il browser a caricare l’URL.

Per offrirti una migliore esperienza di navigazione online questo sito web usa dei cookie, propri e di terze parti. Continuando a navigare sul sito acconsenti all’utilizzo dei cookie. Scopri di più sull’uso dei cookie e sulla possibilità di modificarne le impostazioni o negare il consenso.