onpage

Declara o idioma da página

O MetricSpot procura um atributo lang válido no <html>. Sem ele, os leitores de ecrã pronunciam mal, o hreflang perde âncora e as ferramentas de tradução adivinham.

O que esta verificação faz

Lê o atributo lang no elemento raiz <html> e confirma que é uma tag de idioma BCP 47 válida (en, en-US, es, de-AT, pt-PT). A verificação falha quando:

  • O atributo está em falta.
  • O valor está vazio (lang="").
  • O valor não corresponde a um subtag de idioma conhecido.

Porque é importante

O atributo lang é uma das vitórias de higiene HTML mais baratas — um atributo num elemento — mas a sua ausência quebra três consumidores diferentes ao mesmo tempo.

  • Os leitores de ecrã trocam de voz / motor de pronúncia com base no lang. Uma página em francês com lang="en" é lida pela voz inglesa a pronunciar mal cada palavra. NVDA, JAWS, VoiceOver e TalkBack comportam-se todos assim.
  • Tradução do browser (o “Traduzir esta página” do Chrome, o menu de tradução do Safari) usa lang como idioma de origem. Sem lang, tem de adivinhar pelo conteúdo, o que é mais lento e menos fiável em páginas curtas.
  • Âncoras de hreflang. As tuas tags <link rel="alternate" hreflang="…"> precisam de uma auto-declaração na página raiz — a documentação do Google recomenda explicitamente declarar lang em cada página para corroborar a rede de hreflang.
  • SEO. O Google usa o lang como um de vários sinais para decidir para que país/idioma mostrar a página. O relatório de International Targeting da Search Console sinaliza páginas sem lang.
  • Extração por IA. Sistemas LLM multilingues segmentam o conteúdo usando o idioma declarado como pista. Um lang mal declarado baixa a pontuação de confiança do segmento.

Como corrigir

Define lang no elemento <html>. Usa um código de idioma de duas letras para conteúdo geral, ou lang-region se o conteúdo for específico de uma região:

<!DOCTYPE html>
<html lang="en">
<html lang="pt-PT">  <!-- Português europeu, distinto de pt-BR -->

Sites multilingues — declara por página. O lang no <html> deve corresponder ao conteúdo principal da página, não ao idioma por defeito do site. Se tens uma tradução em espanhol em /es/, essa página precisa de <html lang="es">, não de <html lang="en">.

Astro:

---
const { lang = "en" } = Astro.props;
---
<html lang={lang}>

Depois, passa lang="es" a partir do teu layout em espanhol.

Next.js (App Router):

// app/layout.tsx
export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <html lang="en">
      <body>{children}</body>
    </html>
  );
}

Rotas por locale: dividir em app/[locale]/layout.tsx e ler o locale dos params.

WordPress: o elemento <html> é gerado pela chamada language_attributes() do teu tema, que lê o idioma do site em Definições → Geral. O template já faz isto — a falha quase sempre significa que o tema substituiu header.php e perdeu a chamada. Volta a colocar <html <?php language_attributes(); ?>>.

Conteúdo de idioma misto. Se um parágrafo ou bloco estiver num idioma diferente do da página, declara-o inline:

<p>Os franceses chamam-lhe <span lang="fr">le mot juste</span>.</p>

Os leitores de ecrã trocam a voz no span e voltam a trocar depois.

Audita por ti: DevTools → Consola → document.documentElement.lang → deve devolver "pt" ou "pt-PT", não "".

Perguntas frequentes

Devo usar pt ou pt-PT?

Usa pt-PT se o teu conteúdo for especificamente português europeu (distinto de pt-BR) e essa distinção importar para a tradução/pronúncia. Para a maioria dos sites portugueses, pt-PT é certo porque deixa explícita a variante. Para conteúdo dirigido a um público lusófono global, pt é mais abrangente.

Qual é a diferença entre lang e xml:lang?

lang é para HTML, xml:lang é para XML (e XHTML). As páginas HTML5 modernas só precisam de lang. Não acrescentes ambos — é apenas ruído.

O meu CMS define lang="en-US" em todo o lado. Está errado?

Não está errado; é apenas mais restrito do que o necessário. Para sites dirigidos aos EUA, deixa estar. Para sites com audiências anglófonas globais, passa para en simples.

Fontes

Última atualização 2026-05-11