Cuando un sitio tiene versiones en varios idiomas o dirigidas a distintos países, surge una pregunta que hreflang existe específicamente para responder: de todas las versiones equivalentes de una misma página, ¿cuál debe mostrar Google a un usuario que busca en francés desde Francia, o en español desde México frente a España? Sin esta señal, Google decide por su cuenta, basándose en señales indirectas, y esa decisión no siempre coincide con la que habría tomado el propio sitio.
Qué resuelve hreflang y qué no resuelve
La etiqueta hreflang le dice a Google qué versión de idioma o región mostrar a cada usuario, pero es importante no confundirla con una herramienta de canonicalización: no resuelve el contenido duplicado entre versiones (ver la guía de canonicalización), porque cada versión de idioma es, por definición, un documento distinto, con su propia URL indexable, su propia canonical autorreferencial y su propia posibilidad de posicionar de forma independiente. hreflang solo actúa como un enrutador de audiencia entre documentos ya de por sí legítimos y distintos entre sí.
Sintaxis básica: código de idioma, de región, y el valor especial x-default
Cada relación hreflang se declara con un código de idioma en formato ISO 639-1 (es, en, fr) y, opcionalmente, un código de región en formato ISO 3166-1 (es-MX para español de México, en-GB para inglés del Reino Unido), separados por un guión:
<link rel="alternate" hreflang="es" href="https://www.tudominio.com/" />
<link rel="alternate" hreflang="es-MX" href="https://www.tudominio.com/mx/" />
<link rel="alternate" hreflang="en" href="https://www.tudominio.com/en/" />
<link rel="alternate" hreflang="x-default" href="https://www.tudominio.com/" />
El valor x-default es especial: indica qué versión mostrar a un usuario cuyo idioma o región no coincide con ninguna de las declaradas explícitamente (por ejemplo, un usuario que navega en alemán en un sitio que solo tiene español e inglés). No es obligatorio, pero su ausencia significa que Google decide esa situación por defecto sin ninguna orientación del sitio.
La regla que más incumplimientos causa: reciprocidad obligatoria
La condición técnica más importante, y la que más se pasa por alto, es que las relaciones hreflang deben ser siempre bidireccionales: si la versión en español enlaza a la versión en inglés como alternativa, la versión en inglés debe enlazar de vuelta a la española, y ambas deben enlazarse a sí mismas también (autorreferencia). Si Google encuentra una relación unidireccional (A apunta a B, pero B no apunta de vuelta a A), la considera inválida y la ignora por completo, sin generar ningún error visible más allá de un aviso en Search Console que muchos equipos nunca revisan.
Página ES debe incluir: hreflang="es" (a sí misma) + hreflang="en" (a la versión EN)
Página EN debe incluir: hreflang="en" (a sí misma) + hreflang="es" (a la versión ES)
Si solo una de las dos direcciones existe, Google descarta la relación entera.
Tres formas de implementar hreflang, y cuál conviene según el sitio
La implementación más común es en el <head> del HTML, como se ha mostrado arriba, adecuada para sitios de tamaño pequeño o medio. Para sitios muy grandes, donde añadir estas etiquetas a cada página infla considerablemente el peso del HTML, existe la alternativa de declarar hreflang directamente en el sitemap XML, agrupando todas las relaciones de un mismo conjunto de páginas en el archivo del sitemap en vez de en cada HTML individual. Una tercera opción, menos común, es declararlo en la cabecera HTTP (Link:) para recursos que no son HTML, como PDFs disponibles en varios idiomas.
Errores de implementación que hacen que Google ignore la señal completa
El más frecuente es la ya mencionada falta de reciprocidad. El segundo es un código de idioma o región mal formado (usar es_ES con guión bajo en vez de es-ES con guión, o invertir el orden a ES-es), que la especificación no reconoce como válido. El tercero es apuntar hreflang hacia una URL que no es la canonical de esa página, o que devuelve una redirección o un error 404: hreflang debe apuntar siempre a la URL final, indexable y autocanonicalizada de cada versión. El cuarto, más sutil, es declarar hreflang hacia una versión que tiene noindex: Google no puede enviar tráfico hacia una página que ha excluido explícitamente del índice, así que esa relación tampoco tiene efecto.
hreflang y subdominios, subcarpetas o dominios distintos: da igual la estructura
Un matiz importante: hreflang funciona exactamente igual con independencia de si las versiones de idioma viven en subcarpetas (tudominio.com/en/), subdominios (en.tudominio.com) o dominios completamente distintos (tudominio.co.uk). La elección entre estas tres estructuras es una decisión de arquitectura y de gestión de autoridad (un dominio separado empieza sin ninguna autoridad heredada del principal), no una limitación técnica de hreflang, que se declara igual en cualquiera de los tres casos.
Cómo verificar que hreflang está funcionando de verdad
Search Console incluye un informe específico de hreflang que muestra errores de reciprocidad y de formato detectados, pero solo cubre una parte de los problemas posibles; la comprobación más fiable en auditorías reales combina ese informe con una herramienta de rastreo que extraiga todas las relaciones hreflang declaradas en el sitio y las cruce automáticamente para detectar relaciones unidireccionales, códigos de idioma inválidos o destinos que no devuelven 200.
Preguntas frecuentes
¿Necesito hreflang si solo tengo una versión en español y otra en inglés?
Sí, si ambas conviven en el mismo dominio y quieres que Google muestre la versión correcta a cada usuario según su idioma. Sin hreflang, Google puede mostrar la versión equivocada a un usuario, o incluso tratar ambas como contenido casi duplicado entre sí si son muy similares en estructura.
¿hreflang mejora el posicionamiento de cada versión?
No es un factor de ranking en sí mismo: no hace que una página posicione mejor por tenerlo. Lo que hace es dirigir a Google hacia la versión correcta para cada audiencia, lo cual mejora la relevancia percibida por el usuario y, con ello, indirectamente, métricas de comportamiento que sí importan.
¿Qué pasa si mi sitio tiene 10 idiomas y me equivoco en uno solo?
Depende del tipo de error: un error de reciprocidad entre dos idiomas concretos normalmente solo invalida esa relación entre esos dos idiomas, sin afectar al resto del conjunto, siempre que las demás relaciones estén correctamente declaradas de forma independiente.
¿Debo usar hreflang aunque solo tenga variantes regionales del mismo idioma?
Sí, es un caso de uso perfectamente válido: por ejemplo, es-ES y es-MX con precios y terminología distintos pero en el mismo idioma. hreflang funciona igual de bien para distinguir regiones que para distinguir idiomas.
¿Puedo usar hreflang sin tener contenido realmente traducido?
Técnicamente sí, pero no tiene sentido hacerlo: hreflang asume que cada versión declarada es un documento real y relevante para esa audiencia. Declarar hreflang hacia una página que en realidad no está traducida (o que redirige de vuelta a la versión original) genera una experiencia de usuario mala y contradice la propia señal.