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 comlang="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
langcomo idioma de origem. Semlang, 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 declararlangem cada página para corroborar a rede de hreflang. - SEO. O Google usa o
langcomo 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 semlang. - Extração por IA. Sistemas LLM multilingues segmentam o conteúdo usando o idioma declarado como pista. Um
langmal 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