Configuration PrestaShop Multiboutique : Guide complet
Tout sur PrestaShop Multistore — planification, configuration, partage du catalogue, comportement des modules, SEO et pièges courants.
Qu’est-ce que PrestaShop Multistore ?
PrestaShop Multistore vous permet de gérer plusieurs boutiques en ligne à partir d’une seule installation et d’un seul back office. Un code source partagé, une base de données partagée, un écosystème de modules partagé, mais des vitrines séparées pour vos clients. Cette fonctionnalité est présente dans PrestaShop depuis la version 1.5 et a considérablement gagné en maturité avec les versions 8.x et 9.x — bien qu’elle exige toujours une planification rigoureuse.
Quand avez-vous réellement besoin de Multistore ?
Plusieurs marques depuis un seul back office. Vous vendez de l’électronique sous « TechDirect » et de l’audio sous « SoundElite ». Les deux partagent votre entrepôt et certains produits, mais chacune possède son propre site, son thème et sa tarification. Votre équipe gère tout depuis un seul panneau d’administration.
Différents pays avec des catalogues séparés. Vos boutiques allemande et française partagent certains produits mais diffèrent en termes de gamme, de prix, de règles de livraison et de contenu CMS. Multistore permet à chaque boutique de maintenir son propre catalogue tout en partageant les éléments communs.
B2B et B2C depuis une seule installation. La boutique grand public affiche des prix TTC avec une livraison standard. La boutique de gros affiche des prix HT, exige des quantités minimales et bénéficie de tarifs négociés. Un seul catalogue de produits, deux expériences d’achat complètement différentes.
Boutique outlet ou déstockage. Une vitrine séparée pour les produits soldés avec son propre thème, s’alimentant depuis la même base de données produits.
Quand Multistore n’est PAS la bonne réponse
- Activités sans rapport : Les fournitures pour animaux et les machines industrielles ne partagent rien. Des installations séparées sont plus simples.
- Besoin de versions PS différentes : Multistore exige que toutes les boutiques soient sur la même version.
- Exigences de modules incompatibles : Si vos boutiques nécessitent des modules incompatibles, des installations séparées évitent les conflits.
- Isolation des risques : Un problème de base de données en multistore affecte toutes les boutiques. Des installations séparées limitent le rayon d’impact.
- Vous avez seulement besoin de plusieurs langues : PrestaShop gère le multilinguisme nativement au sein d’une seule boutique — pas besoin de multistore.
Avant d’activer multistore, listez ce que vous souhaitez partager entre les boutiques et ce qui doit rester séparé. Si la liste « partagé » est courte et la liste « séparé » longue, vous avez tout intérêt à opter pour des installations indépendantes.
Planifier votre architecture
Groupes de boutiques
PrestaShop organise le multistore selon le schéma Groupe de boutiques → Boutique. Les groupes définissent des règles de partage qui sont difficiles à modifier ultérieurement :
- Partager les clients : Un client inscrit sur la Boutique A peut-il également se connecter à la Boutique B ?
- Partager les quantités disponibles : Une vente sur la Boutique A réduit-elle le stock visible sur la Boutique B ?
Catalogues partagés vs. séparés
Les produits peuvent être associés à toutes les boutiques ou à certaines boutiques seulement. Même les produits partagés peuvent avoir des prix, des descriptions, des images et des métadonnées SEO différents par boutique. Les catégories fonctionnent de la même façon — partagées ou spécifiques à une boutique, avec des noms et descriptions propres à chaque boutique.
Stratégie d’URL
- Domaines séparés (
marque-a.com,marque-b.com) — idéal pour des marques distinctes. Nécessite des certificats SSL individuels ou un certificat multi-domaine. - Sous-domaines (
de.maboutique.com,fr.maboutique.com) — naturel pour des variantes régionales. Un certificat SSL wildcard peut être utilisé. - Sous-répertoires (
maboutique.com/wholesale/) — configuration la plus simple, un seul certificat SSL, mais limite la flexibilité SEO.
Architecture de la base de données
Multistore utilise une base de données unique avec des colonnes id_shop pour différencier les données. Une seule sauvegarde couvre toutes les boutiques, mais une corruption affecte également toutes les boutiques et les requêtes subissent la surcharge du filtrage par boutique.
Activer et configurer Multistore
Étape 1 : Activer la fonctionnalité
Rendez-vous dans Paramètres avancés → Général (PS 1.7.x) ou Paramètres avancés → Multistore (PS 8.x/9.x). Activez Activer Multistore sur Oui. Un sélecteur de contexte de boutique apparaît dans l’en-tête du back office.
Étape 2 : Créer un groupe de boutiques
Dans Paramètres avancés → Multistore, cliquez sur Ajouter un nouveau groupe de boutiques. Définissez le nom du groupe et les options de partage (clients, quantités). Rappelez-vous : ces réglages sont difficiles à modifier par la suite.
Étape 3 : Ajouter une nouvelle boutique
Cliquez sur Ajouter une nouvelle boutique. Choisissez le nom, le groupe, la catégorie racine, et importez éventuellement des données d’une boutique existante pour gagner du temps.
Étape 4 : Configurer les URL
Cliquez sur le nom de la boutique et ajoutez une URL. Exemples :
# Domaine séparé
Domain: www.ma-seconde-boutique.com
Physical URI: /
Virtual URI: (vide)
# Sous-domaine
Domain: shop2.maboutique.com
Physical URI: /
Virtual URI: (vide)
# Sous-répertoire
Domain: www.maboutique.com
Physical URI: /
Virtual URI: wholesale/
Étape 5 : Configuration du serveur
Pour des domaines ou sous-domaines séparés, tous les domaines doivent pointer vers le même répertoire PrestaShop dans la configuration de votre serveur web. Pour les URL virtuelles (sous-répertoires), aucune configuration serveur supplémentaire n’est généralement nécessaire — PrestaShop gère le routage via .htaccess.
Après avoir configuré les URL, videz toujours le cache PrestaShop. Le routage des URL est mis en cache de manière agressive et des entrées obsolètes provoquent des boucles de redirection.
Gérer le contenu à travers les boutiques
Le sélecteur de contexte de boutique
Le menu déroulant en haut du back office contrôle à quelle boutique vos modifications s’appliquent : Toutes les boutiques, un groupe spécifique ou une boutique spécifique. La règle d’or : travaillez toujours dans le contexte le plus spécifique possible. Modifier en contexte « Toutes les boutiques » alors que vous vouliez changer une seule boutique est l’erreur multistore la plus courante.
Héritage de la configuration
Les valeurs définies dans « Toutes les boutiques » deviennent les valeurs par défaut. Les boutiques individuelles peuvent les surcharger. Sur la page de configuration, des cases à cocher à côté des champs contrôlent si le champ utilise la valeur héritée ou une valeur spécifique à la boutique. Décochez pour définir une valeur personnalisée pour la boutique en cours.
Le comportement des cases à cocher d’héritage a changé entre les versions de PrestaShop. Testez toujours avec votre version spécifique pour comprendre quel état signifie « hérité » et lequel signifie « personnalisé ».
Produits et catégories
Comportements clés :
- Créer un produit dans le contexte « Toutes les boutiques » le rend disponible partout.
- Le créer dans le contexte d’une boutique spécifique le limite à cette boutique. Vous pouvez l’associer à d’autres boutiques ultérieurement.
- Désactiver un produit dans une boutique n’affecte pas les autres boutiques.
- Le supprimer dans « Toutes les boutiques » le retire définitivement de partout.
- Le comportement du stock dépend des paramètres de partage du groupe.
Thème, langue et devise par boutique
Chaque boutique peut avoir son propre thème, son propre ensemble de langues activées et ses propres devises. Sélectionnez d’abord le contexte de la boutique, puis configurez dans Apparence → Thème et logo ou International → Localisation.
Comportement des modules en Multistore
Comment fonctionnent les modules compatibles Multistore
Un module correctement conçu stocke la configuration par boutique (en utilisant Configuration::updateValue() qui respecte le contexte de la boutique), vérifie Shop::getContextShopID() dans les hooks et gère correctement le contexte « Toutes les boutiques ». La table ps_configuration stocke les valeurs par boutique grâce à une colonne id_shop.
Pièges courants des modules
- Configuration globale uniquement : Le module enregistre les paramètres sans
id_shop— modifier une boutique modifie toutes les autres. - ID de boutique codé en dur : Le module suppose
id_shop = 1, ignorant les boutiques secondaires. - Filtre boutique manquant dans les requêtes : Renvoie des données mélangées de toutes les boutiques.
- Collisions de cache : Des clés de cache sans l’identifiant boutique servent les données de la mauvaise boutique.
Vérifier la compatibilité Multistore d’un module
- La description mentionne-t-elle « compatible multistore » ?
- Existe-t-il une documentation sur la configuration par boutique ?
- Après l’installation, la page de configuration affiche-t-elle des cases d’héritage lorsque vous êtes dans un contexte boutique spécifique ?
- Test : définissez des configurations différentes sur deux boutiques, vérifiez que les deux vitrines reflètent la différence.
Un module non compatible multistore ne causera pas forcément de problèmes — mais toutes les boutiques partageront ses paramètres. Cela peut être acceptable ou non selon la fonction du module.
Considérations SEO
URL canoniques
Chaque page de chaque boutique doit avoir une URL canonique pointant vers elle-même. Vérifiez qu’un produit sur boutique-a.com se canonicalise vers boutique-a.com, et non vers boutique-b.com. Pour un contenu identique entre les boutiques, décidez d’une source principale et mettez en place des canoniques inter-domaines.
Hreflang pour les boutiques multilingues
Si vos boutiques ciblent différentes langues ou régions, les balises hreflang indiquent aux moteurs de recherche quelle version afficher à chaque audience :
<link rel="alternate" hreflang="de" href="https://de.myshop.com/produkt" />
<link rel="alternate" hreflang="fr" href="https://fr.myshop.com/produit" />
<link rel="alternate" hreflang="x-default" href="https://www.myshop.com/product" />
PrestaShop gère les hreflang pour les variantes linguistiques au sein d’une seule boutique, mais pas entre des boutiques séparées. Vous aurez besoin d’un module ou de modifications de templates pour les hreflang inter-boutiques. Les balises doivent être bidirectionnelles — si la Boutique A référence la Boutique B, la Boutique B doit référencer la Boutique A.
Sitemaps et contenu dupliqué
Chaque boutique a besoin de son propre sitemap.xml contenant uniquement ses propres URL. Enregistrez chaque boutique séparément dans Google Search Console. Pour éviter les pénalités de contenu dupliqué : personnalisez les descriptions produits par boutique, utilisez des balises canoniques pour le contenu partagé et différenciez les pages de catégorie avec des descriptions uniques.
Pour les boutiques multilingues sur des domaines séparés, les balises hreflang sont obligatoires, pas optionnelles. Sans elles, les moteurs de recherche risquent d’indexer la mauvaise langue pour chaque marché.
Implications sur les performances
Multistore ajoute de la surcharge dans trois domaines :
- Tables de configuration : N lignes par paramètre (une par boutique) au lieu d’une seule. Davantage de données à chaque lecture de configuration.
- Requêtes SQL : Presque chaque requête reçoit une clause
WHERE id_shop = X. Sans index adéquats, les performances se dégradent à mesure que la base de données grossit. - Empreinte du cache : Chaque boutique possède ses propres entrées de cache pour les templates, les configurations et les listings. La mémoire évolue proportionnellement au nombre de boutiques, et le préchauffage du cache prend plus de temps.
Pour Redis/Memcached, vérifiez que les préfixes des clés de cache incluent l’identifiant de la boutique afin d’éviter les fuites de données entre boutiques. Surveillez la base de données avec ces requêtes :
# Check table sizes
SELECT table_name, ROUND(data_length/1024/1024, 2) AS size_mb
FROM information_schema.tables
WHERE table_schema = 'prestashop'
ORDER BY data_length DESC LIMIT 20;
# Find missing indexes on id_shop columns
SELECT t.table_name, c.column_name
FROM information_schema.columns c
JOIN information_schema.tables t
ON c.table_schema = t.table_schema AND c.table_name = t.table_name
WHERE c.table_schema = 'prestashop' AND c.column_name = 'id_shop'
AND c.column_name NOT IN (
SELECT column_name FROM information_schema.statistics
WHERE table_schema = 'prestashop' AND table_name = c.table_name
);
Problèmes courants du Multistore
Produits dans la mauvaise boutique
Cause : Produit créé dans le contexte « Toutes les boutiques ». Solution : Basculez vers le contexte de la boutique concernée et désactivez ou supprimez l’association du produit. Vérifiez avec :
SELECT ps.id_product, ps.id_shop, ps.active
FROM ps_product_shop ps WHERE ps.id_product = 123;
Modifications de configuration affectant toutes les boutiques
Cause : Vous étiez dans le contexte « Toutes les boutiques », ou le module stocke les valeurs globalement. Vérifiez le stockage :
SELECT id_shop, name, value FROM ps_configuration
WHERE name = 'MODULE_SETTING_NAME' ORDER BY id_shop;
S’il n’y a qu’une seule ligne avec id_shop = NULL, le module stocke globalement. Contactez l’éditeur ou créez manuellement des entrées par boutique.
Le module n’enregistre pas les paramètres par boutique
Cause : Le module utilise Configuration::updateGlobalValue() au lieu de Configuration::updateValue(). Cela nécessite une correction du code du module ou une mise à jour de l’éditeur.
Panier mélangé entre les boutiques
Cause : Le domaine du cookie est défini de manière trop large (par ex. .maboutique.com au lieu de boutique-a.maboutique.com). Corrigez dans Paramètres de la boutique → Général — définissez le domaine du cookie sur le sous-domaine spécifique pour chaque boutique.
L’import place les produits dans la mauvaise boutique
Cause : L’outil d’import respecte le contexte en cours. Sélectionnez toujours la boutique cible avant d’ouvrir la page d’import. Après l’import, vérifiez les entrées de ps_product_shop.
Boucles de redirection après l’ajout d’une boutique
Cause : Configuration d’URL incorrecte ou .htaccess obsolète. Solution : régénérez le .htaccess depuis les paramètres de performance, vérifiez les entrées de ps_shop_url et assurez-vous que la configuration SSL est cohérente :
SELECT s.name, su.domain, su.domain_ssl, su.physical_uri, su.virtual_uri
FROM ps_shop s
JOIN ps_shop_url su ON s.id_shop = su.id_shop AND su.main = 1;
Checklist de maintenance Multistore
Hebdomadaire
- Vérifiez que la vitrine de chaque boutique se charge (pas de redirections, pas d’erreurs)
- Contrôlez que les commandes récentes sont assignées à la bonne boutique
- Testez le parcours de checkout sur chaque boutique
Mensuel
- Auditez les associations de produits — des produits se trouvent-ils dans les mauvaises boutiques ?
- Passez en revue les configurations par boutique en basculant dans chaque contexte
- Vérifiez les logs d’erreurs par boutique
- Vérifiez que les sitemaps sont à jour et accessibles
- Testez l’envoi d’e-mails depuis chaque boutique
- Surveillez la croissance de la taille de la base de données
Après les mises à jour de modules
- Vérifiez la page de configuration du module dans chaque contexte boutique
- Vérifiez le comportement front-end par boutique
- Confirmez que les paramètres par boutique s’enregistrent indépendamment
- Videz les caches pour toutes les boutiques
Après les mises à jour de PrestaShop
- Testez toutes les boutiques immédiatement — les régressions multistore sont fréquentes
- Revérifiez la configuration des URL
- Régénérez le
.htaccess - Testez le checkout complet sur chaque boutique
Conclusion
PrestaShop Multistore centralise les opérations lorsqu’il correspond à vos besoins, mais ajoute de la complexité partout. Les marchands qui réussissent le traitent comme une décision d’architecture, pas comme un simple interrupteur. Planifiez-le correctement, maintenez-le avec soin, et gardez toujours des sauvegardes.
More guides available
Browse our knowledge base for more practical PrestaShop tutorials, or reach out if you need help.