Hreflang

El atributo hreflang es la señal técnica que indica a los buscadores qué versión de una página debe mostrarse a cada usuario según su idioma y su región. Sin hreflang, un sitio multiidioma es un conjunto de versiones que los buscadores no saben cómo relacionar entre sí.


Para qué sirve hreflang exactamente

Hreflang resuelve dos problemas simultáneos:

1. Evitar que las versiones idiomáticas se traten como contenido duplicado. Una página en español y su traducción al inglés tienen contenido equivalente pero no idéntico. Sin hreflang, los buscadores pueden verlas como duplicados y penalizar una o ambas.

2. Mostrar la versión correcta a cada usuario. Cuando alguien en Alemania busca un término, Google debe mostrarle la versión en alemán del contenido, no la versión en español. Hreflang es la señal que permite esa decisión.


Sintaxis completa

Cada página que tiene versiones en otros idiomas debe incluir en su <head> un conjunto de etiquetas <link rel="alternate" hreflang="...">, una por cada versión existente incluyendo ella misma:

<!-- En la versión española: https://www.ejemplo.com/es/articulo/ -->
<link rel="alternate" hreflang="es"    href="https://www.ejemplo.com/es/articulo/" />
<link rel="alternate" hreflang="en"    href="https://www.ejemplo.com/en/article/" />
<link rel="alternate" hreflang="de"    href="https://www.ejemplo.com/de/artikel/" />
<link rel="alternate" hreflang="fr"    href="https://www.ejemplo.com/fr/article/" />
<link rel="alternate" hreflang="x-default" href="https://www.ejemplo.com/en/article/" />

La misma versión con especificidad regional:

<!-- Español genérico + España + México -->
<link rel="alternate" hreflang="es"    href="https://www.ejemplo.com/es/articulo/" />
<link rel="alternate" hreflang="es-ES" href="https://www.ejemplo.com/es-es/articulo/" />
<link rel="alternate" hreflang="es-MX" href="https://www.ejemplo.com/es-mx/articulo/" />
<link rel="alternate" hreflang="x-default" href="https://www.ejemplo.com/en/article/" />

Los valores de idioma y región

Los valores de hreflang siguen el estándar BCP 47:

  • Solo idioma: esendefrptjazh
  • Idioma + región: es-ESes-MXen-USen-GBpt-BRpt-PTzh-TWzh-CN
  • Valor especial: x-default — versión para usuarios cuyo idioma o región no coincide con ninguna de las versiones disponibles

Cuándo usar solo idioma vs. idioma + región:

Usar solo idioma (es) cuando hay una única versión para todos los hispanohablantes. Usar idioma + región (es-ESes-MX) cuando hay versiones específicas para distintos países con contenido diferenciado.

Es posible combinar: tener una versión genérica en español (es) y versiones específicas para algunos países (es-MX para México). En ese caso, los usuarios de México verán la versión mexicana; el resto de hispanohablantes verán la versión genérica.


La regla de reciprocidad

Esta es la regla más importante de hreflang y la que se incumple con más frecuencia.

Si la página A declara que B es su alternativa en inglés, la página B debe declarar que A es su alternativa en español. Todas las versiones deben apuntar a todas las demás versiones, incluyendo a sí mismas.

Correcto:

Página española (/es/articulo/) declara:

<link rel="alternate" hreflang="es" href="https://www.ejemplo.com/es/articulo/" />
<link rel="alternate" hreflang="en" href="https://www.ejemplo.com/en/article/" />

Página inglesa (/en/article/) declara:

<link rel="alternate" hreflang="en" href="https://www.ejemplo.com/en/article/" />
<link rel="alternate" hreflang="es" href="https://www.ejemplo.com/es/articulo/" />

Incorrecto: La página española apunta a la inglesa, pero la inglesa no apunta a la española. Google ignora la señal unilateral.


El valor x-default

x-default indica la versión que debe mostrarse cuando ninguna de las versiones disponibles coincide con el idioma o la región del usuario.

Usos habituales:

  • Apuntar a la versión en inglés (el idioma internacional de facto en la web).
  • Apuntar a una página de selección de idioma.
  • Apuntar a la versión principal del sitio si no hay una versión en inglés.

Un solo x-default por conjunto de versiones. No tiene sentido tener varios x-default apuntando a páginas distintas.


Tres formas de implementar hreflang

Método 1: en el <head> del HTML

El más habitual. Las etiquetas <link> se incluyen en el <head> de cada página. Es el método más fácil de implementar con un CMS.

<head>
  <link rel="alternate" hreflang="es" href="https://www.ejemplo.com/es/pagina/" />
  <link rel="alternate" hreflang="en" href="https://www.ejemplo.com/en/page/" />
  <link rel="alternate" hreflang="x-default" href="https://www.ejemplo.com/en/page/" />
</head>

Método 2: en el sitemap XML

Las etiquetas hreflang se pueden incluir en el sitemap como atributos de las entradas de URL. Este método es útil para sitios grandes donde añadir etiquetas en el HTML de cada página es inviable.

<url>
  <loc>https://www.ejemplo.com/es/pagina/</loc>
  <xhtml:link rel="alternate" hreflang="es" href="https://www.ejemplo.com/es/pagina/"/>
  <xhtml:link rel="alternate" hreflang="en" href="https://www.ejemplo.com/en/page/"/>
  <xhtml:link rel="alternate" hreflang="x-default" href="https://www.ejemplo.com/en/page/"/>
</url>
<url>
  <loc>https://www.ejemplo.com/en/page/</loc>
  <xhtml:link rel="alternate" hreflang="es" href="https://www.ejemplo.com/es/pagina/"/>
  <xhtml:link rel="alternate" hreflang="en" href="https://www.ejemplo.com/en/page/"/>
  <xhtml:link rel="alternate" hreflang="x-default" href="https://www.ejemplo.com/en/page/"/>
</url>

Método 3: en las cabeceras HTTP

Para contenido no HTML (PDFs, archivos de datos), hreflang puede implementarse en las cabeceras HTTP de la respuesta del servidor:

Link: <https://www.ejemplo.com/en/doc.pdf>; rel="alternate"; hreflang="en",
      <https://www.ejemplo.com/es/doc.pdf>; rel="alternate"; hreflang="es"

Errores frecuentes de implementación

Reciprocidad incompleta. Ya descrito. Es el error más habitual y el que más consecuencias tiene.

Hreflang a URLs con noindex. Si la URL de destino tiene la directiva noindex, la señal hreflang se contradice con la señal de indexación. La URL alternativa debe ser indexable.

Hreflang a URLs que redirigen. Si la versión española apunta mediante hreflang a una URL inglesa que redirige a otra URL, la señal llega debilitada. Hreflang debe apuntar siempre a la URL final, no a una intermedia.

Hreflang en páginas sin versión alternativa real. Añadir hreflang a páginas que no tienen traducción (páginas de contacto locales, páginas de política de privacidad específicas de un país) no tiene sentido. Hreflang solo debe implementarse cuando existe una versión alternativa real del contenido.

Mezclar canonical y hreflang incorrectamente. El canonical de la versión española debe apuntar a la URL española. El canonical de la versión inglesa, a la URL inglesa. Nunca debe el canonical de una versión apuntar a otra versión idiomática.

Usar el mismo hreflang para todo el sitio. Algunos CMS mal configurados añaden el mismo bloque hreflang a todas las páginas del sitio, independientemente de si esa página tiene versión en otros idiomas. Esto genera señales incorrectas para páginas que no tienen versiones alternativas.


Hreflang en WordPress

Los plugins principales de SEO para WordPress (Yoast SEO, Rank Math, SEOPress) tienen soporte para hreflang, pero requieren un plugin de traducción para funcionar correctamente: WPML, Polylang o TranslatePress.

La integración entre el plugin de SEO y el plugin de traducción gestiona la generación automática de las etiquetas hreflang con reciprocidad correcta. Implementar hreflang manualmente en WordPress a escala es inviable; la combinación plugin de traducción + plugin de SEO es el enfoque estándar.


Para profundizar