Come reindirizzare una pagina web usando il codice 301 Redirect

Utilizzare un codice 301 Redirect permette di reindirizzare una pagina web ad un altro indirizzo.
A dire il vero la cosa è un po’ più ampia di quanto appena scritto. Vediamo allora un paio di esempi esplicativi.

ridirezione-codice-301-redirect

Hai deciso di aggiornare il tuo sito web e alcune pagine devono avere un nome differente a prima ? Se ci sono altri siti che si collegano direttamente a quella pagina non la troveranno più.
Non solo. Quelle stesse pagine hanno guadagnato nel tempo un nuon piazzamento nei motori di ricerca, e desideri mantenere questa posizione. Come fai a reindirizzare il traffico dalla vecchia alla nuova pagina senza perdere il posiziomento ? Usi un codice 301 Redirect.

Cosa è un codice 301 Redirect ?

Diciamo che si tratta del miglior metodo per mantenere il posizionamento conquistato nei motori di ricerca reindirizzando una pagina o un sito web.
Il codice 301 Redirect viene interpretato come “spostato permanentemente”.
L’istruzione usata richiede il nome della pagina rinominata, uno spazio, il nuovo indirizzo di quella pagina.
Il tutto viene realizzato tramite un file .htaccess.

Cos’è il file .htaccess ?

Ogni volta che un visitatore (o lo spider di un motore di ricerca) richiede una pagina, il web server controlla il file .htaccess.
Il file .htaccess contiene istruzioni specifiche per alcune richieste, istruzioni sulla sicurezza, come reindirizzare le richieste e come gestire alcuni errori.

Come realizzare il reindirizzamento

1. Con uno strumento di scrittura creare un file di nome .htaccess (se esiste già, modificare l’esistente).

2. Inserire questo codice:

redirect 301 /vecchio/nome.html http://www.nomesito.it/nuovo.html

3. Salvare il file

4. Caricare il file nella root directory del server.

5. Verificare il funzionamento inserendo nel browser il vecchio indirizzo della pagina. Dovresti arrivare direttamente sulla nuova pagina.

NB: Non devi inserire “http://www” nella prima parte dell’istruzione, ma solo il percorso necessario per arrivare, partendo dalla root directory del sito, alla pagina. Verifica anche di lasciare un solo spazio tra gli elementi:

redirect 301 (l’istruzione che la pagina è stata spostata)

/vecchio/nome.html (il percorso e il nome originali della pagina)

http://www.nomesito.it/nuovo.html (i nuovi percorso e nome della pagina)

Quando il visitatore cerca la vecchia pagina, il file .htaccess intercetta la chiamata e risponde con il codice 301 e indicando dove cercare la pagina aggiornata.
I motori di ricerca possono impiegare un po’ di tempo per recepire l’informazione ed aggiornare i propri indici. Google indica in circa 6-8 settimane il proprio tempo di aggiornamento.

Altri modi di implementare il codice 301:

1. Per reindirizzare TUTTI i file del proprio dominio, se il server è in ambiente unix:

redirectMatch 301 ^(.*)$ http://www.sito.it
redirectMatch permanent ^(.*)$ http://www.sito.it

E’ possibile inserire una di queste istruzioni nel file .htaccess, per reindirizzare permanentemente il file “index.html” ad un altro dominio.

redirect 301 /index.html http://www.sito.it/index.html
redirect permanent /index.html http://www.sito.it/index.html
redirectpermanent /index.html http://www.sito.it/index.html

2. Se vuoi reindirizzare http://sito.it al sito http://www.sito.it e hai il modulo mod_rewrite attivo, puoi inserire questo codice nel file .htaccess:

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^sito\.it
RewriteRule ^(.*)$ http://www.sito.it/$1 [R=permanent,L]

oppure:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^sito\.it$ [NC]
RewriteRule ^(.*)$ http://www.sito.it/$1 [R=301,L]

3. Se hai convertito le tue pagine .html in file .php in tutto il sito, e hai il modulo mod_rewrite attivo, puoi inserire questo codice nel file .htaccess:

RewriteEngine on
RewriteBase /
RewriteRule (.*).htm$ /$1.php

4. Se vuoi reindirizzare le tue pagine .html o .htm verso pagine .shtml perchè stai usando SSI (Server Side Includes), inserisci questo codice nel file .htaccess:

AddType text/html .shtml
AddHandler server-parsed .shtml .html .htm
Options Indexes FollowSymLinks Includes
DirectoryIndex index.shtml index.html

Risposta alla domanda frequente: che differenza c’è ad usare un 301 piuttosto che la meta istruzione redirect?

Meta Redirect
Per reindirizzare le richieste ad una nuova pagina (o sito) si può inserire questa istruzione nella parte head della pagine:

<meta http-equiv=”refresh” content=”10; url=http://sito.it/”>

Content=”10; dice al browser di attendere 10 seondi prima di effettuare il traferimento, ad esempio per lasciare il tempo di leggere un messaggio di spiegazione. E’ possibile inserire un tempo a piacere espresso in secondi. E’ ammesso specificare 0 secondi per effettuare un trasferimento pressochè immediato.

Con questa istruzione la pagina usa un codice 200 OK ed effettua il trasferimento verso la nuova destinazione.
I motori di ricerca sa che la pagina è ancora attiva, indicizza entrambe le pagine, ma lo valuta come un possibile sistema di spam e la penalizza.
Il codice 301, invece, genera un messaggio “spostato permanentemente” che informa il motore di ricerca che la sola pagina valida è quella di destinazione.
In conclusione questo risulta il metodo corretto ed efficace per indirizzare pagine vecchie verso nuove, tenere aggiornati i motori di ricerca e mantenere il posizionamento delle proprie pagine.

12 comments

  • ciao scusa se rompo ma sto diventando pazzo da settimane e ho perso la mia posizione su google, ho rifatto il sito da .htm a html ho creato il file come da tue istruzioni su una pagina .txt ho convertito in .htaccess come dicevi tu nelle istruzioni parte 1° ho fatto il test con il browser sia crome che firefox ma niente sicuramente sbaglio qualcosa.. se riesci a darmi una mano ti sarò eternamente grato!! 8o sto impazzendo!!

    • Mikis

      Ciao Walter, probabilmente devi usare l’esempio al punto 3 indicando htm e html. Il file .htaccess è caricato a posto sul server ? Se mai prova a passarmelo. Ciao !

  • alessandro castagna

    Ciao Mikis, sto uscendo pazzo anche io… non capisco perchè in tutte le istruzioni che ho letto, non c’è spiegato se il file: .htaccess debba avere solo quel nome oppure che sia: index.htaccess o pippo.htaccess, se è semplicemente “.htaccess” risulta un file nascosto… corretto?
    altra cosa: va messo nella stessa cartella dove c’è l’index.html? e l’index.html deve essere cancellato?
    Nella cartella corretta e salvando l’.htaccess con il nome corretto che spero mi darai, dentro ci scrivo solo ed esclusivamente questo codice?

    RewriteEngine On
    RewriteRule ^(.+)$ http://alessandrocastagna.wordpress.com/$1 [R=301]

    non riesco a capire perchè non funziona…

    Grazie anticipate per l’aiuto.

    • Mikis

      Ciao Alessandro,
      confermo che il nome del file è proprio “.htaccess” ed è correttamente un file nascosto, anche se in effetti dipende dai privilegi dell’utente con cui visualizzi e dalla shell che stai usando.
      Deve essere posto nella stessa cartella a cui si riferisce, nel senso che il suo contenuto avrà effetto in quel ramo di directory in cui è posizionato e non deve sostituire alcun altro file.
      Il contenuto deve essere solo quello (sempre che non debba fare anche dell’altro).
      Tieni presente che se usi l’istruzione RewriteRule, il modulo mod_rewrite deve essere attivo.

      Guardando l’istruzione che hai tiportato mi viene però un dubbio. Qual è il risultato preciso che vuoi ottenere ?

  • Ciao, in tutti gli articoli che ho letto sul file “.htaccess” non mi è chiara una cosa, ho completamente riportarto un sito da html in wordpress cambiando oltre l’estensione delle pagine anche il nome stesso, ora vorrei reindirizzarle verso le nuove pagine corrispondenti, il codice mi è abbastanza chiaro

    redirect 301 /vecchio/nome.html http://www.nomesito.it/nuovo.html

    ma vorrei capire se posso inserire il codice per ogni pagina da reindirizzare uno sotto l’altro o devo inserire dei tag di chiusura, se possibile un esempio
    grazie

  • Salve,
    volevo porre una domanda, io ho una pagina in un blog (www.miosito.it/comunicato), ora necessità di fare la stessa identica pagina in un altro sito che è http://www.miosito/it/news.
    Nel momento che creo la pagina http://www.miosito.it/news/comunicato qual’è il vostro consiglio?
    Copio integralmente la pagina oppure mi è sufficiente fare un redirect 301?

    Quali le differenze anche in merito all’indicizzazione?
    Grazie

    • Mikis

      Salve Pietro,
      la mia risposta sarà sommaria perchè l’argomento richiederebbe molte considerazioni.
      Ad ogni modo possiamo dire che non è mai una buona idea creare due pagine identiche, è sconsigliato anche dal punto di vista dell’indicizzazione.
      Per altro in questo caso non è propriamente una situazione da redirect, adatto invece quando una pagina è spostata permanentemente in un’altra posizione.
      Mi sembra invece che potrebbe bastare un link che rimanda alla nuova posizione.
      Mi faccia sapere.

  • Samuel

    Ciao: domandina WP
    Ho url è già indicizzata ma vorrei spostarla fisicamente sotto a un’altra pagina senza cambiare la sua URL sennò devo fare dei redirect e rischiamo di generare errori 404 per nulla

    come potrei fare?

    • Mikis

      Samuel,
      in effetti il codice 301 serve proprio per potere cambiare l’url di una pagina senza generare errori e mantenendo l’indicizzazione.

      Tu vuoi riposizionare la pagina in un altro punto del menù, senza cambiare l’url, dico bene ? Se è questo il caso devi operare sui menù (sotto Aspetto, in dashboard)

      Qualche spunto lo trovi in http://bookmarks.mikis.it/disattivare-una-voce-menu-wordpress.html, anche se lì si parla di una cosa differente

Rispondi a Samuel Annulla risposta