PrestaShop tiene dos conceptos que se parecen y no son lo mismo: varios idiomas dentro de una tienda, y varias tiendas dentro de una instalación (multitienda). El hreflang se comporta de forma distinta en cada caso, y la mayoría de problemas vienen de tratar el segundo como si fuera el primero.
Paso previo: URLs amigables y prefijo de idioma
Antes de tocar hreflang hay que asegurarse de que cada idioma tiene su propia URL. Si tu tienda distingue el idioma por un parámetro tipo ?id_lang=2, no hay nada que etiquetar: para Google es la misma URL con un parámetro, no dos versiones.
- 1.Ve a Parámetros de la tienda → Tráfico y SEO y activa las URLs amigables.
- 2.En Internacional → Localización → Idiomas comprueba que cada idioma está activo y tiene su código ISO correcto. Ese código es el que acaba en la etiqueta hreflang.
- 3.Confirma que las URLs quedan como ejemplo.com/es/categoria y ejemplo.com/fr/categorie. Si sigues viendo id_lang en la barra de direcciones, regenera el .htaccess desde Tráfico y SEO.
Revisa también el idioma por defecto. En algunas instalaciones el idioma principal se sirve sin prefijo y con prefijo a la vez, y las dos URLs responden 200. Eso es contenido duplicado antes incluso de hablar de hreflang: decide una y redirige la otra.
Caso 1: varios idiomas en una sola tienda
Es el escenario sencillo. Con las URLs amigables activas y los idiomas correctamente configurados, PrestaShop conoce todas las variantes de cada producto, categoría y página CMS, porque son la misma entidad en la base de datos con distintas traducciones.
Aun así, PrestaShop no siempre imprime las etiquetas por sí solo según la versión y el tema. Comprueba el código fuente de una ficha de producto: si no ves etiquetas de alternativa en el head, necesitas un módulo. Hay opciones gratuitas que cubren este caso generando el grupo a partir de los idiomas activos de la tienda.
Caso 2: multitienda con dominios separados
Aquí está el problema real. Si tienes ejemplo.es y ejemplo.fr como tiendas distintas dentro del multitienda, cada una conoce solo sus propios idiomas. Ninguna sabe que la otra existe, así que ningún mecanismo automático puede generar el grupo completo: por defecto el hreflang cubre los idiomas dentro de una misma tienda, no las tiendas entre sí.
La solución sin módulo de pago es construir el grupo en la plantilla, consultando la tabla de URLs de tienda. Sobrescribe head.tpl en tu tema hijo:
{* themes/tu-tema-hijo/templates/_partials/head.tpl *}
{* Grupo hreflang entre tiendas del multitienda.
$ruta debe ser la misma ruta canónica en cada dominio. *}
{assign var=ruta value=$urls.current_url|replace:$urls.base_url:''}
<link rel="alternate" hreflang="es-ES"
href="https://ejemplo.es/{$ruta}" />
<link rel="alternate" hreflang="fr-FR"
href="https://ejemplo.fr/{$ruta}" />
<link rel="alternate" hreflang="x-default"
href="https://ejemplo.es/{$ruta}" />Este bloque asume que la misma ruta existe en las dos tiendas. En multitienda es habitual que el catálogo no sea idéntico: un producto que solo vendes en España generará en la tienda francesa una etiqueta hacia un 404. Condiciona el bloque a las páginas comunes —home, categorías principales, CMS— o mantén el mapeo por identificador de producto.
Módulos: cuándo compensan
En PrestaShop los módulos son el equivalente a los plugins de WordPress, con una diferencia importante: los que resuelven bien el multidominio suelen ser de pago. Compensan cuando el catálogo difiere entre tiendas, porque gestionan las excepciones producto a producto, que es justo lo que la plantilla no puede hacer sin volverse inmanejable.
- •Si tienes un solo dominio con varios idiomas: un módulo gratuito basta, o incluso el comportamiento nativo según tu versión.
- •Si tienes multitienda con dominios y catálogo idéntico: la plantilla es suficiente y no añade dependencias.
- •Si tienes multitienda con catálogos distintos: módulo de pago. Mantener las excepciones a mano acaba generando más errores de los que resuelve.
Los tres fallos típicos de PrestaShop
| Síntoma | Causa | Solución |
|---|---|---|
| Las etiquetas apuntan a URLs con id_lang | URLs amigables desactivadas o .htaccess sin regenerar | Activa URLs amigables y regenera el .htaccess |
| Cada tienda declara solo sus idiomas | Multitienda: cada tienda ignora a las demás | Grupo manual en head.tpl o módulo multidominio |
| Código de idioma incorrecto | ISO mal puesto en Localización → Idiomas | Corrige el ISO; se propaga a todas las etiquetas |
Valida el grupo completo, no una URL
En PrestaShop el fallo más caro es el del multitienda, y es invisible mirando una sola página: cada tienda se ve perfectamente coherente por separado. Solo comparando las URLs de todas las tiendas a la vez se aprecia que ninguna declara a las otras.
Prueba la herramienta gratis
Analiza tus URLs con Validador Hreflang de iRankly. Sin registro, sin tarjeta.
Si usas otra plataforma, o quieres el detalle conceptual de qué hace cada atributo: