SEO y Marketing

Hreflang: qué es, cómo se pone y los errores que lo anulan

E
Equip editorial Posicionament-Web
28 oct 2026 8 min 12 visitas

La etiqueta hreflang es una anotación que le indica a Google qué versión de una página corresponde a cada idioma o país, para que enseñe a cada usuario la suya: la catalana a quien busca en catalán, la castellana a quien busca en castellano. No traduce nada ni sube posiciones por sí sola; evita que en los resultados salga la versión equivocada.

Se puede declarar en tres sitios (el <head>, la cabecera HTTP o el sitemap XML) y tiene una regla que lo decide casi todo: si la página A apunta a la B, la B tiene que apuntar a la A. Cuando falta esa vuelta, Google puede ignorar la anotación entera. Aquí tienes la sintaxis exacta, ejemplos para copiar y los fallos más habituales en webs en catalán, castellano e inglés.

Esquema de tres versiones de idioma de una página enlazadas entre sí en ambos sentidos, con una versión por defecto
Cada versión de idioma apunta a todas las demás y recibe el enlace de vuelta; x-default recoge a quien no encaja con ninguna.

Qué es hreflang y cuándo hace falta

Es un atributo del elemento <link rel="alternate"> que relaciona entre sí las versiones de una misma página. Con él, Google entiende que /ca/serveis/, /es/servicios/ y /en/services/ son la misma página en tres idiomas y elige cuál mostrar según el idioma y el país de quien busca.

Hace falta cuando:

  • Tienes la misma página traducida a varios idiomas (el caso típico de una pyme catalana: catalán, castellano y a veces inglés o francés).
  • Tienes el mismo idioma para varios países, con contenido casi idéntico y diferencias de precio, moneda o envíos (España y México, por ejemplo).
  • Solo traduces la plantilla (menú, pie) y el contenido principal queda en un idioma, como ocurre en foros o páginas con contenido de usuarios.

No hace falta si tu web está en un solo idioma y se dirige a un solo mercado.

Hreflang no decide el idioma de la páginaGoogle no usa hreflang ni el atributo lang para saber en qué idioma está un texto: lo deduce del contenido. Si la versión «en inglés» conserva medio texto en castellano, la etiqueta no lo arregla.

La decisión previa (a qué países vender y cómo organizar la web para ello) está en la guía de SEO internacional para una pyme catalana. Aquí nos quedamos con la etiqueta.

Sintaxis de la etiqueta hreflang

Este es el bloque completo de una página con tres idiomas. Va idéntico en las tres versiones:

<link rel="alternate" hreflang="ca" href="https://www.example.com/ca/serveis/" />
<link rel="alternate" hreflang="es" href="https://www.example.com/es/servicios/" />
<link rel="alternate" hreflang="en" href="https://www.example.com/en/services/" />
<link rel="alternate" hreflang="x-default" href="https://www.example.com/en/services/" />
  • rel="alternate": dice que la URL es una versión alternativa de la página.
  • hreflang: el código de idioma en formato ISO 639-1 (ca, es, en) y, si quieres afinar por país, un guion y el código de país ISO 3166-1 alfa-2 (es-ES, es-MX, en-GB).
  • href: la URL absoluta, con protocolo y dominio.

El idioma es obligatorio; el país, opcional. Un código de país suelto no vale: Google lo leería como idioma (be es bielorruso, no Bélgica).

Valor¿Es correcto?Por qué
caSíCatalán, para cualquier país
es-ESSíCastellano para usuarios de España
en-GBSíInglés para el Reino Unido
en-UKNoEl código ISO del Reino Unido es GB
es_ESNoEl separador es un guion, no un guion bajo
es-LA, en-EUNoLA es Laos, no Latinoamérica, y EU no es un código de país

Si segmentas por país, añade siempre una versión genérica del idioma que recoja al resto de hablantes:

<link rel="alternate" hreflang="es-ES" href="https://www.example.com/es-es/" />
<link rel="alternate" hreflang="es-MX" href="https://www.example.com/es-mx/" />
<link rel="alternate" hreflang="es" href="https://www.example.com/es/" />

Dónde se pone: head, cabecera HTTP o sitemap

Los tres métodos valen lo mismo para Google. Elige uno; si combinas dos, tienen que decir exactamente lo mismo.

MétodoCuándo convieneOjo con
Etiquetas en el <head>Webs con pocos idiomas. Es lo que generan la mayoría de CMS y plugins multiidiomaTienen que estar dentro del <head>, no en el cuerpo
Cabecera HTTP LinkArchivos que no son HTML: PDF, documentosHay que configurarla en el servidor
Sitemap XMLMuchos idiomas o muchas páginas: no engorda el HTMLCada URL repite el grupo completo

En la cabecera HTTP

Para un PDF de tarifas en tres idiomas, el servidor devuelve esta cabecera (en una sola línea) con cada uno de los tres archivos:

Link: <https://www.example.com/ca/tarifes.pdf>; rel="alternate"; hreflang="ca", <https://www.example.com/es/tarifas.pdf>; rel="alternate"; hreflang="es", <https://www.example.com/en/rates.pdf>; rel="alternate"; hreflang="en"

En el sitemap XML

Se declara el espacio de nombres xhtml y cada <url> lista todas las versiones, incluida ella misma:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:xhtml="http://www.w3.org/1999/xhtml">
  <url>
    <loc>https://www.example.com/ca/serveis/</loc>
    <xhtml:link rel="alternate" hreflang="ca" href="https://www.example.com/ca/serveis/" />
    <xhtml:link rel="alternate" hreflang="es" href="https://www.example.com/es/servicios/" />
    <xhtml:link rel="alternate" hreflang="en" href="https://www.example.com/en/services/" />
    <xhtml:link rel="alternate" hreflang="x-default" href="https://www.example.com/en/services/" />
  </url>
  <url>
    <loc>https://www.example.com/es/servicios/</loc>
    <xhtml:link rel="alternate" hreflang="ca" href="https://www.example.com/ca/serveis/" />
    <xhtml:link rel="alternate" hreflang="es" href="https://www.example.com/es/servicios/" />
    <xhtml:link rel="alternate" hreflang="en" href="https://www.example.com/en/services/" />
    <xhtml:link rel="alternate" hreflang="x-default" href="https://www.example.com/en/services/" />
  </url>
  <url>
    <loc>https://www.example.com/en/services/</loc>
    <xhtml:link rel="alternate" hreflang="ca" href="https://www.example.com/ca/serveis/" />
    <xhtml:link rel="alternate" hreflang="es" href="https://www.example.com/es/servicios/" />
    <xhtml:link rel="alternate" hreflang="en" href="https://www.example.com/en/services/" />
    <xhtml:link rel="alternate" hreflang="x-default" href="https://www.example.com/en/services/" />
  </url>
</urlset>

Si todavía no tienes sitemap o no sabes cómo enviarlo, está explicado en la guía del sitemap XML.

Qué es x-default

hreflang="x-default" señala la página que debe ver quien no encaja con ninguna de las versiones declaradas: un usuario que busca en alemán en una web que solo tiene catalán, castellano e inglés. No es obligatorio, pero es recomendable.

Suele apuntar a un selector de idioma o a la versión que prefieres para el público de fuera. En una pyme de Girona que vende a turistas, lo razonable es que x-default sea la versión inglesa; en una que solo trabaja en Cataluña, la catalana o la castellana. La misma URL puede figurar dos veces: una con su idioma y otra como x-default, como en el ejemplo de arriba.

Reciprocidad: la regla que más se rompe

Cada versión tiene que listar todas las versiones del grupo, incluida ella misma. Y la relación debe ser de ida y vuelta: si /ca/serveis/ declara a /es/servicios/ como alternativa, /es/servicios/ tiene que declarar a /ca/serveis/. Si no, Google puede ignorar esas anotaciones o interpretarlas mal.

La regla tiene sentido: sin enlace de vuelta, cualquier web podría declararse versión alternativa de una página tuya.

Dos consecuencias prácticas:

  • Solo se emparejan páginas equivalentes. Si un artículo existe solo en catalán, no lleva hreflang hacia la portada en castellano: lleva solo el suyo o ninguno.
  • La canónica de cada versión es ella misma. Si /es/servicios/ tiene una canónica que apunta a /ca/serveis/, le estás diciendo a Google que la versión castellana no debe indexarse, y el hreflang deja de tener sentido. Lo explico en el post sobre la URL canónica.

Errores de hreflang más habituales

  1. Falta el enlace de vuelta. Se añade un idioma nuevo y solo se actualiza la plantilla de ese idioma.
  2. Códigos inventados: en-UK, es_ES, cat en lugar de ca.
  3. URL relativas (/es/servicios/) o sin protocolo. Tienen que ser absolutas.
  4. Apuntar a URL que no son la definitiva: que redirigen, devuelven 404, llevan noindex o tienen la canónica en otra página.
  5. Todas las páginas apuntan a la portada del otro idioma en vez de a su traducción. Es el fallo clásico de un selector de idioma mal montado.
  6. Hreflang solo en la portada. Se declara página a página, no una vez para todo el sitio.
  7. Redirigir automáticamente según la IP o el idioma del navegador. Googlebot rastrea sobre todo desde Estados Unidos y sin cabecera Accept-Language, así que puede no llegar nunca a las otras versiones. Mejor un aviso que sugiera cambiar de idioma que una redirección forzosa.

Cómo comprobar tu hreflang

  1. Abre el código fuente de una página en cada idioma y busca hreflang. El bloque tiene que ser el mismo en todas.
  2. Abre cada href: debe responder con un 200 directo, sin redirección.
  3. Comprueba que cada versión se lista a sí misma y que su canónica es su propia URL.
  4. En Search Console, inspecciona una URL de cada idioma para confirmar que está indexada y que la canónica que elige Google es la suya. Search Console ya no tiene un informe específico de hreflang, así que el resultado se mira en Rendimiento: filtra por país y consulta qué página aparece para cada búsqueda. Si no estás familiarizado con el informe, lo tienes en cómo usar Google Search Console paso a paso.

Google aplica los cambios cuando ha vuelto a rastrear todas las versiones del grupo, así que no esperes verlo al día siguiente.

Si prefieres que lo revisemos nosotros, el hreflang forma parte de las comprobaciones de SEO técnico de la plataforma, y puedes empezar por un análisis inicial gratuito de tu web.

Preguntas frecuentes

¿Hreflang mejora el posicionamiento?

No directamente. No hace que una página suba; hace que Google muestre la versión del idioma o país adecuado. El efecto se nota en que el usuario llega a la página que entiende y no se marcha.

¿Necesito hreflang si mi web solo está en catalán y castellano?

Es recomendable. Con dos idiomas ya hay dos versiones de cada página, y hreflang le confirma a Google que son equivalentes y cuál corresponde a cada idioma.

¿Es obligatorio x-default?

No. Es opcional, pero conviene ponerlo para decidir tú qué ve quien no encaja con ninguno de tus idiomas.

¿Hreflang sustituye a la etiqueta canonical?

No, se complementan. Canonical señala la URL principal entre duplicados; hreflang relaciona versiones de idiomas distintos. Cada versión debe tener su propia canónica y el grupo hreflang completo.

¿Puedo usar hreflang entre dominios distintos?

Sí. Las versiones no tienen que estar en el mismo dominio: una .cat y una .com pueden declararse alternativas, siempre que las dos se enlacen mutuamente.

En resumen

Hreflang es poco código y mucha disciplina: códigos ISO correctos, URL absolutas y definitivas, el mismo bloque en todas las versiones y enlace de vuelta siempre. Si una web multiidioma enseña el idioma equivocado en Google, lo primero que hay que mirar es la reciprocidad. ¿Quieres saber cómo está la tuya? Pide el análisis inicial gratuito.

¿Quieres mejorar el posicionamiento de tu negocio en Cataluña?

Análisis SEO inicial gratuito: te decimos por dónde empezar.

Análisis gratuito


Compartir:
E
Equip editorial Posicionament-Web

L'equip editorial de Posicionament-Web publica continguts SEO pensats per a negocis de Catalunya.

Comentarios

No hay comentarios todavía. ¡Sé el primero en comentar!

Deja un comentario

Falta poco para enviarlo