Redirection 301 – .htaccess et PHP

Attention, cet article a été déplacé dans les archives, donc le contenu peut ne plus être à jour. A vous de voir 🙂

Accès direct :

Il vous arrive peut-être de devoir changer le nom de domaine ou la structure d’un site. Un immonde /index.php?mapage=outils&souspage=whois se transformant ( grâce à l’url rewriting … ou non ) en un sympathique /outils/whois.htm. Un nom de domaine peut également être remplacé par un plus clair / court / mémorisable / lisible.

Les avantages sont connus : un meilleur référencement, une URL plus claire et plus facile à mémoriser ou à retrouver dans ses favoris/marque-pages, etc.

Mais cette méthode comporte également certains inconvénients : Les moteurs de recherche se « souviennent » de l’ancienne URL et risquent de considérer la nouvelle comme un doublon, des liens peuvent exister vers l’ancienne page, et les webmasters de ces sites peuvent ne pas répondre … ou ne plus tenir à jour leur site, et plus important : des favoris/marque-pages de visiteurs peuvent mener vers une page d’erreur 404.

C’est pourquoi il est très important de maintenir une cohérence entre l’ancienne page et la nouvelle, en mettant en place une redirection 301 ( définitive ).

Note : Je n’aborderais pas la redirection 302 (redirection temporaire), parce qu’elle n’est vraiment utile que dans de rares cas, et est souvent mal utilisée. Mais c’est un avis personnel qui n’engage que moi.

J’utilise deux techniques différentes, selon les cas de figure, donc à utiliser selon votre préférence : htaccess ou PHP.

Redirection 301 via PHP

Avant tout envoi de code html / css (même les espaces et tabulations), collez ce code :


Notes :

  • J’utilise toujours des URL absolues (avec http: //mondomaine.com avant) pour être sûr de la destination.
  • Les deux derniers paramètres ( true et 301 ) sont obligatoires pour un bon fonctionnement.
  • Un espace après "location", pas avant !
  • Le exit(); permet d’arrêter votre script juste après, et de ne pas envoyer de données. Au choix.
  • J’utilise cette méthode pour rediriger une URL dynamique ou indésirable vers une autre, en complément d’un lien canonical.

Redirection 301 via .htaccess ( Apache )

Dans un fichier .htaccess créé à la racine de votre site ( généralement le même dossier que le index.php ou index.htm principal ), collez ce code :

RedirectPermanent /ancienneurl.php http://www.monsite.com/nouvelleurl.htm

Notes :

  • La casse de la commande peut changer selon les scripts, mais je me base sur la syntaxe donnée par le manuel Apache(Serveur Web). Bon à savoir, cette page peut également vous fournir d’autres redirections plus complexes (mais bien utiles) comme RedirectMatch.
  • Encore une fois, une URL absolue pour la destination.
  • Le module Apache mod_alias.c doit être activé. Mais par défaut … c’est fait. Si le bout de code ne marche vraiment pas, contactez votre hébergeur.

Bonne redirection à tous !

PS : évidemment, mes méthodes ne sont sûrement pas les meilleures. Mais si vous avez mieux, les commentaires sont là pour ça :D.
PS2 : Ce blog tourne vraiment au bloc-notes et aide mémoire. Mais si vous lisez cette phrase, c’est que ça vous a intéressé, oui ? ( non ? Partez pas, quoi 🙁 )

Partager cet article

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

  • C’est en effet ce qu’il faut faire. J’insisterais plus sur la solution par .htaccess, car elle a l’avantage de faire directement la redirection sans faire appel au PHP.
     
    Je confirme en tout cas que la redirection 301 est parfaite pour le référencement. J’ai pu faire l’essai plusieurs fois, en changeant le nom de domaine d’un site et en changeant l’URL de toutes les pages d’un site : le référencement de chaque page se transfère sans problème. J’ai même un jour cumulé le référencement de deux sites en les fusionnant, ça marche super bien !
     
    Avec le .htaccess, il est aussi possible d’utiliser RewriteRule pour faire des redirections un peu plus poussées. Par exemple :
     

    RewriteEngine On
    RewriteRule ^article-([0-9]+)(-([a-z0-9\-]+))?\.html$ http://example.com/$3-$1 [QSA,L,R=301]
    

     
    Dans cet exemple, http://ancienne-adresse.com/article-23-titre-de-l-article.html est redirigé en 301 vers http://example.com/titre-de-l-article-23
     
    Note : RewriteEngine nécessite que le mod_rewrite soit activé

  • Je confirme aussi : c’est parfait pour transmettre un site d’un domaine à l’autre sans aucune perte du point de vue SEO. Meilleurs vœux pour 2010 !