Se devi affrontare la migrazione da un server a un altro o devi semplicemente spostare il tuo sito web su di un altro dominio, ricorda di effettuare i redirect 301 in modo corretto, altrimenti rischi di perdere traffico organico.
Se non gestisci opportunamente i reindirizzamenti dal sito vecchio al nuovo puoi incorrere nei seguenti problemi:
- Contenuti già indicizzati possono generare il famoso errore 404 (contenuto non trovato)
- I contenuti del nuovo sito, non godranno del vantaggio acquisito nel tempo
Questi problemi vengono evitati gestendo i redirect 301 che invia a Google l’informazione che il contenuto presente in una pagina è stato spostato su di un’altra.
Questo tipo di reindirizzamento piace molto al motore di ricerca che leggendo l’indicazione “trasferisci” sposta il Page Rank dal vecchio al nuovo contenuto / sito web.
Solitamente questo passaggio dal vecchio al nuovo risultato in serp può avvenire in un paio di mesi circa a seconda di vari fattori come lo sviluppo complessivo della struttura del sito e la sua popolarità in senso ampio.
Il contenuto vecchio verrà deindicizzato (non sarà più visibile la sua copia cache) e verrà sostituito con il nuovo.
Un buon utilizzo del redirect 301 riguarda il fatto che spesso i siti web vengono indicizzati sia con WWW che senza. In questo caso suggeriamo di far puntare tutti i contenuti al sito nella versione con WWW e di non lasciare la doppia indicizzazione per evitare di disperdere page rank.
Come si fa il redirect 301?
Vediamo ora i principali casi di utilizzo di questa funzione
Redirect 301 in linguaggio PHP
<?php
Header( “HTTP/1.1 301 Moved Permanently” );
Header( “Location: http://www.nuovosito.it” );
?>
Lo sript serve a reindirizzare la vecchia pagina web a quella nuova.
Redirect 301 in linguaggio ASP
<script runat=”server”>
private void Page_Load(object sender, System.EventArgs e)
{
Response.Status = “301 Moved Permanently”;
Response.AddHeader(“Location”,”http://www.nuovosito.it”);
}
</script>
Redirect 301 in Coldfusion
<.cfheader statuscode=”301″ statustext=”Moved permanently”>
<.cfheader name=”Location” value=”http://www.nuovosito.it”>
Redirect 301 con mod_rewrite
La soluzione consigliata richiede del modulo mod_rewrite e l’accesso al file htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^nomesito\.it [NC]
RewriteRule ^(.*)$ http://nomesito.it/$1 [L,R=301]
Redirect /htaccess-url-redirect.html http://www.nomesito.it/index.html
</IfModule>
Redirect 301 in caso di vecchi siti migrati
Inserendo questo script nell’htaccess del vecchio dominio ottieni un reindirizzamento al nuovo.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^/(.*)$ http://www.nuovosito.it/$1 [R=301,L]
</IfModule>
Con questo script puoi gestire i reindirizzamenti dei sottodomini
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} (.*)\vecchiosito\.it
RewriteRule ^(.*) http://www.nuovosito.it/$1 [R=301,L]
</IfModule>
Spesso capita che effettuando una migrazione da un server ad un altro, si riscontrano cali di visite. A ragion veduta di questo articolo, la domanda è: come hai gestito i reindirizzamenti?
Ciao ragazzi, io odio perdere traffico nelle migrazioni dei siti, e dunque faccio anche i redirect di tutte le pagine indicizzate, anche se sono 50 pagine di google, dopo aver fatto le solite operazioni, mi guardo link per link e li reindirizzo o alla pagina corrispondente o alla categoria più vicina. Inoltre faccio la lista di link che hanno backlink verso il sito e reindirizzo allo stesso modo. Un lavorone, diciamo che non lascio quasi niente al caso, ma ripeto, odio perdere traffico.
Ciao Roberto,
si è un lavorone (certosino direi) ma credo sia l’unico modo – quando si cambia CMS – per non perdere traffico. 🙂
Qualcosina però di potrebbe automatizzare con poche righe di bash scripting, onde evitare di fare proprio tutto a mano.
Qualche esempio concreto di redirect con htaccess?
Ad esempio dopo il restyling del sito necessito di reindirizzare tutte le url con il seguente formato
http://www.sito.it/notizie.php?action=news&NewsID=900
http://www.sito.it/notizie.php?action=news&NewsID=901
semplicemente a http://www.sito.it/news
quale è la regola da usare?
Ciao,
con qualcosa tipo questo:
RewriteCond %{REQUEST_URI} ^/notizie\.php$
RewriteCond %{QUERY_STRING} ^NewsID=([0-10000]*)$
RewriteRule ^(.*)$ http://sito.it/news [R=301,L]
bisogna giocare un pò con le espressioni regolari. 🙂
Grazie per la guida. 🙂
Un consiglio: mi suggeriresti di usare il Redirect solo per le pagine vecchie verso le nuove o usarlo anche per tutte le altre pagine vecchie che il WebMaster Tool (o plugin redirect) trova come non esistenti? Come ad es:
sitovecchio/pagina-vecchia/categoria/tag/paperino.html
sitovecchio/pagina-vecchia/autore/aaaa-mm-gg
sitovecchio/plugin/pippo/id-000.html
oltre alle altre pagine che non hanno il canonical url…
Thanks
Ciao,
è inutile reindirizzare i 404, a meno che quei 404 non corrispondano a pagine che prima esistevano e che dopo, a seguito del cambio url, Google non trova più.
Sarebbe opportuno verificare se magari a quelle pagine (ora 404) non arrivassero link in ingresso. In quel caso un reindirizzamento ci starebbe bene.
Salve a tutti.
Di recente ho deciso di aggiornare il mio ecommerce, e mi sono affidato a prestashop per la nuova progettazione.
Il problema è Questo:
Dovrei spostare tutto il traffico e l’indicizzazione da http://www.sdshopping.it a http://www.prezzobasso.cc
Nel vecchio sito (sdshopping) non uso prestashop, quindi anche le url dei prodotti saranno diversi.
Come posso reindirizzare tutti i prodotti e le pagine senza fare danni?
Ciao Damiano,
puoi risolvere agevolmente con un Redirect 301, in modo che sdshopping.it reindirizzi automaticamente su prezzobasso.cc.
Per far ciò ti basta inserire le seguenti direttive nel file .htaccess:
RewriteEngine on
RewriteRule (.*)$ http://www.prezzobasso.cc/$1 [R=301,L]
Quindi senza inserire una ad una le url dei prodotti e/o pagine?
Ciao Damiano,
si, esatto. 🙂
Ma così se qualcuno ha salvato il link di un prodotto del vecchio sito, ad es: http://www.sdshopping.it/prodotto-x/accessori-y.aspx e ci clicca viene reindirizzato a http://www.prezzobasso.cc e non a http://www.prezzobasso.cc/categoria-a/prodotto-x.html
o no?
Ciao Damiano,
si, così reindirizzi i prodotti su una singola pagina.
Per reindirizzare la singola pagina prodotto ad una url specifica, devi usare le espressioni regolari e individuare un Pattern comune così da scrivere una o comunque poche regole, invece di reindirizzare le singole pagine una per volta.
ciao, io sto sbattendo la testa da giorni cn quest benedetto 301 praticamente ho molti url da rindirizzare,quindi l opzione rindirizzare uno ad uno gli url è impossibile visto che sono tantissimi , non ce qualche modo nel htacces rindirizzare molti url
un esempio di un url :
http://www.sito.it/boat_make-Albermarle/boat_type-moto+d'acqua/fuel-elettrico/country-Lombardia/region-Milano/listings.html
Ciao Matteo,
si, il modo c’è tramite le espressioni regolari. Dovresti individuare un path comune, in modo che con una o poche regole riesci a reindirizzare verso la nuova URL.
grazie fabrizio ,mi potresti fare un esempio? io non sono molto pratico con htaccess
Ciao Matteo,
immagina di avere pagine con la seguente URL, che vuoi reindirizzare tutte alla pagina pippo.php:
categoria/271.php
categoria/76565.php
categoria/8903.php
categoria/8294785.php
Con questa direttiva lo fai un un sol colpo:
RewriteRule ^categoria/([0-9]+)\.php$ /pippo.php [R=301]
In sostanza individuando il Pattern comune, puoi trovare il modo – tramite le espressioni regolari – di reindirizzare agevolmente più pagine verso una destinazione a tua scelta. 😉
grazie ancora per la risposta e la spiegazione, ho provato a usare la direttiva ma niente 🙁
RewriteRule ^condition_vehicles-Usato/([0-9]+)\.php$ /1-veicoli/listings.html [R=301]
metto questo nell htacess ma non fa il rindirizzamento , credo che condition_vehicles-Usato sia un parametro,ed non vada bene questa direttiva? dp quest parametro ce ne sono altri.
/condition_vehicles-Usato/fuel-benzina/color-beige/model-430%20Scuderia/doors-4/make-Ginetta/transmission-Semi-Automatico/
se metterei tutto il link farei solo un redirct a una pagina,non capisco perche non va.
Ciao Matteo,
non funziona perchè nella url ci sono lettere e numeri, l’esempio che ti ho fornito era solo nel caso di pagine contenenti numeri nella url.
Dovresti provare così:
RewriteRule ^condition_vehicles-Usato/fuel-benzina/([A-Za-z0-9-]+)$ /1-veicoli/listings.html [R=301]
In pratica stiamo dicendo che qualsiasi pagina che inizia per “condition_vehicles-Usato/fuel-benzina/*” deve reindirizzare su /1-veicoli/listings.html
Salve complimenti per la guida.
Io ho un piccolo problema. Utilizzo prestashop 1.5.6.2
Avevo creato inizialmente il sito in due lingue italiano ed inglese,
quindi l’indirizzo degli articoli era il seguente:
http://www.sito.it/it/articolo
http://www.sito.it/gb/articolo
Adesso attualmente ho tolto la lingua inglese automaticamente it e gb non esistono più.
Mi sono dimenticato di reindirizzare con il 301 all’interno degli articoli.
Adesso mi ritrovo che google e altri mi cercano sotto it o gb e mi da errore pagenotfound.
Come posso sistemare il tutto all’interno del htaccess ?
Aiuto per favore
Ciao Corrado,
se il sito è ora semplicemente http://www.tuodominio.it dovresti cavartela con queste due regole:
Redirect 301 ^/it/articolo http://www.tuodominio.it/articolo
Questo va fatto per ogni articolo, a meno che tu non riesca ad individuare un Pattern comune di modo che tu possa aggregare, tramite espressioni regolari, il Redirect in una sola regola.
Grazie Fabrizio.
In effetti ho dimenticato di fare il redirect 301 per ogni singolo articolo.
Quindi cercavo un modo di applicare una sola regola per evitare tutti questi pagenotfound.
Cioe poter dire che /it/ e /gb/ non esistono più.
Ciao Corrado,
l’unico modo per reindirizzare con 301 è farlo o per singolo url, oppure trovando un Pattern comune nei vecchi url e reindirizzandli con una o poche regole nel .htaccess.
Oppure potresti provare così, con php:
$product = new Product(Tools::getValue(‘id_product’));
$link = new Link();
$url = $link->getProductLink($product);
In questo modo vengono stampati a video gli URL dei prodotti e poi, con awk o php, scriverti le regole di Redirect 301. 😉
Buongiorno Fabrizio,
una piccola domanda.
Se devo fare un redirect da pagine con estensione .php a pagine senza estensione (passo da php a wordpress) posso utilizzare un plugin di wordpress o l’unico modo è caricare le regole sull’htaccess?
Grazie
Ciao Ema,
dovresti creare i redirect 301 manualmente nel .htaccess, perchè in questo caso i vecchi url non sono di WordPress. Usando un plugin di WordPress, il sistema non può sapere quali sono i vecchi url. 🙂
Intanto grazie per la risposta.
Mi sembra di aver capito che alcuni plugin di wordpress agiscono lato server, in questo caso non è come se stessero effettuando delle aggiunte direttamente all’.htaccess?
Quindi, se non ho capito male, per funzionare wordpress deve essere installato nella versione vecchia del sito o del dominio, giusto?
Perchè mi sembra che alcuni plugin intervengano direttamente sull .htaccess, perciò potrebbero funzionare…
Ciao Ema,
non so a quale plugin ti riferisci. Quelli che ti consentono di lavorare sulle regole di rewrite, vanno tutti a modificare il .htaccess perchè è quello il file in cui devono essere definite le regole.
Non devi installare WordPress nel vecchio sito web. Devi semplicemente prendere nota degli URL vecchi e nuovi, poi nel .htaccess inserisci i vari Redirect 301 per reindirizzare le vecchie pagine sulle nuove.
Ciao, bellissima guida,
io ho un problema con un sito.
è realizzato con codice a mano, sta migrando su un cms in ASPX (il dominio resta lo stesso) ma questo non offre la possibilità di prendere una vecchia url e farne il redirect alla nuova, anche perché la struttura delle cartelle è diversa.
Ora il pezzo di codice che hai suggerito, in quale file del sito in asp devo andarlo ad inserire?
Grazie.
Ciao Pino,
il codice in ASP va inserito nella pagina .aspx che andrà poi a reindirizzare, automaticamente, verso la nuova URL.
Gentile Fabrizio, complimenti per l’articolo. Premetto che non sono un esperto, ho da poco tolto a tutte le pagine del mio sito il suffisso “.html”. Naturalmente mi da ora l’errore pagina non trovata se clicco su quelle pagine. Come potrei fare un redirect, agendo sull’ htaccess di tutte quelle pagine alle stesse pagine senza suffisso? Leggendo online ho trovato questo codice, ma non funziona:
RewriteRule ^(.*).html$ http://www.psicoterapiapsicoanalitica.net/$1.php%5BR=301,NC%5D
Grazie mille!
Cordiali saluti,
Giuseppe
Ecco il codice da me provato
”
RewriteRule ^(.*).html$ http://www.psicoterapiapsicoanalitica.net/$1.php%5BR=301,NC%5D
“
Salve Giuseppe,
potresti provare con le seguenti direttive:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]
Con Joomla! ci sono diversi moduli ad hoc. 🙂
Salve, vorrei spostare i contenuti del vecchio blog discretamente posizionato sul Google su un nuovo dominio + hosting. Come posso fare senza portare nel nuovo blog backlink e problemi vari del vecchio blog, ma senza nemmeno perdere il posizionamento? Grazie!
Ciao Antonietta, su magari scrivendoti una sorta di mappatura con le corrispondenze vecchio/nuovo.
dovresti semplicemente reindirizzare
Controlla anche in serp, con l’operatore site:, l’indice di Google così da non perdere traffico.
Salve, grazie per la guida, dopo la migrazione ad altro dominio sto reindirizzando i vecchi url dal vecchio prestashop 1.4 al nuovo 1.6 tutti con mod rewrite abilitato ma mentre per gli url con estensione .html va tutto bene per le categorie e le pagine statiche senza estensione mi aggiunge una stringa, e non va bene, oppure addirittura reinderizza ad un’altra pagina. Il file htaccess è pieno di altre direttive, cosa posso fare?
Ho provato in diversi modi:
RewriteRule ^/it/8-foto-album https://www.capestoreonline.com/it/4-album-fotografici [R=301]
ma ottengo
https://www.capestoreonline.com/it/8-album-a-tasche-10×15-cm?id_category=8&isolang=it
oppure
Redirect 301 /it/content/2-termini-e-condizioni https://www.capestoreonline.com/it/content/3-termini-e-condizioni-d-uso
ma ottengo questo
https://www.capestoreonline.com/it/content/3-termini-e-condizioni-d-uso?isolang=it&id_cms=2
grazie
Rettifico anche le url con estensione html hanno la stringa finale
Ciao Roberta,
così “al volo” è difficile da darti un consiglio preciso.
Se mi indichi vecchia e nuova url, posso cercare di darti la regola da inserire nel .htaccess.
Ciao a tutti, volevo chiedervi un’informazione perché ho un problema che non riesco a risolvere.
Come faccio a reindirizzare tutti gli URL di un vecchio SOTTODOMINIO (al quale non ho più accesso) al mio nuovo dominio?
Spero sappiate aiutarmi
Grazie
Salve Fabrizio,
grazie per la guida.
Ho un dubbio, forse supido… Mi sto occupando di un vecchio sito ancora in Joomla 1, ed ho richiesto la migrazione su un nuovo server per poter aggiornare tutto a partire da Joomla, nuovo template, ecc. Contestualmente, attiverò il protocollo SSL per l’https. Quel che non capisco è in che momento devo effettuare le modifiche al file .htaccess. Attualmente ho http://www.ilmiosito.it sul vecchio server e la prova per la nuova versione in http://www.ilmiosito.it/nuovaversione. L’hosting ha attivato la migrazione ed ho pertanto copiato tutto tramite ftp. Quando il nuovo sito sarà pronto, l’hosting effettuerà la migrazione di dominio effettiva. Su un forum di Joomla leggevo:”in ogni caso questa manovra (redirect tramite htaccess o componente) dovevi implementarla prima (o contestualmente) di mettere online il nuovo sito in modo che non ci fossero “buchi” nel passaggio dal vecchio al nuovo.” e qui mi son perso… Se cambio il file .htaccess presente sul sito/server attuale scrivendo i reindirizzamenti prima che il nuovo sito sia attivo sul nuovo server, non finisco per reindirizzare già le pagine (su pagine ancora non online)?….
Spero di esser stato chiaro nella mia confusione! Grazie, Christian