Il redirect, in ambito seo, è un processo importantissimo per evitare di perdere link nel corso del tempo (aggiornamenti del cms, cambi di piattaforma, nuovo dominio, varie ed eventuali…)!
Ultimamente, ad esempio, sto lavorando per ripristinare quanti più possibili “dead-link” da” darkwolf.it / darkwolf.altervista.org” a laltroweb.it.
darkwolf.altervista.org è il vecchissimo dominio con altervista adesso riattivato.
darkwolf.it prese poi il suo posto, adesso, invece, fa redirect a laltroweb.
laltroweb è il nuovo dominio che raccoglie tutto!
Quindi, nel web, mi ritrovo vecchi link dei vecchi dominio che devo provare a riportare qui.
Questo posso farlo, avendo mantenuto la “proprietà” di quello spazio e di quei domini, tramite htaccess.
Un rapido esempio: http://darkwolf.altervista.org/index.php?ind=downloads&op=section_view&idev=4
Link “vecchissimo” che si ritrova su alcuni forum dove partecipavo, e che ho “dirottato giusto ieri qui: https://www.laltroweb.it/files/category/5-firmware-modding/
Per fare questo uso dei redirect in htaccess (qui i vari tipi di redirect):
Citahttps://it.wikipedia.org/wiki/Codici_di_stato_HTTP
- 300 Multiple Choices
- 301 Moved Permanently
- Questa e tutte le future richieste andranno dirette ad un altro URI (specificato nell’header
Location
).- 302 Found
- Questo è il codice più usato ma anche un classico esempio di non aderenza agli standard nella pratica quotidiana. Infatti, le specifiche di HTTP/1.0 (RFC 1945) richiederebbero che il client esegua redirezioni temporanee (la descrizione originale era “Moved Temporarily”), ma i più diffusi browser l’hanno implementata come 303 descritta di seguito. Perciò, HTTP/1.1 ha aggiunto i codici di stato 303 e 307 per distinguere tra i due comportamenti. Comunque, la maggior parte delle applicazioni e dei framework web ancora usano il codice di stato 302 come se fosse il 303.
- 303 See Other (da HTTP/1.1)
- La risposta alla richiesta può essere trovata sotto un’altra URI usando il metodo GET.
- 304 Not Modified
- 305 Use Proxy (da HTTP/1.1)
- Molti client HTTP (come Mozilla ed Internet Explorer) non gestiscono correttamente le risposte con questo codice di stato.
- 306 Switch Proxy
- Non più usato.
- 307 Temporary Redirect (da HTTP/1.1)
- In quest’occasione, la richiesta dovrebbe essere ripetuta con un’altra URI, ma successive richieste possono essere ancora dirette a quella originale. In contrasto con 303, la richiesta di POST originale deve essere reiterata con un’altra richiesta di tipo POST.
- 308 Permanent Redirect (approvato come RFC sperimentale)
- Questa richiesta e le future dovrebbero essere fatte verso un altro URI. Le risposte 307 e 308 (come proposta) dovrebbero comportarsi similmente alla 302 e la 301, ma non prevedono un cambiamento di metodo.
Io, tranne qualche rara eccezione, ho sempre usato il redirect 301…
Come? Con htaccess (non potrei in altro modo essendoci anche la querystring)!
RewriteCond %{REQUEST_URI} ^/index\.php$ [NC] RewriteCond %{QUERY_STRING} ^ind=downloads&op=section_view&idev=4$ [NC] RewriteRule ^(.*)$ https://laltroweb.it/files/category/5-firmware-modding/? [L,R=301]
Gli utenti non troveranno quel link “rotto”. Google troverà un contenuto valido e in linea con quanto si aspettava. E tutti saranno contenti 🙂
Adesso faremo alcuni esempi di redirect in html, php, e – soprattutto – in htaccess!
Redirect in html (un refresh, non un vero redirect, dunque sconsigliato!):
<meta http-equiv="refresh" content="0;URL=http://www.example.com/nuova-pagina.html">
in questo caso abbiamo assegnato “tempo 0” – dunque immediato – ma possiamo anche temporizzarlo:
<meta http-equiv="refresh" content="10;URL=http://www.example.com/nuova-pagina.html">
= 10 secondi dopo il caricamento fai il redirect (in tal caso ricordatevi di inserire un avviso nella pagina! non è “cortese” essere sbalzati dopo un tot senza preavviso”).
Esempio:
<html> <head> <title>Titolo</title> <meta http-equiv="refresh" content="10;URL=http://www.example.com/nuova-pagina.html"> </head> <body> <p>Tra 10 secondi ci sarà un redirect...</p> <p>Per fare prima: <a href="http://www.example.com/nuova-pagina.html">Cliccami :)</a></p> </body> </html>
Poi abbiamo il redirect in php:
<?php header("HTTP/1.1 301 Moved Permanently"); header("Location: http://example.com/newpage.html"); exit(); ?>
(Validi tanto quanto quelli in htaccess, ma, a mio parere, meno pratici da usare dato che necessitano della presenza del file richiesto – praticamente impossibile nel caso di querystring)…
E quindi vari esempi in htaccess:
Nell’htaccess, file solitamente presente in ogni sito web in php, possiamo aggiungere tante regole utili per migliorare la sicurezza del nostro sito e, tra l’altro, possiamo anche configurare se vogliamo solo www, con http o https (se https è presente/supportato/configurato), possiamo rimuovere slash di troppo, fare ogni tipo di redirect, riscrivere gli url ecc ecc… 🙂
#### Redirect semplice #### Redirect 301 /vecchiolink https://www.example.com/nuovolink.html #### Rewrite #### RewriteEngine On RewriteBase / #### Rimuovi slash multipli #### RewriteCond %{THE_REQUEST} //+ RewriteRule ^(.*) $1 [R=301,L] #### Forzare -www +https #### RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"' [OR] RewriteCond %{HTTP_HOST} ^www\.tuodominio\.com$ RewriteRule ^(.*)$ "https\:\/\/tuodominio\.com\/$1" [R=301,L] #### Forzare +www +https #### RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"' [OR] RewriteCond %{HTTP_HOST} !^www\.tuodominio\.com$ RewriteRule ^(.*)$ "https\:\/\/www\.tuodominio\.com\/$1" [R=301,L] #### Forzare +www -https #### RewriteCond %{HTTPS} on [OR] RewriteCond %{HTTP:CF-Visitor} '"scheme":"https"' [OR] RewriteCond %{HTTP_HOST} !^www\.tuodominio\.com$ RewriteRule ^(.*)$ "http\:\/\/www\.tuodominio\.com\/$1" [R=301,L] #### Forzare -www -https #### RewriteCond %{HTTPS} on [OR] RewriteCond %{HTTP:CF-Visitor} '"scheme":"https"' [OR] RewriteCond %{HTTP_HOST} ^www\.tuodominio\.com$ RewriteRule ^(.*)$ "http\:\/\/tuodominio\.com\/$1" [R=301,L] #### Redirect semplice con request_uri #### RewriteCond %{REQUEST_URI} ^/vecchiolink [NC] RewriteRule ^(.*)$ http://www.example.com/nuovolink/ [L,R=301] #### Redirect singolo se c'è query string #### RewriteCond %{REQUEST_URI} ^/index\.php$ [NC] RewriteCond %{QUERY_STRING} ^query=file&op=view&set=999$ [NC] RewriteRule ^(.*)$ http://www.example.com/file_999? [L,R=301] ### il "?" alla fine evita che venga accodata la query string ### #### Redirect multiplo se c'è query string #### # eg: # da > http://example.com/download.php?file=file123 # a > http://example.com/download-file123 # RewriteCond %{QUERY_STRING} file=(.*) RewriteRule ^download.php /download-%1? [L,R=301] #### Redirect intero dominio con tutte le pagine #### [nota]*** RewriteCond %{HTTP_HOST} ^vecchiodominio.it$ [OR] RewriteCond %{HTTP_HOST} ^www.vecchiodominio.it$ RewriteRule ^(.*)$ "http(s)://(www.)example.it/$1" [R=301,L] ### link al nuovo dominio. eg: https://www.example.com/ ###
Ecco, i miei preferiti (cf-visitor serve per cloudflare…) 😀
*** NB: se trasferite il dominio, a meno che non sia un trasferimento completo dello script che mantiene inalterata la struttura degli url (eg: sposto wordpress da un hosting all’altro e cambio nome a dominio – quindi redirect dal vecchio al nuovo di tutti gli url che son rimasti invariati), è sconsigliato fare un redirect assoluto (pagine incluse – ogni richiesta rimandala al nuovo dominio), altrimenti vi ritroverete tantissimi errori 404 nel nuovo!!! Si consiglia di fare singoli redirect per gli url più importanti, più richiesti, come sto facendo io qui da darkwolf.it a laltroweb.it
Inoltre, per evitare problemi di indicizzazione e pr, è molto importante segnalare a google, tramite gli strumenti per webmaster, che il dominio è stato trasferito: Utilizzo dello strumento Cambio di indirizzo
Ho elencato “la base”. Poi c’è chi li fa in javascript e altro, ma questi mi risulta siano i più usati, e spero possano tornarvi utili!
Critiche, segnalazioni, suggerimenti? Commentate 🙂