Régler le problème des slashs dans les URLs

  • De le 27 juillet 2012
  • Difficulté : 1/4

Régler le problème des slashs dans les URLs Que vous ayez choisi d'utiliser un suffixe ou non dans les URLs, il subsiste toujours le problème du slash à la fin de l'adresse. Cela peut poser des problèmes de duplication de contenu.

Dans Magento (on trouve également ce problème sur de nombreuses applications Web), il est toujours possible d'afficher une page avec ou sans slash à la fin de l'URL. Essayez sur votre boutique, il est fort probable que les 2 adresses affichent le même contenu. Par exemple :

  • Page CMS : "about-magento-demo-store" et "about-magento-demo-store/"
  • Page produit : "sony-vaio-11-1-notebook-pc.html" et "sony-vaio-11-1-notebook-pc.html/"
URL avec slash et sans slash

Pourtant, ces adresses n'ont pas la même signification. Un URL contenant un slash final désigne un répertoire, un URL n'en contenant pas désigne un fichier. Il est donc possible de servir un contenu différent sur les 2 adresses.

C'est pourquoi Google gère distinctement les 2 URLs. Un article du Webmaster Central Blog l'explique clairement : To slash or not to slash.

Google treats each URL above separately (and equally) regardless of whether it's a file or a directory, or it contains a trailing slash or it doesn’t contain a trailing slash.

Pour palier à ce problème, Google propose d'utiliser le Canonical URL ou d'appliquer une redirection 301. Dans tous les cas il vous faut faire un choix : utiliser systématiquement un slash dans les URLs de votre site ou non. Une fois ce choix effectué il faut rester cohérent dans les liens présents sur le site.

De nombreux modules Magento existent pour ajouter à l'entête de la page l'URL canonique. Nous allons plutôt nous intéresser à la redirection 301. Dans le cas d'une redirection il n'y a plus d'ambiguïté possible.

Cela se passe dans le fichier .htaccess. Dans cet exemple je traite le schéma classique :

  • Pages produits et catégories avec une extension sans slash final (ex : "produit.html")
  • Pages CMS (et contrôleurs) sans suffixe avec un slash final (ex : "page-cms/")

.htaccess

# L'URL ne contient pas d'extension et ne contient pas de slash
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ http://www.domaine.com/$1/ [R=301,L]

# L'url contient une extension suivie d'un ou plusieurs slashs
RewriteCond %{REQUEST_URI} (\.[a-zA-Z0-9]{1,5}/{1,255})$
RewriteRule ^(.+)/$ http://www.domaine.com/$1 [R=301,L] 

Notez que j'effectue une redirection sur les adresses contenant entre 1 et 255 slashs, car il est possible d'en indiquer une infinité.

URL contenant plusieurs slashs

Attention : prenez garde sur les URLs de vos formulaires, si une redirection 301 est effectuée car l'adresse indiquée dans action est différente de celle choisie, les données ne seront pas transmises.

Je recommande de tester toutes les pages du site et le processus de commande après l'ajout des redirections.

commentaires

Commentez cet article : Régler le problème des slashs dans les URLs