[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"theme-db":3,"$ftbywUuUEsp7qLqDSc0v2dp1b8k9bAwuZtGPH3XYpaRM":22,"$fKnz2vuX4bZz1LbUTiuFsvSZ3e07l5_5fqNYp4Tzdhi8":33,"megamenu":114,"header-db":171,"footer-db":184,"$fowIP2VIFnQlwYEjDAkmAWZiEXh9BQEDbsK8-r5Fj9iw":200,"$foeaq2Nz2SE3UPhHyQKi2uXIO8yz8FlG1joq7DW5qI3c":257,"$f9hUnYNMPzn11SmP4xaujfalud_enf1q9FidPnSeXOxo":258},{"theme":4},{"colors":5,"typography":13,"ui":17,"defaultColorMode":21},{"primary":6,"secondary":7,"background":8,"foreground":9,"muted":10,"headerBg":11,"footerBg":12,"topBarBg":9,"topBarText":11},"#4F46E5","#0D9488","#F9FAFB","#111827","#6B7280","#ffffff","#020617",{"fontFamily":14,"fontUrl":15,"baseFontSize":16},"Inter, system-ui, sans-serif","https:\u002F\u002Ffonts.googleapis.com\u002Fcss2?family=Inter:wght@400;500;600;700&family=Playfair+Display:ital,wght@0,400;0,700;0,800;0,900;1,400;1,700&display=swap","16px",{"borderRadius":18,"contentWidth":19,"shadow":20},"lg","7xl",true,"light",{"academy":23,"blog":24,"expertise":32},[],[25,29],{"title":26,"url":27,"type":28},"Migration Shopify vers PrestaShop Headless : guide 2026","\u002Fblog\u002Fe-commerce\u002Farchitecture\u002Fmigration-shopify-prestashop-headless","blog",{"title":30,"url":31,"type":28},"PrestaShop vs Shopify 2026 : comparatif honnête pour e-commerçants","\u002Fblog\u002Fe-commerce\u002Farchitecture\u002Fprestashop-vs-shopify-comparatif-2026",[],{"columns":34},[35,51,81,102],{"title":36,"links":37},"Plateforme",[38,42,45,48],{"label":39,"href":40,"external":41},"Offre Starter (2 500 €)","\u002Foffre-starter",false,{"label":43,"href":44,"external":41},"Devenir Ambassadeur","\u002Fambassadeur",{"label":46,"href":47,"external":41},"Modules PrestaShop","\u002Fmodules",{"label":49,"href":50,"external":20},"CodeMyShop.com","https:\u002F\u002Fcodemyshop.com",{"title":52,"links":53},"Le Synedre",[54,57,60,63,66,69,72,75,78],{"label":55,"href":56,"external":41},"L'histoire","\u002Fsynedre",{"label":58,"href":59,"external":41},"Constitution","\u002Fsynedre\u002Fconstitution",{"label":61,"href":62,"external":41},"L'équipe","\u002Fequipe",{"label":64,"href":65,"external":41},"Le réacteur en direct","\u002Freacteur",{"label":67,"href":68,"external":41},"Le Drill (entraînement)","\u002Fdrill",{"label":70,"href":71,"external":41},"Protocole de réunion","\u002Fsynedre\u002Freunion",{"label":73,"href":74,"external":41},"Les agents IA","\u002Fagents-ia",{"label":76,"href":77,"external":41},"La Conduite","\u002Fsynedre\u002Fconduite",{"label":79,"href":80,"external":41},"Charte plateforme","\u002Fsynedre\u002Fcharte",{"title":82,"links":83},"Ressources",[84,87,90,93,96,99],{"label":85,"href":86,"external":41},"Blog","\u002Fblog",{"label":88,"href":89,"external":41},"Academy","\u002Facademy",{"label":91,"href":92,"external":41},"Dictionnaire","\u002Fdictionnaire",{"label":94,"href":95,"external":41},"Expertise PrestaShop","\u002Fexpertise",{"label":97,"href":98,"external":41},"Flywheel","\u002Fflywheel",{"label":100,"href":101,"external":41},"Manifeste","\u002Fmanifeste",{"title":103,"links":104},"À propos",[105,108,111],{"label":106,"href":107,"external":41},"Alexandre Carette","\u002Fa-propos",{"label":109,"href":110,"external":41},"Dossier de presse","\u002Fpresse",{"label":112,"href":113,"external":41},"Contact","\u002Fcontact",{"items":115},[116,125,131,137,145,153,159,165],{"id":117,"type":118,"label":119,"href":95,"icon":121,"description":121,"badge":121,"groupTitle":121,"style":121,"gridColumns":121,"cssClass":121,"psCategoryId":121,"showPsChildren":41,"position":122,"children":123,"psChildren":124},41,"link",{"fr":120},"Expertise",null,0,[],[],{"id":126,"type":118,"label":127,"href":86,"icon":121,"description":121,"badge":121,"groupTitle":121,"style":121,"gridColumns":121,"cssClass":121,"psCategoryId":121,"showPsChildren":41,"position":128,"children":129,"psChildren":130},42,{"fr":85},1,[],[],{"id":132,"type":118,"label":133,"href":47,"icon":121,"description":121,"badge":121,"groupTitle":121,"style":121,"gridColumns":121,"cssClass":121,"psCategoryId":121,"showPsChildren":41,"position":134,"children":135,"psChildren":136},43,{"fr":46},2,[],[],{"id":138,"type":118,"label":139,"href":141,"icon":121,"description":121,"badge":121,"groupTitle":121,"style":121,"gridColumns":121,"cssClass":121,"psCategoryId":121,"showPsChildren":41,"position":142,"children":143,"psChildren":144},44,{"fr":140},"Outils IA","\u002Foutils-ia",3,[],[],{"id":146,"type":118,"label":147,"href":40,"icon":121,"description":121,"badge":121,"groupTitle":121,"style":149,"gridColumns":121,"cssClass":121,"psCategoryId":121,"showPsChildren":41,"position":150,"children":151,"psChildren":152},45,{"fr":148},"Offre Starter ✨",{"highlight":20},4,[],[],{"id":154,"type":118,"label":155,"href":89,"icon":121,"description":121,"badge":121,"groupTitle":121,"style":121,"gridColumns":121,"cssClass":121,"psCategoryId":121,"showPsChildren":41,"position":156,"children":157,"psChildren":158},46,{"fr":88},5,[],[],{"id":160,"type":118,"label":161,"href":107,"icon":121,"description":121,"badge":121,"groupTitle":121,"style":121,"gridColumns":121,"cssClass":121,"psCategoryId":121,"showPsChildren":41,"position":162,"children":163,"psChildren":164},47,{"fr":103},6,[],[],{"id":166,"type":118,"label":167,"href":113,"icon":121,"description":121,"badge":121,"groupTitle":121,"style":121,"gridColumns":121,"cssClass":121,"psCategoryId":121,"showPsChildren":41,"position":168,"children":169,"psChildren":170},48,{"fr":112},7,[],[],{"header":172},{"logo":173,"topBar":178,"contactEmail":181,"features":182,"navBar":121},{"src":174,"alt":175,"text":106,"href":176,"class":177},"\u002Flogo-ac.svg","Alexandre Carette — Architecte E-commerce Souverain","\u002F","h-10 w-10",{"message":121,"showLanguages":41,"align":179,"languages":180},"left",[],"contact@alexandrecarette.fr",{"showSearch":41,"showWishlist":41,"showLogin":20,"showContact":41,"showCart":41,"stickyHeader":20,"headerLayout":183},"inline",{"footer":185},{"theme":186,"description":121,"hours":121,"logo":187,"contact":188,"social":189,"bottomBar":199},"dark",{"src":174,"href":176,"alt":106},{"email":121,"phone":121,"address":121,"cta":121},[190,193,196],{"platform":191,"href":192,"label":191},"linkedin","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Falexandre-carette\u002F",{"platform":194,"href":195,"label":194},"malt","https:\u002F\u002Fwww.malt.fr\u002Fprofile\u002Falexandrecarette",{"platform":197,"href":198,"label":197},"github","https:\u002F\u002Fgithub.com\u002Fprest4cafe",{"copyright":121},{"id":201,"title":202,"category":203,"subcategory":204,"slug":205,"coverImage":206,"thumbnailImage":207,"content":208,"faq":209,"metaDescription":255,"active":20,"datePublished":256,"dateUpdated":256,"readingTime":168,"mentor":121,"audioEnabled":41,"audioUrl":256,"author":121},105,"Facettes catalogue B2B : Algolia-style bat le filtre pill","e-commerce","developpement","developpement--facettes-catalogue-b2b-algolia","https:\u002F\u002Falexandrecarette.fr\u002Fblog-covers\u002Fcover-facettes-catalogue-b2b-1776488410.webp","https:\u002F\u002Falexandrecarette.fr\u002Fblog-covers\u002Fthumb-facettes-catalogue-b2b-1776488410.webp","\u003Cp class=\"lead\">Les \u003Cstrong>facettes catalogue B2B\u003C\u002Fstrong> sont le nerf de la guerre d'un site e-commerce pro : mal calibrées, elles font chuter le taux d'engagement de 30 %. Après 193 projets PrestaShop, j'ai constaté qu'une majorité d'intégrations affichent encore des counts statiques mensongers dès que l'acheteur coche plusieurs valeurs dans la même feature. Le résultat : des « (0) » partout, des culs-de-sac UX et des acheteurs qui rebondissent vers la concurrence.\u003C\u002Fp>\n\n\u003Cp>Retour d'expérience direct de la Phase 5 de la bascule Palimex v2 (avril 2026) : j'ai remplacé le filtre pill natif PrestaShop par un moteur de facettes style Algolia, en DB-direct, sur un catalogue de 1 082 références. Cet article détaille l'algorithme de \u003Cstrong>disjunctive faceting\u003C\u002Fstrong>, ses trade-offs, l'implémentation sans Elasticsearch, et pourquoi l'URL bookmarkable fait exploser le SEO longue traîne en B2B.\u003C\u002Fp>\n\n\u003Ch2>Les problématiques courantes des filtres catalogue B2B\u003C\u002Fh2>\n\u003Cp class=\"article-nav-context\" style=\"font-size:0.9em;color:#64748b;margin:0.5em 0 1.5em;\">Cet article fait partie de notre dossier \u003Ca href=\"\u002Fblog\u002Fe-commerce\u002F\" title=\"Tous nos articles e-commerce\">e-commerce\u003C\u002Fa> &rsaquo; \u003Ca href=\"\u002Fblog\u002Fe-commerce\u002Fdeveloppement\u002F\" title=\"Articles développement\">développement\u003C\u002Fa>.\u003C\u002Fp>\n\n\n\u003Ctable class=\"article-table\">\n  \u003Cthead>\n    \u003Ctr>\u003Cth>Problématique\u003C\u002Fth>\u003Cth>Cause principale\u003C\u002Fth>\u003Cth>Impact métier\u003C\u002Fth>\u003C\u002Ftr>\n  \u003C\u002Fthead>\n  \u003Ctbody>\n    \u003Ctr>\u003Ctd>Counts qui tombent à zéro après un clic\u003C\u002Ftd>\u003Ctd>Count recalculé après application de tous les filtres, y compris celui en cours de sélection\u003C\u002Ftd>\u003Ctd>Acheteur bloqué dans un cul-de-sac, abandon immédiat du parcours\u003C\u002Ftd>\u003C\u002Ftr>\n    \u003Ctr>\u003Ctd>Impossible de cocher deux valeurs d'une même facette\u003C\u002Ftd>\u003Ctd>Logique AND intra-facette au lieu d'un OR disjonctif\u003C\u002Ftd>\u003Ctd>UX B2B cassée : impossible de comparer deux marques ou deux calibres\u003C\u002Ftd>\u003C\u002Ftr>\n    \u003Ctr>\u003Ctd>URL non partageable après filtrage\u003C\u002Ftd>\u003Ctd>État des filtres géré uniquement en JavaScript côté client\u003C\u002Ftd>\u003Ctd>Zéro SEO longue traîne, zéro partage commercial par email\u003C\u002Ftd>\u003C\u002Ftr>\n    \u003Ctr>\u003Ctd>Latence supérieure à 800 ms sur gros catalogue\u003C\u002Ftd>\u003Ctd>Requêtes non indexées, full scan sur ps_product_attribute\u003C\u002Ftd>\u003Ctd>Taux de rebond multiplié par 2 sur mobile\u003C\u002Ftd>\u003C\u002Ftr>\n    \u003Ctr>\u003Ctd>Facettes cachées derrière un bouton en mobile\u003C\u002Ftd>\u003Ctd>Layout desktop-first non repensé pour le tactile\u003C\u002Ftd>\u003Ctd>Plus de 70 % du trafic B2B mobile ne filtre jamais\u003C\u002Ftd>\u003C\u002Ftr>\n  \u003C\u002Ftbody>\n\u003C\u002Ftable>\n\n\u003Ch2>Pourquoi les counts statiques du filtre pill s'effondrent\u003C\u002Fh2>\n\n\u003Cp>Le piège classique du filtre pill \u003Ca href=\"\u002Fblog\u002Fe-commerce\u002Farchitecture\u002Fmigration-shopify-prestashop-headless\" title=\"Migration Shopify vers PrestaShop Headless : guide 2026\">PrestaShop\u003C\u002Fa> : chaque count affiché correspond au nombre de produits restants APRÈS application de tous les filtres actifs, y compris ceux de la même feature. Dès que l'acheteur coche « Marque A », la valeur « Marque B » affiche 0 — alors que l'utilisateur veut précisément voir A OU B pour arbitrer.\u003C\u002Fp>\n\n\u003Cp>Selon \u003Ca href=\"https:\u002F\u002Fbaymard.com\u002Fblog\u002Fecommerce-filters\" target=\"_blank\" rel=\"noopener noreferrer\">Baymard Institute\u003C\u002Fa>, 42 % des sites e-commerce mondiaux présentent au moins un défaut majeur sur leur système de filtres, et les counts trompeurs en sont la cause numéro un. Sur un catalogue B2B de plus de 1 000 références, cela se traduit par une chute de 30 % du taux de clic vers les fiches produit et par une explosion du taux de rebond sur les pages catégorie.\u003C\u002Fp>\n\n\u003Cp>Dans un projet récent pour un grossiste en équipements industriels, j'ai mesuré l'impact avant\u002Faprès : en remplaçant les counts statiques par un modèle \u003Cstrong>disjunctive faceting\u003C\u002Fstrong>, le taux d'engagement sur les filtres est passé de 23 % à 61 % en trois semaines, sans aucune modification du design visuel.\u003C\u002Fp>\n\n\u003Ch3>Les signes qu'un filtre pill est cassé\u003C\u002Fh3>\n\n\u003Cul>\n  \u003Cli>Aucune valeur n'est cliquable après deux clics dans la même facette.\u003C\u002Fli>\n  \u003Cli>Le bouton « Tout effacer » est utilisé plus de trois fois par session.\u003C\u002Fli>\n  \u003Cli>L'URL ne change pas quand on coche une valeur de facette.\u003C\u002Fli>\n  \u003Cli>Googlebot ne voit qu'une seule variante du catalogue filtré.\u003C\u002Fli>\n  \u003Cli>Le taux de rebond mobile dépasse 65 % sur les pages catégorie.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch2>Le disjunctive faceting : l'algorithme Algolia-style expliqué\u003C\u002Fh2>\n\n\u003Cp>L'idée est simple mais non-triviale : pour une facette F donnée, les counts de ses valeurs sont calculés \u003Cem>en excluant F\u003C\u002Fem> de la liste des filtres actifs. Les autres facettes restent appliquées. Mathématiquement, cela transforme une conjonction (AND) en disjonction (OR) intra-facette — d'où le nom.\u003C\u002Fp>\n\n\u003Cp>Concrètement, si l'utilisateur a sélectionné « Marque = A » et « Couleur = bleu », le count de « Marque = B » est calculé comme le nombre de produits où Couleur = bleu, sans filtrer sur la marque. L'acheteur voit alors « Marque B (47) » au lieu de « Marque B (0) » : il comprend immédiatement qu'il peut cumuler deux marques.\u003C\u002Fp>\n\n\u003Col>\n  \u003Cli>\u003Cstrong>Parser les filtres actifs\u003C\u002Fstrong> depuis l'URL et les grouper par facette.\u003C\u002Fli>\n  \u003Cli>Pour chaque facette F à afficher, générer une requête SQL qui applique tous les filtres \u003Cem>sauf\u003C\u002Fem> F.\u003C\u002Fli>\n  \u003Cli>Agréger le COUNT par valeur de F via GROUP BY id_feature_value.\u003C\u002Fli>\n  \u003Cli>Fusionner les résultats par facette dans le payload JSON renvoyé au front.\u003C\u002Fli>\n  \u003Cli>Mettre en cache le résultat par signature de filtres (Redis, TTL 300 secondes).\u003C\u002Fli>\n\u003C\u002Fol>\n\n\u003Cp>Cette approche est documentée par Algolia depuis 2014 et constitue l'état de l'art des moteurs de recherche catalogue. Contrairement à Elasticsearch, elle peut tourner en SQL pur dès lors que le schéma est bien indexé — ce qui change radicalement l'équation économique pour un marchand B2B de taille moyenne.\u003C\u002Fp>\n\n\u003Ch2>Implémentation DB-direct sur PrestaShop : 1 082 produits sans SaaS\u003C\u002Fh2>\n\n\u003Cp>La tentation du SaaS (Algolia, Doofinder, FactFinder) est forte, mais le coût mensuel de 150 à 800 € ne se justifie pas sous 10 000 SKU. La solution que j'ai déployée sur \u003Cstrong>Palimex v2\u003C\u002Fstrong> repose sur trois briques tenues par le core :\u003C\u002Fp>\n\n\u003Cul>\n  \u003Cli>Une table de dénormalisation \u003Ccode>ps_ac_facet_index\u003C\u002Fcode> générée par un job nocturne (product_id, feature_id, value_id, prix, stock).\u003C\u002Fli>\n  \u003Cli>Un endpoint Nuxt \u003Ccode>\u002Fapi\u002Fcatalog\u002Ffacets\u003C\u002Fcode> qui reçoit les filtres actifs et renvoie les counts disjonctifs en un seul aller-retour DB.\u003C\u002Fli>\n  \u003Cli>Un état front synchronisé avec l'URL via \u003Ccode>useRoute().query\u003C\u002Fcode>, rendant chaque combinaison bookmarkable et indexable par Googlebot.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Cp>Sur les 1 082 produits du catalogue Palimex, la requête agrégée s'exécute en 42 ms en moyenne (MariaDB 10.11, index composite sur id_feature + id_feature_value + id_shop). Avec le cache Redis, la médiane tombe à 6 ms. Aucune dépendance externe, zéro coût mensuel récurrent, et une maîtrise totale de la logique métier — indispensable quand on doit gérer des prix B2B variables par groupe client et des stocks multi-entrepôts.\u003C\u002Fp>\n\n\u003Ch3>Les pièges à éviter sur PrestaShop\u003C\u002Fh3>\n\n\u003Cp>L'implémentation DB-direct suppose une hygiène stricte : index composites bien pensés, dénormalisation de la table facette, et une compréhension fine du schéma \u003Ccode>ps_feature_product\u003C\u002Fcode>. Sans index, une requête à huit facettes peut grimper à 1,2 seconde sur 5 000 produits — ce qui ruine le gain UX attendu. Le second piège est l'oubli de l'invalidation du cache Redis après mise à jour catalogue : une purge ciblée par categorie_id suffit et évite les incohérences.\u003C\u002Fp>\n\n\u003Ch2>Les solutions pour un moteur de facettes B2B performant\u003C\u002Fh2>\n\n\u003Ctable class=\"article-table\">\n  \u003Cthead>\n    \u003Ctr>\u003Cth>Solution\u003C\u002Fth>\u003Cth>Complexité\u003C\u002Fth>\u003Cth>Gain estimé\u003C\u002Fth>\u003C\u002Ftr>\n  \u003C\u002Fthead>\n  \u003Ctbody>\n    \u003Ctr>\u003Ctd>Disjunctive faceting en SQL pur\u003C\u002Ftd>\u003Ctd>Moyenne\u003C\u002Ftd>\u003Ctd>+40 % d'engagement sur les filtres, zéro coût SaaS\u003C\u002Ftd>\u003C\u002Ftr>\n    \u003Ctr>\u003Ctd>Table de dénormalisation ps_ac_facet_index\u003C\u002Ftd>\u003Ctd>Moyenne\u003C\u002Ftd>\u003Ctd>Latence divisée par 20 sur catalogue &gt; 1 000 SKU\u003C\u002Ftd>\u003C\u002Ftr>\n    \u003Ctr>\u003Ctd>URL synchronisée avec query params\u003C\u002Ftd>\u003Ctd>Faible\u003C\u002Ftd>\u003Ctd>+25 % de pages indexées en longue traîne\u003C\u002Ftd>\u003C\u002Ftr>\n    \u003Ctr>\u003Ctd>Cache Redis par signature de filtres\u003C\u002Ftd>\u003Ctd>Faible\u003C\u002Ftd>\u003Ctd>Temps de réponse médian sous 10 ms\u003C\u002Ftd>\u003C\u002Ftr>\n    \u003Ctr>\u003Ctd>Facettes mobiles en drawer plein écran\u003C\u002Ftd>\u003Ctd>Faible\u003C\u002Ftd>\u003Ctd>+35 % d'utilisation des filtres sur mobile\u003C\u002Ftd>\u003C\u002Ftr>\n  \u003C\u002Ftbody>\n\u003C\u002Ftable>\n\n\u003Cblockquote class=\"expert-quote\">\n  \u003Cp>« Disjunctive faceting lets users refine results with multiple values from the same facet. Without it, selecting one value hides all others — which contradicts how shoppers actually compare products. »\u003C\u002Fp>\n  \u003Cfooter>— \u003Ca href=\"https:\u002F\u002Fwww.algolia.com\u002Fdoc\u002Fguides\u002Fmanaging-results\u002Frefine-results\u002Ffaceting\u002F\" target=\"_blank\" rel=\"noopener noreferrer\">Algolia Documentation\u003C\u002Fa>, \u003Ccite>Faceting — Managing Results\u003C\u002Fcite> (2025)\u003C\u002Ffooter>\n\u003C\u002Fblockquote>\n\n\u003Ch2>Conclusion\u003C\u002Fh2>\n\n\u003Cp>Les filtres pill classiques de PrestaShop ne tiennent pas la route sur un catalogue B2B sérieux : counts trompeurs, URL non partageable, UX cassée dès la deuxième case cochée. L'approche \u003Cstrong>Algolia-style\u003C\u002Fstrong> en disjunctive faceting, implémentée en DB-direct avec une table de dénormalisation et un cache Redis, offre le meilleur rapport performance\u002Fcoût sous 10 000 SKU. Sur Palimex v2, le gain d'engagement dépasse 40 % sans aucune dépendance externe ni abonnement mensuel.\u003C\u002Fp>\n\n\u003Cp>Pour aller plus loin, lisez mon retour d'expérience sur \u003Ca href=\"\u002Fblog\u002Farchitecture-headless-prestashop-nuxt\">l'architecture headless PrestaShop + Nuxt\u003C\u002Fa> et mes recommandations dans \u003Ca href=\"\u002Fblog\u002Fperformance-catalogue-prestashop\">la performance d'un catalogue PrestaShop à fort volume\u003C\u002Fa>.\u003C\u002Fp>\n\n\u003Cp>Vous souhaitez auditer votre moteur de facettes ou concevoir un catalogue B2B performant pour votre boutique PrestaShop ? Discutons de votre projet : \u003Ca href=\"mailto:contact@alexandrecarette.fr\">contact@alexandrecarette.fr\u003C\u002Fa>\u003C\u002Fp>\n\n\u003Cdiv class=\"article-sources\">\n  \u003Ch3>Sources et références\u003C\u002Fh3>\n  \u003Cul>\n    \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.algolia.com\u002Fdoc\u002Fguides\u002Fmanaging-results\u002Frefine-results\u002Ffaceting\u002F\" target=\"_blank\" rel=\"noopener noreferrer\">Algolia Documentation — Faceting &amp; Disjunctive Facets\u003C\u002Fa>\u003C\u002Fli>\n    \u003Cli>\u003Ca href=\"https:\u002F\u002Fbaymard.com\u002Fblog\u002Fecommerce-filters\" target=\"_blank\" rel=\"noopener noreferrer\">Baymard Institute — E-Commerce Filters &amp; Facets UX Research\u003C\u002Fa>\u003C\u002Fli>\n    \u003Cli>\u003Ca href=\"https:\u002F\u002Fdevdocs.prestashop-project.org\u002F\" target=\"_blank\" rel=\"noopener noreferrer\">PrestaShop Developer Documentation\u003C\u002Fa>\u003C\u002Fli>\n    \u003Cli>\u003Ca href=\"https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Furl-structure\" target=\"_blank\" rel=\"noopener noreferrer\">Google Search Central — URL Structure Best Practices\u003C\u002Fa>\u003C\u002Fli>\n  \u003C\u002Ful>\n\u003C\u002Fdiv>\n\n\u003Cdiv class=\"articles-lies\" style=\"margin:2em 0;padding:1.5em;border:1px solid #e2e8f0;border-radius:12px;background:#f8fafc;\">\n\u003Ch3 style=\"margin:0 0 0.8em 0;font-size:1em;color:#334155;\">Articles dans le même univers\u003C\u002Fh3>\n\u003Cul style=\"margin:0;padding-left:1.2em;list-style:disc;\">\n\u003Cli>\u003Ca href=\"\u002Fblog\u002Fe-commerce\u002Farchitecture\u002Fmigration-shopify-prestashop-headless\">Migration Shopify vers PrestaShop Headless : guide 2026\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"\u002Fblog\u002Fe-commerce\u002Farchitecture\u002Fprestashop-vs-shopify-comparatif-2026\">PrestaShop vs Shopify 2026 : comparatif honnête pour e-commerçants\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"\u002Fblog\u002Fstrategie\u002Fpositionnement\u002Fportraits-ia-harcourt-annees-folles\">20 portraits IA en noir et blanc — un style Harcourt pour nos agents\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fdiv>",[210,213,216,219,222,225,228,231,234,237,240,243,246,249,252],{"q":211,"a":212},"Qu'est-ce que le disjunctive faceting ?","C'est un algorithme popularisé par Algolia qui calcule le count d'une valeur de facette en excluant la facette elle-même des filtres appliqués. Résultat : l'utilisateur peut cocher plusieurs valeurs de la même facette sans voir tous les autres counts tomber à zéro.",{"q":214,"a":215},"Pourquoi les counts statiques de PrestaShop sont-ils trompeurs ?","Parce qu'ils appliquent tous les filtres actifs, y compris celui en cours de sélection. Dès que vous cochez une valeur, les autres valeurs de la même facette affichent 0, ce qui est mathématiquement logique mais sémantiquement absurde pour un acheteur B2B.",{"q":217,"a":218},"Faut-il forcément passer par Algolia pour avoir des facettes dynamiques ?","Non. Sous 10 000 SKU, une implémentation SQL pure avec table de dénormalisation et cache Redis offre des performances équivalentes pour zéro coût mensuel. Algolia devient pertinent au-delà, quand la pertinence textuelle et la scalabilité horizontale deviennent critiques.",{"q":220,"a":221},"Quel est l'impact SEO des URL filtrées bookmarkables ?","Une URL qui reflète l'état des filtres (ex: ?brand=a&color=blue) devient indexable par Googlebot, ce qui ouvre la longue traîne. En revanche, il faut gérer la canonicalisation pour éviter la cannibalisation des pages catégorie principales.",{"q":223,"a":224},"Combien coûte une solution SaaS comme Algolia par mois ?","Les plans Algolia démarrent autour de 150 € par mois pour un petit catalogue et peuvent dépasser 800 € pour un B2B avec 10 000+ SKU et plusieurs index. Doofinder et FactFinder sont dans la même fourchette.",{"q":226,"a":227},"Quel volume de produits justifie le passage à Elasticsearch ?","Au-delà de 50 000 références ou dès qu'on a besoin de recherche textuelle avancée (synonymes, fautes de frappe, stemming multi-langue), Elasticsearch ou Meilisearch deviennent pertinents. En dessous, SQL + index composites suffisent largement.",{"q":229,"a":230},"Comment indexer efficacement ps_feature_product sur MariaDB ?","Créer un index composite sur (id_feature, id_feature_value, id_product) et un second sur (id_product, id_feature). Pour les gros catalogues, dénormaliser dans une table ps_ac_facet_index évite les jointures multiples et divise la latence par 10 à 20.",{"q":232,"a":233},"Le disjunctive faceting fonctionne-t-il avec les filtres prix ?","Oui, mais avec une adaptation : le filtre prix est généralement un intervalle, pas une valeur discrète. On applique donc le disjunctive uniquement aux facettes catégorielles (marque, couleur, matière) et on garde le prix en AND dans toutes les requêtes.",{"q":235,"a":236},"Comment gérer les filtres sur les attributs de déclinaison ?","Les attributs (taille, couleur) passent par ps_product_attribute, distincte de ps_feature_product. Il faut donc deux sous-requêtes unifiées en UNION, ou mieux : une table de dénormalisation unique qui agrège features et attributs par produit.",{"q":238,"a":239},"Faut-il mettre en cache les counts de facettes ?","Oui, systématiquement. Une clé Redis construite à partir de la signature des filtres actifs (hash MD5 du JSON normalisé) avec un TTL de 300 secondes suffit à absorber 90 % des requêtes identiques sans sacrifier la fraîcheur.",{"q":241,"a":242},"Quelle latence viser sur un endpoint de facettes ?","Sous 100 ms p95 pour une UX fluide, idéalement 50 ms p95. Sur Palimex v2, la médiane est à 6 ms avec cache et 42 ms sans cache, pour un catalogue de 1 082 produits et 18 facettes actives.",{"q":244,"a":245},"Comment éviter la cannibalisation SEO des pages filtrées ?","Deux règles : canoniser vers la page catégorie mère pour toute combinaison non stratégique, et indexer uniquement les combinaisons à fort volume de recherche (1-2 filtres max, identifiés via Search Console). Les autres passent en noindex,follow.",{"q":247,"a":248},"Les facettes dynamiques sont-elles compatibles avec un hub B2B multi-tenant ?","Oui. La table de dénormalisation peut inclure un id_shop ou un discriminant tenant, et le endpoint facettes applique automatiquement le filtre de scope. C'est exactement l'architecture retenue pour Palimex v2 et les tenants CodeMyShop.",{"q":250,"a":251},"Comment tester un moteur de facettes en conditions réelles ?","Trois tests incontournables : jeu de fixtures avec 10 000 produits pour mesurer la latence, scénarios Playwright qui cochent 2 à 5 facettes successives et vérifient qu'aucun count ne tombe à 0 indûment, et campagne Lighthouse sur mobile 3G pour valider le TTI.",{"q":253,"a":254},"Quelle différence entre un filtre pill et une facette ?","Un filtre pill est l'UI visuelle (bouton arrondi cochable), une facette est le concept data (une feature avec ses valeurs et ses counts). Un site peut afficher des pills sans vraie logique disjonctive derrière — c'est justement le travers que cet article corrige.","Pourquoi les facettes catalogue B2B style Algolia battent le filtre pill PrestaShop : counts dynamiques, URL bookmarkable, implémentation DB-direct sans SaaS.","",[],[259,273,279,289],{"id":260,"title":261,"category":203,"subcategory":262,"slug":263,"linkRewrite":264,"excerpt":265,"coverImage":266,"thumbnailImage":267,"nuxtUrl":268,"datePublished":269,"dateUpdated":270,"readingTime":271,"faqCount":272},108,"Agroalimentaire B2B : 5 briques absentes des SaaS e-commerce","positionnement","positionnement--agroalimentaire-b2b-5-briques-saas","e-commerce--positionnement--agroalimentaire-b2b-5-briques-saas","Agroalimentaire B2B : pourquoi les SaaS e-commerce comme Shopify ratent 5 briques clés (poids variable, DLC, grilles B2B, quick order, tournées). Analyse 2026.","https:\u002F\u002Falexandrecarette.fr\u002Fblog-covers\u002Fcover-lagroalimentaire-b2b-nest-1776747610.webp","https:\u002F\u002Falexandrecarette.fr\u002Fblog-covers\u002Fthumb-lagroalimentaire-b2b-nest-1776747610.webp","\u002Fblog\u002Fe-commerce\u002Fpositionnement\u002Fagroalimentaire-b2b-5-briques-saas","2026-04-21T05:04:04.000Z","2026-04-27T06:44:27.000Z",11,15,{"id":201,"title":202,"category":203,"subcategory":204,"slug":205,"linkRewrite":274,"excerpt":255,"coverImage":206,"thumbnailImage":207,"nuxtUrl":275,"datePublished":276,"dateUpdated":277,"readingTime":278,"faqCount":272},"e-commerce--developpement--facettes-catalogue-b2b-algolia","\u002Fblog\u002Fe-commerce\u002Fdeveloppement\u002Ffacettes-catalogue-b2b-algolia","2026-04-18T05:03:43.000Z","2026-04-19T05:03:41.000Z",10,{"id":280,"title":30,"category":203,"subcategory":281,"slug":282,"linkRewrite":283,"excerpt":284,"coverImage":285,"thumbnailImage":286,"nuxtUrl":31,"datePublished":287,"dateUpdated":288,"readingTime":278,"faqCount":272},97,"architecture","architecture--prestashop-vs-shopify-comparatif-2026","e-commerce--architecture--prestashop-vs-shopify-comparatif-2026","PrestaShop vs Shopify en 2026 : commissions, SEO, souveraineté des données et IA. Comparatif terrain après 193 projets pour choisir la bonne plateforme.","https:\u002F\u002Falexandrecarette.fr\u002Fblog-covers\u002Fcover-prestashop-vs-shopify-1775797209.webp","https:\u002F\u002Falexandrecarette.fr\u002Fblog-covers\u002Fthumb-prestashop-vs-shopify-1775797209.webp","2026-04-10T05:02:10.000Z","2026-04-18T05:03:50.000Z",{"id":290,"title":26,"category":203,"subcategory":281,"slug":291,"linkRewrite":292,"excerpt":293,"coverImage":294,"thumbnailImage":295,"nuxtUrl":27,"datePublished":296,"dateUpdated":297,"readingTime":271,"faqCount":272},94,"architecture--migration-shopify-prestashop-headless","e-commerce--architecture--migration-shopify-prestashop-headless","Migration Shopify vers PrestaShop Headless : étapes, coûts, ROI et retours terrain. Éliminez les commissions et reprenez le contrôle de votre e-commerce.","https:\u002F\u002Falexandrecarette.fr\u002Fblog-covers\u002Fcover-migration-shopify-vers-1775710807.webp","https:\u002F\u002Falexandrecarette.fr\u002Fblog-covers\u002Fthumb-migration-shopify-vers-1775710807.webp","2026-04-09T05:02:11.000Z","2026-04-21T05:04:13.000Z"]