Configuración PrestaShop Multitienda: Guía completa
Todo sobre PrestaShop Multistore — planificación, configuración, catálogo compartido, comportamiento de módulos, consideraciones SEO y errores comunes.
¿Qué es PrestaShop Multistore?
PrestaShop Multistore le permite gestiónar múltiples tiendas en línea desde una única instalación y un solo back office. Código compartido, base de datos compartida, ecosistema de módulos compartido, pero escaparates independientes para sus clientes. Esta funcionalidad existe en PrestaShop desde la versión 1.5 y ha madurado significativamente en las versiones 8.x y 9.x — aunque sigue requiriendo una planificación cuidadosa.
Cuándo realmente necesita Multistore
Varias marcas desde un solo back office. Usted vende electrónica bajo “TechDirect” y audio bajo “SoundElite”. Ambas comparten su almacén y algunos productos, pero cada una tiene su propio sitio, tema y precios. Su equipo lo gestióna todo desde un único panel de administración.
Diferentes países con catálogos separados. Sus tiendas de Alemania y Francia comparten algunos productos pero difieren en variedad, precios, reglas de envío y contenido CMS. Multistore permite que cada tienda mantenga su propio catálogo mientras comparte lo común.
B2B y B2C desde una sola instalación. La tienda minorista muestra precios con impuestos incluidos y envío estándar. La tienda mayorista muestra precios netos, exige cantidades mínimas y tiene tarifas negociadas. Un solo catálogo de productos, dos experiencias de compra completamente diferentes.
Tienda outlet o de liquidación. Un escaparate separado para productos con descuento, con su propio tema, que obtiene los datos de la misma base de datos de productos.
Cuándo Multistore NO es la respuesta
- Negocios sin relación: Suministros para mascotas y maquinaria industrial no comparten nada. Las instalaciones separadas son más sencillas.
- Necesidad de diferentes versiones de PS: Multistore requiere que todas las tiendas estén en la misma versión.
- Requisitos de módulos incompatibles: Si las tiendas necesitan módulos incompatibles, las instalaciones separadas evitan conflictos.
- Aislamiento de riesgo: Un problema en la base de datos de multistore afecta a todas las tiendas. Las instalaciones separadas contienen el radio de impacto.
- Solo necesita varios idiomas: PrestaShop gestióna varios idiomas de forma nativa dentro de una sola tienda — no necesita multistore.
Antes de activar multistore, haga una lista de lo que desea compartir entre tiendas y lo que debe permanecer separado. Si la lista de “compartido” es corta y la de “separado” es larga, le conviene más usar instalaciones independientes.
Planificación de su arquitectura
Grupos de tiendas
PrestaShop organiza multistore como Grupo de tiendas → Tienda. Los grupos definen reglas de uso compartido que son difíciles de cambiar después:
- Compartir clientes: ¿Puede un cliente que se registra en la Tienda A también iniciar sesión en la Tienda B?
- Compartir cantidades disponibles: ¿Una venta en la Tienda A reduce el stock visible en la Tienda B?
Catálogos compartidos vs. separados
Los productos pueden asociarse a todas las tiendas o solo a tiendas específicas. Incluso los productos compartidos pueden tener precios, descripciones, imágenes y metadatos SEO diferentes por tienda. Las categorías funcionan de la misma manera — compartidas o específicas de cada tienda, con nombres y descripciones personalizados por tienda.
Estrategia de URLs
- Dominios separados (
brand-a.com,brand-b.com) — ideal para marcas distintas. Requiere certificados SSL individuales o un certificado multidominio. - Subdominios (
de.myshop.com,fr.myshop.com) — natural para variantes regionales. Puede usar un certificado SSL wildcard. - Subdirectorios (
myshop.com/wholesale/) — la configuración más sencilla, un solo certificado SSL, pero limita la flexibilidad SEO.
Arquitectura de la base de datos
Multistore utiliza una única base de datos con columnas id_shop que diferencian los datos. Una sola copia de seguridad cubre todas las tiendas, pero una corrupción también afecta a todas, y las consultas conllevan la sobrecarga del filtrado por tienda.
Activación y configuración de Multistore
Paso 1: Activar la funcionalidad
Vaya a Advanced Parameters → General (PS 1.7.x) o Advanced Parameters → Multistore (PS 8.x/9.x). Establezca Enable Multistore en Yes. Aparecerá un selector de contexto de tienda en la cabecera del back office.
Paso 2: Crear un grupo de tiendas
En Advanced Parameters → Multistore, haga clic en Add a new shop group. Defina el nombre del grupo y las opciones de uso compartido (clientes, cantidades). Recuerde: estas opciones son difíciles de cambiar después.
Paso 3: Añadir una nueva tienda
Haga clic en Add a new shop. Elija el nombre, el grupo, la categoría raíz y, opcionalmente, importe datos de una tienda existente para ahorrar tiempo de configuración.
Paso 4: Configurar las URLs
Haga clic en el nombre de la tienda y añada una URL. Ejemplos:
# 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/
Paso 5: Configuración del servidor
Para dominios o subdominios separados, todos los dominios deben apuntar al mismo directorio de PrestaShop en la configuración de su servidor web. Para URLs virtuales (subdirectorios), normalmente no se necesita configuración adicional del servidor — PrestaShop gestióna el enrutamiento mediante .htaccess.
Después de configurar las URLs, limpie siempre la caché de PrestaShop. El enrutamiento de URLs se almacena en caché de forma agresiva, y las entradas obsoletas provocan bucles de redirección.
Gestión de contenido entre tiendas
El selector de contexto de tienda
El menú desplegable en la parte superior del back office controla a qué tienda se aplican sus cambios: All shops, un grupo específico o una tienda específica. La regla de oro: trabaje siempre en el contexto más específico posible. Editar en “All shops” cuando quería cambiar solo una tienda es el error más común en multistore.
Herencia de configuración
Los valores establecidos en “All shops” se convierten en valores por defecto. Las tiendas individuales pueden sobreescribirlos. En la página de configuración, las casillas de verificación junto a los campos controlan si el campo utiliza el valor heredado o una personalización específica de la tienda. Desmarque la casilla para establecer un valor personalizado para la tienda actual.
El comportamiento de las casillas de herencia ha cambiado entre versiones de PrestaShop. Pruebe siempre con su versión específica para entender qué estado significa “heredado” y cuál significa “personalizado”.
Productos y categorías
Comportamientos clave:
- Crear un producto en el contexto “All shops” lo hace disponible en todas las tiendas.
- Crearlo en el contexto de una tienda específica lo limita a esa tienda. Puede asociarlo con otras más adelante.
- Desactivar un producto en una tienda no afecta a las demás.
- Eliminarlo en “All shops” lo borra permanentemente de todas las tiendas.
- El comportamiento del stock depende de la configuración de uso compartido del grupo.
Tema, idioma y moneda por tienda
Cada tienda puede tener su propio tema, su propio conjunto de idiomas habilitados y sus propias monedas. Seleccione primero el contexto de la tienda y luego configure en Design → Theme & Logo o International → Localization.
Comportamiento de los módulos en Multistore
Cómo funcionan los módulos compatibles con Multistore
Un módulo correctamente desarrollado almacena la configuración por tienda (usando Configuration::updateValue(), que respeta el contexto de tienda), verifica Shop::getContextShopID() en los hooks, y maneja correctamente el contexto “All shops”. La tabla ps_configuration almacena valores por tienda con una columna id_shop.
Problemas comunes con módulos
- Configuración solo global: El módulo guarda los ajustes sin
id_shop— cambiar una tienda las cambia todas. - ID de tienda codificado en duro: El módulo asume
id_shop = 1, ignorando las tiendas secundarias. - Falta de filtro por tienda en las consultas: Devuelve datos mezclados de todas las tiendas.
- Colisiones de caché: Claves de caché sin el ID de tienda sirven datos de la tienda incorrecta.
Verificación de compatibilidad Multistore de un módulo
- ¿La descripción menciona “multistore compatible”?
- ¿Existe documentación sobre configuración por tienda?
- Después de instalarlo, ¿la página de configuración muestra casillas de herencia cuando está en el contexto de una tienda específica?
- Prueba: establezca configuraciónes diferentes en dos tiendas y verifique que ambas interfaces reflejan la diferencia.
Un módulo que no es compatible con multistore no necesariamente causará problemas — pero todas las tiendas compartirán su configuración. Eso puede ser aceptable o no, dependiendo de la función del módulo.
Consideraciones SEO
URLs canónicas
Cada página de cada tienda debe tener una URL canónica que apunte a sí misma. Verifique que un producto en shop-a.com tenga su canónica apuntando a shop-a.com, no a shop-b.com. Para contenido idéntico entre tiendas, decida cuál es la fuente principal e implemente canónicas entre dominios.
Hreflang para tiendas multi-idioma
Si las tiendas se dirigen a diferentes idiomas o regiones, las etiquetas hreflang indican a los motores de búsqueda qué versión mostrar a cada audiencia:
<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 gestióna hreflang para variantes de idioma dentro de una sola tienda, pero no entre tiendas separadas. Necesitará un módulo o modificaciones en las plantillas para hreflang entre tiendas. Las etiquetas deben ser bidirecciónales — si la Tienda A referencia a la Tienda B, la Tienda B debe referenciar a la Tienda A.
Sitemaps y contenido duplicado
Cada tienda necesita su propio sitemap.xml con solo sus propias URLs. Registre cada tienda por separado en Google Search Console. Para evitar penalizaciones por contenido duplicado: personalice las descripciones de los productos por tienda, use etiquetas canónicas para el contenido compartido y diferencie las páginas de categorías con descripciones únicas.
Para tiendas multi-idioma en dominios separados, las etiquetas hreflang son obligatorias, no opcionales. Sin ellas, los motores de búsqueda pueden indexar el idioma incorrecto para cada mercado.
Implicaciones de rendimiento
Multistore añade sobrecarga en tres áreas:
- Tablas de configuración: N filas por ajuste (una por tienda) en lugar de una. Más datos en cada consulta de configuración.
- Consultas SQL: Prácticamente cada consulta añade una cláusula
WHERE id_shop = X. Sin los índices adecuados, esto se ralentiza a medida que la base de datos crece. - Huella de caché: Cada tienda tiene sus propias entradas de caché para plantillas, configuraciónes y listados. La memoria escala con el número de tiendas, y el calentamiento de la caché lleva más tiempo.
Para Redis/Memcached, verifique que los prefijos de las claves de caché incluyan el ID de tienda para evitar fugas de datos entre tiendas. Monitorice la base de datos con estas consultas:
# 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
);
Problemas comunes de Multistore
Productos en la tienda equivocada
Causa: El producto fue creado en el contexto “All shops”. Solución: Cambie al contexto de la tienda no deseada y desactive o elimine la asociación del producto. Verifique con:
SELECT ps.id_product, ps.id_shop, ps.active
FROM ps_product_shop ps WHERE ps.id_product = 123;
Cambios de configuración que afectan a todas las tiendas
Causa: Estaba en el contexto “All shops”, o el módulo almacena los valores de forma global. Compruebe el almacenamiento:
SELECT id_shop, name, value FROM ps_configuration
WHERE name = 'MODULE_SETTING_NAME' ORDER BY id_shop;
Si solo hay una fila con id_shop = NULL, el módulo almacena de forma global. Contacte con el proveedor o cree manualmente las entradas por tienda.
El módulo no guarda configuración por tienda
Causa: El módulo usa Configuration::updateGlobalValue() en lugar de Configuration::updateValue(). Requiere una corrección en el código del módulo o una actualización del proveedor.
Carrito mezclado entre tiendas
Causa: El dominio de la cookie está configurado de forma demasiado amplia (por ejemplo, .myshop.com en lugar de shop-a.myshop.com). Corríjalo en Shop Parameters → General — establezca el dominio de la cookie con el subdominio específico de cada tienda.
La importación coloca los productos en la tienda equivocada
Causa: La herramienta de importación respeta el contexto actual. Seleccione siempre la tienda de destino antes de abrir la página de importación. Después de importar, verifique las entradas en ps_product_shop.
Bucles de redirección después de añadir una tienda
Causa: Configuración incorrecta de la URL o .htaccess obsoleto. Solución: regenere el .htaccess desde los ajustes de rendimiento, verifique las entradas en ps_shop_url y asegúrese de que la configuración SSL sea consistente:
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;
Lista de verificación de mantenimiento de Multistore
Semanal
- Verifique que el escaparate de cada tienda carga correctamente (sin redirecciónes, sin errores)
- Compruebe que los pedidos recientes están asignados a la tienda correcta
- Pruebe el flujo de checkout en cada tienda
Mensual
- Audite las asociaciones de productos — ¿hay productos en tiendas incorrectas?
- Revise las configuraciónes por tienda cambiando a cada contexto
- Compruebe los registros de errores de cada tienda
- Verifique que los sitemaps estén actualizados y accesibles
- Pruebe el envío de correos electrónicos desde cada tienda
- Monitorice el crecimiento del tamaño de la base de datos
Después de actualizar módulos
- Compruebe la página de configuración del módulo en el contexto de cada tienda
- Verifique el comportamiento del front-end en cada tienda
- Confirme que la configuración por tienda se guarda de forma independiente
- Limpie las cachés de todas las tiendas
Después de actualizar PrestaShop
- Pruebe todas las tiendas inmediatamente — las regresiones en multistore son frecuentes
- Vuelva a comprobar la configuración de URLs
- Regenere el
.htaccess - Pruebe el checkout completo en cada tienda
Consideraciones finales
PrestaShop Multistore centraliza las operaciónes cuando se ajusta a sus necesidades, pero añade complejidad en todos los aspectos. Los comerciantes que tienen éxito lo tratan como una decisión de arquitectura, no como un simple interruptor de funcionalidad. Planífiquelo bien, manténgalo con cuidado y tenga siempre copias de seguridad.
More guides available
Browse our knowledge base for more practical PrestaShop tutorials, or reach out if you need help.