Configurazione PrestaShop Multistore: Guida completa
Tutto su PrestaShop Multistore — pianificazione, configurazione, condivisione catalogo, comportamento moduli, considerazioni SEO e problemi comuni.
Cos’è PrestaShop Multistore?
PrestaShop Multistore vi permette di gestire più negozi online da un’unica installazione e un unico back office. Codice condiviso, database condiviso, ecosistema di moduli condiviso, ma vetrine separate per i vostri clienti. La funzionalità è presente in PrestaShop dalla versione 1.5 e si è evoluta notevolmente nelle versioni 8.x e 9.x — anche se richiede ancora una pianificazione accurata.
Quando avete davvero bisogno di Multistore
Più brand da un unico back office. Vendete elettronica con il marchio “TechDirect” e audio con “SoundElite.” Entrambi condividono il vostro magazzino e alcuni prodotti, ma ciascuno ha il proprio sito, tema e listino prezzi. Il vostro team gestisce tutto da un unico pannello di amministrazione.
Paesi diversi con cataloghi separati. I vostri negozi tedesco e francese condividono alcuni prodotti ma differiscono per gamma, prezzi, regole di spedizione e contenuti CMS. Multistore permette a ciascun negozio di mantenere il proprio catalogo condividendo ciò che è in comune.
B2B e B2C da un’unica installazione. Il negozio al dettaglio mostra prezzi IVA inclusa con spedizione standard. Il negozio all’ingrosso mostra prezzi netti, richiede quantità minime e applica tariffe negoziate. Un unico catalogo prodotti, due esperienze di acquisto completamente diverse.
Outlet o negozio di saldi. Una vetrina separata per prodotti scontati con un tema proprio, che attinge dallo stesso database prodotti.
Quando Multistore NON è la risposta
- Attività non correlate: Articoli per animali e macchinari industriali non condividono nulla. Installazioni separate sono più semplici.
- Servono versioni diverse di PS: Multistore richiede che tutti i negozi siano sulla stessa versione.
- Requisiti di moduli in conflitto: Se i negozi necessitàno di moduli incompatibili, installazioni separate evitano i conflitti.
- Isolamento del rischio: Un problema al database in multistore colpisce tutti i negozi. Installazioni separate limitano il raggio d’impatto.
- Vi servono solo più lingue: PrestaShop gestisce il multilingua nativamente all’interno di un singolo negozio — non serve multistore.
Prima di attivare multistore, elencate ciò che volete condividere tra i negozi e ciò che deve restare separato. Se la lista “condiviso” è corta e quella “separato” è lunga, vi conviene optare per installazioni indipendenti.
Pianificare la vostra architettura
Gruppi di negozi
PrestaShop organizza il multistore come Gruppo negozio → Negozio. I gruppi definiscono regole di condivisione difficili da modificare in seguito:
- Condividere i clienti: Un cliente che si registra sul Negozio A può accedere anche al Negozio B?
- Condividere le quantità disponibili: Una vendita sul Negozio A riduce lo stock visibile sul Negozio B?
Cataloghi condivisi o separati
I prodotti possono essere associati a tutti i negozi o solo a negozi specifici. Anche i prodotti condivisi possono avere prezzi, descrizioni, immagini e metadati SEO diversi per ogni negozio. Le categorie funzionano allo stesso modo — condivise o specifiche per negozio, con nomi e descrizioni personalizzati per ciascuno.
Strategia degli URL
- Domini separati (
brand-a.com,brand-b.com) — la scelta migliore per brand distinti. Richiede certificati SSL individuali o un certificato multi-dominio. - Sottodomini (
de.myshop.com,fr.myshop.com) — naturali per varianti regionali. Potete usare un certificato SSL wildcard. - Sottodirectory (
myshop.com/wholesale/) — configurazione più semplice, un solo certificato SSL, ma limita la flessibilità SEO.
Architettura del database
Multistore utilizza un singolo database con colonne id_shop per differenziare i dati. Un unico backup copre tutti i negozi, ma la corruzione dei dati colpisce anch’essa tutti i negozi, e le query portano un overhead di filtraggio per negozio.
Attivare e configurare Multistore
Passo 1: Attivare la funzionalità
Andate su Advanced Parameters → General (PS 1.7.x) oppure Advanced Parameters → Multistore (PS 8.x/9.x). Impostate Enable Multistore su Yes. Un selettore di contesto negozio apparirà nell’intestazione del back office.
Passo 2: Creare un gruppo di negozi
In Advanced Parameters → Multistore, cliccate su Add a new shop group. Impostate il nome del gruppo e le opzioni di condivisione (clienti, quantità). Ricordate: queste sono difficili da modificare in seguito.
Passo 3: Aggiungere un nuovo negozio
Cliccate su Add a new shop. Scegliete il nome, il gruppo, la categoria radice e, opzionalmente, importate i dati da un negozio esistente per risparmiare tempo nella configurazione.
Passo 4: Configurare gli URL
Cliccate sul nome del negozio e aggiungete un URL. Esempi:
# Separate domain
Domain: www.my-second-shop.com
Physical URI: /
Virtual URI: (empty)
# Subdomain
Domain: shop2.myshop.com
Physical URI: /
Virtual URI: (empty)
# Subdirectory
Domain: www.myshop.com
Physical URI: /
Virtual URI: wholesale/
Passo 5: Configurazione del server
Per domini o sottodomini separati, tutti i domini devono puntare alla stessa directory di PrestaShop nella configurazione del vostro web server. Per URL virtuali (sottodirectory), di solito non serve configurazione aggiuntiva del server — PrestaShop gestisce il routing tramite .htaccess.
Dopo aver configurato gli URL, svuotate sempre la cache di PrestaShop. Il routing degli URL viene memorizzato in cache in modo aggressivo e le voci obsolete causano loop di redirect.
Gestire i contenuti tra i negozi
Il selettore di contesto negozio
Il menu a tendina nella parte superiore del back office controlla a quale negozio si applicano le vostre modifiche: All shops, un gruppo specifico o un negozio specifico. La regola d’oro: lavorate sempre nel contesto più specifico possibile. Modificare in “All shops” quando intendevate cambiare un solo negozio è l’errore multistore più comune.
Ereditarietà della configurazione
I valori impostati in “All shops” diventano valori predefiniti. I singoli negozi possono sovrascriverli. Nella pagina di configurazione, le checkbox accanto ai campi controllano se il campo usa il valore ereditato o un override specifico per il negozio. Deselezionate per impostare un valore personalizzato per il negozio corrente.
Il comportamento delle checkbox di ereditarietà è cambiato tra le versioni di PrestaShop. Testate sempre con la vostra versione specifica per capire quale stato significa “ereditato” e quale “personalizzato.”
Prodotti e categorie
Comportamenti chiave:
- Creare un prodotto nel contesto “All shops” lo rende disponibile ovunque.
- Crearlo nel contesto di un negozio specifico lo limita a quel negozio. Potete associarlo ad altri in seguito.
- Disattivare un prodotto in un negozio non influisce sugli altri negozi.
- Eliminarlo in “All shops” lo rimuove definitivamente da tutti i negozi.
- Il comportamento delle scorte dipende dalle impostazioni di condivisione del gruppo.
Tema, lingua e valuta per negozio
Ogni negozio può avere il proprio tema, il proprio set di lingue attivate e le proprie valute. Selezionate prima il contesto del negozio, poi configurate in Design → Theme & Logo oppure International → Localization.
Comportamento dei moduli in Multistore
Come funzionano i moduli compatibili con Multistore
Un modulo costruito correttamente salva la configurazione per negozio (usando Configuration::updateValue() che rispetta il contesto negozio), controlla Shop::getContextShopID() negli hook e gestisce correttamente il contesto “All shops.” La tabella ps_configuration memorizza valori per negozio tramite la colonna id_shop.
Insidie comuni dei moduli
- Configurazione solo globale: Il modulo salva le impostazioni senza
id_shop— modificare un negozio modifica tutti gli altri. - Shop ID codificato: Il modulo assume
id_shop = 1, ignorando i negozi secondari. - Filtro negozio mancante nelle query: Restituisce dati misti da tutti i negozi.
- Collisioni di cache: Chiavi di cache senza shop ID servono i dati del negozio sbagliato.
Verificare il supporto Multistore di un modulo
- La descrizione menziona “multistore compatible”?
- Esiste documentazione sulla configurazione per negozio?
- Dopo l’installazione, la pagina di configurazione mostra le checkbox di ereditarietà quando siete nel contesto di un negozio specifico?
- Test: impostate configurazioni diverse su due negozi, verificate che entrambi i front end riflettano la differenza.
Un modulo non compatibile con multistore non necessariamente causarà problemi — ma tutti i negozi condivideranno le sue impostazioni. Questo può essere accettabile o meno a seconda della funzione del modulo.
Considerazioni SEO
URL canonici
Ogni pagina di ogni negozio deve avere un URL canonico che punta a se stessa. Verificate che un prodotto su shop-a.com abbia il canonico su shop-a.com, non su shop-b.com. Per contenuti identici tra i negozi, decidete una fonte primaria e implementate canonici cross-domain.
Hreflang per negozi multilingua
Se i negozi si rivolgono a lingue/regioni diverse, i tag hreflang indicano ai motori di ricerca quale versione mostrare a ciascun pubblico:
<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 gestisce gli hreflang per le varianti linguistiche all’interno di un singolo negozio, ma non tra negozi separati. Vi servirà un modulo o modifiche ai template per gli hreflang cross-shop. I tag devono essere bidirezionali — se il Negozio A referenzia il Negozio B, il Negozio B deve referenziare il Negozio A.
Sitemap e contenuti duplicati
Ogni negozio ha bisogno della propria sitemap.xml con solo i propri URL. Registrate ciascun negozio separatamente in Google Search Console. Per evitare penalizzazioni per contenuti duplicati: personalizzate le descrizioni dei prodotti per ogni negozio, usate i tag canonici per i contenuti condivisi e differenziate le pagine di categoria con descrizioni uniche.
Per negozi multilingua su domini separati, i tag hreflang sono obbligatori, non opzionali. Senza di essi, i motori di ricerca potrebbero indicizzare la lingua sbagliata per ciascun mercato.
Implicazioni sulle prestazioni
Multistore aggiunge overhead in tre aree:
- Tabelle di configurazione: N righe per ogni impostazione (una per negozio) invece di una sola. Più dati in ogni lookup di configurazione.
- Query SQL: Quasi ogni query acquisisce una clausola
WHERE id_shop = X. Senza indici adeguati, le prestazioni peggiorano con la crescita del database. - Footprint della cache: Ogni negozio ha le proprie voci di cache per template, configurazioni e listini. La memoria scala con il numero di negozi e il riscaldamento della cache richiede più tempo.
Per Redis/Memcached, verificate che i prefissi delle chiavi di cache includano lo shop ID per prevenire leak di dati tra negozi. Monitorate il database con queste query:
# 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
);
Problemi comuni di Multistore
Prodotti nel negozio sbagliato
Causa: Prodotto creato nel contesto “All shops.” Soluzione: Passate al contesto del negozio indesiderato e disattivate/rimuovete l’associazione del prodotto. Verificate con:
SELECT ps.id_product, ps.id_shop, ps.active
FROM ps_product_shop ps WHERE ps.id_product = 123;
Modifiche alla configurazione che colpiscono tutti i negozi
Causa: Eravate nel contesto “All shops,” oppure il modulo salva i valori globalmente. Controllate il salvataggio:
SELECT id_shop, name, value FROM ps_configuration
WHERE name = 'MODULE_SETTING_NAME' ORDER BY id_shop;
Se c’è solo una riga con id_shop = NULL, il modulo salva globalmente. Contattate il fornitore o create manualmente le voci per ogni negozio.
Il modulo non salva le impostazioni per negozio
Causa: Il modulo usa Configuration::updateGlobalValue() invece di Configuration::updateValue(). Richiede una correzione nel codice del modulo o un aggiornamento dal fornitore.
Carrello misto tra i negozi
Causa: Dominio del cookie impostato in modo troppo ampio (es. .myshop.com invece di shop-a.myshop.com). Correggete in Shop Parameters → General — impostate il dominio del cookie sul sottodominio specifico per ogni negozio.
L’importazione inserisce i prodotti nel negozio sbagliato
Causa: Lo strumento di importazione rispetta il contesto corrente. Selezionate sempre il negozio di destinazione prima di aprire la pagina di importazione. Dopo l’importazione, verificate le voci in ps_product_shop.
Loop di redirect dopo l’aggiunta di un negozio
Causa: Configurazione URL errata o .htaccess obsoleto. Soluzione: rigenerate il file .htaccess dalle impostazioni di Performance, verificate le voci in ps_shop_url e assicuratevi che la configurazione SSL sia coerente:
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 di manutenzione Multistore
Settimanale
- Verificate che la vetrina di ogni negozio si carichi correttamente (nessun redirect, nessun errore)
- Controllate che gli ordini recenti siano assegnati al negozio corretto
- Testate il flusso di checkout su ogni negozio
Mensile
- Controllate le associazioni dei prodotti — ci sono prodotti nei negozi sbagliati?
- Revisionate le configurazioni per negozio passando a ciascun contesto
- Controllate i log degli errori per ogni negozio
- Verificate che le sitemap siano aggiornate e accessibili
- Testate l’invio di email da ogni negozio
- Monitorate la crescita delle dimensioni del database
Dopo gli aggiornamenti dei moduli
- Controllate la pagina di configurazione del modulo nel contesto di ogni negozio
- Verificate il comportamento front-end per ogni negozio
- Confermate che le impostazioni per negozio si salvino in modo indipendente
- Svuotate le cache per tutti i negozi
Dopo gli aggiornamenti di PrestaShop
- Testate tutti i negozi immediatamente — le regressioni multistore sono frequenti
- Ricontrollate la configurazione degli URL
- Rigenerate il file
.htaccess - Testate il checkout completo su ogni negozio
Considerazioni finali
PrestaShop Multistore centralizza le operazioni quando corrisponde alle vostre esigenze, ma aggiunge complessità ovunque. I commercianti che hanno successo lo trattano come una decisione architetturale, non come un semplice interruttore da attivare. Pianificatelo bene, mantenetelo con cura e tenete sempre i backup aggiornati.
More guides available
Browse our knowledge base for more practical PrestaShop tutorials, or reach out if you need help.