Acerca de este problema HTML
El atributo hreflang en un elemento link indica a los navegadores y motores de búsqueda el idioma y región opcional del recurso enlazado. Su valor debe ser una etiqueta de idioma BCP 47 válida, que sigue una estructura específica: un subtag de idioma principal (como en, fr, de) opcionalmente seguido de un subtag de región (como US, GB, FR). El subtag de región debe ser un código de país ISO 3166-1 alpha-2 de dos letras válido.
La etiqueta en-EN es inválida porque EN no es un código de país reconocido. No existe ningún país con el código “EN” — es un error común donde el código de idioma simplemente se repite como región. Este patrón aparece frecuentemente con otros idiomas también, como fr-FR (que resulta ser válido porque FR es el código de país para Francia) llevando a la gente a asumir que en-EN sigue la misma lógica. Sin embargo, EN no está asignado a ningún país en ISO 3166-1, por lo que el validador correctamente lo rechaza.
Por qué esto importa
-
SEO e internacionalización: Los motores de búsqueda como Google usan valores de
hreflangpara servir la versión localizada correcta de una página. Un valor inválido puede hacer que los motores de búsqueda ignoren completamente la etiqueta, socavando tu estrategia de localización. - Cumplimiento de estándares: Los navegadores y herramientas dependen de etiquetas de idioma bien formadas para aplicar comportamientos específicos de configuración regional correctos como selección de fuentes, pistas de formato de fecha, y idioma de corrección ortográfica.
- Accesibilidad: Los lectores de pantalla y tecnologías de asistencia pueden usar información de idioma para seleccionar la voz de síntesis de voz correcta. Las etiquetas de idioma inválidas pueden llevar a que el contenido se lea con el acento o idioma incorrecto.
Subtags de región inválidos comunes
Este error no se limita al inglés. Aquí hay algunos patrones inválidos comúnmente vistos y sus correcciones:
| Inválido | Por qué está mal | Alternativas válidas |
|---|---|---|
en-EN |
EN no es un código de país |
en, en-US, en-GB, en-AU |
de-DE |
✅ Realmente válido — DE es Alemania |
de, de-DE, de-AT, de-CH |
ja-JA |
JA no es un código de país |
ja, ja-JP |
zh-ZH |
ZH no es un código de país |
zh, zh-CN, zh-TW |
ko-KO |
KO no es un código de país |
ko, ko-KR |
La clave: no asumas que puedes duplicar el código de idioma para hacer un subtag de región. Siempre verifica contra la lista de códigos de país ISO 3166-1 alpha-2.
Cómo solucionarlo
-
Si no necesitas una variante regional, usa solo el subtag de idioma básico:
en. -
Si necesitas una variante regional específica, combina el subtag de idioma con el código de país correcto:
en-USpara inglés americano,en-GBpara inglés británico,en-AUpara inglés australiano, etc. - Busca el código de país si no estás seguro. El subtag de región corresponde a un país, no a un idioma.
Ejemplos
Incorrecto — Subtag de región inválido
<link rel="alternate" href="https://example.com/en/" hreflang="en-EN">
El subtag de región EN no corresponde a ningún país y activará un error de validación.
Correcto — Solo idioma
Si el contenido está simplemente en inglés sin una variante regional específica, omite la región:
<link rel="alternate" href="https://example.com/en/" hreflang="en">
Correcto — Idioma con subtags de región válidos
Cuando necesites diferenciar entre variantes regionales, usa códigos de país apropiados:
<link rel="alternate" href="https://example.com/en-us/" hreflang="en-US">
<link rel="alternate" href="https://example.com/en-gb/" hreflang="en-GB">
<link rel="alternate" href="https://example.com/en-au/" hreflang="en-AU">
Correcto — Conjunto completo de enlaces hreflang con x-default
Una configuración multiidioma típica con etiquetas de idioma correctamente formadas:
<link rel="alternate" href="https://example.com/" hreflang="x-default">
<link rel="alternate" href="https://example.com/en/" hreflang="en">
<link rel="alternate" href="https://example.com/en-us/" hreflang="en-US">
<link rel="alternate" href="https://example.com/fr/" hreflang="fr">
<link rel="alternate" href="https://example.com/de/" hreflang="de">
<link rel="alternate" href="https://example.com/ja/" hreflang="ja">
Nota el uso de x-default para indicar la página predeterminada o de selección de idioma — este es un valor especial reconocido por los motores de búsqueda para propósitos de respaldo.
Encuentra problemas como este automáticamente
Rocket Validator escanea miles de páginas en segundos, detectando problemas de HTML en todo tu sitio web.