Knowledge Base Guide

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.

Loading...
Back to top