Tag Archives: redirection

Astuce : Redirection 301 si l’ancienne URL est toujours accessible (anti-DC)

31 Août

Récemment je suis resté bloqué un petit temps sur un soucis épineux lors de mes recherches d’amélioration de mon référencement naturel sur Wikeo :

En effet, j’utilise un framework php MVC qui me permet d’utiliser des url du style /fr/sitemap/index.

Mon soucis est que je voulais avoir des meilleures URL, adaptées à la langue, dans ce cas-ci : /fr/plan-du-site tout en évitant le duplicate content.

Le but étant qu’un visiteur (ou un robot) accédant à /fr/sitemap/index soit redirigé vers l’url /fr/plan-du-site, qui sera réécrite vers /fr/sitemap/index pour le fonctionnement interne du framework MVC.

En effet, lorsque vous désirez mettre en place des belles URL mais que votre site est déjà indexé, il faut faire en sorte que les moteurs de recherche ne tombent sur du contenu dupliqué et vous pénalisent.

J’ai donc essayé plusieurs méthodes pour finalement trouver une solution efficace !

Le premier script testé (simple à concevoir mais tout à fait incorrect) me créait une boucle infinie sur les deux URL possibles…

RewriteRule /fr/sitemap/index /plan-du-site [L,R=301]
RewriteRule /plan-du-site /fr/sitemap/index [L]

Mes recherches m’ont d’abord menées vers l’utilisation de la variable spéciale %{REQUEST_URI} de la manière suivante :

RewriteCond %{THE_REQUEST} /fr/sitemap/index
RewriteRule /fr/sitemap/index /plan-du-site [L,R=301]
RewriteRule /plan-du-site /fr/sitemap/index [L]

Malheureusement, le résultat n’est pas du tout celui escompté… En effet, cette variable n’a pas la même signification qu’en PHP, où $_SERVER[‘REQUEST_URI’] retourne l’URL réellement appelée par le visiteur.

C’est alors qu’au détour de forums et d’articles de blogs, je suis tombé sur l’article suivant, qui propose d’utiliser la variable %{THE_REQUEST}, pour le résultat suivant :

RewriteCond %{THE_REQUEST} /fr/sitemap/index
RewriteRule /fr/sitemap/index /plan-du-site [L,R=301]
RewriteRule /plan-du-site /fr/sitemap/index [L]

Et là, miracle ! La redirection 301 peut s’effectuer dans le bon sens, les visiteurs (ou robots) arrivant sur fr/sitemap/index sont redirigés vers /plan-du-site, qui est à son tour réécrite en fr/sitemap/index, pour une utilisation par le framework php !

La variable %{THE_REQUEST} contient en effet l’URL avant tout rewriting et reste intacte même si apache boucle plusieurs fois dans vos règles de réécriture, alors que %{REQUEST_URI} change en fonction des réécritures.

Publicités