Internacionalización SEO (10 Reglas): Atributo lang, Hreflang y Errores de Validación
Tienes una web multilingüe o multirregional y Google sigue mostrando la versión equivocada a tus usuarios. O peor: estás indexando páginas duplicadas porque los motores de búsqueda no entienden cuál es la versión canónica para cada idioma. La internacionalización SEO es uno de esos terrenos donde un error técnico pequeño puede arruinar toda una estrategia de posicionamiento internacional.
Esta guía cubre las 10 reglas de internacionalización SEO que Google evalúa en cada página de tu web: desde el atributo lang en el HTML hasta los errores más habituales en la implementación de hreflang (return links rotos, conflictos, mismatches y métodos múltiples). Si tu sitio tiene presencia en más de un idioma o en más de un país, esta auditoría es obligatoria antes de dar un solo paso más en tu ascenso digital.
Esta guía es para SEOs técnicos, desarrolladores web y responsables de marketing que gestionan webs multilingües y quieren evitar los errores que hacen que Google ignore o malinterprete sus señales de internacionalización.
Aprende más sobre SEO técnico →
Tabla de contenidos
Regla 1: Atributo lang en la etiqueta HTML
Severidad: ❌ Fallo crítico
¿Qué es?
El atributo lang en la etiqueta <html> es la señal más básica y directa que le das a los motores de búsqueda sobre el idioma de tu página. Se declara en la apertura del documento HTML y debe seguir el estándar BCP-47 (también conocido como etiquetas de idioma IETF), que define códigos de idioma como es para español genérico o es-ES para español de España.
<!-- ✅ Correcto: español de España -->
<html lang="es-ES">
<!-- ✅ Correcto: español genérico -->
<html lang="es">
<!-- ✅ Correcto: inglés de EE. UU. -->
<html lang="en-US">
<!-- ❌ Incorrecto: atributo ausente -->
<html>
<!-- ❌ Incorrecto: código inválido -->
<html lang="spanish">
<!-- ❌ Incorrecto: código en mayúsculas (aunque lo tolera, no es el estándar) -->
<html lang="ES">
¿Por qué importa para el SEO?
El atributo lang cumple tres funciones críticas:
- Le dice a Google en qué idioma está escrita la página, lo que influye directamente en para qué búsquedas se muestra y a qué usuarios.
- Activa las preferencias de idioma del navegador, lo que afecta a la accesibilidad y a la experiencia del usuario.
- Es el primer nivel de consistencia en una estrategia hreflang: si el
lang del HTML no coincide con los idiomas declarados en hreflang, Google detecta una contradicción.
Según la documentación oficial de Google Search Central, la ausencia del atributo lang no impide necesariamente que Google indexe la página en el idioma correcto, ya que el motor analiza el contenido. Sin embargo, su presencia es una buena práctica consolidada que refuerza la señal de idioma y reduce la ambigüedad.
Para webs multilingües donde cada URL tiene un idioma distinto, la ausencia o el error en el atributo lang puede hacer que Google muestre la página en resultados del idioma equivocado, hundiendo la visibilidad en ese mercado.
Cómo detectarlo
- Vista de código fuente: abre cualquier página (
Ctrl+U en Chrome) y busca la etiqueta de apertura <html. Verifica que incluye lang="..." con un código válido. - Screaming Frog: en la pestaña “Custom” → “Custom Extraction”, configura un extractor con el XPath
//html/@lang para extraer el atributo lang de todas las páginas rastreadas y exportarlo a CSV. - SEOmator: la regla
i18n-lang-attribute detecta automáticamente páginas sin atributo lang o con valores inválidos en cualquier crawl. - Validador del W3C: validator.w3.org señala la ausencia del atributo lang como advertencia.
Cómo corregirlo
- Identifica el sistema de plantillas o CMS que genera el
<html> de tu web. - Añade el atributo
lang con el código BCP-47 correspondiente al idioma principal de cada versión de la web. - En webs Astro, WordPress, Next.js u otros frameworks, este atributo suele configurarse en el layout principal o en el componente raíz del documento.
- Verifica que el código de idioma es válido consultando el registro oficial de subetiquetas de idioma de la IANA.
- Si tienes páginas en varios idiomas bajo el mismo dominio, asegúrate de que cada template usa el
lang correcto para su idioma.
Ejemplo en Astro:
<!-- src/layouts/Layout.astro -->
<html lang="es-ES">
<head>...</head>
<body>...</body>
</html>
Ejemplo en Next.js (next.config.js):
module.exports = {
i18n: {
locales: ['es-ES', 'en-US', 'fr-FR'],
defaultLocale: 'es-ES',
},
}
Regla 2: Presencia y validez del hreflang
Severidad: ⚠️ Aviso (obligatorio para webs multilingües)
¿Qué es?
El hreflang es una etiqueta HTML (o entrada en sitemap XML, o cabecera HTTP) que le indica a Google qué versiones alternativas de una página existen para distintos idiomas o regiones. Cada anotación declara: “para usuarios que hablan X idioma (o están en X país), la versión correcta de esta página es esta URL”.
<!-- ✅ Correcto: set completo de hreflang en <head> -->
<link rel="alternate" hreflang="es-ES" href="https://ejemplo.com/es/" />
<link rel="alternate" hreflang="es-MX" href="https://ejemplo.com/es-mx/" />
<link rel="alternate" hreflang="en-US" href="https://ejemplo.com/en/" />
<link rel="alternate" hreflang="x-default" href="https://ejemplo.com/" />
<!-- ❌ Incorrecto: código de idioma inválido -->
<link rel="alternate" hreflang="español" href="https://ejemplo.com/es/" />
<!-- ❌ Incorrecto: falta x-default en webs que lo necesitan -->
<link rel="alternate" hreflang="es" href="https://ejemplo.com/es/" />
<link rel="alternate" hreflang="en" href="https://ejemplo.com/en/" />
Los códigos válidos son etiquetas BCP-47: es, es-ES, es-MX, en, en-US, en-GB, fr, de, pt-BR, etc. El valor especial x-default señala la versión fallback para usuarios sin versión de idioma específica.
¿Por qué importa para el SEO?
El hreflang resuelve uno de los problemas más graves del SEO internacional: el contenido duplicado entre versiones de idioma o región. Sin hreflang, Google puede:
- Decidir cuál versión indexar de forma arbitraria, ignorando las demás.
- Mostrar la versión en inglés a usuarios hispanohablantes y viceversa.
- Penalizar las páginas por contenido duplicado cuando el texto es muy similar entre versiones regionales (por ejemplo,
es-ES y es-MX).
Además, el hreflang bien implementado mejora la experiencia del usuario al recibir los resultados de búsqueda en su idioma y región correctos, lo que se traduce en menor tasa de rebote y mayor conversión.
Cómo detectarlo
- Google Search Console: en “Mejoras” → “Internacional” puedes ver errores de hreflang detectados por Google en tu sitio.
- Screaming Frog: la pestaña “Hreflang” muestra todas las anotaciones encontradas, sus URLs de destino y si están bien formadas.
- SEOmator: la regla
i18n-hreflang audita presencia, formato y validez de los códigos de idioma en todas las páginas rastreadas. - Ahrefs Site Audit: incluye un módulo específico de hreflang con todos los errores categorizados.
Cómo corregirlo
- Define la arquitectura de idiomas/regiones de tu web: qué idiomas tienes, bajo qué URLs, y si necesitas subdirectorios (
/es/), subdominios (es.ejemplo.com) o dominios separados (ejemplo.es). - Para cada página, implementa un set completo de etiquetas hreflang en el
<head>, incluyendo una entrada que apunte a sí misma. - Usa siempre
x-default si tienes una versión fallback o una página de selección de idioma. - Valida los códigos con la herramienta de validación de hreflang de Aleyda Solis antes de publicar.
Ejemplo de set correcto con autorreferencia:
<!-- En https://ejemplo.com/es/pagina/ -->
<link rel="alternate" hreflang="es-ES" href="https://ejemplo.com/es/pagina/" />
<link rel="alternate" hreflang="en-US" href="https://ejemplo.com/en/page/" />
<link rel="alternate" hreflang="x-default" href="https://ejemplo.com/en/page/" />
Regla 3: Return links recíprocos en hreflang
Severidad: ❌ Fallo crítico
¿Qué es?
Esta es la regla más incumplida en toda la internacionalización SEO. Google exige que el hreflang sea bidireccional: si la página A indica que la página B es su alternativa en inglés, entonces la página B debe indicar que la página A es su alternativa en español. Sin este enlace de retorno (return link), Google considera que el set de hreflang está roto y lo ignora.
<!-- Página A: https://ejemplo.com/es/pagina/ -->
<link rel="alternate" hreflang="es-ES" href="https://ejemplo.com/es/pagina/" />
<link rel="alternate" hreflang="en-US" href="https://ejemplo.com/en/page/" />
<!-- ✅ Página B CORRECTA: https://ejemplo.com/en/page/ -->
<!-- Tiene return link apuntando de vuelta a página A -->
<link rel="alternate" hreflang="en-US" href="https://ejemplo.com/en/page/" />
<link rel="alternate" hreflang="es-ES" href="https://ejemplo.com/es/pagina/" />
<!-- ❌ Página B INCORRECTA: https://ejemplo.com/en/page/ -->
<!-- No tiene referencia a la página en español -->
<link rel="alternate" hreflang="en-US" href="https://ejemplo.com/en/page/" />
¿Por qué importa para el SEO?
Google lo explica con claridad en su guía de hreflang: el motor valida los sets de hreflang comprobando que todas las páginas referenciadas se referencian mutuamente. Si una página del set no devuelve el enlace, Google asume que el set es inconsistente y no procesa la señal.
El resultado práctico es que los errores de return links hacen que Google muestre páginas en idiomas erróneos aunque hayas implementado hreflang en tu web. Este error pasa desapercibido en muchos proyectos porque la página “parece bien configurada” si solo miras una de las versiones.
El error es especialmente frecuente cuando:
- Se añaden nuevas páginas en un idioma sin actualizar las páginas de los otros idiomas.
- El CMS genera hreflang dinámicamente pero solo para las páginas que existen en todos los idiomas.
- Un redactor publica una entrada del blog solo en español y no en inglés, dejando la versión española sin return link posible.
Cómo detectarlo
- Screaming Frog: en la pestaña “Hreflang” → “Issues” verás una categoría específica “Missing Return Link” con todas las URLs afectadas.
- SEOmator: la regla
i18n-hreflang-return-links detecta y reporta exactamente qué páginas tienen return links rotos o ausentes. - Google Search Console: en el informe de cobertura, busca el error “La página está en hreflang pero el idioma de la página no se puede determinar”.
- Validación manual: accede a la URL de destino referenciada en el hreflang y comprueba que su
<head> contiene una etiqueta hreflang que apunta de vuelta a la página original.
Cómo corregirlo
- Haz un crawl completo con Screaming Frog o SEOmator para extraer todos los sets de hreflang.
- Exporta los datos a una hoja de cálculo y cruza las URLs de origen con las URLs de destino para identificar qué pares no son recíprocos.
- Añade las etiquetas hreflang faltantes en las páginas de destino que no tienen return links.
- Si usas un CMS, revisa si la lógica de generación de hreflang considera solo las páginas que existen en todos los idiomas, o si genera referencias a páginas que no tienen traducción.
- Establece un proceso editorial: cuando se publique contenido solo en un idioma, o bien se crea la traducción antes de publicar, o bien no se añade hreflang hasta que exista la versión en el otro idioma.
Regla 4: Hreflang apuntando a páginas noindex
Severidad: ❌ Fallo crítico
¿Qué es?
Esta regla detecta una contradicción lógica: tienes una etiqueta hreflang que apunta a una URL que tiene la directiva noindex. Estás diciéndole simultáneamente dos cosas incompatibles a Google: “esta es la página en inglés para tus usuarios angloparlantes” y “no indexes esta página”.
<!-- ❌ Incorrecto: página A apunta a página B en hreflang -->
<!-- Página A: https://ejemplo.com/es/ -->
<link rel="alternate" hreflang="en" href="https://ejemplo.com/en/" />
<!-- Página B: https://ejemplo.com/en/ -->
<!-- Tiene noindex en su <head> -->
<meta name="robots" content="noindex, follow" />
¿Por qué importa para el SEO?
Google no puede indexar una página con noindex, por lo que la anotación hreflang que apunta a ella resulta inútil: el motor no puede mostrar esa URL en los resultados de búsqueda. En la práctica, Google ignorará esa entrada del set de hreflang, lo que significa que los usuarios del idioma correspondiente seguirán viendo la versión por defecto (o ninguna versión específica para su idioma).
Este error aparece con frecuencia en situaciones como:
- Páginas en fase de desarrollo que se marcan con
noindex temporalmente pero se referencian en hreflang antes de estar listas. - Versiones regionales que se despublican sin eliminar las referencias hreflang en el resto del set.
- Configuraciones automáticas de hreflang en CMS que no comprueban el estado de indexabilidad de las páginas referenciadas.
Cómo detectarlo
- Screaming Frog: exporta todas las URLs destino de los hreflang y cruza con el estado de indexabilidad (columna “Indexability”). Filtra las que tienen
noindex. - SEOmator: la regla
i18n-hreflang-to-noindex detecta automáticamente este conflicto sin necesidad de cruce manual. - Google Search Console: el informe de cobertura puede mostrar páginas “Excluidas por etiqueta noindex” que a la vez aparecen referenciadas en hreflang.
Cómo corregirlo
- Decide si la página referenciada en hreflang debe estar indexada o no.
- Si debe indexarse: elimina la directiva
noindex de esa página. - Si no debe indexarse (por ejemplo, está en desarrollo o es una página de pago sin alternativa pública): elimina la referencia hreflang que apunta a esa URL y actualiza el return link en las otras páginas del set.
- Implementa una validación automatizada en tu pipeline de publicación que impida añadir una URL con
noindex a un set de hreflang.
Regla 5: Hreflang apuntando a URLs no canónicas
Severidad: ❌ Fallo crítico
¿Qué es?
El hreflang debe apuntar siempre a la URL canónica de cada página. Si una URL tiene definida una canonical que apunta a otra URL, el hreflang debe usar la URL canónica final, no la URL que tiene el rel=canonical apuntando a otra.
<!-- ❌ Incorrecto: hreflang apunta a URL no canónica -->
<!-- La URL /es/pagina?source=email tiene una canonical que apunta a /es/pagina/ -->
<link rel="alternate" hreflang="es" href="https://ejemplo.com/es/pagina?source=email" />
<!-- ✅ Correcto: hreflang apunta a la URL canónica -->
<link rel="alternate" hreflang="es" href="https://ejemplo.com/es/pagina/" />
¿Por qué importa para el SEO?
Cuando el hreflang apunta a una URL no canónica, Google enfrenta una señal contradictoria: por un lado, el rel=canonical le dice que consolide el contenido hacia la URL canónica; por otro, el hreflang le indica que use la URL no canónica como alternativa de idioma. Google no puede satisfacer ambas instrucciones a la vez.
En la práctica, el motor tenderá a ignorar el hreflang o a procesarlo con menor confianza. Los casos más comunes donde ocurre este error son:
- URLs con parámetros UTM o de tracking (
?utm_source=newsletter): si se referencian en hreflang sin eliminar los parámetros. - Páginas paginadas (
/es/blog/page/2/): si la paginación tiene canonical apuntando a la primera página y el hreflang usa URLs de páginas 2, 3, etc. - Versiones HTTP de una web que ya es HTTPS: si el hreflang todavía usa URLs
http://. - URLs con y sin trailing slash cuando una de ellas hace canonical a la otra.
Cómo detectarlo
- Screaming Frog: crawlea las URLs destino del hreflang y compara la columna “Canonical Link Element 1” con la URL rastreada. Si no coinciden, el hreflang apunta a una URL no canónica.
- SEOmator: la regla
i18n-hreflang-to-non-canonical cruza automáticamente los destinos hreflang con sus canonicals. - Revisión manual: accede a la URL del hreflang y revisa si en su
<head> hay un rel=canonical que apunte a una URL diferente.
Cómo corregirlo
- Extrae todas las URLs destino de tus anotaciones hreflang.
- Para cada URL, comprueba cuál es su canonical declarada.
- Actualiza el hreflang para que use la URL canónica en lugar de la URL no canónica.
- Si el problema viene de parámetros UTM, configura Google Search Console para que trate esos parámetros como variantes y asegúrate de que tu hreflang nunca incluye parámetros de tracking.
- Establece una URL canónica clara para cada página (con o sin trailing slash, con HTTPS, sin parámetros) y usa esa URL de forma consistente en todo el set de hreflang.
Regla 6: Hreflang apuntando a URLs rotas
Severidad: ❌ Fallo crítico
¿Qué es?
Esta regla detecta etiquetas hreflang que apuntan a URLs que devuelven un error: 404 Not Found, 410 Gone, 500 Internal Server Error u otros códigos de error HTTP. Si la URL referenciada en hreflang no existe o no responde correctamente, Google no puede procesar esa anotación.
<!-- ❌ Incorrecto: la URL en hreflang devuelve 404 -->
<link rel="alternate" hreflang="en" href="https://ejemplo.com/en/old-page/" />
<!-- La página /en/old-page/ fue eliminada y devuelve 404 -->
<!-- ✅ Correcto: actualizar o eliminar la referencia -->
<link rel="alternate" hreflang="en" href="https://ejemplo.com/en/new-page/" />
¿Por qué importa para el SEO?
Una URL rota en el set de hreflang inutiliza la señal de idioma para esa variante. Pero además, si las otras páginas del set tienen return links hacia esa URL rota, el set completo puede considerarse inconsistente por Google, afectando a todas las versiones de idioma, no solo a la que apunta a la URL rota.
Este error es habitual cuando:
- Se eliminan o reorganizan páginas sin actualizar las referencias hreflang en el resto del site.
- Se cambia la estructura de URLs en una migración y el hreflang no se actualiza.
- Una versión de idioma se da de baja pero las otras versiones siguen referenciándola.
Cómo detectarlo
- Screaming Frog: en la pestaña “Hreflang” → “Issues” verás “Non-200 Hreflang” con las URLs que devuelven error.
- SEOmator: la regla
i18n-hreflang-to-broken reporta directamente todas las URLs hreflang que no responden con 200 OK. - Google Search Console: en el informe de cobertura busca errores asociados a URLs referenciadas en hreflang.
Cómo corregirlo
- Haz un crawl completo y exporta todas las URLs destino de los hreflang con su código de respuesta HTTP.
- Para cada URL con error, decide: ¿la página se ha movido (actualiza el hreflang con la nueva URL) o se ha eliminado definitivamente (elimina la referencia del set de hreflang)?
- Si la página se ha movido, asegúrate de que la nueva URL también tiene el return link correspondiente.
- Integra la comprobación de URLs hreflang en tu monitorización de errores 404, para detectar estos problemas en tiempo real.
Regla 7: Hreflang apuntando a redirecciones
Severidad: ⚠️ Aviso
¿Qué es?
Esta regla detecta etiquetas hreflang que apuntan a URLs que responden con un código de redirección (301, 302, 307, 308) en lugar de con un 200 OK directo. Aunque Google puede seguir la redirección y llegar a la página final, la recomendación oficial es que el hreflang apunte siempre a la URL final después de todas las redirecciones.
<!-- ❌ No recomendado: hreflang apunta a URL que redirige -->
<link rel="alternate" hreflang="en" href="https://ejemplo.com/en" />
<!-- La URL /en redirige 301 hacia /en/ (con trailing slash) -->
<!-- ✅ Correcto: hreflang apunta directamente a la URL final -->
<link rel="alternate" hreflang="en" href="https://ejemplo.com/en/" />
¿Por qué importa para el SEO?
Aunque Google generalmente sigue las redirecciones, pasar por una redirección antes de llegar a la URL de idioma introduce ambigüedad e ineficiencia. En el caso de cadenas de redirección (A → B → C), el problema se agrava: Google puede no seguir toda la cadena, especialmente si el presupuesto de rastreo del sitio es limitado.
Además, si la redirección es temporal (302), Google puede interpretar que la URL original es la correcta y la URL final es temporal, lo que contradice la intención del hreflang.
Cómo detectarlo
- Screaming Frog: crawlea las URLs destino del hreflang y filtra las que tienen código de respuesta 3xx.
- SEOmator: la regla
i18n-hreflang-to-redirect identifica estos casos automáticamente. - curl: puedes verificar una URL manualmente con
curl -I https://ejemplo.com/en para ver el código de respuesta.
Cómo corregirlo
- Para cada URL hreflang que redirige, sigue la cadena de redirección hasta la URL final (200 OK).
- Actualiza la etiqueta hreflang para que apunte directamente a esa URL final.
- Si es posible, corrige la redirección para que la URL original devuelva 200 directamente (especialmente en el caso de trailing slash o HTTP → HTTPS).
- Revisa si las URLs hreflang usan siempre HTTPS y el formato final (con o sin trailing slash) para evitar micro-redirecciones.
Regla 8: Declaraciones hreflang en conflicto
Severidad: ❌ Fallo crítico
¿Qué es?
Un conflicto hreflang ocurre cuando una misma página tiene dos o más etiquetas hreflang que declaran el mismo código de idioma pero con URLs diferentes, o cuando distintas páginas del site declaran ser la versión en el mismo idioma sin un mecanismo de desempate claro.
<!-- ❌ Incorrecto: dos declaraciones para el mismo idioma en la misma página -->
<link rel="alternate" hreflang="es" href="https://ejemplo.com/es/" />
<link rel="alternate" hreflang="es" href="https://ejemplo.com/es-alternativo/" />
<!-- ❌ Incorrecto: el mismo hreflang="es" apunta a páginas distintas desde páginas diferentes -->
<!-- Página A declara que la versión en español es /es/pagina-a/ -->
<!-- Página B declara que la versión en español también es /es/pagina-a/ -->
<!-- pero /es/pagina-a/ no referencia ni a A ni a B como alternativa -->
¿Por qué importa para el SEO?
Cuando Google encuentra dos declaraciones para el mismo idioma, no sabe cuál elegir. La respuesta del motor ante esta ambigüedad es ignorar ambas señales o tomar una decisión arbitraria, lo que puede resultar en que se muestre la versión incorrecta a los usuarios o en que ninguna versión de ese idioma aparezca correctamente en los resultados.
Los conflictos hreflang son especialmente difíciles de detectar manualmente porque ocurren de forma distribuida a lo largo del site: hay que comparar los sets de hreflang de múltiples páginas para encontrar las inconsistencias.
Cómo detectarlo
- Screaming Frog: la pestaña “Hreflang” → “Issues” incluye “Duplicate hreflang” para detectar duplicados en la misma página, y la vista de “Hreflang All” para comparar sets entre páginas.
- SEOmator: la regla
i18n-hreflang-conflicting analiza la coherencia del sistema de hreflang a nivel de site completo. - Revisión manual: exporta todos los hreflang a una hoja de cálculo, agrupa por idioma y comprueba que cada código de idioma apunta a una sola URL en cada contexto.
Cómo corregirlo
- Audita todos los sets de hreflang del site y extrae los pares (código de idioma, URL destino) de cada página.
- Identifica dónde el mismo código de idioma apunta a más de una URL desde la misma página.
- Decide cuál es la URL correcta para cada versión de idioma y elimina las referencias duplicadas.
- Revisa si el problema viene de una configuración automática del CMS que genera hreflang de forma incorrecta al haber varias páginas con el mismo slug en diferentes idiomas.
Regla 9: Mismatch entre idioma declarado e idioma real
Severidad: ⚠️ Aviso
¿Qué es?
Esta regla detecta páginas donde el idioma declarado en el hreflang (o en el atributo lang) no coincide con el idioma real del contenido de la página. Por ejemplo, tienes hreflang="en" pero el contenido de la página está escrito en español.
<!-- ❌ Incorrecto: hreflang dice inglés pero el contenido es español -->
<link rel="alternate" hreflang="en" href="https://ejemplo.com/en/servicios/" />
<!-- La página en /en/servicios/ contiene texto en español -->
<!-- ✅ Correcto: hreflang coincide con el idioma del contenido -->
<link rel="alternate" hreflang="en" href="https://ejemplo.com/en/services/" />
<!-- La página en /en/services/ contiene texto en inglés -->
¿Por qué importa para el SEO?
Google analiza el idioma del contenido de cada página de forma independiente al idioma declarado en el hreflang. Si detecta una discrepancia, puede:
- Ignorar la anotación hreflang y determinar el idioma por sí mismo basándose en el contenido.
- Mostrar la página en los resultados del idioma incorrecto.
- Reducir la confianza en todas las señales de idioma de ese dominio.
El mismatch ocurre frecuentemente cuando:
- Se crea la estructura de URLs para un idioma pero el contenido no ha sido traducido todavía.
- Una página de una versión de idioma contiene bloques de texto en el idioma original sin traducir (como testimonios o fragmentos de otra sección).
- El sistema de internacionalización del CMS asigna automáticamente el
hreflang basándose en la estructura de URLs, sin verificar el idioma del contenido.
Cómo detectarlo
- Google Search Console: en el informe de Mejoras → Internacional, busca el error “El idioma de la página no puede determinarse” o “Hreflang para el idioma especificado, pero el idioma de la página no coincide”.
- SEOmator: la regla
i18n-hreflang-lang-mismatch compara el idioma del contenido detectado con el idioma declarado en hreflang. - Revisión manual: accede a las URLs referenciadas en hreflang y comprueba visualmente que el contenido está en el idioma declarado.
- DeepL / LanguageTool: puedes usar herramientas de detección de idioma para comprobar programáticamente el idioma de cada página.
Cómo corregirlo
- Identifica todas las páginas donde el idioma del contenido no coincide con el hreflang declarado.
- Para cada página afectada, decide: ¿el contenido debe traducirse (corriges el contenido) o el hreflang está mal asignado (corriges el código de idioma)?
- Si la página no está traducida y no lo estará pronto, elimina la referencia hreflang hasta que lo esté.
- Implementa una validación en tu proceso de publicación que compruebe que las nuevas páginas de idioma tienen el contenido en el idioma correcto antes de añadir el hreflang.
Regla 10: Uso de múltiples métodos de implementación hreflang
Severidad: ⚠️ Aviso
¿Qué es?
Existen tres métodos válidos para implementar hreflang según Google:
- Etiquetas
<link> en el <head> del HTML (el más habitual). - Cabeceras HTTP
Link: (para PDFs y otros archivos no HTML). - Sitemap XML con elementos
<xhtml:link>.
Esta regla detecta cuando se usa más de un método simultáneamente para la misma URL, lo que puede generar inconsistencias si los tres métodos no declaran exactamente el mismo set de anotaciones.
<!-- ❌ Problemático: hreflang en <head> Y en el sitemap para las mismas URLs -->
<!-- En el <head> de la página: -->
<link rel="alternate" hreflang="es" href="https://ejemplo.com/es/" />
<link rel="alternate" hreflang="en" href="https://ejemplo.com/en/" />
<!-- Y además en sitemap.xml: -->
<!--
<url>
<loc>https://ejemplo.com/es/</loc>
<xhtml:link rel="alternate" hreflang="es" href="https://ejemplo.com/es/"/>
<xhtml:link rel="alternate" hreflang="en" href="https://ejemplo.com/en/"/>
</url>
-->
¿Por qué importa para el SEO?
Si los dos métodos no están perfectamente sincronizados, pueden declarar sets de hreflang diferentes para la misma URL. Google se encontrará con señales contradictorias: el HTML dice una cosa y el sitemap dice otra. El motor puede confundirse sobre cuál fuente tiene prioridad.
Además, mantener dos métodos en paralelo duplica el trabajo de mantenimiento: cualquier cambio en la arquitectura de idiomas debe actualizarse en ambos sitios, y es fácil que queden desincronizados.
Cómo detectarlo
- Screaming Frog: busca en la pestaña “Hreflang” si las anotaciones vienen de múltiples fuentes (HTML + Sitemap).
- SEOmator: la regla
i18n-hreflang-multiple-methods detecta URLs que tienen hreflang implementado en más de un método. - Revisión manual del sitemap: descarga tu
sitemap.xml y comprueba si contiene entradas <xhtml:link>. Si también tienes hreflang en el <head>, estás usando dos métodos.
Cómo corregirlo
- Decide cuál es el método principal de implementación de hreflang para tu sitio.
<head> HTML: recomendado para webs con control total del HTML y número de páginas manejable.- Sitemap XML: recomendado para sitios muy grandes donde modificar el HTML de cada página es costoso.
- HTTP headers: solo para recursos no HTML (PDFs, imágenes, etc.).
- Elimina las anotaciones hreflang del método que has decidido no usar.
- Verifica que el método elegido cubre todas las páginas de forma completa y consistente.
- Documenta en tu guía técnica de SEO qué método usa el proyecto para evitar que futuros desarrolladores añadan hreflang por otro método.
Resumen de las 10 reglas
| # | Regla | Severidad | Impacto principal |
|---|
| 1 | Atributo lang en <html> | ❌ Crítico | Idioma mal clasificado por Google |
| 2 | Presencia y validez del hreflang | ⚠️ Aviso | Duplicado entre versiones idioma/región |
| 3 | Return links recíprocos | ❌ Crítico | Set hreflang ignorado por completo |
| 4 | Hreflang a páginas noindex | ❌ Crítico | Señal de idioma inútil + contradicción |
| 5 | Hreflang a URLs no canónicas | ❌ Crítico | Conflicto canonical vs hreflang |
| 6 | Hreflang a URLs rotas | ❌ Crítico | Set hreflang inconsistente |
| 7 | Hreflang a redirecciones | ⚠️ Aviso | Ambigüedad en URL final de idioma |
| 8 | Declaraciones hreflang conflictivas | ❌ Crítico | Google no sabe cuál versión priorizar |
| 9 | Mismatch idioma declarado vs real | ⚠️ Aviso | Página en idioma incorrecto en SERP |
| 10 | Múltiples métodos hreflang | ⚠️ Aviso | Señales contradictorias entre métodos |

Guarda esta infografía como referencia rápida: tienes las 10 reglas con su severidad, los fallos críticos más habituales en hreflang y el checklist completo antes de publicar o migrar cualquier web multilingüe.
Checklist de internacionalización SEO
Usa esta lista antes de publicar cualquier web multilingüe o multirregional y después de cada migración o cambio estructural:
Preguntas frecuentes sobre hreflang y atributo lang
¿Es obligatorio implementar hreflang si mi web está solo en español?
No. El hreflang es necesario únicamente cuando tienes versiones de una misma web en diferentes idiomas o dirigidas a diferentes regiones. Si tu web está exclusivamente en español y no tienes versión en inglés u otros idiomas, no necesitas hreflang. Lo que sí debes tener siempre es el atributo lang="es" (o lang="es-ES") en la etiqueta <html> de todas tus páginas, ya que es una buena práctica universal independientemente del número de idiomas.
¿Cuál es la diferencia entre hreflang="es" y hreflang="es-ES"?
hreflang="es" indica que la página está en español para cualquier usuario hispanohablante, independientemente de su país. hreflang="es-ES" indica que la página está específicamente en español de España. Si tienes una sola versión en español para todos los hispanohablantes, usa hreflang="es". Si tienes versiones distintas para España y México (por ejemplo, con precios o contenido diferente), usa hreflang="es-ES" y hreflang="es-MX" respectivamente. En ese caso, añade también x-default para indicar cuál mostrar a usuarios de otros países o sin preferencia de idioma.
¿Qué pasa si Google ignora mis etiquetas hreflang?
Google puede ignorar el hreflang cuando detecta inconsistencias en el set: return links faltantes, URLs rotas, mismatches de idioma o conflictos entre declaraciones. También puede ignorarlo si determina por sí mismo que el idioma del contenido es diferente al declarado. Si después de corregir todos los errores técnicos de las 10 reglas de esta guía el problema persiste, comprueba en Google Search Console → Mejoras → Internacional si hay errores específicos reportados. Google tarda entre días y semanas en reprocesar los cambios en hreflang, así que verifica después de esperar al menos dos semanas.
¿Puedo usar hreflang en el sitemap en lugar de en el HTML?
Sí, el método de sitemap XML es completamente válido según Google y es especialmente adecuado para sitios con miles de páginas donde modificar el HTML de cada una sería muy costoso. La sintaxis es:
<url>
<loc>https://ejemplo.com/es/</loc>
<xhtml:link
rel="alternate"
hreflang="es-ES"
href="https://ejemplo.com/es/"/>
<xhtml:link
rel="alternate"
hreflang="en-US"
href="https://ejemplo.com/en/"/>
</url>
El requisito de return links aplica igualmente: si declaras la versión en inglés en la entrada del sitemap para la versión en español, también debes declarar la versión en español en la entrada para la versión en inglés. La única restricción es no mezclar este método con etiquetas hreflang en el HTML para las mismas páginas (Regla 10).
¿Con qué herramientas puedo validar un set de hreflang completo antes de publicar?
Para una validación rápida antes de publicar, combina estas tres herramientas: (1) el Generador y validador de hreflang de Aleyda Solis para comprobar la sintaxis y la reciprocidad de un set pequeño; (2) Screaming Frog en modo crawl para detectar todos los errores del site de una vez (return links, URLs rotas, redirecciones, etc.); y (3) Google Search Console para monitorizar en producción y recibir alertas cuando Google detecte problemas en el procesamiento del hreflang. Para sitios grandes o auditorías periódicas, SEOmator automatiza las 10 reglas de esta guía en un único informe con las URLs afectadas y las instrucciones de corrección.
La internacionalización SEO es uno de esos terrenos técnicos donde los errores se acumulan en silencio y el impacto en el posicionamiento puede ser devastador si no se audita con regularidad. Dominar estas 10 reglas es la ruta más directa para que Google entienda exactamente qué versión de tu web mostrar a cada usuario, en cada idioma y en cada región.
Si quieres que revisemos juntos la internacionalización de tu web y preparemos un plan de acción a medida, cuéntanos tu proyecto. Trazaremos la ruta desde el primer diagnóstico hasta la implementación, paso a paso. Sin compromiso. Contacta con nuestro equipo →