Garder son référencement en changeant d’adresse URL

301 Moved Permanently
Vendredi 1er juillet 2005 — Dernier ajout jeudi 15 février 2024

Votre site a grandi, vous achetez un nom de domaine, prenez un hébergement professionnel et quittez votre hébergeur gratuit.

Et là, patatras ! Vous avez des gens qui continuent à aller sur l’ancien site et le Google Rank de votre site reste sur l’ancien au lieu de venir sur le nouveau.

La problématique est donc de signaler à tous, y compris moteurs de recherche que l’on a changé d’adresse.

Je vais partir du postulat (largement vérifié chez les hébergeurs gratuits) que le serveur web est apache et que PHP est installé/activé [1].

L’opération se fait en 3 mouvements :

  1. transférer le site sur le nouvel hébergeur (via FTP probablement)
  2. vider l’ancien site
  3. placer sur l’ancien site les fichiers nécessaires pour signaler le changement d’adresse
Retour Sommaire

Théorie du n’habite plus à l’adresse indiquée (301 Moved Permanently)

Dans sa documentation pour les webmasters, Google indique :

Si vos anciennes URL utilisent des redirections HTTP 301 (permanentes), notre robot d’exploration détectera les nouvelles URL. Pour plus d’informations sur les redirections HTTP 301, consultez la page http://www.ietf.org/rfc/rfc2616.txt (en anglais).

En français dans le texte : les normes des protocoles de communication du web (HTTP) ont prévu le cas du déménagement et Google en tient compte.

Retour Sommaire

En pratique, le 301 Moved Permanently

Nous allons mettre en place 3 fichiers :

  • index.php : la page par défaut du site
  • .htaccess : une directive pour le serveur web apache
  • erreur404.php : la page d’erreur du site pour renvoyer sur le nouveau site

Ces 3 fichiers sont à placer à la racine du site.

Retour Sommaire

index.php

La page par défaut du site.

<?php
header("Status: 301 Moved Permanently", false, 301);
header("Location: http://www.pyrat.net/");
exit;
?>

Quelques lignes de PHP pour indiquer aux navigateurs et aux moteurs de recherche que la page a changé d’adresse :

  • Pour les visiteurs, la redirection est absolument transparente
  • Pour les moteurs de recherche, l’index est mis à jour et dans le cas de Google, le PR est transféré
Retour Sommaire

.htaccess

Il s’agit d’un fichier de configuration de votre serveur web apache qui peut changer le comportement de celui-ci.

ErrorDocument 404 /erreur404.php

Cette simple ligne indique au serveur web apache que s’il ne trouve pas une page, il doit afficher à la place la page erreur404.php (le nom est arbitraire).

Retour Sommaire

erreur404.php

La page d’erreur (déclarée dans le .htaccess) du site pour renvoyer sur le nouveau site.

<?php
header("Status: 301 Moved Permanently", false, 301);
// Mettre le commentaire (#) devant la ligne qui convient
header("Location: http://www.pyrat.net/".$_SERVER['REQUEST_URI']);	// cas d'un serveur simplement déplacé
#header("Location: http://www.pyrat.net/");				// cas d'un serveur déplacé avec des URLs de pages différentes (par exemple, passage d'un site statique à un site SPIP
exit;
?>

Même fonctionnement que index.php à un détail près : on utilise header("Location: http://www.pyrat.net/.$_SERVER['REQUEST_URI']"); qui permet de renvoyer non plus sur la page d’accueil du nouveau site, mais sur la page demandée sur le nouveau site. Cela est à utiliser sur un site qu’on a simplement déplacé.

Si le site a été refondu dans l’opération (changement de technologie, passage d’un site statique à un site SPIP…), alors une redirection sur la page d’accueil fera l’affaire (idéalement, il faudrait établir une correspondance entre les anciennes URL et les nouvelles, mais c’est particulièrement fastidieux).

Retour Sommaire

Alternative avec .htaccess seul

Retour Sommaire

Situation générale

RedirectMatch permanent /.* http://www.pyrat.net/

Cette simple ligne peut être utilisée pour indiquer que toutes les pages de l’ancien site renvoient sur la page d’accueil du nouveau site.

RedirectPermanent / http://www.pyrat.net/

Permet par contre de signaler que l’ancien site a changé de nom de domaine, mais que les URL des fichiers sont transmises à l’identique.

Retour Sommaire

En cas de SPIP mutualisé

En cas, de SPIP mutualisé, le .htaccess est commun à tous les sites. Il faut donc être plus spécifique :

RewriteCond %{HTTP_HOST} ^perdu\.soyezcreateurs\.net [NC]
RewriteRule ^(.*) http://www.perdu.com/$1 [R=301,L]
  • La première ligne correspond au domaine que l’on souhaite rediriger
  • La deuxième ligne permet de rediriger en conservant la page demandée
Retour Sommaire

Et si l’URL d’origine a des paramètres ?

Remarque : ce cas est plus difficile à gérer tout simplement parce que la documentation disponible sur Internet ne présente pas d’exemples sur ce besoin.

Le besoin : un ancien site sous SPIP avec des URL compliquées avec plusieurs paramètres, et un nouveau site respectant les standards de SPIP.

Exemple (ancienne URL → Nouvelle) :

/spip/spip.php?page=pourqui&id_article=7
--> /7

De cette URL, il fallait récupérer l’identifiant de l’article.

RewriteCond %{HTTP_HOST} ^www\.domaine\.tld [NC]
RewriteCond %{QUERY_STRING} ^.*id_article=(\d+).*$ [NC]
RewriteRule ^spip\/.* http://www.domaine.tld/%1? [R=301,L]

Explications :

  • RewriteCond %{HTTP_HOST} : pour être sûr de traiter le bon domaine
  • Le 2e RewriteCond fait un et logique avec le premier.
    Il cherche quelque chose ayant id_article=chiffre(s)
    Et met en réserve ce chiffre dans %1
  • La RewriteRule n’est mise en œuvre que si c’est le sous dossier spip/
    Et fait une redirection permanente vers l’identifiant trouvé
    le ? final vide la query string initiale

Retour Sommaire

[1Ce qui ne sera malheureusement pas le cas avec des solutions telles que Jimdo, Wix ou équivalent. Dans ce cas, il vous faudrait commencer par acheter un nom de domaine pointant sur eux, puis migrer ailleurs.

Documents à télécharger

Vos réactions

  • Henri 21 octobre 2013 23:45

    Bonjour, Cet article est toujours d’actualité.

    La redirection fonctionne. Mais comment faire une redirection à la page ?

    Exemple : monsiteA/Mentions-legales => monsiteB/Mentions-legales

    Si j’utilise la redirection proposée, dans le cas ci-dessus j’ai une erreur 404 (d’ailleurs sur monsiteA malgré le fichier erreur404.php).

    Merci.

    • Garder son référencement en changeant d’adresse URL 22 octobre 2013 09:04, par Jacques Pyrat

      Bonjour,

      Quel est votre hébergeur ?

      Quelle méthode avez-vous utilisé ?

      Éventuellement, faites-moi intervenir.

      • Bonjour,

        Je vous remercie pour votre réponse. Les sites sont hébergés chez OVH, serveurs mutualisés, hébergement « perso ».

        J’ai résolu mon problème. J’ai lu que chez certains hébergeurs (disparus), il faut que les pages redirigées soient présentes sur le serveur avant la redirection.

        Or j’étais parti d’un htaccess vide pour y ajouter les lignes

        RewriteEngine on

        Redirect Permanent / http://www.atelier-eda.fr/

        Dans ce cas le code sur la Gestion des URLs devrait être présent dans le htaccess avant la redirection.

        J’ai repris le htaccess.txt fourni avec SPIP et j’ai ajouté le Redirect Permanent à la fin et maintenant toutes les redirections marchent sur les URLs propres.

        Puisque votre méthode PHP fonctionne alors que vous effacez les fichiers SPIP, ce peut-être un comportement spécifique à ce type d’URL ou à l’hébergement.

        Cordialement. Henri

  • maldo 14 mai 2007 14:13

    Bonjour, un petit tuto bien utile, sauf que cela ne fonctionne pas, a priori, sur safari… Quand je suis sur firefox, je demande www.mondomaine.com je suis bien redirigé vers www.mondomaine2.fr.

    Sous safari, cela me donne http://www.mondomaine2.fr/www.mondomaine2.fr !

    je cherche une solution…

  • Thierry Monjo 29 décembre 2006 12:55

    Merci, Jacques, pour ces renseignements précieux et clairs qui ont permis de migrer mon site avec succès de Free à OVH.

    Bien cordialement.

  • Chr !x 15 février 2006 15:46

    Bonjour,

    Je n’utilise pas SPIP mais je pense que la méthodologie que vous exposez s’applique quelque soit le type/genre de site que l’on utilise.

    J’ai appliqué à la lettre vos préconisations. Cela marche… Sauf la partie dans le erreur404.php qui permet de rediriger en cas de simple déplacement du site.

    Je suis pas trop mal référencé, beaucoup de liens direct, et cette redirection via le erreur404.php m’intéresse au plus haut point.

Revenir en haut