🔗 URLs, dominios y configuracion de tiendas

Actualizado: 2024-12-01

PrestaShop multitienda soporta tres modos de configuracion de URLs: dominios independientes, subdominios y subdirectorios. Cada uno tiene implicaciones diferentes para SEO y mantenimiento.

#Modos de multitienda

ModoEjemploSEOUso tipico
Dominios independientestienda1.com / tienda2.comOptimo — dominios separadosMarcas diferentes, mercados diferentes
Subdominioses.mitienda.com / fr.mitienda.comBueno — Google trata como sitios separadosIdiomas o paises del mismo negocio
Subdirectoriosmitienda.com/es/ mitienda.com/fr/Comparten autoridad del dominioVersiones idiomaticas del mismo catalogo
Mismo dominiomitienda.com (misma URL)Solo una tienda visibleDesarrollo/staging, tiendas B2B ocultas

#Configurar dominios y URLs

Configurar en el BO
text
Preferencias → Multitienda → URL de la tienda

PASOS:
1. Seleccionar la tienda a configurar
2. Añadir nueva URL:
   - Dominio: mitienda.es
   - Dominio SSL: mitienda.es
   - URI fisica: / (raiz del servidor)
   - URI virtual: / (o /es/ para subdirectorio)
   - URL principal: Si (marcar como URL canonica)

EJEMPLO CON SUBDOMINIOS:
  Tienda España:  es.mitienda.com  → URI virtual: /
  Tienda Francia: fr.mitienda.com  → URI virtual: /
  Tienda UK:      en.mitienda.com  → URI virtual: /

EJEMPLO CON SUBDIRECTORIOS:
  Tienda España:  mitienda.com → URI virtual: /es/
  Tienda Francia: mitienda.com → URI virtual: /fr/
  Tienda UK:      mitienda.com → URI virtual: /en/

IMPORTANTE:
- Regenerar .htaccess despues de cada cambio de URL
- Configurar DNS para apuntar todos los dominios al mismo servidor
- Certificado SSL debe cubrir todos los dominios (wildcard o multi-domain)

#SEO y canonical

URLs canonicas en multitienda
php
<?php

// ── PrestaShop genera canonical automaticamente ──
// Cada tienda tiene su propia URL canonica basada en su dominio/URI

// ── Obtener la URL base de una tienda especifica ──
$shop = new Shop($idShop);
$url  = $shop->getBaseURL(true); // true = con SSL
// https://es.mitienda.com/

// ── Generar link de producto para una tienda especifica ──
$link = new Link(null, null, $idShop);
$productUrl = $link->getProductLink($product, null, null, null, null, $idShop);

// ── Hreflang para SEO internacional ──
// En el <head> de cada pagina, añadir:
// <link rel="alternate" hreflang="es" href="https://es.mitienda.com/producto" />
// <link rel="alternate" hreflang="fr" href="https://fr.mitienda.com/produit" />
// <link rel="alternate" hreflang="en" href="https://en.mitienda.com/product" />

// Hook para añadir hreflang:
public function hookDisplayHeader(): string
{
    $shops = Shop::getShops(true);
    $hreflang = '';
    foreach ($shops as $shop) {
        $lang = new Language(Configuration::get('PS_LANG_DEFAULT', null, null, $shop['id_shop']));
        $url  = (new Shop($shop['id_shop']))->getBaseURL(true);
        $hreflang .= '<link rel="alternate" hreflang="' . $lang->iso_code . '" href="' . $url . '" />';
    }
    return $hreflang;
}

#Virtual URL (subdirectorio)

Configurar subdirectorios
text
REQUISITOS
- Todas las tiendas comparten el mismo dominio
- Solo cambia la "URI virtual" (el subdirectorio)

CONFIGURACION:
  Tienda 1: mitienda.com/es/  → URI virtual: /es/
  Tienda 2: mitienda.com/fr/  → URI virtual: /fr/
  Tienda 3: mitienda.com/     → URI virtual: / (raiz = default)

.HTACCESS
- PrestaShop genera las reglas automaticamente
- Boton "Regenerar .htaccess" en Rendimiento
- El RewriteBase debe coincidir con la URI fisica

VENTAJAS
- Un solo dominio y certificado SSL
- Comparten autoridad SEO del dominio
- Facil de configurar

DESVENTAJAS
- URLs mas largas
- Menor separacion visual entre tiendas
- Posibles conflictos de cache
Descargar en Markdown Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.