{"id":918,"date":"2023-05-31T14:13:57","date_gmt":"2023-05-31T11:13:57","guid":{"rendered":"https:\/\/presta.site\/blog\/?p=918"},"modified":"2026-07-25T13:38:57","modified_gmt":"2026-07-25T10:38:57","slug":"resoudre-les-problemes-de-reecriture-durl-seo-dans-prestashop","status":"publish","type":"post","link":"https:\/\/presta.site\/blog\/fr\/resoudre-les-problemes-de-reecriture-durl-seo-dans-prestashop\/","title":{"rendered":"R\u00e9\u00e9criture d&#8217;URL PrestaShop : checklist en 5 \u00e9tapes pour r\u00e9parer les Friendly URL cass\u00e9es"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">La Friendly URL est activ\u00e9e, mais les liens produits ressemblent encore \u00e0 <code class=\"codecolorer text default\"><span class=\"text\">index.php?id_product=12<\/span><\/code> &#8211; ou chaque jolie URL renvoie une 404. La <strong>r\u00e9\u00e9criture d&#8217;URL PrestaShop<\/strong> ne fonctionne que lorsque l&#8217;interrupteur du back-office, le fichier de r\u00e9\u00e9criture racine (Apache) et les r\u00e8gles du serveur web concordent. Voici une checklist en 5 \u00e9tapes : identifier le sympt\u00f4me, confirmer le r\u00e9glage boutique, corriger la couche serveur, valider une URL, puis nettoyer les doublons et les anciennes 404.<\/p>\n\n\n<!--more-->\n\n\n<p class=\"wp-block-paragraph\">Le conseil g\u00e9n\u00e9rique \u00ab activer la Friendly URL \u00bb est facile \u00e0 obtenir d&#8217;un chatbot. Ce qui fait perdre des heures, c&#8217;est d&#8217;appliquer le mauvais correctif au mauvais sympt\u00f4me &#8211; ou de sauter le test r\u00e9ussi\/\u00e9chou\u00e9 apr\u00e8s chaque \u00e9tape. Suivre la liste dans l&#8217;ordre. Les libell\u00e9s officiels se trouvent sous <a href=\"https:\/\/docs.prestashop-project.org\/v.9-documentation\/user-guide\/configuring-shop\/shop-parameters\/traffic\" target=\"_blank\" rel=\"noopener noreferrer\">Param\u00e8tres de la boutique \u2192 Trafic<\/a> dans la documentation PrestaShop 9. Avant de modifier la configuration serveur, effectuer une <a href=\"https:\/\/presta.site\/blog\/fr\/comment-creer-une-sauvegarde-dans-prestashop\/\">sauvegarde compl\u00e8te de PrestaShop<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00c9tape 1 &#8211; Identifier ce qui est cass\u00e9<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ouvrir une fiche produit en navigation priv\u00e9e et noter le cas rencontr\u00e9. Ne pas sauter cette \u00e9tape &#8211; les trois cas exigent des correctifs diff\u00e9rents.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>A &#8211; URLs laides encore.<\/strong> La barre d&#8217;adresse affiche toujours <code class=\"codecolorer text default\"><span class=\"text\">id_product<\/span><\/code>, <code class=\"codecolorer text default\"><span class=\"text\">id_category<\/span><\/code> ou <code class=\"codecolorer text default\"><span class=\"text\">controller=<\/span><\/code> apr\u00e8s activation de la Friendly URL. PrestaShop n&#8217;\u00e9met pas de liens r\u00e9\u00e9crits (ou le cache sert une ancienne page).<\/li>\n<li><strong>B &#8211; Jolies URLs en 404.<\/strong> Les liens semblent corrects (<code class=\"codecolorer text default\"><span class=\"text\">\/categorie\/slug-produit<\/span><\/code>) mais chaque jolie URL renvoie Page introuvable. La boutique g\u00e9n\u00e8re les slugs ; le serveur web ne les route pas vers PrestaShop.<\/li>\n<li><strong>C &#8211; Fonctionne sur un seul domaine.<\/strong> La boutique principale va bien ; un domaine multiboutique, un sous-domaine ou une boutique en sous-r\u00e9pertoire \u00e9choue. Souvent, c&#8217;est l&#8217;URL boutique \/ le DNS \/ le document root &#8211; pas un second bug Friendly URL. Consulter en parall\u00e8le notre <a href=\"https:\/\/presta.site\/blog\/fr\/quest-ce-que-le-mode-multiboutique-et-comment-lutiliser-dans-prestashop\/\">guide multiboutique PrestaShop<\/a> avec cette checklist.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>R\u00e9ussi :<\/strong> pouvoir d\u00e9signer A, B ou C avant de toucher Apache ou Nginx.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00c9tape 2 &#8211; Confirmer la Friendly URL dans le back-office<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"412\" src=\"https:\/\/presta.site\/blog\/wp-content\/uploads\/2023\/05\/Screenshot_1-5-1024x412.png\" alt=\"R\u00e9\u00e9criture d'URL PrestaShop : interrupteur Friendly URL sous Param\u00e8tres de la boutique, Trafic et SEO\" class=\"wp-image-716\" srcset=\"https:\/\/presta.site\/blog\/wp-content\/uploads\/2023\/05\/Screenshot_1-5-1024x412.png 1024w, https:\/\/presta.site\/blog\/wp-content\/uploads\/2023\/05\/Screenshot_1-5-300x121.png 300w, https:\/\/presta.site\/blog\/wp-content\/uploads\/2023\/05\/Screenshot_1-5-768x309.png 768w, https:\/\/presta.site\/blog\/wp-content\/uploads\/2023\/05\/Screenshot_1-5.png 1381w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Aller dans <strong>Param\u00e8tres de la boutique \u2192 Trafic et SEO<\/strong>.<\/li>\n<li>Ouvrir <strong>Configuration des URLs<\/strong>.<\/li>\n<li>Mettre <strong>Friendly URL<\/strong> sur Oui et enregistrer.<\/li>\n<li>Vider le cache PrestaShop (<strong>Param\u00e8tres avanc\u00e9s \u2192 Performances<\/strong>) et retester le m\u00eame produit en navigation priv\u00e9e.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Sous Apache, l&#8217;enregistrement de cette page doit cr\u00e9er ou actualiser le <code class=\"codecolorer text default\"><span class=\"text\">.htaccess<\/span><\/code> racine avec les r\u00e8gles de r\u00e9\u00e9criture PrestaShop. Si le fichier est absent, vide ou plus ancien que l&#8217;enregistrement, PHP ne peut pas \u00e9crire \u00e0 la racine boutique &#8211; corriger propri\u00e9t\u00e9 et permissions avant de chercher du c\u00f4t\u00e9 des modules.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sous Nginx, l&#8217;interrupteur seul n&#8217;installe jamais les r\u00e8gles de r\u00e9\u00e9criture. L&#8217;\u00e9tape 3 reste n\u00e9cessaire.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>R\u00e9ussi (cas A) :<\/strong> apr\u00e8s vidage du cache, les nouveaux liens HTML utilisent des slugs (m\u00eame si ces slugs renvoient encore une 404 &#8211; ce devient le cas B). <strong>R\u00e9ussi (cas B\/C) :<\/strong> Friendly URL est sur Oui et le reste apr\u00e8s rechargement.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00c9tape 3 &#8211; Corriger la couche serveur (Apache ou Nginx)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pour avancer sur la <strong>r\u00e9\u00e9criture d&#8217;URL PrestaShop<\/strong>, v\u00e9rifier <strong>Param\u00e8tres avanc\u00e9s \u2192 Informations \u2192 Informations serveur<\/strong> (ou demander \u00e0 l&#8217;h\u00e9bergeur). Ne suivre que la branche correspondant au serveur.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Sous Apache<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Activer <code class=\"codecolorer text default\"><span class=\"text\">mod_rewrite<\/span><\/code> (souvent d\u00e9j\u00e0 activ\u00e9).<\/li>\n<li>Confirmer que le document root de la boutique contient un <code class=\"codecolorer text default\"><span class=\"text\">.htaccess<\/span><\/code> lisible, mis \u00e0 jour par PrestaShop au dernier enregistrement SEO.<\/li>\n<li>AllowOverrides doit autoriser les directives rewrite pour ce r\u00e9pertoire.<\/li>\n<li>Les installations en sous-r\u00e9pertoire n\u00e9cessitent un <code class=\"codecolorer text default\"><span class=\"text\">RewriteBase<\/span><\/code> adapt\u00e9.<\/li>\n<li>Des r\u00e8gles personnalis\u00e9es au-dessus du bloc PrestaShop peuvent court-circuiter la r\u00e9\u00e9criture &#8211; d\u00e9placer temporairement les extras sous la section PrestaShop pour tester.<\/li>\n<li>Apr\u00e8s une modification manuelle, basculer Friendly URL sur Non puis Oui une fois et enregistrer pour que PrestaShop r\u00e9\u00e9crive sa propre section, puis ne r\u00e9ajouter que les lignes personnalis\u00e9es encore n\u00e9cessaires.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>R\u00e9ussi :<\/strong> une jolie URL produit renvoie HTTP 200 avec le bon produit (pas la page 404 par d\u00e9faut de l&#8217;h\u00e9bergeur).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Sous Nginx<\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"947\" height=\"220\" src=\"https:\/\/presta.site\/blog\/wp-content\/uploads\/2023\/05\/Screenshot_2-4.png\" alt=\"Bloc serveur Nginx o\u00f9 placer les r\u00e8gles de r\u00e9\u00e9criture d'URL PrestaShop\" class=\"wp-image-719\" srcset=\"https:\/\/presta.site\/blog\/wp-content\/uploads\/2023\/05\/Screenshot_2-4.png 947w, https:\/\/presta.site\/blog\/wp-content\/uploads\/2023\/05\/Screenshot_2-4-300x70.png 300w, https:\/\/presta.site\/blog\/wp-content\/uploads\/2023\/05\/Screenshot_2-4-768x178.png 768w, https:\/\/presta.site\/blog\/wp-content\/uploads\/2023\/05\/Screenshot_2-4-941x220.png 941w\" sizes=\"auto, (max-width: 947px) 100vw, 947px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Nginx ignore <code class=\"codecolorer text default\"><span class=\"text\">.htaccess<\/span><\/code>. Modifier le bloc serveur du site (souvent sous <code class=\"codecolorer text default\"><span class=\"text\">\/etc\/nginx\/sites-available\/<\/span><\/code>) :<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Ajouter l&#8217;exemple actuel de r\u00e9\u00e9criture Nginx PrestaShop depuis la <a href=\"https:\/\/devdocs.prestashop-project.org\/9\/basics\/installation\/nginx\/\" target=\"_blank\" rel=\"noopener noreferrer\">documentation Nginx PrestaShop 9<\/a> (conserver le vrai root et le socket PHP-FPM).<\/li>\n<li>Ex\u00e9cuter <code class=\"codecolorer text default\"><span class=\"text\">nginx -t<\/span><\/code>.<\/li>\n<li>Si le test passe, recharger : <code class=\"codecolorer text default\"><span class=\"text\">systemctl reload nginx<\/span><\/code> (ou l&#8217;\u00e9quivalent du panneau d&#8217;h\u00e9bergement).<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Si un chatbot a coll\u00e9 un ancien exemple, le remplacer par le bloc officiel pour la version majeure concern\u00e9e. Les chemins et les lignes <code class=\"codecolorer text default\"><span class=\"text\">try_files<\/span><\/code> \u00e9voluent ; les extraits de forum datant de plusieurs ann\u00e9es sont une cause fr\u00e9quente du cas B.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>R\u00e9ussi :<\/strong> identique \u00e0 Apache &#8211; jolie URL \u2192 200 \u2192 bon produit. Si un CDN ou un reverse proxy \u00e9tait devant pendant la panne, purger son cache une fois pour qu&#8217;il cesse de servir des 404 en cache.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00c9tape 4 &#8211; Valider la r\u00e9\u00e9criture d&#8217;URL PrestaShop de bout en bout<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ne pas s&#8217;arr\u00eater \u00e0 \u00ab les liens ont l&#8217;air jolis dans le menu \u00bb. Ex\u00e9cuter cette v\u00e9rification rapide sur un produit :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Navigation priv\u00e9e : ouvrir le produit depuis la liste de cat\u00e9gorie.<\/li>\n<li>La barre d&#8217;adresse affiche un chemin en slug, pas seulement <code class=\"codecolorer text default\"><span class=\"text\">id_product<\/span><\/code>.<\/li>\n<li>Copier cette jolie URL, l&#8217;ouvrir dans un nouvel onglet : HTTP 200, m\u00eame produit.<\/li>\n<li>Optionnel : demander un slug connu comme incorrect &#8211; la 404 de la boutique doit s&#8217;afficher, pas une page vide du serveur web qui n&#8217;a jamais atteint PrestaShop.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Si l&#8217;\u00e9tape 4 \u00e9choue uniquement sur un second domaine alors que le domaine principal passe, revenir au cas C (URL multiboutique \/ DNS \/ document root) avant de modifier \u00e0 nouveau les r\u00e8gles de r\u00e9\u00e9criture.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>R\u00e9ussi :<\/strong> un produit survit au clic depuis la liste + rechargement direct de la jolie URL.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00c9tape 5 &#8211; Canoniques et 404 r\u00e9siduelles<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Quand la r\u00e9\u00e9criture d&#8217;URL PrestaShop fonctionne, finaliser le volet SEO pour que les moteurs cessent de r\u00e9partir l&#8217;\u00e9quit\u00e9 entre doublons et chemins morts.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Dans <strong>Param\u00e8tres de la boutique \u2192 Trafic et SEO<\/strong>, r\u00e9gler <strong>Rediriger vers l&#8217;URL canonique<\/strong> sur <strong>301 D\u00e9plac\u00e9 de fa\u00e7on permanente<\/strong> sur une boutique en production.<\/li>\n<li>V\u00e9rifier les modules tiers qui ajoutent des URLs de listing ou de blog &#8211; ils doivent aussi avoir des canoniques coh\u00e9rentes.<\/li>\n<li>Apr\u00e8s renommage de slugs, d\u00e9placement de cat\u00e9gories ou changement de domaine, ajouter des 301 depuis les anciens chemins (ou restaurer l&#8217;entit\u00e9). Changer le sch\u00e9ma d&#8217;URL sans redirections br\u00fble le classement d\u00e9j\u00e0 acquis.<\/li>\n<li>Soumettre un sitemap mis \u00e0 jour pour que les crawlers rep\u00e8rent les URLs pr\u00e9f\u00e9r\u00e9es &#8211; voir notre <a href=\"https:\/\/presta.site\/blog\/fr\/quest-ce-quun-sitemap-et-comment-lutiliser-dans-prestashop\/\">guide sitemap PrestaShop<\/a>.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Utiliser la couverture Search Console (ou les journaux d&#8217;acc\u00e8s) pour lister les vrais chemins 404 qui touchent encore le serveur. Les corriger par redirections ou restaurations de contenu &#8211; la r\u00e9\u00e9criture seule ne ranimera pas les pages CMS supprim\u00e9es.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>R\u00e9ussi :<\/strong> l&#8217;option canonique est en 301 ; un chemin produit alternatif d&#8217;exemple redirige ; les anciens slugs importants sont redirig\u00e9s ou volontairement supprim\u00e9s.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">R\u00e9capitulatif rapide des 5 \u00e9tapes<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Nommer le sympt\u00f4me (A URLs laides \/ B jolie 404 \/ C un seul domaine).<\/li>\n<li>Confirmer Friendly URL Oui + vidage du cache (+ <code class=\"codecolorer text default\"><span class=\"text\">.htaccess<\/span><\/code> inscriptible sous Apache).<\/li>\n<li>Corriger <code class=\"codecolorer text default\"><span class=\"text\">mod_rewrite<\/span><\/code>\/<code class=\"codecolorer text default\"><span class=\"text\">.htaccess<\/span><\/code> Apache ou les r\u00e8gles du bloc serveur Nginx.<\/li>\n<li>Valider un produit : joli lien + rechargement direct = 200.<\/li>\n<li>R\u00e9gler les 301 canoniques et nettoyer les 404 r\u00e9siduelles \/ le sitemap.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">S&#8217;il ne faut retenir qu&#8217;une habitude : apr\u00e8s chaque modification, retester la m\u00eame URL produit avant d&#8217;ouvrir le r\u00e9glage suivant. C&#8217;est ainsi que la r\u00e9\u00e9criture d&#8217;URL PrestaShop cesse d&#8217;\u00eatre une boucle de t\u00e2tonnements.<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>Friendly URL cass\u00e9es ? Suivre cette checklist en 5 \u00e9tapes de r\u00e9\u00e9criture d&#8217;URL PrestaShop &#8211; sympt\u00f4me, interrupteur back-office, Apache ou Nginx, v\u00e9rification, puis canoniques et 404 r\u00e9siduelles.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[87],"tags":[],"class_list":["post-918","post","type-post","status-publish","format-standard","hentry","category-developpement"],"_links":{"self":[{"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/posts\/918","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/comments?post=918"}],"version-history":[{"count":2,"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/posts\/918\/revisions"}],"predecessor-version":[{"id":1987,"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/posts\/918\/revisions\/1987"}],"wp:attachment":[{"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/media?parent=918"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/categories?post=918"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/tags?post=918"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}