Cómo implementar Hreflang (paso a paso)
Código funcional para los tres métodos de hreflang — etiquetas en el head HTML, cabeceras HTTP Link y anotaciones en sitemap XML — además de las reglas de sintaxis, la automatización del CMS a escala y el flujo de validación para confirmar que se publicó correctamente.
Idiomas
1 señal de evidencia en esta página
- Herramienta activa relacionadareturntag - hreflang checker
Hay exactamente tres formas de añadir hreflang: etiquetas HTML <link> en el head, cabeceras de respuesta HTTP Link (para archivos que no son HTML, como los PDF) o entradas <xhtml:link> en un sitemap XML (la mejor opción a escala). Elige una; Google considera equivalentes las tres y combinarlas no aporta ningún beneficio. Todos los métodos obedecen las mismas dos reglas innegociables: autorreferencia (cada página se enumera a sí misma) y reciprocidad (si A apunta a B, B debe apuntar a A o Google ignora la pareja). Los códigos son el idioma ISO 639-1 más la región ISO 3166-1 alpha-2 opcional; x-default es la alternativa. Genéralo todo desde una única fuente de verdad y valida después el head renderizado, no solo «Ver código fuente»: en mi estudio de 374 756 dominios, más del 67 % de las configuraciones de hreflang tenían al menos un problema.
TL;DR — Hay tres formas de añadir hreflang: pequeñas etiquetas
<link>en el<head>de la página, una cabeceraLink:que envía el servidor o entradas en el sitemap XML. Solo eliges una. Elijas la que elijas, dos reglas no cambian: cada página se incluye a sí misma y cada página a la que enlazas tiene que enlazar de vuelta; de lo contrario, Google ignora todo el conjunto. Después compruebas que las etiquetas aparecen en la página tal como pretendías.
Empieza aquí: ya has decidido que necesitas hreflang
Esta es la guía práctica. Si todavía no tienes claro si necesitas hreflang o qué hace, lee primero la introducción a hreflang; esta página da por hecho que sabes que tienes varias versiones lingüísticas o regionales de una página y solo quieres construirla correctamente.
Las tres formas de añadirlo (elige una)
- Etiquetas
<link>HTML en el<head>. Añades unas líneas al principio del HTML de cada página. Es lo más fácil de entender y de ver, y funciona bien en sitios pequeños. - Cabeceras HTTP
Link:. La misma información, enviada por el servidor en la respuesta en lugar de dentro del HTML. Es la única opción para archivos que no son HTML, como un PDF, que no tiene<head>donde colocar etiquetas. - Sitemap XML. Enumeras todas las versiones lingüísticas dentro del archivo de sitemap en lugar de hacerlo en cada página. Es lo mejor para sitios grandes, porque no tienes que tocar cada página: todo el mapa vive en un solo lugar.
Google trata las tres opciones de la misma manera. No hay una que sea «más rápida» o «más fuerte», y no hay ningún beneficio en usar más de una a la vez: solo tendrás más lugares donde puedan desincronizarse. Evidence for this claim Google supports equivalent HTML, HTTP-header, and sitemap methods for declaring localized versions; HTTP headers can be used for non-HTML files such as PDFs. Scope: Google Search hreflang implementation methods. Confidence: high · Verified: Google: Localized versions
Cómo se ve la versión HTML
Imagina que tienes una página en inglés de EE. UU., otra en inglés del Reino Unido, otra en alemán y una página de inicio global que permite elegir. En la página en inglés de EE. UU. colocarías esto:
<link rel="alternate" hreflang="en-us" href="https://example.com/us/" />
<link rel="alternate" hreflang="en-gb" href="https://example.com/uk/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/" />Lee cada línea así: «hay una versión alternativa de esta página, es para este idioma o región y vive en esta dirección». La línea x-default es la alternativa para quien no coincide con ninguno de los otros idiomas.
Hay dos cosas que observar, porque son las dos reglas que hacen funcionar hreflang:
- La página de EE. UU. se incluye a sí misma (la primera línea
en-usapunta a la página estadounidense en la que ya estás). - Todas las demás páginas del conjunto tienen que llevar el mismo bloque apuntando de vuelta. La página del Reino Unido, la alemana y la página de inicio necesitan su propia versión de estas cuatro líneas.
Las dos reglas, en términos sencillos
- Cada página apunta de vuelta. Si tu página de EE. UU. enlaza a la alemana, la página alemana tiene que enlazar a la de EE. UU. Si falta ese enlace de retorno, Google descarta la pareja. Esta es la regla que más se incumple.
- Cada página apunta a sí misma. Cada versión incluye su propia URL en el conjunto. Google lo considera opcional, pero una buena práctica: hazlo de todos modos para mantener la coherencia. Evidence for this claim Google requires fully qualified alternate URLs and reciprocal links, and recommends including each page itself in its alternate set. Scope: Google Search hreflang rules shared by all delivery methods. Confidence: high · Verified: Google: Hreflang guidelines
Usa direcciones web reales y completas
Usa siempre la dirección completa, empezando por https://. No /us/, no //example.com/us/: la dirección completa es https://example.com/us/. Además, tiene que coincidir con la dirección exacta que Google indexa: mismo protocolo, mismo www (o ausencia del mismo), misma barra final y mismas mayúsculas y minúsculas.
Introduce los códigos correctamente
El código es un idioma de dos letras, seguido opcionalmente por un guion y un país de dos letras: en, en-us, de, es-mx. Los errores clásicos son en-uk (debe ser en-gb; uk significa ucraniano) y jp para japonés (debe ser ja).
Después comprueba que funciona
Lo más importante que los principiantes pasan por alto: después de publicar, mira la página renderizada para confirmar que las etiquetas están presentes y dentro del <head>. Si JavaScript añade las etiquetas, quizá no aparezcan al «Ver código fuente», pero sí en la página activa. La Inspección de URL de Google Search Console puede mostrarte lo que Google renderizó realmente.
¿Quieres el código completo de los métodos de cabeceras y sitemap, cómo automatizarlo en todo un CMS, los pasos exactos de validación y los errores que rompen los clústeres en silencio? Cambia a la pestaña Avanzado.
TL;DR — Tres métodos, elige uno: etiquetas
<link>HTML en el<head>, cabeceras HTTPLink:(la única opción para archivos que no son HTML, como los PDF) o entradas<xhtml:link>en un sitemap XML (la mejor opción a escala: un archivo generado por máquina y fácil de comprobar). Google dice que los tres son equivalentes y que no hay beneficio en combinarlos. Cada método respeta la autorreferencia y la reciprocidad, usa URL absolutas y códigos ISO 639-1 de idioma más el código regional ISO 3166-1 alpha-2 opcional. Genera todo desde una única fuente de verdad: elhreflangmantenido a mano se deteriora. Después valida el<head>renderizado, rastrea todo el clúster para comprobar la reciprocidad y vuelve a comprobarlo tras cada cambio de URL. No redirijas automáticamente a los rastreadores por geolocalización.
Antes de escribir una línea de código: tres decisiones
1. Qué método usar. Google deja claro que la elección depende de la comodidad, no del rendimiento: “The three methods are equivalent from Google’s perspective and you can choose the method that’s the most convenient for your site.” (traducción) «Los tres métodos son equivalentes desde la perspectiva de Google y puedes elegir el que sea más cómodo para tu sitio». Mi regla aproximada: Evidence for this claim Google supports equivalent HTML, HTTP-header, and sitemap methods for declaring localized versions; HTTP headers can be used for non-HTML files such as PDFs. Scope: Google Search hreflang implementation methods. Confidence: high · Verified: Google: Localized versions
- Un puñado de URL, un sitio estático o sencillo y pocos idiomas → etiquetas
<link>HTML. - Recursos que no son HTML (PDF, documentos) → cabeceras HTTP
Link:(no tienes otra opción: un PDF no tiene<head>). - Muchos idiomas, un pipeline de sitemap existente o una configuración headless/JAMstack → sitemap XML, generado mediante código.
La lente Decision Trees recorre esto como un diagrama de flujo real.
2. Una única fuente de verdad. Elijas el método que elijas, las anotaciones deben generarse desde un solo lugar: una tabla de idiomas/traducciones en tu base de datos, un campo de relación del CMS o, para sitios pequeños, una única hoja de cálculo. El peor antipatrón de hreflang es mantener las etiquetas a mano en cada página. En cuanto la plantilla de un idioma diverge, desaparecen los enlaces de retorno y se descartan parejas.
3. No combines métodos. Puedes ejecutar los tres, pero Google dice que no aporta ningún beneficio y cada método adicional es otra superficie donde las tres copias pueden discrepar. Evidence for this claim Google requires fully qualified alternate URLs and reciprocal links, and recommends including each page itself in its alternate set. Scope: Google Search hreflang rules shared by all delivery methods. Confidence: high · Verified: Google: Hreflang guidelines
Método 1: etiquetas <link> HTML en el <head>
La sintaxis, literalmente de Google, es:
<link rel="alternate" hreflang="lang_code" href="url_of_page" />Un conjunto completo y funcional para un clúster multilingüe y multirregional con alternativa:
<link rel="alternate" hreflang="en-us" href="https://example.com/us/" />
<link rel="alternate" hreflang="en-gb" href="https://example.com/uk/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/" />Ese bloque exacto va en cada página del clúster (la de EE. UU., la del Reino Unido, la alemana y la página de inicio); cada una incluye su propia línea autorreferente. Eso es lo que satisface la reciprocidad.
La ubicación es una regla estricta. Google dice: “The <link> tags must be inside a well-formed <head> section of the HTML.” (traducción) «Las etiquetas <link> deben estar dentro de una sección <head> bien formada del HTML». Y su propio consejo para solucionar problemas es: “If in doubt, paste code from your rendered page into an HTML validator to ensure that the links are inside the <head> element.” (traducción) «Si tienes dudas, pega el código de tu página renderizada en un validador HTML para asegurarte de que los enlaces están dentro del elemento <head>».
Esto importa más de lo que parece, por un modo de fallo que muchas guías escritas omiten: las etiquetas hreflang pueden salir del <head> y acabar en el <body>, donde son inválidas. En mi presentación de Pubcon Vegas 2019 lo señalé directamente: las etiquetas no pueden vivir legítimamente en el body (eso permitiría que un sitio secuestrara las alternativas de otro), pero una etiqueta <p> mal formada o inyectada, o un iframe, puede cerrar prematuramente el <head>, de modo que todo lo que viene después —incluido tu hreflang— se renderiza dentro del <body>. La etiqueta está técnicamente presente en el código fuente, pero es inválida en silencio. La forma más rápida de depurarlo son los puntos de interrupción del DOM del navegador: observa dónde aterrizan realmente las etiquetas en el DOM renderizado y después vuelve al marcado que rompió el <head>.
Cuándo tienen sentido las etiquetas HTML: sitios pequeños o medianos con un número de idiomas manejable, donde el bloque <link> por página no se dispare. En un sitio con docenas de idiomas, cada página lleva un bloque grande de marcado; por eso los sitios grandes suelen apoyarse en el método del sitemap.
No mezcles hreflang con otros atributos alternate en el mismo elemento <link>. La indicación de Google es explícita: un <link rel="alternate"> que lleve hreflang no debe llevar también un atributo alternativo no relacionado como media; si necesitas tanto una alternativa de idioma/región como una alternativa de consulta de medios para la misma URL, son dos elementos <link> separados, no uno combinado. Mezclarlos es una forma fácil de acabar con una etiqueta que Google no pueda interpretar como ninguna de las dos cosas.
Método 2: cabeceras HTTP Link:
La misma información, enviada en la respuesta HTTP en lugar del HTML. La sintaxis es:
Link: <https://example.com/file.pdf>; rel="alternate"; hreflang="en",
<https://de-ch.example.com/file.pdf>; rel="alternate"; hreflang="de-ch"Fíjate en los corchetes angulares alrededor de cada URL, los atributos separados por punto y coma y la coma que separa cada alternativa. Cada URL de la cabecera se añade separada por comas.
Cuándo lo necesitas: recursos que no son HTML. Un PDF, un .doc o una imagen servida directamente no tiene <head> donde colocar etiquetas <link>, así que la cabecera es la única forma de asociarles hreflang.
Consideraciones de configuración: estableces estas cabeceras en la capa del servidor o CDN (una directiva Header de Apache, un add_header de Nginx, una regla de cabeceras de respuesta de Cloudflare/Fastly/CloudFront o la respuesta de tu aplicación). Como la infraestructura establece la cabecera en lugar del marcado de cada documento, es fácil romper la reciprocidad: normalmente la cabecera del PDF inglés y la del PDF alemán se configuran por separado, así que te corresponde asegurarte de que cada una enumera el conjunto completo, incluida ella misma. Haz que la generación de cabeceras dependa de la misma tabla de idiomas que tu HTML o sitemap.
El invariante que debes conservar: cada respuesta alternativa lleva el mismo conjunto completo, todas las veces. No basta con que la cabecera del PDF inglés enumere la alternativa alemana; la respuesta del PDF alemán tiene que devolver exactamente el mismo conjunto (ella misma y todas las demás alternativas), en cada respuesta, no solo en la primera que encuentre un rastreador. Trata la cabecera como una salida generada, no como algo que configuras una vez y olvidas.
Método 3: anotaciones <xhtml:link> en el sitemap XML
A escala, normalmente es la opción adecuada: todo el clúster vive en uno o varios archivos generados por máquina, no hincha el <head> de cada página y, como todo el grafo de relaciones está en un solo lugar, es con diferencia el método más fácil de comprobar. La sintaxis es:
<?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/english/page.html</loc>
<xhtml:link rel="alternate" hreflang="de"
href="https://www.example.de/deutsch/page.html"/>
<xhtml:link rel="alternate" hreflang="en"
href="https://www.example.com/english/page.html"/>
</url>
<url>
<loc>https://www.example.de/deutsch/page.html</loc>
<xhtml:link rel="alternate" hreflang="de"
href="https://www.example.de/deutsch/page.html"/>
<xhtml:link rel="alternate" hreflang="en"
href="https://www.example.com/english/page.html"/>
</url>
</urlset>Dos aspectos que suelen causar problemas en el método del sitemap:
- La declaración del espacio de nombres es obligatoria. El
xmlns:xhtml="http://www.w3.org/1999/xhtml"del elemento<urlset>no es decoración opcional: omítelo y cada<xhtml:link>del archivo será inválido. - Cada bloque
<url>debe estar completo por sí mismo. Observa que los dos bloques<url>de arriba enumeran las dos alternativas, incluido su propio<loc>. Cada entrada<url>lleva el conjunto completo (autorreferencia y todas las alternativas). En un sitemap, la reciprocidad significa simplemente que «el bloque de cada URL enumera todas las URL del clúster, incluida ella misma».
Conviene conocer dos comportamientos para no complicar de más el generador: a Google no le importa el orden de los hijos <xhtml:link> dentro de un bloque <url>; no pierdas tiempo ordenándolos. Además, esas anotaciones <xhtml:link> no cuentan para el límite de 50 000 URL por archivo de sitemap, porque son hijas de una entrada <url>, no entradas <url> independientes.
Generación programática. El propósito del método del sitemap es que sea un subproducto de los datos de traducción de tu propio CMS. Si tu CMS ya sabe que /english/page.html y /deutsch/page.html son traducciones equivalentes, el generador del sitemap debe recorrer esa tabla de relaciones y emitir los bloques <xhtml:link> en el momento de compilar o de solicitar el sitemap. Así, hreflang no puede desincronizarse de la realidad: se regenera desde la fuente de verdad cada vez, y añadir un idioma es un cambio de datos, no una edición manual en cientos de páginas.
Para equipos sin recursos de desarrollo, construí una plantilla ligera de Google Sheets en mi guía de hreflang de Ahrefs: una pestaña Setup (elige un idioma predeterminado y hasta cuatro variantes), una pestaña URLs (pega las URL de cada idioma en columnas) y una pestaña Results que genera automáticamente el bloque XML del sitemap. Es la idea de «una única fuente de verdad» hecha realidad para sitios demasiado pequeños como para justificar una integración real con el CMS.
Las reglas que se aplican independientemente del método
Son independientes del método y no negociables.
- Autorreferencia. Cada página (o cada bloque
<url>, o cada cabecera) se enumera a sí misma. Mueller lo presenta como una buena práctica opcional, pero estaba ausente en el 18,0 % de los dominios de mi estudio: automatízalo, no cuesta nada. - Reciprocidad. “Each language version must list itself as well as all other language versions.” (traducción) «Cada versión lingüística debe enumerarse a sí misma y a todas las demás versiones lingüísticas». Y la regla de aplicación: “If two pages don’t both point to each other, the tags will be ignored. This is so that someone on another site can’t arbitrarily create a tag naming itself as an alternative version of one of your pages.” (traducción) «Si dos páginas no apuntan ambas la una a la otra, las etiquetas se ignorarán. Así se evita que alguien de otro sitio cree arbitrariamente una etiqueta que lo nombre como versión alternativa de una de tus páginas». Un solo enlace de retorno ausente descarta la pareja.
- URL absolutas y completamente cualificadas. “Alternate URLs must be fully-qualified, including the transport method (http/https)” (traducción) «Las URL alternativas deben estar completamente cualificadas, incluido el método de transporte (http/https)»:
https://example.com/foo, nunca//example.com/fooni/foo. Y la URL debe coincidir con la forma exacta que Google indexa: protocolo,www, barra final y mayúsculas deben coincidir, o fallará la coincidencia del enlace de retorno.
Introducir correctamente los códigos
“The first code of the hreflang attribute is the language code (in ISO 639-1 format) followed by an optional second code that represents the region code (in ISO 3166-1 Alpha 2 format).” (traducción) «El primer código del atributo hreflang es el código de idioma (en formato ISO 639-1), seguido de un segundo código opcional que representa el código regional (en formato ISO 3166-1 Alpha 2)». Combínalos con un guion: en-US. Puedes orientar por un idioma sin región (es = español en cualquier lugar), pero no puedes orientar solo por región: siempre va primero un idioma.
Los errores que veo con más frecuencia (y que también vi en el conjunto de datos del estudio) son:
en-UKen lugar deen-GB:ukes ucraniano y el código regional del Reino Unido esgb.jpen lugar dejapara japonés, ycnen lugar dezhpara chino.- Códigos de tres letras (
ger,eng) cuando se exige ISO 639-1 de dos letras. - Usar
EU,UNoUKcomo códigos regionales: ninguno es un destino ISO 3166-1 alpha-2 válido.
x-default es el valor reservado para la alternativa: un selector de idioma o una página de inicio que redirige automáticamente y sirve a los usuarios que no coinciden con ninguno de tus idiomas explícitos:
<link rel="alternate" href="https://example.com/" hreflang="x-default" />No es obligatorio. Fue el elemento que más faltaba en mi estudio (el 56,3 % de los dominios lo omitía), pero un x-default ausente no rompe el clúster como lo haría una etiqueta recíproca ausente: Google simplemente recurre a su propia detección de idioma/región para los usuarios sin coincidencia. Añádelo de todos modos: es una casilla de comprobación, no un elemento que rompa el clúster. (Hay un subtema específico sobre x-default en este clúster.)
Implementación a escala: enfoques para CMS y plataformas
WordPress. Yoast SEO no genera hreflang por sí solo. Para emitir etiquetas necesitas un plugin multilingüe: WPML o Polylang. WPML genera automáticamente hreflang para cada página que tiene traducciones, añade un x-default que apunta a la versión en el idioma predeterminado y, de forma predeterminada, inyecta las anotaciones en el sitemap XML. Hay un ajuste en WPML → Languages → SEO Options («Display alternative languages in the HEAD section») si quieres la salida en etiquetas del head en lugar del sitemap o además de él. (Consulta la documentación de WPML sobre su uso con Yoast.)
Shopify. Shopify Markets genera automáticamente etiquetas hreflang enlazadas mutuamente una vez que has configurado los mercados y los idiomas y el contenido está publicado y enlazado en la navegación; así elimina por diseño el modo de fallo más habitual (los enlaces recíprocos ausentes). La pega: las etiquetas automáticas de Markets suelen ser solo de idioma (fr, de) en lugar de idioma-región (fr-FR, fr-CA), lo que se queda corto para marcas que necesitan especificidad regional: francés para Francia, Canadá o Bélgica. Para eso debes pasar a etiquetas <link> manuales en theme.liquid (la documentación de Shopify sobre hreflang muestra el patrón) o a una aplicación; ten cuidado, porque mezclar las etiquetas automáticas de Markets con etiquetas manuales o de una aplicación es una fuente documentada de conflictos. Elige una sola opción.
Personalizado / headless / empresarial. Genera las anotaciones a partir de tu tabla de relaciones de traducción en el momento de compilar o servir, como se describe arriba en la sección del sitemap. Es el mismo principio de «una única fuente de verdad»: hreflang se convierte en una salida calculada a partir de los datos que tu CMS ya conserva, no en un artefacto mantenido a mano que pueda deteriorarse.
Errores de implementación que rompen el clúster
Redirigir automáticamente por geolocalización/IP. Este es un fallo independiente de los errores de sintaxis y es peor. Si rediriges a los visitantes, especialmente a los rastreadores, a una versión según su ubicación percibida, puedes desindexar clústeres regionales completos, porque Googlebot rastrea principalmente desde EE. UU. Como dije en esa presentación de Pubcon: una redirección geográfica «redirigiría los motores de búsqueda al lugar desde el que rastrean. Google, por ejemplo, rastrea principalmente desde EE. UU., así que desindexaríamos de hecho todas las páginas geográficas». También existe un ángulo regulatorio: posible exposición a las normas de la UE contra el geobloqueo. El patrón correcto es redireccionar a usuarios, nunca a rastreadores: detecta y, opcionalmente, redirige a los visitantes humanos, pero permite siempre que los bots lleguen directamente a todas las variantes de URL y deja que hreflang sea la señal de enrutamiento. La guía multirregional de Google recomienda un banner de sugerencia no intrusivo en lugar de la redirección automática por este motivo.
Apuntar hreflang a URL secundarias, redirigidas o excluidas de la indexación. Si cambia la URL de un idioma, se añade la redirección, pero hreflang sigue apuntando a la URL antigua, tu clúster ahora referencia una 301 o una 404 (el 16,9 % de los dominios de mi estudio hacía referencia a páginas rotas o redirigidas). Del mismo modo, cada variante debe declararse a sí misma como URL principal; apuntar hreflang a una URL cuya versión principal queda fuera del clúster o a una página excluida de la indexación rompe el enlace de retorno (el 8,0 % apuntaba a URL secundarias).
Formatos de URL incoherentes. La URL de hreflang y la URL indexada deben ser idénticas byte a byte en su forma: barra final, www, protocolo y mayúsculas incluidos. Un desajuste provoca un fallo de reciprocidad silencioso.
Validar la implementación después del lanzamiento
Mira la fuente renderizada, no solo la fuente original. Si tu hreflang se inyecta mediante JavaScript del lado del cliente, curl o Ctrl+U («Ver código fuente») no mostrará nada, pero las etiquetas existirán en el DOM renderizado. Confírmalo con Inspección de URL de GSC → «Probar URL publicada» → «Ver página probada», o con un rastreador capaz de renderizar. Esta es la razón más habitual por la que alguien dice «faltan mis etiquetas» cuando en realidad funcionan (o al revés: están presentes en el código fuente, pero fallan porque se renderizan en el <body>).
Rastrea todo el clúster, no compruebes una sola URL. La reciprocidad es una relación entre páginas, así que comprobar una página no dice casi nada. Ejecuta un rastreador en todo el clúster —la auditoría de hreflang de Screaming Frog o Ahrefs Site Audit— para detectar etiquetas de retorno ausentes, destinos no canónicos y referencias rotas a escala. La pestaña Hreflangs de Ahrefs Site Audit dibuja el clúster como un grafo con los enlaces rotos en rojo, lo que es mucho más fácil de razonar que un CSV.
Verifica las SERP reales con &hl= y &gl=. Añade los parámetros de idioma del host (&hl=) y geolocalización (&gl=) a una URL de búsqueda de Google para previsualizar cómo se ven realmente los resultados de un idioma, en lugar de adivinar según tu propia ubicación.
La validación no se hace una sola vez. Los idiomas nuevos, los cambios de URL/redirección y la configuración de desarrollo o staging que se filtra a producción son causas recurrentes de roturas tras el lanzamiento. Integra las comprobaciones de hreflang en pruebas de regresión y rastreos periódicos, no solo en una revisión de calidad el día del lanzamiento. Mi formulación en las charlas es: «cualquier cantidad de cosas puede romperse, desde el enmascaramiento hasta elementos que se arrastran de entornos de desarrollo/pruebas/staging».
Mitos que conviene retirar
- «Los sitemaps se procesan más rápido que las etiquetas HTML». Falso. Ambos se resuelven durante el rastreo; lo he desmentido directamente. La ventaja del sitemap es el mantenimiento y la comprobación, no la velocidad.
- «Yandex no admite
hreflangen sitemaps». Falso: la documentación de Yandex confirma que admitehreflangen sitemaps. - «Usa los tres métodos para obtener una señal adicional». No aporta ningún beneficio según Google y multiplica el riesgo de incoherencias.
- «Un
x-defaultausente rompe el clúster». Falso: es opcional; Google recurre a su propia detección. - «Un
hreflangincorrecto provoca una penalización». Falso: es una sugerencia, no una directiva. Unhreflangroto se ignora, no se penaliza.
Qué leer después
Este artículo es la guía práctica detallada del hub de hreflang: el hub explica qué es hreflang, por qué importa la reciprocidad y qué hace Bing en su lugar. El subtema x-default profundiza en el valor alternativo. Para la estrategia que aquí se implementa, consulta el pilar de SEO internacional: hreflang es la capa técnica, no un sustituto de una localización genuina.
Resumen de IA
Una síntesis de la versión Advanced:
- Tres métodos, elige exactamente uno (Google los trata como equivalentes; combinarlos no aporta ningún beneficio):
- Etiquetas
<link>HTML en el<head>: para sitios pequeños o medianos; deben estar en un<head>bien formado, nunca en el<body>; no mezcleshreflangcon otro atributo alternativo comomediaen el mismo elemento<link>. - Cabeceras HTTP
Link:: la única opción para archivos que no son HTML (PDF); se configuran en el servidor/CDN; cada respuesta alternativa debe llevar el mismo conjunto completo, todas las veces. - Sitemap XML
<xhtml:link>: mejor a escala; necesita el espacio de nombresxmlns:xhtml="http://www.w3.org/1999/xhtml"en<urlset>; es fácil de comprobar porque todo el grafo está en un archivo; el orden de los hijos no importa y estos hijos no cuentan para el límite de 50 000 URL del sitemap.
- Etiquetas
- Dos reglas universales: autorreferencia (cada página se enumera a sí misma) y reciprocidad (A→B exige B→A, o la pareja se ignora). Usa URL absolutas y completamente cualificadas que coincidan con la forma exacta indexada.
- Códigos: idioma ISO 639-1 más región ISO 3166-1 alpha-2 opcional (
en-GB, noen-UK;ja, nojp).x-defaultes la alternativa reservada: opcional, pero el elemento que más se omite (56,3 % en mi estudio). - Automatiza desde una única fuente de verdad. WordPress necesita WPML o Polylang (Yoast por sí solo no hace nada); Shopify Markets genera etiquetas recíprocas automáticamente, pero a menudo solo por idioma; una configuración personalizada/headless debe emitir
hreflangdesde la tabla de traducciones. - No redirijas automáticamente a los rastreadores por geolocalización: Googlebot rastrea principalmente desde EE. UU. y podría desindexar los clústeres regionales; redirige a usuarios, nunca a bots.
- Valida el
<head>renderizado, no solo el código fuente (las etiquetas inyectadas por JS no aparecen en el código fuente); rastrea todo el clúster para comprobar la reciprocidad; comprueba los idiomas con&hl=/&gl=y vuelve a comprobarlo después de cada cambio de URL.
Documentación oficial
Documentación de fuentes primarias para implementar hreflang.
- Versiones localizadas de tus páginas — el documento principal de implementación: los tres métodos con sintaxis exacta, el requisito de reciprocidad, los códigos válidos, la regla de URL absolutas y
x-default. Léelo entero antes de construir. - Gestión de sitios multirregionales y multilingües — opciones de estructura de URL y la advertencia sobre redirección automática/encubrimiento (por qué no debes redirigir geográficamente a los rastreadores).
- Informa a Google sobre las versiones localizadas (artículo sobre x-default, 2013) — la introducción original de
x-default. - Retirada del informe Segmentación internacional (septiembre de 2022) — el informe antiguo ya no existe; las etiquetas hreflang siguen funcionando.
Bing / Microsoft
- Bing Webmaster Guidelines — las directrices de Bing; observa que Bing se apoya en
content-languagey<html lang>más que en hreflang. - Bingbot Series: Maximizing Crawl Efficiency — contexto sobre cómo gestiona Bing los sitios internacionales y multilingües.
CMS / plataforma
- WPML — Uso de WordPress SEO (Yoast) con WPML — cómo emite WPML hreflang (ajuste de salida en head o sitemap).
- Shopify — Añadir etiquetas hreflang al tema — el patrón manual de
<link>entheme.liquid.
Citas de la fuente
Declaraciones públicas relevantes para la implementación. Cada enlace de documentación de Google es un enlace profundo que salta al pasaje citado de la página activa.
Google: los tres métodos
- “The three methods are equivalent from Google’s perspective and you can choose the method that’s the most convenient for your site.” (traducción) «Los tres métodos son equivalentes desde la perspectiva de Google y puedes elegir el que sea más cómodo para tu sitio». — Documentación de Google Search Central. Ir a la cita
Google: ubicación
- “The
<link>tags must be inside a well-formed<head>section of the HTML.” (traducción) «Las etiquetas<link>deben estar dentro de una sección<head>bien formada del HTML». — Documentación de Google Search Central. Ir a la cita
Google: las dos reglas
- “Each language version must list itself as well as all other language versions.” (traducción) «Cada versión lingüística debe enumerarse a sí misma y a todas las demás versiones lingüísticas». — Documentación de Google Search Central. Ir a la cita
- “If two pages don’t both point to each other, the tags will be ignored.” (traducción) «Si dos páginas no apuntan ambas la una a la otra, las etiquetas se ignorarán». — Documentación de Google Search Central. Ir a la cita
- “Alternate URLs must be fully-qualified, including the transport method (http/https).” (traducción) «Las URL alternativas deben estar completamente cualificadas, incluido el método de transporte (http/https)». — Documentación de Google Search Central. Ir a la cita
Google: códigos
- “The first code of the hreflang attribute is the language code (in ISO 639-1 format) followed by an optional second code that represents the region code (in ISO 3166-1 Alpha 2 format).” (traducción) «El atributo hreflang comienza con el código de idioma en formato ISO 639-1 y puede llevar después un segundo código opcional para la región, en formato ISO 3166-1 Alpha 2». — Documentación de Google Search Central. Ir a la cita
John Mueller, Google: es una sugerencia, no una directiva
- Sobre las etiquetas autorreferentes: las autorreferencias hreflang se presentan como opcionales, pero como una buena práctica. — John Mueller, Google, transmitido mediante mi guía de hreflang de Ahrefs.
- Sobre que la corrección no garantiza el resultado (mayo de 2025, Bluesky): Mueller señaló que hreflang no garantiza la indexación, por lo que una variante podría simplemente no estar indexada, y que las variantes en el mismo idioma (como
fr-fryfr-be) suelen consolidarse. — Transmitido mediante la cobertura de Search Engine Journal.
¿Qué método de implementación debo usar?
Trabaja de arriba abajo y detente en la primera coincidencia.
1. ¿Las páginas son archivos que no son HTML (PDF, documentos o imágenes servidos directamente)?
→ Sí → cabeceras HTTP Link:. No tienen <head>, así que esta es tu única opción. Configura la cabecera en el servidor/CDN y enumera el conjunto completo en cada archivo.
→ No → continúa.
2. ¿Tienes más de unos pocos idiomas, un pipeline de sitemap existente o una compilación headless/JAMstack?
→ Sí → sitemap XML <xhtml:link>. Genéralo mediante programación a partir de tu tabla de traducciones. Un archivo generado por la máquina, sin marcado por página y más fácil de revisar.
→ No → continúa.
3. ¿Es un sitio pequeño y sencillo, con pocos idiomas, y prefieres que todo sea visible en la página?
→ Etiquetas HTML <link> en el <head>. Asegúrate de que el bloque se genere a partir de una única fuente de verdad y quede dentro de un <head> bien formado.
Elijas lo que elijas: úsalo por sí solo. Google dice que combinar métodos no aporta ningún beneficio, y cada copia adicional es otra oportunidad para que los tres discrepen.
¿Necesito x-default?
¿Tienes una página que atienda a los usuarios que no coinciden con ninguno de tus idiomas explícitos: un selector de país/idioma o una página de inicio global?
→ Sí → añade x-default apuntando a esa página alternativa.
→ No → puedes omitirlo. Es opcional; Google recurre a su propia detección. No romperá el clúster (a diferencia de una etiqueta recíproca ausente). Aun así, añadirlo es una buena práctica: fue el elemento que más se omitió en mi estudio (56,3 %).
¿Debo redirigir automáticamente a los usuarios según su ubicación?
¿Estás pensando en redirigir según la IP o la geolocalización? → Redirige solo a los visitantes humanos y prefiere un banner no intrusivo en lugar de una redirección forzada. → Nunca redirijas a los rastreadores por geolocalización. Googlebot rastrea principalmente desde EE. UU., por lo que una redirección geográfica para rastreadores puede desindexar tus otras versiones regionales; además, conlleva el riesgo de que se clasifique como encubrimiento y de exposición a las normas de la UE contra el geobloqueo. Deja que los bots lleguen directamente a todas las variantes de URL; hreflang es la señal de enrutamiento.
¿Qué ruta de CMS se aplica a mi caso?
- ¿WordPress? → Yoast por sí solo no hace nada. Instala WPML o Polylang; emiten hreflang (en WPML, elige la salida en el head o en el sitemap dentro de los ajustes de SEO).
- ¿Shopify? → Markets genera automáticamente etiquetas recíprocas, pero a menudo solo por idioma. ¿Necesitas
fr-FRfrente afr-CA? Añade etiquetas manuales entheme.liquido una aplicación, y no mezcles ambas opciones (riesgo de conflicto). - ¿Personalizado/headless? → Emite
<xhtml:link>(o etiquetas en el head) desde tu tabla de relaciones de traducción al compilar o servir.
SOP: publica un clúster de hreflang desde cero
Un procedimiento repetible para añadir un clúster de hreflang nuevo (o un idioma nuevo a uno existente). Ejecútalo de arriba abajo.
1. Crea la matriz de idiomas (una única fuente de verdad).
Enumera en un solo lugar cada URL y su código de idioma-región: una tabla de base de datos, un campo de traducción del CMS o una hoja de cálculo. Confirma que cada URL tenga la forma canónica e indexada (protocolo correcto, www, barra final y mayúsculas/minúsculas). Esta tabla es la entrada de todo lo demás; aguas abajo no se escribe nada a mano.
2. Elige un método usando el árbol de decisiones. No combines métodos.
3. Genera las anotaciones a partir de la matriz.
- HTML: emite el bloque de
<link>en el<head>de cada página a partir de la matriz. - Sitemap: emite cada bloque
<url>con el espacio de nombresxmlns:xhtmlen<urlset>. - Cabeceras: emite la cabecera
Link:desde la matriz en el servidor/CDN.
4. Verifica mediante programación las dos reglas antes de publicar. Cada entrada debe (a) incluir una autorreferencia y (b) enumerar todas las demás entradas del clúster. Confirma la reciprocidad: para cada A→B debe existir una B→A correspondiente.
5. Añade x-default si tienes una página de selección o una alternativa global.
6. Publica y después valida la salida renderizada (consulta la guía de validación detallada en los playbooks): head renderizado (no código fuente), un rastreo de todo el clúster para comprobar la reciprocidad y una comprobación puntual de SERP con &hl=/&gl=.
7. Intégralo en las comprobaciones continuas. Añade un rastreo recurrente o una prueba de regresión para que un cambio de URL futuro o un idioma nuevo no pueda deteriorar silenciosamente una etiqueta de retorno. La validación no es algo que se haga una sola vez.
Al añadir un idioma más adelante: solo editas la matriz (paso 1) y vuelves a ejecutar los pasos 3–6. Si editas manualmente páginas individuales para añadir un idioma, tu fuente de verdad es incorrecta: corrígela primero.
Playbook: «Mi hreflang no funciona» — guía de validación
Ejecuta estos pasos en orden. Cada uno encuentra el problema o descarta una sospecha.
Paso 1 — Confirma que las etiquetas realmente se renderizan. Abre la página y consulta el DOM renderizado (GSC Inspección de URL → Probar URL publicada → Ver página probada, o un rastreador con renderizado). No dependas de Ctrl+U, «Ver código fuente»: si hreflang se inyecta mediante JS, no aparecerá allí aunque esté activo.
- Etiquetas presentes en el head renderizado → ve al paso 3.
- Etiquetas ausentes del head renderizado → paso 2.
Paso 2 — ¿Las etiquetas están en el <head> o en el <body>?
Si las etiquetas existen en el código fuente, pero están dentro de <body>, no son válidas. Es probable que una etiqueta <p> mal formada o inyectada, o un iframe, haya cerrado el <head> antes de tiempo. Usa puntos de interrupción del DOM en el navegador para encontrar dónde se rompe el <head>, corrige ese marcado y vuelve a comprobarlo.
Paso 3 — Comprueba que las URL sean absolutas y canónicas.
Cada href debe estar totalmente cualificado (https://…) y ser idéntico byte a byte a la forma indexada (protocolo, www, barra final y mayúsculas/minúsculas). Confirma que ninguna apunte a una URL con 301, 404, noindex o que haya sido descartada por una canonicalización.
Paso 4 — Comprueba la reciprocidad en todo el clúster. Rastrea el clúster completo (Screaming Frog / Ahrefs Site Audit). Para cada A→B, verifica que exista una B→A correspondiente y que cada página se autorreferencie. Aquí es donde se producen la mayoría de las roturas: una sola etiqueta de retorno ausente elimina la pareja.
Paso 5 — Valida los códigos.
Confirma el idioma ISO 639-1 y la región ISO 3166-1 alpha-2. Busca específicamente en-UK (→ en-GB), jp (→ ja), códigos de tres letras y códigos que solo indiquen región.
Paso 6 — Descarta las redirecciones geográficas. Confirma que los rastreadores no estén siendo redirigidos por geolocalización. Si Googlebot (que rastrea desde EE. UU.) acaba en tu versión de EE. UU., quizá nunca se llegue a tus otras URL regionales.
Paso 7 — Ajusta las expectativas si el clúster es técnicamente correcto.
Si todo lo anterior está bien y las variantes en el mismo idioma (por ejemplo, fr-fr / fr-be) siguen consolidándose en los informes, es lo esperado: Google puede consolidar variantes casi idénticas del mismo idioma independientemente de la implementación. Es una señal, no una instrucción; un hreflang incorrecto o ignorado no es una penalización. Deja de perseguirlo como si fuera un error.
Antipatrones de implementación
Errores concretos, por qué están mal y qué hacer en su lugar.
1. Mantener hreflang a mano en cada página. Por qué está mal: en cuanto una plantilla o un idioma se desvíe, faltarán etiquetas de retorno y se eliminarán parejas: deterioro de la reciprocidad a escala. Qué hacer: genera cada anotación a partir de una única fuente de verdad (tabla de traducciones, campo del CMS o la plantilla de Sheets para sitios pequeños), de modo que se regenere todo el clúster en lugar de editarlo.
2. Usar los tres métodos como «señal adicional». Por qué está mal: Google dice que no aporta ningún beneficio, y tres copias de la verdad significan tres oportunidades para que discrepen. Qué hacer: elige un método y úsalo por sí solo.
3. Redirigir automáticamente a los rastreadores por geolocalización/IP. Por qué está mal: Googlebot rastrea principalmente desde EE. UU., por lo que una redirección geográfica para rastreadores puede desindexar por completo tus otros clústeres regionales; además, existe el riesgo de encubrimiento y de incumplir las normas de la UE contra el geobloqueo. Qué hacer: redirige (o, mejor, muestra un banner) solo a los usuarios, nunca a los rastreadores. Deja que los bots lleguen directamente a todas las URL y que hreflang transmita la señal.
4. Apuntar hreflang a URL secundarias, redirigidas o excluidas de la indexación.
Por qué está mal: el enlace de retorno resuelve a una página con 301, 404 o excluida de la indexación, así que la pareja se rompe (en mi estudio, el 16,9 % apuntaba a páginas rotas/redirigidas y el 8,0 % a páginas secundarias).
Qué hacer: cada variante debe señalar su propia URL como principal; hreflang debe apuntar solo a URL activas, principales e indexables, y regenerarse cada vez que cambien las URL.
5. URL relativas o relativas al protocolo.
Por qué está mal: Google exige URL totalmente cualificadas; /foo y //example.com/foo son inválidas, e incluso las formas absolutas pero no coincidentes (barra, www o mayúsculas/minúsculas incorrectos) impiden la coincidencia de reciprocidad.
Qué hacer: usa siempre https://example.com/foo, con la forma exacta indexada.
6. Confiar en «Ver código fuente» para validar.
Por qué está mal: hreflang inyectado mediante JS no aparece en el código fuente sin procesar, así que puedes creer que falta (cuando no es así) o no darte cuenta de que se renderiza en el <body> (lo cual es inválido).
Qué hacer: valida el DOM renderizado mediante la Inspección de URL de GSC o un rastreador con renderizado.
7. Códigos de idioma incorrectos o inventados.
Por qué está mal: en-UK, jp, ger y los códigos que solo indican región son inválidos y se ignoran.
Qué hacer: usa el idioma ISO 639-1 y, opcionalmente, la región ISO 3166-1 alpha-2: en-GB, ja, de, es-MX.
Antes / después
1. Falta la etiqueta recíproca (el caso clásico). Antes: la página de EE. UU. enumera EE. UU. + Reino Unido + DE, pero la plantilla de la página alemana solo enumera DE + EE. UU.; olvidó el enlace de retorno al Reino Unido. Google elimina la pareja DE↔UK. Después: el bloque de la página alemana enumera DE + EE. UU. + Reino Unido (todos con autorreferencia y reciprocidad). Se regeneró a partir de la tabla de idiomas para que no vuelva a desviarse.
2. URL relativas.
Antes: <link rel="alternate" hreflang="de" href="/de/" /> — es relativa, así que no es válida y se ignora.
Después: <link rel="alternate" hreflang="de" href="https://example.com/de/" /> — está totalmente cualificada y coincide con la forma indexada.
3. Código incorrecto para Reino Unido.
Antes: <link rel="alternate" hreflang="en-uk" href="https://example.com/uk/" /> — uk es ucraniano; la anotación no es válida.
Después: <link rel="alternate" hreflang="en-gb" href="https://example.com/uk/" />.
4. Falta el espacio de nombres en el sitemap.
Antes: un sitemap que usa entradas <xhtml:link>, pero cuyo <urlset> solo declara el espacio de nombres base de sitemaps; cada <xhtml:link> es inválido.
Después: <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml"> — se declara el espacio de nombres xhtml, por lo que las anotaciones se validan.
Prompts de IA listos para copiar
Adapta los marcadores de posición y pégalos en el asistente que prefieras. Valida siempre la salida mediante un rastreo real: un LLM puede generar códigos plausibles pero incorrectos u omitir un enlace de retorno.
Genera un bloque HTML <head> a partir de una matriz de locales
I have these language/region page variants:
- en-US: https://example.com/us/
- en-GB: https://example.com/uk/
- de: https://example.com/de/
- global fallback / selector: https://example.com/
For EACH page above, output the complete hreflang <link> block that belongs in its
<head>. Every block must (a) self-reference, (b) list all other variants, and
(c) include an x-default pointing at the fallback. Use fully-qualified https URLs
exactly as given. Validate the codes as ISO 639-1 language + ISO 3166-1 alpha-2
region and flag any that look wrong.Convierte la misma matriz en un bloque de sitemap XML
Using the same variant list, output an XML sitemap that uses <xhtml:link> hreflang
annotations. Requirements: declare xmlns:xhtml="http://www.w3.org/1999/xhtml" on
<urlset>; give every <url> block a full self-referencing + all-alternates set; use
the exact URLs provided. Do not add any URL not in my list.Audita un grupo pegado para comprobar la reciprocidad y los errores de código
Here are the hreflang tags from each page in my cluster: [paste each page's URL and
its hreflang tags]. Check for: missing self-reference, missing reciprocal (A->B
without B->A), invalid ISO codes, relative/protocol-relative URLs, and any URL that
appears with inconsistent formatting (trailing slash / www / case). List each issue
with the exact page and tag it's on. Do not assume tags I didn't paste. Fragmentos de extracción, consola y generación
Fragmentos prácticos de una línea para crear y comprobar hreflang. Ajusta las URL antes de ejecutarlos.
Consola de Chrome DevTools — enumera las etiquetas hreflang de la página actual Pégalo en la consola (F12 → Consola) de cualquier página para ver lo que el navegador realmente renderizó; esto refleja las etiquetas inyectadas mediante JS que «Ver código fuente» no muestra:
[...document.querySelectorAll('link[rel="alternate"][hreflang]')]
.map(l => ({ hreflang: l.hreflang, href: l.href,
inHead: !!l.closest('head') }));La marca inHead permite detectar el error de ruptura del <head>: cualquier etiqueta que muestre inHead: false se está renderizando en el <body> y es inválida.
Bookmarklet — la misma comprobación con un clic Guárdalo como marcador con esta URL y haz clic en él en cualquier página:
javascript:(()=>{const t=[...document.querySelectorAll('link[rel="alternate"][hreflang]')].map(l=>`${l.hreflang} ${l.href} ${l.closest('head')?'(head)':'(BODY - INVALID)'}`);alert(t.length?t.join('\n'):'No hreflang tags found');})();XPath — selecciona los enlaces hreflang dentro del head (para un rastreador o inspector del navegador)
//head/link[@rel='alternate' and @hreflang]Si un rastreador encuentra coincidencias link[@hreflang] bajo //body, eso indica el error de ruptura del head.
Regex — extrae el código hreflang y la URL del HTML sin procesar (grep rápido, no un parser real)
<link[^>]*rel=["']alternate["'][^>]*hreflang=["']([^"']+)["'][^>]*href=["']([^"']+)["']El grupo de captura 1 es el código y el grupo 2, la URL. Úsalo solo para una comprobación rápida; analiza el HTML real con una biblioteca DOM, no con regex.
curl — comprueba hreflang en las cabeceras HTTP Link: de la respuesta (caso PDF/no HTML)
curl -sI https://example.com/file.pdf | grep -i '^link:'Python — genera un bloque <head> de hreflang coherente consigo mismo a partir de una matriz
variants = {
"en-us": "https://example.com/us/",
"en-gb": "https://example.com/uk/",
"de": "https://example.com/de/",
"x-default": "https://example.com/",
}
# Every page gets the SAME full block (self-reference + all alternates),
# which is exactly what satisfies reciprocity.
block = "\n".join(
f'<link rel="alternate" hreflang="{code}" href="{url}" />'
for code, url in variants.items()
)
print(block) Ponte a prueba: implementación de hreflang
Cinco preguntas rápidas sobre cómo crear correctamente un clúster de hreflang. Elige una respuesta para cada una y después compruébala.
Recursos que merecen tu tiempo
Mis artículos relacionados
- Hreflang: guía fácil para principiantes — mi guía de Ahrefs con los tres métodos, los nueve problemas habituales de implementación y sus soluciones, y la plantilla de Google Sheets para generar hreflang de forma semiautomática a escala.
- Más del 67 % de los dominios que usan hreflang tienen problemas — mi estudio de 374 756 dominios, el mayor realizado hasta la fecha, y la fuente del desglose de tasas de error (falta x-default 56,3 %, falta de autorreferencia 18,0 %, destinos rotos/redirigidos 16,9 %, falta de reciprocidad 15,3 %, no canónicos 8,0 %, códigos incorrectos 4,6 %).
Mis charlas
- SEO internacional: los aspectos técnicos extraños — Pubcon Vegas 2019 — la fuente de implementación más completa: el error de ruptura del
<head>(las etiquetas pasan al<body>por iframes o marcado mal formado) y la depuración con puntos de interrupción del DOM, por qué el mito de que «los sitemaps son más rápidos» es falso, el riesgo de desindexación de las redirecciones geográficas y la técnica de comprobación de SERP con&hl=/&gl=. - Estudio de hreflang y problemas interesantes — Brighton SEO 2023 — la presentación en la que se basa el estudio, además del orden de coincidencia más específico de Google (idioma+país → idioma → x-default) y los errores de códigos más comunes del conjunto de datos.
- Vas a equivocarte con el SEO internacional — Pubcon Vegas 2017 — el caos del ecosistema de implementación: herramientas que informan datos incorrectos, contenido servido desde URL distintas de las indexadas y trampas de páginas duplicadas.
Del sector
- Versiones localizadas de tus páginas, de Google — el documento principal de implementación: sintaxis exacta de los tres métodos, reglas de reciprocidad y autorreferencia, códigos válidos y requisito de URL absolutas. Léelo entero antes de construir.
- Gestión de sitios multirregionales y multilingües, de Google — opciones de estructura de URL y la advertencia sobre la redirección automática y el encubrimiento que explica «redirige a usuarios, no a rastreadores».
- WPML — Uso de WordPress SEO (Yoast) con WPML — cómo emite WordPress hreflang (Yoast por sí solo no lo hace) y el ajuste de salida en head o sitemap.
- Shopify — Añadir etiquetas hreflang al tema — el patrón manual de
<link>entheme.liquidcuando las etiquetas de idioma de Shopify Markets no son suficientemente específicas. - Screaming Frog — Cómo auditar y probar hreflang — el flujo de trabajo basado en rastreo para confirmar la reciprocidad en todo un clúster, en lugar de comprobar una sola URL.
- Google recuerda que las etiquetas hreflang son sugerencias, no directivas — Search Engine Journal, mayo de 2025, sobre la aclaración de Mueller acerca de la consolidación de variantes en el mismo idioma (por qué un clúster técnicamente perfecto aún puede consolidarse).
- r/TechSEO — la comunidad para depurar clústeres de hreflang rotos.
Demuestra que el clúster de hreflang se publicó realmente
Hreflang falla silenciosamente: las etiquetas pueden estar presentes y bien formadas y aun así ignorarse si falta el retorno. «Está en el código» no es la prueba: lo es la reciprocidad en todo el clúster. Ejecuta estas comprobaciones después de publicar un conjunto de idiomas o regiones.
Prueba 1 — Cada pareja devuelve la etiqueta (reciprocidad)
- Prueba que debes ejecutar — rastrea todo el clúster con returntag (comprueba que cada página a la que apunta A apunte a su vez a A) o ejecuta el informe de hreflang de Screaming Frog en todo el conjunto.
- Resultado esperado — 0 parejas no recíprocas y todas las URL se autorreferencian. Cero errores, no «unos pocos».
- Interpretación del fallo — una pareja unidireccional (A → B, pero B no → A) significa que Google descarta esa pareja: es el fallo real más común y resulta invisible si solo compruebas el código fuente de una URL.
- Ventana de monitorización — inmediata para las etiquetas renderizadas; el comprobador lee lo que está activo ahora.
- Disparador de reversión — cualquier pareja no recíproca o cualquier etiqueta que apunte a una URL que redirija permanentemente o devuelva un error de página no encontrada: corrige la fuente de verdad y vuelve a publicar antes de esperar a Google.
Prueba 2 — Google lo está procesando correctamente
- Prueba que debes ejecutar — Google retiró el antiguo informe de Orientación internacional de Search Console en septiembre de 2022, así que no dependas de él: consulta Indexación de páginas para cada idioma del clúster y confirma mediante Inspección de URL en una muestra que la canonical seleccionada por Google y la línea de estado de indexación coincidan con lo esperado para ese idioma.
- Resultado esperado — las páginas previstas de cada idioma están indexadas (no aparecen como «Duplicada; Google eligió una canonical diferente» de una forma que colapse distintas versiones lingüísticas) y la Inspección de URL muestra la alternativa esperada.
- Interpretación del fallo — las páginas que aparecen como duplicados de la canonical de otro idioma, o la indexación agrupada/consolidada, suelen deberse a un retorno roto (vuelve a comprobar la prueba 1), no al propio hreflang: es una sugerencia, no una directiva, por lo que Google aún puede consolidar un clúster técnicamente perfecto si considera que el contenido es casi duplicado.
- Ventana de monitorización — 2–4 semanas: Search Console vuelve a rastrear e informa sobre el clúster con el tiempo, no al instante.
- Disparador de reversión — las páginas de un idioma se indexan sistemáticamente con la canonical equivocada o aparece la URL regional incorrecta para una consulta: vuelve a auditar primero la reciprocidad; no supongas que las etiquetas «no funcionan» cuando la carencia real está en el enlace de retorno.
Registro de cambios
Actualizado el 22 ago 2026.
Resumen editorial y detalles registrados del cambio.Detalles del cambio
-
Los detalles del cambio están disponibles actualmente en inglés.
La comparación completa no está disponible: no se archivó una instantánea anterior para esta revisión.
Actualizado el 9 ago 2026.
Resumen editorial y detalles registrados del cambio.Detalles del cambio
-
Los detalles del cambio están disponibles actualmente en inglés.
La comparación completa no está disponible: no se archivó una instantánea anterior para esta revisión.
Actualizado el 25 jul 2026.
Resumen editorial y detalles registrados del cambio.Detalles del cambio
-
Los detalles del cambio están disponibles actualmente en inglés.
La comparación completa no está disponible: no se archivó una instantánea anterior para esta revisión.
Actualizado el 18 jul 2026.
Resumen editorial y detalles registrados del cambio.Detalles del cambio
-
Los detalles del cambio están disponibles actualmente en inglés.
-
Los detalles del cambio están disponibles actualmente en inglés.
-
Los detalles del cambio están disponibles actualmente en inglés.
-
Los detalles del cambio están disponibles actualmente en inglés.
La comparación completa no está disponible: no se archivó una instantánea anterior para esta revisión.