Come configurare e gestire il multinegozio PrestaShop
Pianifica gruppi, condivisione, domini e routing, poi gestisci in sicurezza dati di catalogo, configurazione e moduli nel contesto di ogni negozio.
Usa il multinegozio quando più vetrine richiedono un'installazione PrestaShop condivisa e operazioni in parte comuni. Pianifica le regole di condivisione e il routing degli URL prima di creare i negozi.
Cosa faremmo
Per prima cosa elencheremmo cosa deve essere condiviso e cosa deve differire, poi verificheremmo questa mappa rispetto al negozio esistente: versione di PrestaShop, moduli essenziali, collegamenti ERP e di magazzino, tema, dati di catalogo e clienti, mercati e responsabilità del personale. Un'integrazione obbligatoria che non distingue i negozi può determinare l'architettura prima ancora di creare un'altra vetrina.
Costruisci la struttura proposta su una copia di staging isolata, tenendo email ai clienti, pagamenti reali ed esportazioni di scorte o ordini lontani dai sistemi di produzione. Concorda i controlli di accettazione, prova la modifica e pianifica un passaggio controllato con una procedura di ripristino verificata. Mantieni operativa la vetrina attuale fino al passaggio concordato.
Se vuoi valutare le dipendenze dei moduli essenziali sulla copia del tuo negozio, il servizio PrestaShop Module Selection & Fit Assessment verifica i percorsi disponibili rispetto al risultato richiesto.
Scegli tra multinegozio e installazioni separate
Il multinegozio esegue più vetrine da un'unica base di codice, database e back office. La gerarchia è gruppo negozi, negozio, poi URL dei negozi. Un gruppo definisce la condivisione supportata di clienti, scorte e carrelli; ogni negozio ha le proprie associazioni e i valori di configurazione supportati.
| La tua esigenza | Percorso iniziale | Riscontri prima della scelta |
|---|---|---|
| La stessa vetrina tradotta | Un singolo negozio supporta già più lingue. Aggiungi lì le versioni linguistiche. | Catalogo, identità del marchio e regole commerciali possono restare in quella vetrina. |
| Vetrine nazionali con selezioni di catalogo o prezzi diversi | Valuta il multinegozio con la configurazione dei mercati prevista. | Checkout locale, moduli essenziali e corrispondenze linguistiche tra negozi funzionano sulla copia del negozio. |
| Due marchi con scorte condivise, un negozio B2B accanto a uno al dettaglio o un outlet con prodotti selezionati | Valuta il multinegozio se le operazioni condivise giustificano l'installazione comune. | Titolarità delle scorte e accesso dei clienti sono espliciti e il personale può lavorare su un negozio senza modificare un altro marchio. |
| Nessun catalogo, cliente o processo condiviso; oppure versioni del core diverse, dipendenze incompatibili, calendari di rilascio indipendenti o necessità di maggiore isolamento operativo | Usa installazioni separate. | Concorda come gli eventuali sistemi condivisi di magazzino o reportistica si collegheranno a ciascuna installazione. |
Le regole commerciali come visualizzazione delle imposte, quantità minime e idoneità ai pagamenti richiedono comunque configurazione e test. Per il percorso dell'acquirente professionale, consulta la guida alla configurazione B2B.
Tutti i negozi di un'installazione condividono le conseguenze di un deploy del codice o di una modifica al database falliti. Esegui il backup completo di database e file. Scrivi la mappa dei negozi: gruppi, domini, lingue, valute, associazioni di catalogo, titolarità delle scorte e ambito previsto dei moduli.
Abilita il multinegozio e crea la struttura dei negozi
- Esegui il backup dell'intera installazione e fai una prova in staging.
- Abilita Multinegozio in Parametri Negozio → Generale.
- Apri Parametri avanzati → Multinegozio e crea o seleziona il gruppo negozi previsto.
- Imposta tutte e tre le opzioni di condivisione secondo il piano.
- Crea il negozio con nome, gruppo e categoria radice. Se importi dati da un altro negozio, esamina ogni categoria di importazione offerta e verifica le associazioni risultanti.
- Aggiungi l'URL del negozio e conferma dominio, dominio SSL, percorso fisico, percorso virtuale, stato abilitato e flag URL principale.
- Completa il routing del server, poi prova la vetrina prima di importare o modificare grandi quantità di dati.
Un catalogo o una configurazione copiati sono uno stato iniziale. Non presumere che ogni valore copiato resti collegato alle successive modifiche nel negozio originale.
Configura DNS, TLS e routing del server
Domini e sottodomini separati devono risolversi verso il server. Configura il server web affinché serva la stessa directory PrestaShop per ogni host e installa certificati che coprano ogni nome host HTTPS. Un certificato wildcard copre solo i nomi entro il proprio ambito consentito; verifica i nomi effettivi del certificato.
L'URI fisico è il percorso web reale dell'installazione. L'URI virtuale identifica un percorso della vetrina che non richiede una directory di installazione separata. Per un'installazione nella radice del dominio, questi sono esempi di configurazione:
| Configurazione | Host | URI fisico | URI virtuale |
|---|---|---|---|
| Dominio separato | brand-b.example | / | Vuoto |
| Sottodominio | de.example.com | / | Vuoto |
| Sottodirectory virtuale | www.example.com | / | wholesale/ |
Apache
Configura prima virtual host e TLS. Abilita il supporto di riscrittura richiesto e consenti le regole di riscrittura dell'installazione. Salva le impostazioni URL in Parametri Negozio → Traffico & SEO → SEO & URL per generare le regole .htaccess applicabili. Esamina il risultato e provalo. Il file .htaccess non configura DNS, certificati o virtual host.
nginx
nginx non legge .htaccess. Parti dalla configurazione nginx di PrestaShop, incluse riscritture delle risorse, directory protette e gestione PHP. Configura ogni host affinché usi la stessa radice di installazione.
Per un'installazione nella radice il cui percorso virtuale del negozio è wholesale/, aggiungi una riscrittura del prefisso nel blocco server prima delle normali riscritture PrestaShop:
rewrite ^/wholesale/(.*)$ /$1 last;
Mantieni il normale fallback al front controller del negozio:
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
I parametri PHP devono conservare l'originale REQUEST_URI, incluso /wholesale/, così che PrestaShop possa identificare il negozio. La riscrittura interna consente alle stesse regole per risorse e front controller di servire il percorso virtuale. Adatta il prefisso per ogni negozio virtuale, mantieni tutte le sezioni di sicurezza e verifica la configurazione nginx prima di ricaricarla. Prova homepage del negozio, URL semplificati, immagini, route dei moduli, carrello e checkout.
Per entrambi i server, conferma che HTTPS e header attendibili del reverse proxy concordino con gli URL configurati. Prova i reindirizzamenti canonici da host e percorsi alternativi. Svuota le cache pertinenti dopo aver modificato la configurazione URL.
Comprendi il contesto negozio e i diversi ambiti dei dati
Leggi il selettore negozio prima di ogni salvataggio. Scegli Tutti i negozi, un gruppo negozi o un singolo negozio in base alla modifica prevista. L'ambito supportato dal form determina cosa può influenzare un salvataggio; non presumere che ogni pagina accetti ogni contesto.
| Dati | Comportamento |
|---|---|
| Campi prodotto globali | Campi come il riferimento prodotto condiviso risiedono nel prodotto di base. Non diventano indipendenti solo perché hai selezionato un negozio. |
| Campi prodotto del negozio | product_shop include valori come prezzo, stato attivo, visibilità e categoria predefinita. Sono valori memorizzati per negozio, non collegamenti universali di fallback in tempo reale. |
| Campi prodotto tradotti | product_lang contiene nomi, descrizioni e metadati per prodotto, lingua e negozio. |
| Configurazione | Un'impostazione può avere un valore del negozio, uno del gruppo e un valore predefinito globale. Il core risolve prima il valore del negozio, poi quello del gruppo, poi quello globale. |
Le caselle di controllo possono significare usare il valore di configurazione ereditato, selezionare i campi da aggiornare o scegliere i negozi interessati da un'azione. Leggi etichetta e aiuto per quel form e quella versione. Una casella di aggiornamento del prodotto non promette un'ereditarietà continua.
Associa prodotti e categorie solo ai negozi previsti. Verifica l'ambito mostrato dalle azioni di disabilitazione, rimozione dell'associazione ed eliminazione prima di confermarle. Rimuovere un'associazione ed eliminare l'entità condivisa hanno conseguenze diverse.
Configura temi, loghi, lingue abilitate, valute, corrieri, metodi di pagamento e imposte nel rispettivo contesto supportato. Ricarica la pagina e visita ogni vetrina dopo il salvataggio. Assegna nomi chiari alle risorse specifiche del negozio, per esempio banner-de.jpg, e documenta quelle condivise.
Prova i cambi di lingua e valuta su una pagina prodotto: il visitatore deve raggiungere il prodotto corrispondente e la valuta selezionata deve mantenersi nel carrello e nel checkout. Registra a quale negozio appartengono ogni pagina legale e identità del mittente prima di copiare contenuti o configurazioni tra marchi. Consulta la guida alle traduzioni e alle vendite internazionali per la configurazione dei mercati.
Prova i moduli in due contesti negozio
- Identifica quali impostazioni del modulo sono globali per progettazione e quali devono variare per negozio.
- In staging, salva valori diversi in due negozi. Ricarica entrambe le pagine di configurazione ed esamina entrambe le vetrine.
- Esercita output degli hook, importazioni, processi cron, attività da riga di comando e risposte dalla cache. Possono essere eseguiti in un contesto diverso dalla sessione browser di un dipendente.
- Verifica l'appartenenza dei dati personalizzati tramite colonne del negozio, tabelle associative o entità padre con ambito definito. Una tabella non richiede una colonna
id_shopse un altro modello di appartenenza valido fornisce l'ambito. - Verifica le chiavi di cache per ogni dimensione del contesto che influenza il risultato, inclusi negozio e lingua o valuta pertinenti.
Per i connettori ERP, magazzino, marketplace, contabilità ed email, registra come ogni importazione, esportazione e callback identifica il negozio di destinazione. Esegui le attività pianificate nel loro contesto effettivo ed esamina i record risultanti e i dati inviati. Un connettore che presume il negozio predefinito richiede una modifica supportata o una sostituzione se il suo flusso deve servire altri negozi; aggiungere soltanto una colonna negozio non corregge il resto del flusso.
Quando un'integrazione necessaria richiede una gestione personalizzata dell'ambito negozio, il servizio PrestaShop Custom Module Development Service realizza una soluzione secondo specifiche concordate.
Configuration::get() e Configuration::updateValue() deducono il negozio o gruppo corrente quando gli argomenti di ambito sono omessi. Gli ID espliciti sono utili quando il contesto di esecuzione differisce dalla destinazione. Scritture globali, contesto errato, query senza ambito e collisioni di cache richiedono diagnosi separate.
Una riga di configurazione specifica del negozio può funzionare con id_shop_group impostato a NULL. Una sola riga globale può essere un valore predefinito ereditato. Prova letture e scritture previste prima di dichiarare uno dei due stati un bug e correggi il percorso applicativo anziché inserire manualmente righe di configurazione.
La compatibilità è specifica per funzionalità. Per esempio, le normali impostazioni di SEO Revolution e il wrapper di configurazione di Financial Revolution usano percorsi di configurazione globali. Conferma l'ambito di ogni funzionalità prima di aspettarti impostazioni indipendenti per negozio.
Verifica SEO e prestazioni per ogni vetrina
Per pagine che vuoi indicizzare separatamente, usa URL canonici deliberati all'interno del negozio corrispondente. Usa un canonical tra domini solo quando intendi consolidare. Limita la sitemap di ogni negozio agli URL previsti e verifica le proprietà Search Console pertinenti.
Le alternative linguistiche del core riguardano le lingue nel negozio corrente. Le pagine equivalenti tra negozi separati richiedono una propria mappatura tra negozi. È consigliato hreflang per le alternative linguistiche e regionali, con autoreferenze, URL assoluti e link reciproci tra pagine equivalenti. Un x-default facoltativo può puntare a una destinazione di fallback adatta.
Se ti servono gruppi di lingue generati, Hreflang Tags Manager offre un'anteprima di verifica e gruppi per le lingue attive, con gruppi separati tra negozi e domini. Non emette tag per negozi con una sola lingua attiva. Prima di sceglierlo, verifica in staging i link reciproci richiesti tra pagine equivalenti di negozi diversi, i tipi di pagina supportati e l'output della sitemap. Gruppi linguistici separati per negozio non dimostrano che esista la mappatura richiesta tra negozi.
I link di ritorno mancanti possono far ignorare quelle annotazioni mentre le relazioni reciproche valide continuano a funzionare. Hreflang non è un prerequisito per l'indicizzazione né una garanzia di posizionamento. Segui le indicazioni Google sulle pagine localizzate ed esamina il gruppo renderizzato.
Misura query del catalogo, join delle associazioni, caricamento della configurazione e uso della cache sul tuo carico di lavoro. Il core mantiene in cache nel processo la configurazione caricata; le chiamate a Configuration::get() non generano ogni volta una nuova query al database. I valori predefiniti globali significano anche che non serve necessariamente una riga di configurazione per negozio.
Usa EXPLAIN per le query lente ed esamina gli indici compositi esistenti prima di aggiungere un indice id_shop. L'archiviazione della cache dipende da chiavi, contesti e invalidazione, quindi la pianificazione della capacità richiede misure anziché un moltiplicatore per numero di negozi. Consulta la guida alle prestazioni.
Risolvi i problemi di ambito e mantieni ogni negozio
Un prodotto appare nel negozio sbagliato
Controlla le associazioni nell'editor del prodotto e verifica l'insieme delle righe. Entrambi gli esempi SQL usano il prefisso di tabella ps_; sostituiscilo con quello della tua installazione. Questo esempio di sola lettura usa il prodotto 123; inserisci un ID prodotto reale:
SELECT id_product, id_shop, active
FROM ps_product_shop
WHERE id_product = 123;
Correggi le associazioni tramite l'editor supportato, poi verifica appartenenza alle categorie, visibilità ed elenchi in cache.
Un salvataggio interessa entrambi i negozi
Ricontrolla contesto attivo, ambito del campo, valori predefiniti ereditati e archiviazione del modulo. Confronta i valori prima e dopo in due contesti. Una funzionalità solo globale può funzionare come previsto.
Un carrello appare in più negozi
Verifica prima l'impostazione Share orders del gruppo. Esamina nel browser nome, dominio e percorso effettivi del cookie, poi gli URL dei negozi. La condivisione voluta del carrello nel gruppo e un difetto di isolamento richiedono correzioni diverse. Il core ricava l'ambito dei cookie; non esiste un campo generale per il dominio dei cookie in Parametri Negozio → Generale.
Un'importazione o un URL arriva nel negozio sbagliato
Seleziona il negozio di destinazione prima di aprire lo strumento di importazione. Prova una piccola importazione e verifica le associazioni. Per i reindirizzamenti, verifica DNS, virtual host, certificati, header del proxy, impostazioni canoniche e queste righe URL:
SELECT s.id_shop, s.name, su.domain, su.domain_ssl,
su.physical_uri, su.virtual_uri, su.main, su.active
FROM ps_shop s
JOIN ps_shop_url su ON su.id_shop = s.id_shop
ORDER BY s.id_shop, su.main DESC;
Controlli di routine
- Carica ogni vetrina e verifica tema, prodotti, lingua, prezzi e reindirizzamenti.
- Prova checkout, metodi di pagamento, effetti sulle scorte e negozio registrato negli ordini.
- Rivedi impostazioni dei moduli specifiche del negozio, log, domini mittente ed email di test.
- Controlla risposte delle sitemap e associazioni dei prodotti dopo le importazioni.
- Dopo un aggiornamento di modulo o core, ripeti i controlli in ogni negozio, rivedi gli URL e invalida le cache interessate.
Pianifica il passaggio e consegna la gestione operativa
- Registra quali modifiche a catalogo, clienti e ordini sono avvenute dopo la creazione della copia di staging. Concorda come trasferire in produzione la configurazione verificata senza sovrascrivere tali modifiche con un vecchio database.
- Scegli la finestra di passaggio e designa chi controlla importazioni e scritture. Decidi se sospendere alcune scritture e come riconciliare pagamenti, ordini e aggiornamenti di magazzino in corso.
- Prova il ripristino del backup completo e definisci le condizioni di errore che attivano il rollback. Se arrivano nuovi ordini dopo il passaggio, conservali e riconciliali prima del ripristino; un backup precedente al lancio non contiene quegli ordini.
- Usa i controlli di routine sopra come criteri di accettazione del rilascio per ogni negozio. Assegna un responsabile a ogni controllo e registra il risultato prima di affidare la nuova vetrina al personale.
Cosa chiedere al tuo sviluppatore o all'agenzia
- Quali funzionalità necessarie dei moduli sono state verificate in contesti negozio separati e quali restano globali per progettazione?
- Come mantiene ogni connettore l'appartenenza al negozio durante attività pianificate, callback e riferimenti esterni?
- Puoi dimostrare il rollback e rendere conto degli ordini ricevuti dopo il passaggio?
- Quali dipendenti possono eseguire modifiche a livello di gruppo o globali e dove sono la mappa dei negozi e le istruzioni operative?
Fai provare al personale una modifica di prezzo specifica di un negozio e conferma il risultato nell'altra vetrina prima di iniziare le modifiche ordinarie. Registra chi autorizza le modifiche ai campi condivisi, così un nuovo membro del team saprà quando una modifica apparentemente locale richiede una revisione più ampia.
Domande dei titolari
I clienti manterranno le password quando riuniamo negozi separati?
Richiedi che la prova di migrazione dimostri l'accesso agli account esistenti e concorda come gestire indirizzi email duplicati. Non promettere la continuità degli account solo abilitando il multinegozio e non unire identità soltanto perché gli indirizzi email coincidono.
Un solo back office significa che ogni dipendente vede tutti i negozi?
Rivedi permessi dei dipendenti e associazioni ai negozi, poi accedi come dipendente con restrizioni e verifica l'accesso a ordini, clienti e schermate dei moduli. Controlla anche le esportazioni: una schermata limitata non basta se la sua esportazione include record di un altro negozio.
Possiamo cedere o vendere un marchio in seguito?
Pianifica un'estrazione prima di adottare entità condivise. Chiedi un'esportazione con ambito definito e una prova che copra ordini, clienti, associazioni del catalogo, contenuti multimediali e riferimenti esterni di quel negozio, concordando la gestione dei record usati da altri negozi.
Serve un account di pagamento per ogni negozio?
Controlla le entità commerciali e l'accordo con il fornitore, poi verifica credenziali e instradamento delle notifiche specifici del negozio nel connettore. L'amministrazione centralizzata non determina quale azienda riceva i fondi; riconcilia ogni pagamento di test con l'account e l'ordine previsti.