Ir al contenido principal

Hreflang vs Canonical: cómo funcionan juntos en el SEO internacional

Comprende la relación entre hreflang y etiquetas canonical. Aprende cuándo entran en conflicto y cómo evitar errores.

Hreflang Generator Team

¿Qué es una etiqueta Canonical?

Antes de analizar cómo interactúan hreflang y canonical, conviene establecer qué hace cada uno de forma independiente.

Una etiqueta canonical (<link rel="canonical">) indica a los motores de búsqueda cuál es la URL preferida de una página para fines de indexación. Cuando múltiples URLs ofrecen contenido idéntico o muy similar, la etiqueta canonical consolida las señales de posicionamiento en una única URL, evitando la dilución por contenido duplicado.

<link rel="canonical" href="https://example.com/en/products/widget/" />

Por ejemplo, si tu página de producto es accesible tanto en https://example.com/en/products/widget/ como en https://example.com/en/products/widget/?ref=newsletter, la etiqueta canonical en ambas URLs debería apuntar a la versión limpia sin el parámetro de consulta. Esto le dice a Google: "Trata estas como la misma página y consolida su fuerza de posicionamiento."

Las etiquetas canonical son una señal fuerte que Google generalmente respeta (aunque no es una directiva -- Google puede anularla si detecta inconsistencias).

¿Qué es Hreflang?

Hreflang (<link rel="alternate" hreflang="...">) indica a los motores de búsqueda que una página tiene versiones equivalentes en otros idiomas o regiones. No controla la indexación -- controla qué versión aparece en los resultados de búsqueda según el idioma y la ubicación del usuario.

<link rel="alternate" hreflang="en" href="https://example.com/en/products/widget/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/produkte/widget/" />
<link rel="alternate" hreflang="es" href="https://example.com/es/productos/widget/" />

Hreflang dice: "Estas tres páginas son el mismo contenido para audiencias diferentes." No dice nada sobre qué URL debería indexarse.

Cómo Hreflang y Canonical trabajan juntos

Aquí es donde surge la mayor confusión. Hreflang y canonical cumplen propósitos complementarios pero diferentes:

| Señal | Propósito | Alcance | |-------|-----------|---------| | Canonical | "Esta es la URL preferida para indexación" | Dentro de un solo idioma | | Hreflang | "Estas son las variantes de idioma/región" | Entre idiomas |

La regla crítica es: cada versión localizada debe tener un canonical autorreferencial que apunte a sí misma. La página en inglés tiene su canonical apuntando a la URL en inglés. La página en alemán tiene su canonical apuntando a la URL en alemán. La página en español tiene su canonical apuntando a la URL en español.

Esta es la implementación correcta para una página disponible en tres idiomas:

Página en inglés en https://example.com/en/products/widget/:

<link rel="canonical" href="https://example.com/en/products/widget/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/products/widget/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/produkte/widget/" />
<link rel="alternate" hreflang="es" href="https://example.com/es/productos/widget/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/products/widget/" />

Página en alemán en https://example.com/de/produkte/widget/:

<link rel="canonical" href="https://example.com/de/produkte/widget/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/products/widget/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/produkte/widget/" />
<link rel="alternate" hreflang="es" href="https://example.com/es/productos/widget/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/products/widget/" />

Página en español en https://example.com/es/productos/widget/:

<link rel="canonical" href="https://example.com/es/productos/widget/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/products/widget/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/produkte/widget/" />
<link rel="alternate" hreflang="es" href="https://example.com/es/productos/widget/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/products/widget/" />

Observa el patrón: el canonical siempre es autorreferencial, mientras que el conjunto de hreflang es idéntico en las tres páginas (garantizando reciprocidad completa).

Cuando Hreflang y Canonical entran en conflicto

Los conflictos ocurren cuando la etiqueta canonical de una página apunta a una URL en un idioma diferente. Este es el error más dañino en la implementación de etiquetas de SEO internacional.

El error del Canonical entre idiomas

Considera esta implementación incorrecta:

Página en alemán en https://example.com/de/produkte/widget/:

<!-- INCORRECTO: el canonical apunta a la versión en inglés -->
<link rel="canonical" href="https://example.com/en/products/widget/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/produkte/widget/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/products/widget/" />

Esto le dice a Google: "La página en alemán es un duplicado de la página en inglés. Por favor, indexa solo la URL en inglés." Google entonces desindexará la página en alemán y mostrará la URL en inglés a los usuarios alemanes. El hreflang se ignora porque el canonical ha declarado efectivamente que la página en alemán no existe desde una perspectiva de indexación.

Este error es sorprendentemente común y a menudo proviene de:

Cómo gestiona Google el conflicto

Cuando Google encuentra un canonical entre idiomas con hreflang:

  1. La señal canonical gana porque es una señal más fuerte que hreflang
  2. Google consolida la indexación en la URL canonical (la página en inglés)
  3. La página en alemán desaparece efectivamente del índice de Google
  4. Los usuarios alemanes que buscan en alemán ven la página en inglés en los resultados (o ningún resultado si la página en inglés no posiciona para consultas en alemán)
  5. Toda la autoridad de posicionamiento de los backlinks hacia la página en alemán fluye a la página en inglés, que no puede posicionarse en resultados de búsqueda en alemán de todas formas

El resultado: pierdes tu presencia de búsqueda en alemán por completo.

Patrones de uso correcto

Patrón 1: Canonical autorreferencial por idioma

Cada página localizada tiene un canonical que apunta a sí misma. Este es el patrón correcto para la gran mayoría de sitios internacionales.

/en/page/ -> canonical: /en/page/
/de/page/ -> canonical: /de/page/
/es/page/ -> canonical: /es/page/

Las tres páginas comparten el mismo conjunto completo de hreflang. Cada página se indexa de forma independiente y posiciona en su respectivo mercado.

Patrón 2: URLs con parámetros y Canonical diferente

Si tu sitio usa parámetros de consulta para la selección de idioma (por ejemplo, ?lang=de), cada versión de idioma debería igualmente tener un canonical apuntando a una URL limpia -- pero una URL limpia en su propio idioma.

/page/?lang=en -> canonical: /page/?lang=en (o /en/page/ si tienes URLs limpias)
/page/?lang=de -> canonical: /page/?lang=de (o /de/page/ si tienes URLs limpias)

Nunca apuntes el canonical de todos los parámetros de idioma a la URL base sin el parámetro. Eso colapsa todos los idiomas en una sola URL indexada.

Patrón 3: Páginas que realmente son duplicados dentro de un idioma

A veces tienes duplicados genuinos dentro del mismo idioma -- por ejemplo, una página de producto accesible desde dos rutas de categoría diferentes. En este caso, el canonical apunta correctamente a una URL, y el hreflang en esa URL canonical apunta a sus equivalentes en otros idiomas.

/en/category-a/widget/ -> canonical: /en/products/widget/
/en/category-b/widget/ -> canonical: /en/products/widget/
/en/products/widget/   -> canonical: /en/products/widget/ (autorreferencial)
                          hreflang: /en/products/widget/, /de/produkte/widget/, /es/productos/widget/

El hreflang solo necesita existir en la URL canonical. Las páginas duplicadas dentro del mismo idioma no necesitan hreflang porque Google las consolidará a la URL canonical de todas formas.

Diagnóstico de conflictos

Si sospechas conflictos entre hreflang y canonical en tu sitio, busca estos síntomas:

Para auditar tu sitio:

  1. Rastrea tu sitio con una herramienta que extraiga tanto las etiquetas canonical como las de hreflang
  2. Para cada página, verifica que rel="canonical" apunte al mismo dominio y ruta de idioma que la propia página
  3. Verifica que cada URL en cada conjunto de hreflang también tenga un canonical autorreferencial
  4. Comprueba que ninguna etiqueta canonical apunte a una URL en un directorio de idioma diferente

Conclusión

Hreflang y canonical no están en competencia. Resuelven problemas diferentes y siempre deben estar alineados. La regla es sencilla:

Cuando estas dos señales están alineadas, los motores de búsqueda pueden indexar con confianza cada versión localizada de forma independiente y mostrar la versión correcta a la audiencia adecuada. Cuando entran en conflicto, el canonical gana y el hreflang se ignora, lo que típicamente destruye tu visibilidad en búsquedas internacionales.

Usa nuestro Generador de etiquetas Hreflang para construir conjuntos de etiquetas que sigan estos patrones correctos automáticamente. El generador garantiza canonicals autorreferenciales y reciprocidad completa entre todos los idiomas del conjunto.

Related tools