Sobre este problema HTML
O atributo hreflang num elemento link informa aos browsers e motores de busca o idioma e região opcional do recurso vinculado. O seu valor deve ser uma tag de idioma BCP 47 válida, que segue uma estrutura específica: uma subtag de idioma primário (como en, fr, de) opcionalmente seguida por uma subtag de região (como US, GB, FR). A subtag de região deve ser um código de país válido de duas letras ISO 3166-1 alpha-2.
A tag en-EN é inválida porque EN não é um código de país reconhecido. Não existe nenhum país com o código “EN” — é um erro comum onde o código do idioma é simplesmente repetido como região. Este padrão também aparece frequentemente com outros idiomas, como fr-FR (que por acaso é válido porque FR é o código de país para França), levando as pessoas a assumir que en-EN segue a mesma lógica. No entanto, EN não está atribuído a nenhum país na ISO 3166-1, pelo que o validador corretamente rejeita-o.
Por que isto é importante
-
SEO e internacionalização: Motores de busca como o Google usam valores
hreflangpara servir a versão localizada correta de uma página. Um valor inválido pode fazer com que os motores de busca ignorem completamente a tag, prejudicando a sua estratégia de localização. - Conformidade com padrões: Browsers e ferramentas dependem de tags de idioma bem formadas para aplicar comportamentos específicos de locale corretos, como seleção de fontes, sugestões de formatação de datas e idioma de verificação ortográfica.
- Acessibilidade: Leitores de ecrã e tecnologias assistivas podem usar informações de idioma para selecionar a voz de síntese de fala correta. Tags de idioma inválidas podem levar a que o conteúdo seja lido com o sotaque ou idioma errado.
Subtags de região inválidas comuns
Este erro não se limita ao inglês. Aqui estão alguns padrões inválidos comumente vistos e as suas correções:
| Inválido | Por que está errado | Alternativas válidas |
|---|---|---|
en-EN |
EN não é um código de país |
en, en-US, en-GB, en-AU |
de-DE |
✅ Na verdade é válido — DE é Alemanha |
de, de-DE, de-AT, de-CH |
ja-JA |
JA não é um código de país |
ja, ja-JP |
zh-ZH |
ZH não é um código de país |
zh, zh-CN, zh-TW |
ko-KO |
KO não é um código de país |
ko, ko-KR |
A conclusão principal: não assuma que pode duplicar o código do idioma para fazer uma subtag de região. Verifique sempre contra a lista de códigos de país ISO 3166-1 alpha-2.
Como corrigir
-
Se não precisar de uma variante regional, use apenas a subtag do idioma:
en. -
Se precisar de uma variante regional específica, emparelhe a subtag do idioma com o código de país correto:
en-USpara inglês americano,en-GBpara inglês britânico,en-AUpara inglês australiano, etc. - Procure o código do país se não tiver certeza. A subtag de região corresponde a um país, não a um idioma.
Exemplos
Incorreto — Subtag de região inválida
<link rel="alternate" href="https://example.com/en/" hreflang="en-EN">
A subtag de região EN não corresponde a nenhum país e irá desencadear um erro de validação.
Correto — Apenas idioma
Se o conteúdo está simplesmente em inglês sem uma variante regional específica, omita a região:
<link rel="alternate" href="https://example.com/en/" hreflang="en">
Correto — Idioma com subtags de região válidas
Quando precisa de diferenciar entre variantes regionais, use códigos de país adequados:
<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">
Correto — Conjunto completo de ligações hreflang com x-default
Uma configuração multilíngue típica com tags de idioma adequadamente 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">
Note o uso de x-default para indicar a página padrão ou de seleção de idioma — este é um valor especial reconhecido pelos motores de busca para propósitos de fallback.
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.