Comment éviter les erreurs 404 dans PrestaShop grâce aux redirections 301

Publié le : 23/09/2015 20:46:51
Catégories : PrestaShop Rss feed

Comment éviter les erreurs 404 dans PrestaShop grâce aux redirections 301

Pourquoi est ce important de savoir écrire des redirections 301 dans votre boutique PrestaShop?

Une erreur 404, pour rappel, indique une URL pointant nulle part, page non trouvée. google n'aime pas trop en général, mais vos visiteurs non plus et ils risquent fort d'aller voir ailleurs.

Le travail de référencement d'un site est un long, très long travail, pour chaque page du site. Que l'URL d'une page change, même d'une seule lettre, on aura au mieux une erreur 404, et si on ne fait rien c'est tout le référencement de cette page qui sera perdu.

De plus les liens vers cette page, depuis d'autres sites, ne fonctionneront plus.

Ainsi, lors de modifcations majeures d'un site, comme un changement d'hébergement ou de version du CMS, c'est toute l'indexation, ranking et connaissance du site par les moteurs de recherche qui peuvent être définitivement perdus. De quoi mettre à genoux n'importe quelle société.

Aussi, la priorité doit être donnée à la conservation des URLs, pour toutes les pages. Mais parfois ce n'est pas possible ou trop compliquer à réaliser. Dans ce cas la, la meilleure solution est de faire des redirections définitives, dites 301.

Une redirection 301 consiste à rediriger les anciennes URLs de manière définitive vers la nouvelle URL de la même page. Cela vaut pour Google mais aussi pour les liens entrants.

Voici la courbe des erreurs d'URLs de ce site vue par Google, chaque matin, au moment de la migration et du changement de version. En quelques jours, c'est grimpé à 150 erreurs que j'ai rapidement corrigées en grande partie grâce à des redirections 301:

courbes erreurs d'URL par Google

Ou saisir ses régles de ré-écritures?

Il existe plusieurs endroits, comme par exemple celle de le faire en language PHP dans le header de la page elle même :

header("Status: 301 Moved Permanently", false, 301);
header("Location: http://ma_nouvelle_addresse.html");
exit();
?>

Très fastidieux si vous devez rediriger un grand nombre de pages. Et pas du tout adapté à Prestashop car le header est commun à la plupart des pages.

La méthode plus simple et plus courante (et donc celle que je vous propose) est celle consistant à utiliser le fameux .htAccess.

.HtAccess un un fichier à placer à la racine de PrestaShop. Si vous avez activé les URls simplifiées (plus que conseillé) dans Prestashop, ce fichier a déjà été créé pour vous. N'importe quel éditeur de texte permet de le modifier.

Le fichier créé par PrestaShop contient une partie dans laquelle il est fortement déconseillé de rajouter la moindre ligne, car vos ajouts seront perdus lorsque Prestashop devra générer à nouveau ce fichier. Les parties en dehors de cette zone seront par contre conservées.

Cette zone commence par # ~~start~~ et se termine à la ligne # ~~end~~   . Vous pouvez donc rajouter vos lignes de redirection avant ou après cette partie. Je vous conseille de les rajouter avant.

Les lignes commençant par un # sont des lignes de comentaires sans aucun impact sur le fonctionnement du .htAccess.

Comment écrire une ligne de redirection ?

Il existe deux méthodes.

Methode 1, utilisant la commande Redirect :

On utilise la syntaxe assez simple suivant :  Redirect 301 ancienneURL nouvelleURL

Exemple : Redirect 301 /forum.php http://www.sitolog.com/fr/forum

Il faut respecter quelques règles :

La première URL doit commencer par / .Elle ne doit donc pas contenir le nom de domaine du site.

La seconde URL au contraire doit contenir le nom de domaine et le préfixe http://

301 indique que la redirection est permanente. il est aussi possible de faire des redirections temporaires par exemple avec le code 302.

Note : avec une syntaxe assez proche, "gone" à la palce de 301, il est aussi possible d'indiquer aux moteurs de recherche que la page n'existe plus (attention elle sera désindexée !).

Ex : Redirect gone http://www.sitolog.com/fr/mon_ancienne_page_disparue.html

Cette méthode 1/ souffre d'une grosse limitation : il n'est pas possible avec cette syntaxe de gérer les paramètres d'URLs. Vosu savez, ces ?id_lang=2 ou ?content_only=1 que l'on trouve parfois au bout des URLs.

Il n'est donc pas possible de gérer les redirection multi langues par exemple

Méthode 2, utilisant la commande RewriteRule :

Disons le tout de suite, elle est plus compliquée à apprendre et à maitriser. Mais l'effort en vaut la peine, car elle est très puissante et pourra vous sortir de situations complexes.

Au début, cela ressemble à du chinois. tenez, un exemple, sur deux lignes, utilsant égalament la commande RewriteCond permettant de conditionner la redirection:

RewriteCond %{REQUEST_URI} ^/forum.*
RewriteRule ^forum-([0-9]+)([a-z]).html http://www.sitolog.com/fr/forum/$1$2 [R=301,L]

Pour vous encourager à lire la suite, dites vous que lorsque l'on sait déchiffrer ce charabia, on est aussi heureux que celui qui sait déchiffrer les hieroglyphes égyptiens.

Il existe de très nombreux tuto sur le net expliquant ce language en détail, et en particulier cette commande "RewriteRule". Je ne vais donc pas me lancer à nouveau dans un enième exercice de style, mais j'ai choisi pour vous ceux qui m'ont été les plus utiles:

1ere lecture

Quelques exemples

En comprenant c'est mieux

Approfondissement avec la doc officiielle en français

L'exemple ci dessus fait aussi appel aux expressions régulières, comme ([0-9]+)([a-z]) qui veut par exemple dire : une suite de chiffres suivis d'une lettre minuscule.

Cela permet en une seule ligne de rediriger une quasi infinité de pages. Pour les sites dits dynamiques, comme PrestaShop, qui sont constitués d'un grand nombres de pages au format d'URLs indentiques, c'est l'outil ultime.

Honnétement, à chaque fois que je dois écrire, voir même simplement lire une expression régulière, je ne fais pas le malin et recherche une des nombreuses documentions sur le net, comme celle-ci. Ce n'est pas comme le vélo, ça s'oublie et ça ne revient pas vite :-(

Tout ça nous donne quoi en gros avec l'exemple ci dessus :

RewriteCond indique une condition, seules les pages respectant cette conditions seront redirigées

%{REQUEST_URI} indique que la condition porte sur la partie de l'URL avant les paramètres d'URL. On utilisera au contraire %{QUERY_STRING} pour définir une condition sur les paramêtres comme par exemple ?id_shop=1

^/forum.* est la condition, ici l'URL devra contenir /forum.

RewriteRule est l'ordre de redirection lui même.

^forum-([0-9]+)([a-z]).html défini quels sont les anciennes URLs à rediriger, faisant appel à une expression régulière pour rediriger un ensemble de pages en une seule ligne.

http://www.sitolog.com/fr/forum/$1$2 défini les nouvelles URLs.

$1 et $2 sont des variables, permettant de récupérer les valeurs des expression régulières des anciennes URLS pour les ré-utiliser dans les nouvelles. Comme par exemple l'article 7s du forum.

[R=301,L] permet de définir le type de redirection, 301 pour permanente et L pour clore les redirections à effectuer selon la condition RewriteCond du début (il est en effet possible de chainer des redirections).

Avec cette redirection, on aura par exemple toutes les pages du type http://www.sitolog.com/forum-7s.html redirigées vers des URLs au format http://www.sitolog.com/fr/forum/7s. Puissant non ?

A noter que pour fonctionner, les règles de redirection ont besoin que la fonction de redirection du serveur soit activée. C'est pourquoi vous devez insérer, en amont de toutes ces règles, ces quelques lignes:



SetEnv HTTP_MOD_REWRITE On

Et bien sûr vous assurer que l'extension PHP mod_rewrite.c soit installée et activée sur le serveur.

Il y a t'il un risque pour le référencement Google? OUI !

Mettre en place des redirections permanentes dans le .htAccess sans être certain de ne pas se tromper peut être catastrophique. En effet, si vous redirigez vos pages vers des URLS inexistentes, vous allez empirer les choses.

Il est même possible d'écrire des règles qui bouclent sur elles mêmes et vont faire crasher votre serveur (enfin presque, ils sont quand même protégés contre ce genre d'erreurs).

Il faut aussi savoir que la moindre erreur de syntaxe dans le .htAccess génère systématiquement une page blanche avec une erreur 500 peu parlante.

Donc on y va doucement et prudemment.

Mon meilleur conseil est surtout de toujours tester ses régles de redirection (on dit aussi de ré-écriture)  avant de les insérer dans le .htAccess. Pour cela il existe un outil aussi simple que magique et gratuit, htaccess tester .

C'est simple vous lui donnez votre règle de redirection, votre URL de départ et il vous donne l'URL ré-écrite par votre règle. A vous de vérifier que cette dernière vous emmene bien sur la bonne page.

Exemple de validation préalable de la règle de ré-écriture ci dessus :

utilisation de htaccess tester pour valider une regle de ré-écriture avant de la placer dans le .htAccess

Comment surveiller les erreurs 404 ?

Allez dans "Google Webmaster Tools", récemment renommé Search Console, dans son menu "Exploration", puis "Erreurs d'exploration". Vous y trouverez régulièrement mise à jour, la liste des erreurs 404 vues par son moteur de recherche. Vous pourrez même vérifier en temps réél que vos redirections fonctionnent et si c'est le cas, indiquer à Google que l'erreur est corrigée.

Dernier conseil pour la route : une redirection 301 doit être conservée pendant toute la durée de vie du site. Ne vous dites jamais, "je ne sais plus à quoi correspond cette vieille règle, je la supprime...".

Comment mettre en place les URLs simplifiées et les rediriger ?

Une redirection cela sert aussi à rediriger vers la bonne page une url simplifiée (ou ré-écrite). Quesaquo ?

Imaginez que vous vendiez un pantalon nommé "Beaugosse" de marge "Tata", ce produit créé dans Prestashop sera à une adresse comme http://maboutique/cat-52/prod-106. Avouez que ce n'est pas très parlant ni optimisé our le référencement.

Ce serait mieux si on pouvait choisir soit même l'adresse de ce produit et mettre par exemple : http://maboutique/pantalons_tata/beaugosse.

C'est ce que l'on appelle une URL simplifiée ou réécrite. On devrait plutôt dire URL optimisée.

Bien sur il faut ensuite que lorsque l'on appelle cette URL cela affiche la page native du produit, mais ça c'est justement le travail de la redirection d'URL. Et avec PrestaShop, à partir du moment ou vous activez le mode "URL simplifiées" (dans l'onglet SEO et URLS de l'admin), quelque lignes de redirection vont s'ajouter automatiquement dans le fichier .htAccess pour assurer la redirectin de tous les produits et catégories. Cool.

Cependant, reste un gros boulot à faire, écrire pour chaque produit une URL simplifiée, le plus souvent à partir du nom du produit. Et faire de même pour les URLs des catégories.

Dans PrestaShop, il y a bien une fonction le faisant automatiquement, mais uniquement article par article. A oublier si vous avez plus d'un trentaine d'articles.

Si ce n'est pas déjà fait, c'est donc le bon moment pour vous équiper de solutions professionnelles d'édition de masse, PrestaCatégories pour la création de catégories et l'organisation des produits et PrestaPricing pour la création et modification des produits, l'ajout de photos, l'importation, la gestion des soldes et tellement plus.

Ces deux outils permettent aussi, respectivement, d'un seul clic de rénérer automatiquement de belles urls optimisées pour toutes vos catégories et vos produits. Pour info c'est la fonction des bouton verts "WWW". Les essayer c'est les adopter :

PRESTAPRICING © pour Prestashop

Créez ou importez vos produits et modifiez les en masse

  • Puissance
  • Rapidité
  • Souplesse

Info sur PrestaPricing

Comment en un seul clic, reconstruire l'URL simplifiée sur un ensemble de produits ? :

Rien de plus simple, sélectionnez les catégories, sélectionnez les produits et cliquez sur le bouton vert "WWW". Répondez à la question (choix des langues) et c'est fini (comptez 1 à 2 seconde pour plusieurs centaines de produits :

ré-écrire l'url automatiquement sur plusieurs produits PrestaShop en même temps

Le programme a utilsé le nom de chaque produit (dans cahque langue), pour reconsruire l'url simplifié, en remplacant les espaces et autres caractères interdits par un tiret.

Comment éviter les erreur 404 sur les pages des produits PrestaShop désactivés ?

Et oui, lorsqu'un produit de votre catalogue PrestaShop est désactivé, si vosu ne faites rien de plus, Google vous affichera uen bele ereur "Page not found, 404".  Et si le nombre de produits inactifs est importants, votre site se verra à moyen terme pénalisé par le moteur de recherche.

Heureusement, PrestaShop a cette fosi bien fait les chose et à prévu une focntionnalité permettant de rediriger le produit vers la page d'un autre produit.

Méthode 1, produit par produit, via le backoffice PrestaShop :

1/Ouvrir la fiche produit et allez dans "Informations".

2/Désactivez le produit.

3/Choisir le type de redirection (301 ou 302, la valeur par défaut est l'erreur 404).

4/Choisir le produit vers lequel rediriger le client.

5/Réactivez le produit (les réglages de redirection sont mémorisés dans la base)

redirection des produits inactifs via le back office de PrestaShop

Problème, si vosu avez des centaines ou des milliers de produits, 20 secondes mini par produit, bon courage...

Méthode 2, en masse et quelques secondes, grâce une fois de plus à notre module PrestaPricing pour PrestaShop :

Gagnez des heures de travail:

1/Affichez tous les produits, avec les colonnes "Type de redirection" et "Id produit redirigé".

2/Choisir les les valeurs pour l'un deux (ici 301, vers le produit N°100).

3/Faites un clic droit sur ces valeurs et choisir "Coller cette valeur dans toute la colonne".

rediriger tous les produits désactivés en une seule opération

Bien sûr, vous pouvez aussi travailler par catégorie, pour rediriger les produits de celle ci vers un produit phare de la même catégorie. Avec les filtres, tout est possible et rapide à faire, simplement.

Je n'ai sans doute pas été complet, mais j'espère vous avoir déjà éclairé un peu sur ce sujet qui fait peur à tant de monde...

Crdlt

Franck 

Partager ce contenu

Commentaires (3)

Franck - Sitolog


29/08/2016 23:01:07

Amelia, you do not need a module at all, you can perfectly redirect permanently all URLs using the old domain name to the corresponding page with the new domain, using one of the technique described above. However, if you could avoid changing your domain name, that is always a better solution.

Amelia Johns


29/08/2016 19:59:05

Sorry for writing the comment in English. Sir, I am shifting my old domain to a new domain, is it possible through htaccess in PrestaShop backend to do bulk redirection? Actually, I have seen a module for this purpose for bulk redirects http://www.fmemodules.com/en/82-url-redirects.html but I want a free solution.

Pascal - Netenvie.com


10/11/2015 18:58:15

Merci pour cet article clair et complet. Concernant les redirections dans le .htaccess de Prestashop tu conseilles de les placer avant le start mais c'est quasiment une obligation. En effet si on les place après les règles de réécriture il y a de nombreux cas ou ça ne fonctionne pas.

Vous devez être enregistré

Cliquez ici pour vous enregistrer

Ajouter un commentaire