Redirect 301 tramite .htaccess

Redirect 301 tramite htaccessIn questo blog mi è capitato più volte di parlare di situazioni “seo” in cui diventa necessario modificare per un motivo o per un altro un url di una pagina o addirittura l’intera struttura url di un sito.

Questo può avvenire in caso di cambi di dominio, aggiornamento o correzione di url o anche in situazioni in cui si vogliono evitare problemi di duplicazione di contenuti e pagine.

In tutti questi casi è buona norma lato seo utilizzare un redirect 301 per trasferire il “valore” (juice) di una pagina ad un’altra.

Esistono diversi tipi di redirect come esistono diversi modi per fare un redirect, quello che vedremo oggi è uno dei metodi più comuni per eseguire un redirect 301 attraverso il file .htaccess.

Prima di spiegarvi la procedura vi accenno soltanto alcune delle metodologie più comuni per eseguire un redirect visto che potrà capitarvi in più occasioni di trovarvi di fronte a situazioni simili.

I tipi di redirect

  • IIS: tramite configurazione del web server;
  • Cold fusion
    <.cfheader statuscode=”301″ statustext=”Moved permanently”>
    <.cfheader name=”Location” value=”http://www.new-url.com”>
  • PHP
    <?
    Header( “HTTP/1.1 301 Moved Permanently” );
    Header( “Location: http://www.new-url.com” );
    ?>
  •  ASP
    <%@ Language=VBScript %>
    <%
    Response.Status=”301 Moved Permanently”
    Response.AddHeader “Location”,”http://www.new-url.com/”
    %>
  • Asp net
    <script runat=”server”>
    private void Page_Load(object sender, System.EventArgs e)
    {
    Response.Status = “301 Moved Permanently”;
    Response.AddHeader(“Location”,”http://www.new-url.com”);
    }
    </script>
  • Java
    <%
    response.setStatus(301);
    response.setHeader( “Location”, “http://www.new-url.com/” );
    response.setHeader( “Connection”, “close” );
    %>
  • Perl
    $q = new CGI;
    print $q->redirect(“http://www.new-url.com/”);
  • Ruby
    def old_action
    headers[“Status”] = “301 Moved Permanently”
    redirect_to “http://www.new-url.com/”
    end

Andiamo a vedere ora come si effettua un redirect tramite file .htaccess. Innanzitutto i Redirect tramite file .htaccess possono essere implementati su siti che utilizzano server Apache.

La sintassi del redirect prevede il reindirizzamento di un url o di un’intera directory da un indirizzo originale ad un indirizzo di destinazione.
La parte iniziale del redirect prevede la definizione del singolo url o di una regola per definire quali sono gli url da “spostare”; nella seconda parte del redirect si definisce invece il percorso di reindirizzamento.

Il redirect viene inizializzato con la sintassi

RewriteEngine On

Le tipologie più comuni di redirect 301 che possiamo fare sono

SINGOLO REDIRECT

Redirect 301 pagina1.html http://www.miosito.com/pagina2.html

DA NON WWW A WWW

RewriteBase /
RewriteCond %{HTTP_HOST} ^miosito.it [NC]
RewriteRule ^(.*)$ http://www.miosito.com/$1 [L,R=301]

DA INDEX A ROOT

RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ http://www.miosito.com/$1 [R=301,L]

DA HTTPS A HTTP

RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

REDIRECT URL CON QUERY STRING

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/pagina\.php$
RewriteCond %{QUERY_STRING} ^id=([0-9]*)$
RewriteRule ^(.*)$ http://www.miosito.com/page/%1.php [L,R=301]

Oltre ai metodi segnalati ne esistono molti altri ed ogni tipo di redirect è una storia a parte in base alle esigenze che si hanno ed in base alla struttura url con cui si a che fare.

Inserito in:

Lascia un commento

11 commenti

  1. Grazie Stefano per l’articolo.
    Volevo chiederti un ulteriore informazione: dovrei reindirizzare più pagine, posso utilizzare un unico file .htaccess con più righe? o devo fare più file .htaccess?

  2. Ciao Stefano,

    anche io ti faccio i complimenti per i contenuti che posti.

    Ho due domande per te:

    1. è possibile fare un redirect da https:// a http:// anche se non si possiede un certificato ssl usando il seguente codice?

    RewriteEngine On
    RewriteCond %{HTTPS} on
    RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    Vorrei farlo in caso qualcuno digitasse https://www.miosito.com. Questo per farlo atterrare sul mio sito senza il warning del sito non protetto e (agli occhi dei neofiti) un sito poco sicuro.

    2. Oggi ho istallato w3 total cache e mi sono accorto di 2 cose:
    1. quando modifico un elemento (grafico o testo) del mio sito e poi salvo, con chrome lo vedo subito aggiornato, mentre su firefox e safari vedo ancora la pagina senza la nuova modifica. Per aggiornarlo devo ogni volta svuotare la cache e non sempre funziona subito (a volte devono passare dei minuti). Mi stupisce questa cosa!!!

    2. Quando visualizzo il link della mia sitemap /sitemap_index.xml su chrome è ok, mentre su firefox e safari è ok al momento ma se svuoto la cache le “classiche” colonnine link del sito sitemap diventano semplici scritte una a fianco all’altra (senza più la possibilità di cliccarci su).

    Spero tu mi possa aiutare.

    GRAZIE,
    Fabio

    • Ciao Fabio,
      ti rispondo di seguito:
      1 – La regola di redirect che hai indicato è corretta (anche se andrebbe testata per il caso specifico) e reindirizza la versione https:// a quella http:// a prescindere dalla correttezza o meno del certificato ssl. La cosa che mi sembra strana però è l’utilizzo di un redirect di questo tipo se il tuo sito non ha una versione ssl. Solitamente è difficile che una persona possa arrivare ad una versione https di un sito a meno che questa non sia indicizzata da un motore di ricerca o linkata da qualche parte.

      2 – Probabilmente dipende dal browser dove sei loggato all’amministrazione WP. Provo a spiegarmi. W3 Total Cache agisce sulla cache del browser quindi se fai una modifica al sito ma non cancelli la cache del sito non vedi la modifica effettuata. Questo si può evitare se ci si logga all’backend di wp in quanto il plugin riconosce che sei l’amministratore e dovrebbe, in autonomia, ripulire la cache e farti vedere la modifica. Nel caso in cui effettui la modifica da chrome (da loggatto) e poi la testi su firefox e safari (senza loggarti) è normale che il cambiamento si veda solo su chrome. Il mio consiglio è comunque di pulire sempre la cache del plugin quando effettui delle variazioni sul sito.

      3 – Anche in questo caso è un problema di cache del plugin/browser. Il mio consiglio per testare la correttezza della sitemap è utilizzare lo strumento Test Sitemap presente all’interno di Search Console (https://support.google.com/webmasters/answer/183669?hl=it). In questo modo puoi scoprire eventuali errori di formattazione, url non accessibili o attributi non validi.

  3. Ciao Stefano e grazie per la tua pronta risposta!

    Quindi il problema di non visualizzare le ultime modifiche apportate al mio sito è solo un “problema” mio in quanto ADMIN oppure anche tu, se in quel momento visualizzavi il mio sito, non avresti visto le ultime modifiche?

    Non ho ben capito cosa devo fare quando dici “questo si può evitare se ci si logga al backend di wp”. Non sono un tecnico e questa proprio non l’ho capita 😉
    Ad ogni modo se la soluzione è pulire la cache del plugin prima di fare la modifica, mi sembra una cosa fattibile.

    TI FACCIO UN’ALTRA DOMANDA, SE POSSO…
    Sto cercando di ottimizzare il sito perché, dopo aver fatto il check sia su Google Page Speed Insights che Pingdom, ho avuto un feedback molto migliorabile (diciamo così).
    Uno dei principali warning che rallentano il mio sito sono i plugin di facebook e twitter che inserisco nelle pagine del mio sito.

    Io utilizzo (forse da neofita) il codice che mi dice facebook su https://developers.facebook.com/docs/plugins/like-button e quindi incollo il seguente codice dopo il tag:

    (function(d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return;
    js = d.createElement(s); js.id = id;
    js.src = “//connect.facebook.net/it_IT/sdk.js#xfbml=1&version=v2.6”;
    fjs.parentNode.insertBefore(js, fjs);
    }(document, ‘script’, ‘facebook-jssdk’));

    E QUESTO ALTRO nel punto in cui desidero venga visualizzato il bottone like e condividi:

    IL PROBLEMA, e me ne accorgo, è che mentre il contenuto della pagina è stata già caricata, bisogna attendere ancora 1/2 secondi prima che il bottone sociale venga anch’esso caricato (questo ovviamente penalizza la velocità del sito e, di conseguenza, il suo posizionamento).

    TU SAI SE C’E’ UN’ALTERNATIVA MOLTO PIU’ EFFICACE E VELOCE CHE MI PERMETTA DI INSERIRE I PLUGIN SOCIALI NELLE VARIE PAGINE SENZA PENALIZZARE LA VELOCITA’ DI CARICAMENTO DEL SITO?

    Io utilizzo per il 90% il bottone facebook like e condividi + il plugin dei commenti facebook (sul blog).

    Grazie ancora Stefano!

    Fabio

    • Ciao Fabio,
      le modifiche che effettui al sito quando il plugin di cache è attivo vengono viste solo dall’amministratore del sito se loggato (quindi tu), tutti gli altri vedranno il sito non modificato finché non ripulisci la cache del plugin.

      Per quanto riguarda la velocità del sito legata al caricamento dei bottoni social ti posso dire che è un problema comune. I pulsanti social per potersi attivare fanno delle chiamate ai rispettivi server e a seconda di diversi fattori il caricamento può avvenire in modo lento. Più pulsanti inserisci, più il sito rallenta. Per ovviare a questo problema si può forzare il caricamento delle risorse che servono al plugin in modo asincrono così da far caricare più risorse contemporaneamente e velocizzare il caricamento del sito (per esempio per il pulsante di Facebook è sufficiente aggiungere js.async=true; all’interno dello script – https://geekflare.com/load-facebook-like-and-share-button-faster/).

      Se utilizzi un cms come wordpress per il tuo sito, esistono vari plugin che permettono di inserire i bottoni social in modo ottimizzato. Quello che ti consiglio di fare è: se hai un cms provare vari plugin o estensioni e vedere quale è più performante nel tuo caso. Se inserisci i bottoni manualmente seguire le documentazioni ufficiali per implementare i plugin nel modo ottimale.

  4. Ciao Stefano,

    grazie per la tua risposta. Ho appena aggiunto js.async=true; e in realtà non è cambiato nulla. Il bottoncino di fb si carica sempre un po’ dopo. Ho spostato il codice del plugin nel footer del sito per alleggerirlo di più, ma boh non mi sembra ci siano grandi differenze.

    Adesso procedo con l’ottimizzazione delle immagini (quasi tutte in png). Leggevo che è meglio caricarle in jpg (confermi?). Qualcuno conosce uno strumento (senza essere tecnici/grafici) per ottimizzare le immagini MANTENENDO la qualità?

    Grazie!
    Fabio

    • Ciao Fabio,
      per quanto riguarda il caricamento del bottone Facebook purtroppo più di tanto non si può fare (il pulsante fa delle chiamate esterne al tuo sito web). Per le immagini invece il consiglio generale è di cercare di comprimerle al massimo a prescindere dal formato. JPEG e PNG sono entrambi formati validi per il web (potresti addirittura usare il GIF); quello che cambia e che permette al sito di caricare le immagini più velocemente è la riduzione di peso che riesci ad applicare alle foto senza comprometterne la qualità percepita.

      Lato strumenti se hai Photoshop ti consiglio di utilizzare l’opzione “Salva per il web” e provare i vari tipi di compressione per il formato jpeg. Altrimenti puoi utilizzare qualsiasi software di editing grafico o tool come VSO Image Resizer per eseguire una compressione massiva di più file contemporaneamente.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Loading Facebook Comments ...