Guida pratica ai redirect 301 (con esempi)

Guida pratica ai redirect 301 (con esempi)

Generalità sulla URL Redirection

Le tecniche di URL redirect o URL forwarding sono molto sfruttate in ambito web: questo perchè permettono di “collegare” una risorsa A (non più disponibile, ad esempio) verso una risorsa equivalente B. Il redirect dovrà essere consentito dal server in questione, e non sempre è scontato che lo sie: ad esempio un blog in WordPress offre diverse tecniche per fare redirect, mentre un blog in Blogger (ad esempio) non permette di farlo, se non mediante link statici.

Prima di procedere nella trattazione di questo importante argomento in ambito SEO, è bene fare una rapida ripassata dei concetti fondamentali. Il WWW o World Wide Web (“rete mondiale”), detto amichevolmente Web, WWW o a volte W3, è uno dei più importanti e utilizzati servizi di internet: permette di usufruire di varie funzioni e, soprattutto, navigare e consultare vari tipi di contenuti, sfruttando link come “ponti di collegamento” tra le risorse. In genere l’accesso al web è consentito mediante un protocollo, che in genere è HTTP – HTTPS nella sua variante sicura e criptata – e l’accesso avviene mediante motori di ricerca, directory o segnalazione diretta di link.

Gli URL sono gli identificatori univoci di queste risorse (ad esempio: https://seo.salvatorecapolupo.it è un URL), caratterizzati da protocollo come prefisso e da un nome di dominio + eventuale directory al seguito (https://seo.salvatorecapolupo.it/blog/redirect, ad esempio). Le richieste ad una URL possono essere, tra l’altro, di tipo POST o GET (la differenza è prettamente tecnica, e riguarda la modalità di passaggio degli eventuali parametri).

Pubblicità:

Quando proviamo ad aprire un URL uno otterremo vari tipi di risposta, detti tecnicamente status code: ad esempio 2xx (le due “x” servono a raggruppare tutti gli status code che iniziano con un numero, ndr) può suggerire all’utente che è tutto ok (200 OK), 3xx (i codici che iniziano con 3) indicano eventuali spostamenti di risorse, temporanei o permanti, i 4xx sono status code di errore del client, 5xx sono errori del server e così via.

.htaccess: il file di direttive per il server Apache

Operare sui redirect presuppone la manipolazione, spesso e volentieri, di impostazioni del server: piaccia o meno, funziona così. Su Apache, ad esempio, è necessario abilitare il modulo mod_rewrite, che di solito è abilitato su tutti gli hosting commerciali, e sfruttare il file di direttive al server .htaccess. Il punto messo davanti al nome non è casuale, perchè indica un file nascosto in Linux (per motivi di sicurezza). Il file .htaccess si edita per riga, e viene letto dal server nell’ordine in cui viene scritto: per cui l’ordine delle direttive è molto importante, ed è essenziale scrivere le cose nel modo giusto.

Per editare il file .htaccess, per inciso. si usa normalmente un editor sincronizzato via FTP, oppure direttamente un client FTP. Su NGINX, per la cronaca, è disponibile un file di direttive che risponde a regole e sintassi diversa.

Esempio generale di URL Redirection

Poniamo ora di avere una pagina web con URL pippo.it/cosebelle.html, che ho dovuto cancellare per un certo motivo, o che non sia disponibile per problemi tecnici. Cosa fare? Tutti gli utenti che andranno su quella pagina non riusciranno ad accedere, per cui dovrò decidere una contromisura per risolvere questo problema. Una possibilità concreta è quindi offerta dal redirect, cioè smisto tutto il traffico su quella pagina verso una nuova pagina del mio amico (ad esempio) pluto.it/cosebelledipippo.html, a cui magari ho passato quel file e che mi ha caricato sul suo server. Gli utenti che andranno su pippo.it/cosebelle.html finiranno, da ora in poi (a seconda del tipo di redirect) su pluto.it/cosebelledipippo.html ovviamente aggiornando gli URL in automatico e senza interventi necessari da parte dell’utente.

In forma grafica possiamo rappresentare questa situazione così:

pluto.it/cosebelle.html —redirect—> pluto.it/cosebelledipippo.html

Qualora l’utente provi ad aprire il primo URL, se impostiamo un redirect di tipo 301 verso il secondo URL, andrà automaticamente su quest’ultimo in modo trasparente, e senza inutili avvisi di altro genere.

La redirection può in genere essere usata per scopi benefici (SEO, usabilità, pagine di cortesia, …) ma anche per scopi malevoli (redirect a pagine con virus, spoofing, ecc.).

Quando usare il redirect

Classici casi d’uso del redirect sono i seguenti:

  • mispelling o errore di digitazione di un dominio; ad esempio avrei dovuto comprare il dominio aziendafiga.it e per errore ho acquistato aziendafiag.it; siccome i domini non sono rimborsabili, conviene registrare correttamente aziendafiga.it e poi impostare un redirect (301, come visto) verso il dominio corretto, quindi aziendafiag.it —301—> aziendafiga.it
  • sito web che desidera cambiare nome di dominio: si usa un redirect 301 dal vecchio al nuovo dominio, ad esempio: aziendafiga.it —301—> aziendafighissima.it
  • incremento artificiale del traffico ad un sito, ad esempio acquistando vecchi domini scaduti che ancora possiedano backlink o ricevano traffico, e redirezionandolo al dominio di nostra proprietà, ad esempio sitodipippochenonharinnovato.it —301—> sitoconcorrentedipippo.it
  • crezione di alias di link per tracciare i click (ad es. bitly che crea in automatico redirect 301 di quello che vogliamo in forma di alias o URL alternativi)
  • targeting di pagine a seconda del dispositivo client che apre la pagina (ad esempio smartphone o tablet o desktop), in questo caso il redirect è fatto via JS o PHP o altri linguaggi.

Redirect 301 dal punto di vista tecnico

Quella che segue è la classica risposta che da’ un server (Apache o NGINX, ad esempio) se proviamo a chiedere una pagina web che è stata redirezionata ad un’altra URL. Non è strettamente necessario leggere questa risposta, ma a volte può essere utile per avere la conferma che tutto stia funzionando come vogliamo.

Per ottenere una risposta del genere serve utilizzare il terminale di comando e dare il comando curl (da Mac e Linux):

curl -I mioURL

dove mioURL sarà l’URL da testare. Ad esempio:

curl -I https://trovalost.it/gov-it/

che è un mio redirect del tipo

https://trovalost.it/gov-it/ —301—> https://trovalost.it/gov-it/

restuirà qualcosa del genere:

HTTP/1.1 301 Moved Permanently
Date: Mon, 02 Jul 2018 12:21:02 GMT
Server: Apache/2.4.18 (Ubuntu)
Set-Cookie: dwqa_anonymous=zDL3PyCencwacqFTclC7vQWmUWU5EZW8k1Ozvx6hIoA; expires=Thu, 29-Jun-2028 12:21:03 GMT; Max-Age=315360000; path=/; secure; HttpOnly
Expires: Mon, 02 Jul 2018 13:21:03 GMT
Cache-Control: max-age=3600
Location: https://trovalost.it/info-tld-gov-it/
X-Redirect-Agent: redirection
Content-Type: text/html; charset=UTF-8

La prima riga di avvisa che l’URL è stato spostato per sempre (ovvero: 301 Moved Permanenty), le successive indicano la data della rilevazione, il server in uso (Apache su Ubuntu), il cookie settato e la sua scadenza (Expires), la cache, la location (cioè l’URL destinazione, in questo caso), l’agent attivo ed il content-type (UTF-8 è la codifica del charset), poi seguirebbe la parte HTML (normalmente l’utente via terminale non la vedrà: per vederla usare l’opzione -V, Verbose).

In genere il redirect 301 è automatico, ed il browser è in grado di portarci alla pagina corretta in pochi istanti.

Il redirect più semplice del mondo: il link

Per quanto possa sembrare strano, il link realizzato con il tag <a> e attributo href è una primitiva forma di redirect, in un certo “passivo” (nel senso che richiede il click dell’utente finale) e che, seppur come piccola forzatura, può essere visto come redirect di base. Normalmente gli altri redirect sono automatici su qualsiasi dispositivo, ed è per questo che quelli manuali si usano solo in ambito molto circoscritti – leggasi: quando proprio non possiamo farne a meno.

Un esempio ipotetico è il seguente.

Ti prego, carissimo/a amico/a, <a href="http://www.ioguadagnoetuno.it.org/?ref=soldifacili">clicca qui</a>.

I redirect SEO: 3xx

Nell’ambito dei redirect, ovviamente, i SEO lavorano parecchio, e questo soprattutto perchè il web è dinamico ed è un’opportunità continua: gli indirizzi cambiano, i backlink evolvono e potrebbero perdersi, gli indirizzi possono essere irreperibili, i domini possono scadere e potremmo sfruttarli a nostro vantaggio. Per questo, è necessario – e non è uno skill tecnico “da specialisti” come molti pensano, tutt’altro – che ogni bravo SEO sappia padroneggiare i redirect 3xx, che sono quelli che obbligano il browser a restituire una pagina o URL specifico o, comunque, a “fare qualcosa”.

Secondo la distinzione imposta dallo standard RFC 7231 su HTTP/1.1 ci possono essere vari tipi di redirect:

  1. 300 multiple choices, che dovrebbe essere tipico dei siti multilingua (almeno di alcuni)
  2. 301 move permanently, ovvero l’URL origine è stato spostato per sempre su un altro URL destinazione;
  3. 302 temporary redirect, ovvero l’URL origine è stato spostato per sempre su un altro URL destinazione, ormai superato e che sopravvive per pure questioni di retrocompatibilità;
  4. 303 see other, che forza una GET anche qualora la richiesta sia una POST;
  5. 307 temporary redirect, che effettua un redirect temporaneo;
  6. 308 permanent redirect, che ne esegue uno permanente come il 301.

A livello SEO ci interessano soprattutto i redirect 301 e 308, per questioni di praticità ed efficenza, e in alcuni casi sporadici possono servire i 302 o 307 (ad esempio per pagine “lavori in corso”).

Redirect 301 in Apache mod_rewrite / htaccess: pagina singola

Agendo sul file htaccess è possibile impostare un redirect 301, cioè permanente, da vecchia pagina a nuova pagina. Si tratta di un redirect di natura puntuale per portare i visitatori da A.html a B.html, in sostanza. Ad esempio, in .htaccess (Apache):

Redirect permanent /A.html http://www.sito.it/B.html

oppure, equivalentemente:

Redirect 301 /A.html http://www.sito.it/B.html

Redirect 301 da vecchio a nuovo sito

Analogamente possiamo, complicando un po’ la sintassi del file di direttive, passare un intero sito da un dominio vecchio ad uno nuovo. Ovvero (sul file htaccess del server vecchio.sito.it, ovviamente), sostituendo vecchio.sito.it e nuova.destinazione.org con i siti che ci servono

RewriteEngine on
RewriteCond %{HTTP_HOST} ^([^.:]+\.)*vecchio\.sito\.it\.?(:[0-9]*)?$ [NC]
RewriteRule ^(.*)$ http://nuova.destinazione.org/$1 [R=301,L]

Redirect 301 da vecchio a nuovo sito (in HTTPS)

Analogamente possiamo, complicando un po’ la sintassi del file di direttive, passare un intero sito da un dominio vecchio ad uno nuovo. Ovvero (sul file htaccess del server vecchio.sito.it, ovviamente), bisognerà ricordarsi di mettere HTTPS come protocollo sul sito destinazione, ammesso che lì già funzioni in precedenza e sia attivo e non scaduto.

RewriteEngine on
RewriteCond %{HTTP_HOST} ^([^.:]+\.)*vecchio\.sito\.it\.?(:[0-9]*)?$ [NC]
RewriteRule ^(.*)$ https://nuova.destinazione.org/$1 [R=301,L]

Redirect 301 in PHP

Lato codice possiamo impostare un redirect 301 mediante PHP, volendo, in questi termini (ovviamente bisognerà sostituire sitodestinazione.it con il sito verso cui vogliamo fare redirect).

header('HTTP/1.1 301 Moved Permanently');
header('Location: http://www.sitodestinazione.it/');
exit();

Redirect 301 in Javascript (sconsigliato)

Si può fare lo stesso anche in JS, impostando l’attributo location della variabile globale window, per quanto non sia – in genere – una prassi consigliabile.

window.location='http://www.sitodestinazione.it/'

Errori di redirect: strumenti gratis per il redirect check

I redirect sono soggetti a regole complesse e, almeno sulla carta, non c’è limite alle potenzialità che offrono e che rendono sfruttabili al webmaster. In genere, poi, i classici problemi coi redirect sono relativi a “catene” di redizionamenti che non si risolvono, o che sono troppo numerose. Il servizio web

https://httpstatus.io

permette di effettuare la diagnostica di redirect inconsistenti o errati. In genere il codice di successo da restituire in una catena di redirect deve essere sempre 200, altrimenti la richiesta non si risolve ed il client vedrà un errore. Ad esempio:

http://sito.it/pagina.html –301–> http://sito.it/paginanuova.html –301–> http://sito.it/pagina2018.html –200–

è una catena che si risolve con successo, mentre (per fare un altro esempio):

http://sito.it/pagina.html –301–> http://sito.it/paginanuova.html –301–> http://sito.it/404.html –404–

porta ad una pagina di errore (404) e, per quanto si risolva correttamente, andrebbe corretta, mentre:

Web Hosting

http://sito.it/pagina.html –301–> http://sito.it/paginanuova.html –301–> http://sito.it/pagina.html —> ….

è un loop, e genera un errore. Gli errori vanno risolti da personale specializzato, in genere, agendo sulle configurazioni del server (es. htaccess) oppure – a seconda dei casi – sul codice del sito (PHP, ASP, ecc.).


Informazioni sull'autore

Salvatore Capolupo

Consulente SEO, ingegnere informatico e fondatore di Trovalost.it, Pagare.online, Lipercubo.it e tanti altri. Di solito passo inosservato e non ne approfitto.
Ti piace questo articolo?

0 voti

Su Trovalost.it puntiamo sulla qualità dei contenuti da quando siamo nati: la tua sincera valutazione può aiutarci a migliorare ogni giorno.