Skip to main content
Validação HTML

Quando o atributo “xml:lang” em nenhum namespace é especificado, o elemento também deve ter o atributo “lang” presente com o mesmo valor.

Sobre este problema HTML

O atributo xml:lang é um remanescente do XHTML, onde era a forma padrão de declarar o idioma de um elemento. No HTML5 (a serialização text/html), o atributo lang é a forma adequada de especificar o idioma. A especificação HTML permite xml:lang por motivos de compatibilidade, mas apenas se for acompanhado por um atributo lang com um valor idêntico. Se xml:lang aparecer sozinho, ou se o seu valor não corresponder ao atributo lang, o documento não está em conformidade.

Isto é importante por várias razões. Leitores de ecrã e outras tecnologias assistivas dependem do atributo lang—não do xml:lang—para determinar a pronúncia e o comportamento específico do idioma. Os motores de busca também usam lang para indexação de conteúdo e deteção de idioma. Ter xml:lang sem lang significa que a declaração de idioma pode ser totalmente ignorada, prejudicando tanto a acessibilidade como o SEO.

Em documentos HTML5 modernos, raramente há uma razão para incluir xml:lang. O atributo lang sozinho cobre todos os casos de uso. O único cenário onde você pode precisar de ambos é se o seu documento deve ser compatível com parsers HTML e XHTML (markup poliglota), caso em que os dois atributos devem ter o mesmo valor.

Como corrigir

Você tem duas opções:

  1. Remover xml:lang e usar apenas lang (recomendado para documentos HTML5).
  2. Adicionar um atributo lang que corresponda ao valor existente de xml:lang (para documentos poliglotas).

Se mantiver ambos os atributos, certifique-se de que os valores são exatamente os mesmos—incluindo maiúsculas/minúsculas e subtags. Por exemplo, lang="en-US" deve ser emparelhado com xml:lang="en-US", não xml:lang="en".

Exemplos

Incorreto: xml:lang sem lang

<html xml:lang="en">
  <head>
    <title>My Page</title>
  </head>
  <body>
    <p xml:lang="fr">Bonjour le monde</p>
  </body>
</html>

Isto desencadeia o erro de validação porque tanto os elementos <html> como <p> têm xml:lang mas nenhum atributo lang.

Incorreto: Valores não correspondentes

<html lang="en" xml:lang="en-US">
  <head>
    <title>My Page</title>
  </head>
  <body>
    <p>Hello world</p>
  </body>
</html>

Embora ambos os atributos estejam presentes, os valores "en" e "en-US" não correspondem, o que também é inválido.

Correto: Usar apenas lang (recomendado)

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>My Page</title>
  </head>
  <body>
    <p lang="fr">Bonjour le monde</p>
  </body>
</html>

Esta é a abordagem mais limpa para documentos HTML5. O atributo lang é tudo o que você precisa.

Correto: Ambos os atributos com valores correspondentes (poliglota)

<!DOCTYPE html>
<html lang="en" xml:lang="en">
  <head>
    <title>My Page</title>
  </head>
  <body>
    <p lang="fr" xml:lang="fr">Bonjour le monde</p>
  </body>
</html>

Se deve manter xml:lang, cada elemento que o tenha também deve ter lang com exatamente o mesmo valor.

Encontre problemas como este automaticamente

O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.

Ajude-nos a melhorar os nossos guias

Este guia foi útil?

Pronto para validar os seus sites?
Comece o seu teste gratuito hoje.