onpage

Dichiara la lingua della pagina

MetricSpot controlla un attributo lang valido su <html>. Senza, gli screen reader leggono male, hreflang perde l'aggancio e gli strumenti di traduzione indovinano.

Cosa controlla questo check

Legge l’attributo lang sull’elemento radice <html> e verifica che sia un tag di lingua BCP 47 valido (en, en-US, es, de-AT, pt-PT). Il check fallisce quando:

  • L’attributo manca.
  • Il valore è vuoto (lang="").
  • Il valore non corrisponde a un subtag di lingua noto.

Perché è importante

L’attributo lang è una delle vittorie di igiene HTML più economiche — un attributo su un elemento — ma la sua assenza rompe tre consumatori diversi tutti insieme.

  • Gli screen reader cambiano voce / motore di pronuncia in base a lang. Una pagina francese con lang="en" viene letta dalla voce inglese che storpia ogni parola. NVDA, JAWS, VoiceOver e TalkBack si comportano tutti così.
  • La traduzione del browser (“Traduci questa pagina” di Chrome, il menu di traduzione di Safari) usa lang come lingua sorgente. Senza lang deve indovinare dal contenuto, cosa più lenta e meno affidabile su pagine brevi.
  • Aggancio hreflang. I tuoi tag <link rel="alternate" hreflang="…"> hanno bisogno di un’auto-dichiarazione sulla pagina radice — la documentazione di Google raccomanda esplicitamente di dichiarare lang su ogni pagina per corroborare la rete hreflang.
  • SEO. Google usa lang come uno dei vari segnali per decidere per quale paese/lingua mostrare la pagina. Il report Targeting Internazionale di Search Console segnala le pagine senza lang.
  • Estrazione AI. I sistemi LLM multilingua spezzettano i contenuti usando la lingua dichiarata come indizio. Un lang dichiarato male abbassa il punteggio di confidenza del chunk.

Come risolvere

Imposta lang sull’elemento <html>. Usa un codice di due lettere per il contenuto generale, o lingua-regione se il tuo contenuto è specifico per regione:

<!DOCTYPE html>
<html lang="en">
<html lang="pt-PT">  <!-- European Portuguese, distinct from pt-BR -->

Siti multilingua — dichiara per pagina. Il lang su <html> deve corrispondere al contenuto principale della pagina, non alla lingua di default del sito. Se hai una traduzione spagnola a /es/, quella pagina ha bisogno di <html lang="es">, non di <html lang="en">.

Astro:

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

Poi passa lang="es" dal tuo layout spagnolo.

Next.js (App Router):

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

Per rotte per-locale: separa in app/[locale]/layout.tsx e leggi il locale dai params.

WordPress: l’elemento <html> è generato dalla chiamata language_attributes() del tuo tema, che legge la lingua del sito da Impostazioni → Generali. Il template lo fa già — il fallimento significa quasi sempre che il tema ha sovrascritto header.php e ha eliminato la chiamata. Rimetti <html <?php language_attributes(); ?>>.

Contenuto in lingue miste. Se un paragrafo o blocco è in una lingua diversa dalla pagina, dichiaralo inline:

<p>The French call it <span lang="fr">le mot juste</span>.</p>

Gli screen reader cambiano voce per lo span e poi tornano indietro.

Verifica tu stesso: DevTools → Console → document.documentElement.lang → dovrebbe restituire "en", non "".

Domande frequenti

Devo usare en o en-US?

Usa en a meno che il tuo contenuto non sia specificamente inglese americano (o specificamente britannico, australiano, ecc.) e ciò abbia importanza per traduzione/pronuncia. en copre tutte le varianti inglesi; en-US lo restringe. Per la maggior parte dei siti, il tag più largo è quello giusto.

Che differenza c’è tra lang e xml:lang?

lang è per HTML, xml:lang è per XML (e XHTML). Le pagine HTML5 moderne hanno bisogno solo di lang. Non aggiungerli entrambi — è solo rumore.

Il mio CMS imposta lang="en-US" ovunque. È sbagliato?

Non è sbagliato; è solo più ristretto di quanto serva. Per siti rivolti al pubblico statunitense, lascialo. Per siti con pubblico anglofono globale, passa a un semplice en.

Fonti

Ultimo aggiornamento 2026-05-11