Hreflang: cómo configurar correctamente las versiones por idioma y país
hreflang le indica a Google qué versión de una página, por idioma o país, mostrar a cada usuario. Esta guía explica las tres formas de declararlo, las reglas de códigos que Google aplica de verdad, los enlaces de retorno, x-default, cómo interactúan los canonicals y los pasos para corregir los errores que detecta un verificador de hreflang.
Searvia · 24/10/2026 · Lectura de 14 min

En resumen: hreflang le indica a Google qué versión de una página, por idioma o país, mostrar a cada usuario. Cada versión enumera todas las versiones, incluida ella misma, con un código de idioma ISO 639-1 y una región ISO 3166-1 alpha-2 opcional (
en,de,en-GB,pt-BR), más unx-defaultopcional como alternativa. Los enlaces deben ser absolutos y apuntarse en ambos sentidos, o Google los ignora. Cada versión necesita un canonical autorreferenciado; un canonical que apunte a otro idioma anula toda la configuración. Google detecta el idioma de la página por su contenido, así que la traducción tiene que ser real.
Los sitios internacionales pierden tráfico de forma silenciosa. La página en inglés se posiciona en Alemania, la página en español aparece en México cuando habías creado una versión mexicana, o la tienda del Reino Unido se muestra a usuarios estadounidenses con precios en libras. Nada está roto en el sitio; simplemente Google adivinó qué versión mostrar. hreflang es la forma de que deje de adivinar.
Esta guía explica cómo funciona hreflang según la documentación de Google, las reglas de códigos que hacen tropezar a la mayoría de los sitios, cómo interactúa con los canonicals, qué comprueba nuestro verificador de hreflang gratuito y cómo corregir cada problema.
Qué hace hreflang y qué no hace
Las anotaciones hreflang describen un conjunto de páginas que son versiones unas de otras: el mismo contenido en otro idioma, o el mismo idioma adaptado a otro país. Google las usa para mostrar en sus resultados la versión que corresponde.
Lo que no hace:
- No detecta el idioma. Google afirma que "no usa hreflang ni el atributo lang de HTML para detectar el idioma de una página"; usa el contenido visible (sitios multirregionales). Una página etiquetada como
decon texto en inglés es una página en inglés. - No convierte traducciones pobres en duplicados ni en originales. Google indica que las versiones localizadas "solo se consideran duplicadas si el contenido principal de la página sigue sin traducir". Una página con el menú traducido y el cuerpo en inglés es un duplicado.
- No redirige a nadie. Solo cambia qué URL aparece en los resultados. Los visitantes pueden abrir cualquier versión.
Las tres formas de añadir hreflang
Google afirma que los tres métodos "son equivalentes desde la perspectiva de Google". Usa uno por página; mezclarlos solo añade lugares donde pueden aparecer errores.
1. Elementos link en HTML dentro del <head>, la opción más habitual. En https://example.com/en/pricing:
<link rel="alternate" hreflang="en" href="https://example.com/en/pricing" />
<link rel="alternate" hreflang="de" href="https://example.com/de/preise" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/tarifs" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/pricing" />
Las páginas en alemán y francés llevan exactamente las mismas cuatro líneas. Google exige que las etiquetas estén "dentro de una sección <head> bien formada"; un elemento suelto que el navegador mueva al body, como una imagen o una etiqueta sin cerrar encima de los enlaces, puede cortar el head antes de tiempo.
2. Cabeceras HTTP Link, la única opción para archivos que no son HTML, como los PDF:
Link: <https://example.com/en/guide.pdf>; rel="alternate"; hreflang="en",
<https://example.com/de/guide.pdf>; rel="alternate"; hreflang="de"
Google indica que la cabecera debe ser idéntica en todas las versiones.
3. Sitemap XML, cómodo para sitios grandes porque no requiere cambiar plantillas:
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://example.com/en/pricing</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/pricing"/>
<xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/preise"/>
</url>
<url>
<loc>https://example.com/de/preise</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/pricing"/>
<xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/preise"/>
</url>
</urlset>
Cada <url> enumera todas las versiones, incluida ella misma.
Las reglas que Google aplica
Enlaces de retorno y autorreferencia
"Si dos páginas no se apuntan mutuamente, las etiquetas se ignorarán." Esta es la regla detrás de la mayoría de las configuraciones rotas. Si la página en inglés enumera la alemana pero la alemana no enumera la inglesa, Google descarta el par. Google también indica que "cada versión de idioma debe enumerarse a sí misma".
Códigos de idioma y región
"Solo se admiten los códigos de idioma de ISO 639-1 y los códigos de región de ISO 3166-1 Alpha 2." Primero va el idioma; la región es opcional. Google también admite subetiquetas de escritura para idiomas que se escriben con más de un sistema, como zh-Hant y zh-Hans, y combinaciones como zh-Hans-US.
| Código | ¿Válido? | Motivo |
|---|---|---|
en | Sí | Inglés, cualquier región |
en-GB | Sí | Inglés para el Reino Unido |
pt-BR | Sí | Portugués para Brasil |
zh-Hant | Sí | Chino, escritura tradicional |
es-419 | No para Google | La región debe ser un código ISO 3166-1 alpha-2; 419 (Latinoamérica) no lo es |
en-UK | Sin efecto | El código ISO es GB; Google indica que UK, EU y UN no tienen efecto |
be | Significa bielorruso | Un código de país solo no es válido; be es el idioma bielorruso, no Bélgica |
en_US | No | Usa guion, no guion bajo |
eng | No para Google | Los códigos ISO 639-2 de tres letras no se admiten; usa en |
Para el español en toda Latinoamérica, usa es para una única versión compartida, o enumera los países concretos a los que te diriges (es-MX, es-AR, es-CO) apuntando a la misma URL.
x-default
"El valor reservado x-default se usa cuando ningún otro idioma o región coincide con la configuración del navegador del usuario." Apúntalo a un selector de idioma o a tu versión internacional principal. Es opcional pero útil: sin él, un usuario con un idioma que no ofreces recibe la versión que Google elija.
URL absolutas
"Las URL alternativas deben ser completas, incluido el protocolo de transporte." https://example.com/de/ funciona; /de/ y //example.com/de/ no.
hreflang y etiquetas canonical
Ambos deben coincidir. Cada versión debe tener un canonical que apunte a sí misma, no a la versión en inglés o principal. La guía de canonicalización de Google dice que hay que "especificar una página canónica en el mismo idioma", o "el mejor idioma sustituto posible si no existe una página canónica para el mismo idioma", y señala que los grupos hreflang influyen en la elección del canonical, favoreciendo las URL que se enlazan entre sí de forma recíproca.
El error clásico: todas las versiones de idioma llevan <link rel="canonical" href="https://example.com/en/...">. Eso le dice a Google que las demás versiones son duplicados de la página en inglés, y salen del índice junto con sus anotaciones hreflang.
Otros dos conflictos que evitar: URL en hreflang que redirigen (indica la URL final) y URL en hreflang con noindex (una versión que Google no puede indexar no puede mostrarse).
Estructura del sitio y redirecciones automáticas
La guía multirregional de Google compara las estructuras de URL:
| Estructura | Ejemplo | Notas de Google |
|---|---|---|
| Dominio de país | example.de | Geolocalización clara; caro, un país por dominio |
| Subdominio | de.example.com | Fácil de configurar; los usuarios pueden no reconocer la segmentación por la URL |
| Subdirectorio | example.com/de/ | Poco mantenimiento, mismo host |
| Parámetro de URL | example.com?loc=de | No recomendado |
Elijas la que elijas, no redirijas automáticamente a los visitantes por IP o idioma del navegador. Google dice que esto "podría impedir que los usuarios (y los buscadores) vean todas las versiones de tu sitio" y que Googlebot "suele originarse en EE. UU.". Muestra en su lugar un banner con una sugerencia y deja que hreflang se encargue de los resultados de búsqueda.
Cómo funciona el verificador de hreflang de Searvia
El verificador de hreflang usa el mismo motor que nuestro verificador SEO de sitios web: introduces un dominio o la dirección de una página, audita esa página (tu página de inicio si solo pones el dominio) y los archivos del sitio que la rodean con 38 comprobaciones en unos 20 segundos, y coloca primero las tres comprobaciones de esta herramienta. Esto es exactamente lo que evalúan.
Versiones de idioma, hreflang (prioridad baja). El verificador lee cada elemento <link rel="alternate" hreflang="..." href="..."> en el HTML de esa página, tras seguir las redirecciones hasta su dirección final.
- Si no hay ninguno, el resultado es informativo: "No se declaran versiones de idioma (correcto para un sitio de un solo idioma)." No afecta a tu nota.
- Cada código se comprueba con los códigos que admite Google:
x-default, o un idioma ISO 639-1 de dos letras, seguido opcionalmente de una escritura de cuatro letras (zh-Hant) y un país ISO 3166-1 alpha-2 de dos letras (pt-BR,en-GB). Un error común comoen-UKse marca con su solución (→ en-GB);es-419, los idiomas de tres letras y otros códigos que Google no acepta se marcan como no válidos. Cada fila del informe muestra el código, su URL, una marca de verificación o una cruz y esa nota. Se muestran hasta 20 filas. - Comprueba la autorreferencia: una de las URL enumeradas debe ser la propia página. La comparación ignora
httpfrente ahttps, unwww.inicial, las cadenas de consulta y la barra final. - Correcto cuando todos los códigos son válidos y la página se enumera a sí misma; si no hay
x-default, el mensaje añade que falta esta alternativa opcional. En caso contrario, una advertencia con "Las versiones de idioma no incluyen esta propia página" o "Algunos códigos de idioma no son válidos".
Idioma de la página (prioridad baja). Pasa cuando el elemento <html> tiene un atributo lang y muestra su idioma; avisa cuando falta.
URL canónica (prioridad media). Pasa cuando la etiqueta canonical apunta a la propia página; avisa cuando falta o apunta a otra dirección, mostrando esa dirección.
Lo que no comprueba
- Enlaces de retorno. El verificador lee una sola página y no descarga las demás versiones, por lo que no puede confirmar que enlacen de vuelta. Abre el código fuente de cada versión, o usa un rastreador de sitios, para comprobar la reciprocidad.
- Cabeceras HTTP y sitemaps. Solo se leen los elementos HTML
<link>. Si declaras hreflang en un sitemap, el verificador informa de que no hay versiones. - URL absolutas y duplicados. Las URL relativas se resuelven en lugar de marcarse, y si el mismo código aparece dos veces, solo se conserva uno.
- Otras páginas. Se comprueba una página por ejecución. Introduce la dirección de cada versión que quieras revisar (
example.com/de/pricing,de.example.com), o usa un rastreador para todo el sitio.
Cómo leer el resultado
| Mensaje | Significado | Solución |
|---|---|---|
| No se declaran versiones de idioma (correcto para un sitio de un solo idioma). | No hay enlaces hreflang en la página | Nada para sitios de un solo idioma; si no, ve al paso 1 |
| N versiones de idioma están declaradas correctamente. | Códigos válidos y autorreferencia presente; el mensaje lo indica si falta la alternativa x-default (opcional) | Comprueba igualmente a mano los enlaces de retorno |
| Las versiones de idioma no incluyen esta propia página. | La página enumera otras pero no a sí misma | Paso 2 |
| Algunos códigos de idioma no son válidos. | Al menos una fila tiene una cruz roja | Paso 3 |
| La página no declara su idioma. | No hay lang en <html> | Paso 4 |
| La URL canónica apunta a otra dirección. | El canonical nombra una página distinta | Paso 5 |
La nota global de A+ a F abarca las 38 comprobaciones, ponderadas por prioridad (alta 10, media 5, baja 2; las advertencias suman la mitad), con una lista "Corrige esto primero" y un informe compartible.
Cómo corregir cada problema de hreflang
1. No se declaran versiones de idioma, pero las tienes
- Enumera cada versión de la página y su URL completa, por ejemplo
/en/,/de/,/fr/. - Elige un método: etiquetas HTML para la mayoría de los sitios, el sitemap si las plantillas son difíciles de modificar.
- Genera las etiquetas desde una única fuente en tu código o CMS, para que cada versión muestre el mismo conjunto completo. Las etiquetas escritas a mano se desajustan.
- Si usas un plugin multilingüe o la función de mercados integrada de tu plataforma, normalmente genera hreflang por ti; comprueba que cada traducción esté vinculada a su original y publicada, porque las traducciones sin vincular no reciben etiquetas.
- Vuelve a ejecutar el verificador de hreflang.
2. Las versiones de idioma no incluyen esta propia página
Añade una línea para la página actual con su propio código. En una plantilla, esto suele significar que el bucle sobre los idiomas omite el idioma actual; elimina esa condición. Asegúrate de que la URL de autorreferencia sea la URL canónica, con el mismo protocolo, host y criterio de barra final.
3. Algunos códigos de idioma no son válidos
- Localiza en el informe las filas con una cruz.
- Corrige el formato: guion y no guion bajo, primero el idioma y después la región (
en-GB, noGB-en). - Sustituye los códigos no admitidos:
en-UKpasa aen-GB(el informe lo sugiere),es-419pasa aeso a una lista de códigos de país, los códigos de tres letras pasan a dos letras. - Comprueba que el código sea el idioma que quieres:
bees bielorruso,czno es un código de idioma (el checo escs),jpno es un código de idioma (el japonés esja),dktampoco lo es (el danés esda).
4. La página no declara su idioma
Añade el idioma al elemento raíz, por ejemplo <html lang="en"> o <html lang="pt-BR">. Google no lo usa para detectar el idioma, pero sí los navegadores, las herramientas de traducción y los lectores de pantalla, como describe MDN.
5. El canonical apunta a otra dirección
En un sitio multilingüe suele ser el problema del canonical entre idiomas. Cambia el canonical de cada versión a su propia URL. Si el canonical apunta a la misma página en otra forma (http en lugar de https, o sin www), haz que coincida exactamente con tu dirección final.
6. Faltan enlaces de retorno (el verificador no lo comprueba)
Abre dos versiones una al lado de la otra y compara sus listas hreflang: deben ser conjuntos idénticos. Si difieren, la causa casi siempre es la plantilla o el plugin que las genera, así que corregir el generador una vez arregla todas las páginas.
Ejemplo práctico (hipotético)
Lo siguiente es un ejemplo hipotético, no datos reales. Kestrel Gear, una marca de exterior inventada, tiene example.com en inglés con versiones /de/, /fr/ y /es/. Los usuarios alemanes siguen llegando a páginas en inglés. El verificador de hreflang informa:
| Fila | URL | OK |
|---|---|---|
en-UK | https://example.com/ | No (→ en-GB) |
de-DE | https://example.com/de/ | Sí |
fr | https://example.com/fr/ | Sí |
es_ES | https://example.com/es/ | No |
Canonical: "La URL canónica apunta a la propia página." Idioma de la página: en.
La cruz en es_ES es un error de formato. La cruz en en-UK viene con la nota "→ en-GB": Google no acepta UK como región, así que la página en inglés no tenía una anotación utilizable. Al ver el código fuente de la página alemana aparece un tercer problema: su canonical apunta a la página de inicio en inglés, por lo que Google trató /de/ como un duplicado. Las soluciones:
- Se cambiaron los códigos a
en,de,fr,es(una versión por idioma, sin necesidad de regiones) y se añadióx-defaultapuntando a la página de inicio en inglés. - Se movió la salida de hreflang a una plantilla compartida para que cada versión imprima el mismo conjunto, incluida ella misma.
- Se dio a cada versión un canonical autorreferenciado.
- Se eliminó una redirección por IP que enviaba automáticamente a los visitantes de Alemania a
/de/, y se sustituyó por un banner de sugerencia.
Una lista de comprobación de hreflang en 20 minutos
- Ejecuta el verificador de hreflang gratuito en tu página de inicio y en cada versión de idioma.
- Compara cada código con ISO 639-1 e ISO 3166-1 alpha-2.
- Confirma que cada versión se enumera a sí misma y a todas las demás.
- Abre dos versiones y confirma que los conjuntos son idénticos.
- Comprueba que el canonical de cada versión apunta a sí misma.
- Añade
x-default(opcional, pero útil). - Asegúrate de que ninguna redirección automática oculte versiones a Googlebot.
Cómo ayuda Searvia
El verificador de hreflang gratuito valida los enlaces hreflang, el idioma de la página y el canonical de la página que introduzcas en un único informe compartible, junto con las demás comprobaciones del verificador SEO de sitios web. En una cuenta de Searvia, conecta Search Console para ver clics y posiciones por país de cada versión de idioma, y ejecuta la auditoría del sitio cada semana para detectar canonicals que apuntan a otro lugar, títulos duplicados entre versiones de idioma y páginas rotas. Si publicas apps además de sitios web, nuestra guía de localización en App Store trata el mismo problema en el lado de las tiendas. Para la lista técnica completa, consulta la guía de auditoría SEO técnica.
Preguntas frecuentes
- ¿Qué es hreflang?
- hreflang es una anotación que informa a Google sobre las versiones de una página por idioma y país, para que pueda mostrar la versión adecuada a cada usuario. Se escribe como enlaces rel="alternate" con un atributo hreflang, en el head del HTML, en una cabecera HTTP Link o en un sitemap XML. Cada versión enumera todas las versiones, incluida ella misma, con un código como en, de o en-GB, y opcionalmente una alternativa x-default.
- ¿Ayuda hreflang al posicionamiento?
- hreflang no hace que una página se posicione mejor. Ayuda a Google a elegir qué versión de una página mostrar en un idioma o región determinados, de modo que un usuario alemán vea la página en alemán y no la inglesa. Sin él, Google puede igualmente deducir la versión correcta, pero los errores, como mostrar el idioma equivocado en los resultados, son más probables cuando las versiones se parecen.
- ¿Qué es x-default en hreflang?
- x-default es un valor reservado de hreflang para la página que se muestra cuando ningún otro idioma o región del conjunto coincide con la configuración del navegador del usuario. Suele ser una página selectora de idioma o la versión internacional principal. Google lo recomienda para la página alternativa, pero no lo exige.
- ¿Es en-UK un código hreflang válido?
- No. Los códigos de región de hreflang deben ser códigos de país ISO 3166-1 alpha-2, y el código del Reino Unido es GB, así que usa en-GB. Google indica que usar UK, EU o UN en las anotaciones hreflang no tiene efecto en la Búsqueda de Google. Un código de país por sí solo tampoco es válido: hreflang debe empezar con un código de idioma ISO 639-1.
- ¿Necesito hreflang si uso el atributo lang?
- Sí, si tienes varias versiones por idioma o país. Google indica que no usa el atributo lang de HTML ni hreflang para detectar el idioma de una página; lee el contenido visible. El atributo lang ayuda a los navegadores y lectores de pantalla, mientras que hreflang le dice a Google cómo se relacionan tus versiones. Configura ambos.
Fuentes
- Tell Google about localized versions of your page – Google Search Central
- Managing multi-regional and multilingual sites – Google Search Central
- How to specify a canonical URL – Google Search Central
- Redirects and Google Search – Google Search Central
- HTML lang global attribute – MDN Web Docs
- ISO 639 language codes – Library of Congress