Hreflang: guía completa de SEO internacional
Cómo planificar las versiones por idioma y región, implementar las anotaciones hreflang recíprocas y comprobar que cada URL sirve a la audiencia prevista.
Hreflang es un atributo HTML que indica a los buscadores para qué idioma y región está pensada cada versión de una página. Google usa este dato para mostrar al usuario la versión del contenido que corresponde a su idioma y a su ubicación.
Sin hreflang, Google intenta adivinar por su cuenta la versión correcta, y a menudo se equivoca: un usuario que habla ruso recibe la página en inglés y un usuario alemán ve la versión francesa. Esto reduce el CTR, aumenta la tasa de rebote y cuesta conversiones.
Qué es hreflang
El atributo hreflang se introdujo en 2011: Google lo creó para resolver el problema del contenido duplicado en los sitios internacionales. Si una página /about existe como /en/about, /de/about y /fr/about, Google no debería tratarlas como duplicados, porque cada una sirve a una audiencia distinta.
Año de introducción
Google introdujo hreflang para los sitios multilingües
Códigos de región
Códigos ISO 3166-1 alpha-2 admitidos por Google
Reciprocidad
Todas las versiones de la página deben enlazarse entre sí
Impacto en la velocidad
Un hreflang bien implementado no ralentiza el sitio
Hreflang solo lo admiten Google y Yandex. Bing usa la metaetiqueta Content-Language y las cabeceras HTTP, pero trabaja con la estructura de URL y la segmentación geográfica a través de Webmaster Tools. Si tu audiencia incluye usuarios de habla rusa, hreflang sigue siendo necesario para que Yandex funcione bien.
Cuándo usar hreflang
No todos los sitios multilingües necesitan hreflang: conviene entender cuándo el atributo resuelve un problema real.
| Situación | ¿Necesita hreflang? | Notas |
|---|---|---|
| Un idioma, distintos países (en-US, en-GB) | Sí | Contenido distinto (precios, ortografía, promociones) |
| Distintos idiomas (en, de, fr) | Sí | Caso de uso principal de hreflang |
| Un idioma, una región | No | No hace falta repetir el enlace a la propia página |
| Contenido idéntico en todas las versiones de idioma | No | Usa canonical en su lugar |
| Traducción parcial (70 % o más del contenido) | Sí | Incluso las traducciones parciales necesitan marcado |
| Traducción automática sin revisar | No | Google puede tratarlo como spam |
/en-us/ y /en-gb/ sin diferencias), es mejor usar canonical en lugar de hreflang.Sintaxis y formatos
Hreflang usa códigos de dos estándares: ISO 639-1 para el idioma e ISO 3166-1 alpha-2 para la región. El formato es language o language-REGION.
<!-- Language only -->
<link rel="alternate" hreflang="ru" href="https://example.com/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/" />
<!-- Language + region -->
<link rel="alternate" hreflang="en-US" href="https://example.com/en-us/" />
<link rel="alternate" hreflang="en-GB" href="https://example.com/en-gb/" />
<link rel="alternate" hreflang="fr-FR" href="https://example.com/fr/" />
<link rel="alternate" hreflang="fr-CA" href="https://example.com/fr-ca/" />
<!-- x-default: page for users without a matching locale -->
<link rel="alternate" hreflang="x-default" href="https://example.com/" />La región en hreflang se escribe siempre en mayúsculas (en-GB, fr-CA) y el idioma en minúsculas (en, fr). Muchas implementaciones usan minúsculas en todo: Google entiende ambas formas, pero seguir el formato canónico es una buena práctica.
| Código | Significado |
|---|---|
| ru | Ruso (cualquier región) |
| en | Inglés (cualquier región) |
| en-US | Inglés de Estados Unidos |
| en-GB | Inglés del Reino Unido |
| de-AT | Alemán de Austria |
| zh-Hans | Chino simplificado |
| zh-Hant | Chino tradicional |
| x-default | Página para región o idioma no definidos |
Métodos de implementación
Hreflang se puede implementar de tres formas. La elección depende de la tecnología y de la escala del sitio.
1. Etiqueta HTML en la sección head
El método más común. Las etiquetas <link rel="alternate" hreflang="..."> se añaden al <head> de cada página. Y lo más importante: todas las versiones de la página deben enlazar a todas las demás versiones, incluida ella misma.
<!-- Page /en/about — links to ALL versions -->
<head>
<link rel="alternate" hreflang="en" href="https://example.com/en/about/" />
<link rel="alternate" hreflang="ru" href="https://example.com/about/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/about/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/about/" />
<link rel="canonical" href="https://example.com/en/about/" />
</head>2. Cabecera HTTP Link
Para los PDF, las imágenes y otros recursos que no son HTML se usan cabeceras HTTP. Este método también funciona en cualquier página, pero requiere configurar el servidor.
# Nginx: add hreflang via HTTP headers
add_header Link '</en/about/>; rel="alternate"; hreflang="en", </about/>; rel="alternate"; hreflang="ru", </de/about/>; rel="alternate"; hreflang="de"';3. Sitemap XML
La opción óptima para sitios grandes (más de 10 000 páginas). Todas las relaciones hreflang se describen en el sitemap: así se reduce el exceso de HTML y se centraliza la gestión.
<?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://example.com/en/about/</loc>
<xhtml:link rel="alternate" hreflang="en"
href="https://example.com/en/about/"/>
<xhtml:link rel="alternate" hreflang="ru"
href="https://example.com/about/"/>
<xhtml:link rel="alternate" hreflang="de"
href="https://example.com/de/about/"/>
<xhtml:link rel="alternate" hreflang="x-default"
href="https://example.com/en/about/"/>
</url>
</urlset>x-default: página de selección de idioma
El valor x-default designa la página para los usuarios cuyo idioma o región no coincide con ninguna de las alternativas declaradas. Google muestra esta versión cuando no existe ningún hreflang que coincida.
- Página de selección de idioma: el usuario llega a
/choose-language/y elige su versión - Versión principal del sitio: normalmente la versión en inglés o la que Google debería mostrar por defecto
- Página de inicio: si el sitio tiene varios idiomas, x-default apunta a
/
Canonical + hreflang
Canonical y hreflang resuelven problemas distintos, pero funcionan juntos. La regla es sencilla: canonical apunta siempre a sí misma (canonical autorreferencial) cuando la página tiene hreflang.
<!-- CORRECT: canonical points to self + hreflang covers all versions -->
<link rel="canonical" href="https://example.com/en/about/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/about/" />
<link rel="alternate" hreflang="ru" href="https://example.com/about/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/about/" />
<!-- WRONG: canonical points to a different language version -->
<link rel="canonical" href="https://example.com/ru/about/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/about/" />Si el canonical de la página en inglés apunta a la versión rusa, Google tratará la página en inglés como un duplicado y no la incluirá en el índice. Por eso, hreflang sin un canonical autorreferencial prácticamente no sirve de nada.
Errores habituales
Según datos de auditorías, alrededor del 60 % de los sitios con hreflang tiene al menos un error crítico. Estos son los más comunes.
Error 1: faltan los enlaces recíprocos
El problema más común. La página A enlaza a la página B mediante hreflang, pero la página B no enlaza de vuelta a la A. Google ignora ese hreflang: sin reciprocidad no es válido.
Error 2: códigos de idioma incorrectos
hreflang="en_US"con guion bajo en lugar de guion: código no válidohreflang="english": una palabra en lugar de un código ISOhreflang="zh"en lugar dehreflang="zh-Hans"ohreflang="zh-Hant": el chino requiere indicar el sistema de escriturahreflang="ru-RU"en lugar dehreflang="ru": código de región innecesario para un idioma sin dialectos
Error 3: hreflang en páginas no indexables
Si una página está bloqueada en robots.txt o marcada con noindex, su hreflang no sirve de nada. Google no procesa hreflang en páginas que no puede indexar.
Error 4: redirecciones automáticas por idioma
Algunos sitios redirigen a los usuarios según el idioma del navegador: un visitante ruso pide /about/ y es redirigido a /ru/about/. Google ve una redirección 301 y no puede procesar bien hreflang. Solución: servir el contenido sin redirigir y cambiar de versión con JavaScript o cookies.
Error 5: hreflang que apunta a 404 o a redirecciones
Hreflang debe apuntar a las URL finales y canónicas. Los enlaces que pasan por redirecciones o llevan a páginas 404 invalidan el atributo para esa versión.
Herramientas de verificación
| Herramienta | Qué comprueba | Coste |
|---|---|---|
| Google Search Console | Errores de hreflang en el informe de Segmentación internacional | Gratis |
| Herramienta de hreflang de Aleyda Solis | Validez de las etiquetas de una página y reciprocidad de los enlaces | Gratis |
| Comprobador de hreflang de TechnicalSEO | Comprobación por lotes y exportación de errores | Gratis / de pago |
| Screaming Frog | Rastreo completo con análisis de hreflang | De pago |
| Ahrefs Site Audit | Errores de hreflang dentro de la auditoría SEO | De pago |
| Semrush Site Audit | Informe específico de hreflang | De pago |
Preguntas frecuentes
¿Influye hreflang en el posicionamiento?
¿Necesita hreflang cada página del sitio?
¿Qué pasa si hreflang apunta a una URL con redirección 301?
¿Puedo usar hreflang solo en el sitemap, sin añadirlo al HTML?
¿Cuánto tarda Google en procesar un hreflang nuevo?
Check it with SpiderHead
Free and local: run the audit on your own machine.



