L'attributo lang in HTML

Cosa fa l'attributo lang in HTML, perché Google lo ignora per il rilevamento della lingua mentre Bing lo usa, come differisce da hreflang, e perché conta ancora per l'accessibilità e per il prompt di traduzione automatica del browser.

Prima pubblicazione: 2 lug 2026 · Ultimo aggiornamento: 3 ago 2026 · Advanced
Lingue
1 segnale di evidenza in questa pagina

L'attributo lang in HTML — impostato sull'elemento radice come <html lang="en"> (o una variante regionale come en-US) — dichiara la lingua naturale del contenuto di QUESTO documento usando un tag BCP 47. Non è la stessa cosa di hreflang: lang descrive la pagina in cui si trova; hreflang dichiara URL in lingue alternative per altre pagine. Google è categorico nell'affermare che ignora lang per il rilevamento della lingua ('non lo usiamo affatto… quasi sempre sbagliato' — Mueller); usa invece algoritmi basati sul contenuto. Bing è l'opposto: il suo Webmaster Blog del 2011 nomina <html lang> come segnale di posizione del documento di riserva, dietro al meta tag content-language. Indipendentemente dal peso nei motori di ricerca, lang è un attributo di accessibilità obbligatorio (WCAG 3.1.1) — guida la pronuncia dello screen reader e il prompt di traduzione automatica del browser, e 'lingua del documento mancante' è ancora uno dei primi sei errori nel WebAIM Million. L'unica eccezione di Google: etichettare blocchi tradotti automaticamente con lang="es-x-mtfrom-en". Imposta un valore valido, mantienilo coerente con hreflang, e non lasciare un lang="en" di default su contenuti non in inglese.

TL;DR — lang dichiara la lingua naturale di questo documento (<html lang="en">, o una variante regionale come en-US) usando un tag BCP 47. È un meccanismo diverso da hreflang, che dichiara URL in lingue alternative — i documenti di Google raggruppano i due come cose che non usa per rilevare la lingua di una pagina. Mueller: “we don’t use that at all… almost always wrong.” (traduzione) «non lo usiamo affatto… quasi sempre sbagliato.» Indipendentemente dal peso nella ricerca, una lingua di pagina determinabile a livello di programma è un requisito di livello A WCAG 3.1.1, e l’attributo HTML lang è la tecnica standard. Supporta la pronuncia dello screen reader e il prompt di traduzione automatica del browser, e “lingua del documento mancante” è ancora un errore tra i primi sei nel WebAIM Million. L’unica eccezione di Google: etichettare i blocchi tradotti automaticamente con lang="es-x-mtfrom-en". Imposta un valore valido, mantienilo coerente con hreflang e elimina il lang="en" di default sulle pagine non in inglese.

Cosa dichiara effettivamente l’attributo lang

L’attributo HTML lang è un attributo globale — tecnicamente può andare su qualsiasi elemento — ma quello che conta di più sta sulla radice: <html lang="en">. Il suo valore è un tag lingua BCP 47, o un subtag lingua da solo (en, es, de) o una coppia lingua-più-regione (en-US, en-GB, pt-BR, zh-Hans).

Ciò che dichiara è ristretto e specifico: il linguaggio naturale del contenuto testuale nel documento su cui è impostato. Non la lingua delle tue pagine alternative, non il paese che stai targettizzando — solo “le parole su questa pagina sono in questa lingua.”

Evidence for this claim The HTML lang attribute specifies an element's language using a valid BCP 47 language tag; on the root html element it establishes the document's default language. Scope: WHATWG HTML language semantics and IETF BCP 47 tag syntax. Confidence: high · Verified: WHATWG: The lang attribute IETF RFC 5646 Evidence for this claim WCAG 2.2 success criterion 3.1.1 requires the default human language of a page to be programmatically determinable, and W3C lists lang on the html element as a sufficient HTML technique. Scope: WCAG 2.2 Level A language-of-page requirement for HTML documents. Confidence: high · Verified: W3C: Understanding Language of Page

Tre punti di precisione che vale la pena interiorizzare, tratti dalla riferimento MDN:

  • Solo valori validi. Un tag BCP 47 — non un codice di tre lettere inventato (eng), non un nome di lingua completo, e non en-UK (il subtag di regione per il Regno Unito è GB). I valori non validi vengono trattati come nessun valore. Sintatticamente ben formato non è lo stesso di corretto, né: lang="en" è un tag perfettamente valido che è comunque sbagliato su una pagina francese. La validità è un pavimento, non una garanzia che il valore corrisponda effettivamente al contenuto (più su questo nella trappola del default boilerplate qui sotto).
  • Vuoto non è lo stesso di assente. Un lang="" esplicito significa “lingua sconosciuta” — uno stato deliberato. Un attributo mancante genuinamente è un diverso modo di fallimento, e gli strumenti di accessibilità lo segnalano come assente piuttosto che esplicitamente-sconosciuto.
  • Il valore radice è un default, non un blocco. <html lang> imposta ciò che ogni discendente eredita a meno che non venga sovrascritto — reimposta lang localmente su qualsiasi elemento che contiene un vero cambio di lingua (vedi “Impostalo anche sull’elemento che cambia” sotto). Non confondere questa dichiarazione nel documento con l’header di risposta HTTP Content-Language: quell’header descrive metadati di trasporto sulla risposta, non il documento analizzato, e non è un sostituto per lang quando si tratta di ereditarietà a livello di elemento o accessibilità.

lang vs. hreflang: la confusione, risolta

Se sei arrivato qui da una domanda su hreflang, questa è la sezione che fa per te. Questi due vengono confusi costantemente perché entrambi sono legati alla lingua, entrambi vivono in cima o vicino alla cima del documento, ed entrambi usano codici dall’aspetto simile. Ma fanno lavori non correlati.

L’articolazione più chiara arriva direttamente dalla documentazione di Google su versioni localizzate delle tue pagine, che raggruppa i due insieme proprio per dire che non usa nessuno dei due per il rilevamento:

“Google doesn’t use hreflang or the HTML lang attribute to detect the language of a page; instead, we use algorithms to determine the language.” (traduzione) «Google non usa hreflang o l’attributo lang HTML per rilevare la lingua di una pagina; invece, usiamo algoritmi per determinare la lingua.»

Leggilo attentamente. Google nomina sia lang che hreflang in un fiato — come due cose separate che non usa per capire in che lingua è una pagina. Rileva la lingua dal contenuto renderizzato e visibile invece.

Quindi qual è la differenza effettiva?

  • lang è una auto-descrizione: un valore, su <html> (o su qualsiasi elemento), che dice “il contenuto di questo documento è in questa lingua.” Letto da browser, screen reader, correttori ortografici; usato da Bing; ignorato da Google per il rilevamento.
  • hreflang è una mappa tra pagine: un insieme di annotazioni <link rel="alternate"> (o l’equivalente in sitemap/header) che elenca gli altri URL che sono versioni alternative in lingua/regione di questa pagina, e a quale lingua ciascuno mira. È un segnale di routing che Google usa — per servire la variante URL giusta nei risultati — non un segnale di rilevamento.

Possono e spesso dovrebbero coesistere. Una pagina in spagnolo messicano porta <html lang="es-MX"> che descrive il proprio contenuto e un insieme di tag hreflang che puntano alle sue versioni sorelle en-US, en-GB e altre. L’implementazione completa di hreflang — i tre metodi, la regola del collegamento reciproco, la regola autoreferenziale e la scala di quanto spesso si rompe — è un approfondimento a sé; questo articolo deliberatamente non la riscrive. L’unica cosa da portare con sé: lang è la metà semplice di questa coppia (un valore, un elemento, nessuna reciprocità) proprio perché non porta la complessità delle relazioni tra pagine di hreflang — che John Mueller una volta ha chiamato “uno degli aspetti più complessi della SEO.” Facile da impostare, però, non è la stessa cosa che essere comunemente corretto.

`lang` describes this document for browsers and assistive technology; hreflang maps alternate URLs for search-result routing. Fonte: Google Search Central

The root lang attribute gives one page a BCP 47 language self-description used by browsers and screen readers. Hreflang is a reciprocal cross-page map between alternate URLs, such as en-US and es-MX versions. Google detects a page's language from visible content rather than either annotation, but the lang value should remain accurate and consistent with the hreflang entry for the same URL.

© Patrick Stox LLC · CC BY 4.0 ·

L’attributo lang è un fattore di ranking di Google?

Risposta breve: no, e Google è stato insolitamente diretto al riguardo. La dichiarazione definitiva è quella di John Mueller, riportata da Barry Schwartz su Search Engine Roundtable in Google: We Ignore The HTML lang Attribute. Alla domanda su quanto sia importante dichiarare la lingua di una pagina nell’HTML, Mueller ha detto:

“We don’t use that at all. So we use the hreflang links if you have that if you have different language versions. But the language attribute within the HTML markup is something we don’t use at all. We’ve found that this language markup is something that is almost always wrong. So we tend to ignore that.” (traduzione) «Non lo usiamo affatto. Quindi usiamo i link hreflang se li hai, se hai versioni linguistiche diverse. Ma l’attributo language nel markup HTML è qualcosa che non usiamo affatto. Abbiamo scoperto che questo markup linguistico è quasi sempre sbagliato. Quindi tendiamo a ignorarlo.»

Quel “quasi sempre sbagliato” è la frase chiave. La ragione di Google per ignorare lang non è “non è importante” — è che il segnale è inaffidabile su scala web. Le persone lasciano i default boilerplate lang="en" dopo aver localizzato i contenuti; i template di CMS e framework includono un default che non viene mai aggiornato (il boilerplate generato da Vue CLI, per esempio, hard-coda lang="en" indipendentemente da ciò che ci costruisci). Quando un segnale è sbagliato così spesso, la mossa ingegneristica sensata è smettere di fidarsene e rilevare la lingua direttamente dal contenuto — che è esattamente ciò che Google dice di fare. Quella citazione del 2016 è vecchia, ma l’attuale (2026) documento di Search Central citato sopra ristabilisce indipendentemente la stessa politica, quindi trattala come una guida di lunga data e non ritirata piuttosto che un caso isolato obsoleto.

L’unica eccezione: contenuti tradotti automaticamente

C’è un unico, ristretto punto in cui i documenti di Google si preoccupano di un valore in stile lang. Se pubblichi contenuti tradotti automaticamente, la guida sui risultati tradotti di Google ti chiede di contrassegnare quei blocchi con un formato di valore speciale — lang="<target>-x-mtfrom-<source>", es. lang="es-x-mtfrom-en" per contenuti tradotti automaticamente dall’inglese allo spagnolo. Questa è l’eccezione che conferma la regola: Google ignora lang per la rilevazione generale della lingua, ma questa convenzione di etichettatura specifica è una che ha definito e legge. (La leva correlata, se vuoi rinunciare completamente alle funzionalità di traduzione, è la regola notranslate — “To opt out of all translation features in Google Search, use the notranslate rule, which can be implemented as a meta tag or an HTTP header,” secondo lo stesso documento.)

Bing usa l’attributo lang?

Sì — ed è qui che lang diventa genuinamente più consequenziale di quanto la storia “Google lo ignora” suggerisca. La posizione di Bing è l’opposto di quella di Google, ed è sottovalutata quasi ovunque.

Nel suo post del 2011 sul Webmaster Blog How To Tell Bing Your Website’s Country and Language, Bing espone un ordine di priorità dei segnali di “posizione del documento” che usa per la rilevanza. L’ordine, dall’alto verso il basso:

  1. Il meta tag content-language nel <head> (<meta http-equiv="content-language" content="en-us">).
  2. L’attributo <html lang="en-us">, poi l’attributo <title lang="en-us">, come fallback — “l’ordine di priorità per questi tag è: <meta>, <html>, <title>.”
  3. ccTLD.
  4. Reverse-IP lookup — usato solo quando i segnali più forti sono inconcludenti.

Il consiglio di Bing è di sceglierne uno ed essere coerenti: “It’s best that you use one option, instead of multiple options here.” Quindi, a differenza di Google, Bing usa esplicitamente <html lang> come segnale di targeting reale (anche se di priorità inferiore). Per un sito con traffico significativo da Bing, questo cambia l’azione consigliata: imposta lang correttamente e considera di aggiungere anche un meta tag content-language corrispondente.

Caveat: questo è un post del 2011, ora rimosso dall’archivio blog attuale di Bing. Lo cito tramite la cattura di Wayback Machine; nessuna dichiarazione più recente di Bing lo supera che io abbia trovato, quindi tratto il meccanismo come ancora attuale — ma la sua età merita di essere segnalata onestamente piuttosto che presentata come guida recente.

Questo chiude anche il cerchio con il lato hreflang: Bing usa a malapena hreflang come fa Google — content-language più lang è il meccanismo parallelo di Bing.

Perché l’attributo lang è importante comunque: accessibilità

Anche mettendo da parte del tutto la ricerca, lang merita il suo posto. È un attributo di accessibilità obbligatorio — il Criterio di Successo WCAG 3.1.1 (Livello A) richiede che la lingua umana predefinita di ogni pagina sia determinabile a livello di programma, il che in pratica significa un <html lang> valido. Un criterio separato, 3.1.2, copre la marcatura dei cambi di lingua all’interno di una pagina.

Evidence for this claim WCAG 2.2 success criterion 3.1.1 requires the default human language of a page to be programmatically determinable, and W3C lists lang on the html element as a sufficient HTML technique. Scope: WCAG 2.2 Level A language-of-page requirement for HTML documents. Confidence: high · Verified: W3C: Understanding Language of Page

Gli effetti a valle sono concreti e ben documentati (Adrian Roselli’s On Use of Lang Attribute cataloga molti): gli screen reader usano lang per scegliere il motore di pronuncia corretto e la voce (il motore fonetico di JAWS, il cambio automatico di voce di VoiceOver), il CSS hyphens: auto dipende da esso, il comportamento di spellcheck si basa su di esso, il rendering delle virgolette e la selezione predefinita dei font CJK lo seguono, e i display Braille si comportano diversamente con esso. Esattamente come ciascuno di questi si manifesta varia a seconda dello screen reader, del browser e della voce installata — i test di Roselli stessi mostrano che JAWS e VoiceOver non si comportano in modo identico — quindi tratta un valore lang corretto come abilitazione del comportamento giusto, non come garanzia di un’esperienza identica su ogni stack di tecnologie assistive.

E non è un problema risolto. Secondo l’attuale rapporto WebAIM Million, “missing document language” si attesta al 13,5% delle home page — il sesto errore di accessibilità automatizzato più comune sul web. Il tasso sta migliorando (in calo dal 15,8% dell’anno precedente, e dal 17,1% e 18,6% prima ancora), ma “un problema grande e in shrink” è comunque un problema. Gli strumenti di Google riflettono questa impostazione: i controlli html-has-lang e html-lang-valid di Lighthouse vivono nella categoria Accessibilità, non in quella SEO — un chiaro indizio che anche gli strumenti per sviluppatori di Google classificano lang come una questione di a11y, non di ranking. Questi controlli si basano sulla regola axe-core con lo stesso nome di Deque, che classifica un lang mancante come problema “Serious” di Livello A WCAG 2,0/2.1.

Comportamento del browser: il prompt di traduzione automatica

C’è un altro comportamento visibile che lang governa: il prompt “Translate this page?” del browser. Chrome (e altri) valutano lang insieme all’analisi effettiva del testo visibile quando decidono se offrire la traduzione. Un valore errato o mancante può fallire in entrambe le direzioni — offrendo falsamente di tradurre una pagina che è già nella lingua del lettore, o non offrendola su una pagina genuinamente straniera.

L’esempio reale e vivido è quello di Manuel Matuzovic the lang attribute: browsers telling lies, telling sweet little lies: il broadcaster austriaco ORF.at ha pubblicato contenuti in tedesco con lang="en", quindi il traduttore automatico di Chrome ha trattato il testo tedesco come inglese e lo ha “tradotto”, trasformando il nome del distretto viennese “Liesing” nella parola inglese “lies.” Questa è trappola del default boilerplate che produce un bug visibile all’utente — esattamente la classe di problema che Mueller descriveva con “quasi sempre sbagliato”.

Come impostarlo correttamente

  • Usa un tag BCP 47 valido. Solo il subtag della lingua (en, es, fr) se non hai bisogno di distinzioni regionali; lingua-regione (en-US, en-GB, pt-BR) se invece ne hai bisogno. Prendi i codici dall’IANA Language Subtag Registry; non inventarli, e ricorda GB, non UK.
  • Impostalo anche sull’elemento che cambia. Per una frase straniera incorporata in una pagina altrimenti monolingue, reimposta lang localmente: <span lang="fr">c'est la vie</span>. I discendenti senza impostazione ereditano il lang dell’antenato più vicino, quindi il valore radice copre tutto ciò che non sovrascrivi.
  • Elimina il default boilerplate. Il lang="en" che il tuo template o CMS ha fornito è corretto solo se il tuo contenuto è effettivamente in inglese. Questo è il fallimento che Mueller ha evidenziato e il bug ORF.at in miniatura — controllalo.
  • Mantieni coerenti lang e hreflang. Se il lang di una pagina dice es-MX ma la sua annotazione hreflang per lo stesso URL dice en, c’è una discrepanza. È esattamente il problema “Hreflang e HTML lang mismatch” che ho documentato in Ahrefs’ hreflang guide — dove l’ho detto chiaramente: “Google doesn’t use the HTML language attribute, but other search engines and browsers do. It’s important to keep these two attributes consistent with one another.” (traduzione) «Google non usa l’attributo linguistico HTML, ma altri motori di ricerca e browser lo usano. È importante mantenere questi due attributi coerenti tra loro.» Google ignora la parte lang di quel confronto, ma una discrepanza segnala comunque che qualcosa è configurato male — ed è per questo che gli strumenti di audit del sito la segnalano.

Miti comuni

  • “Un lang corretto migliorerà il mio posizionamento su Google.” No. Google afferma di non usare affatto lang per il rilevamento della lingua. Può essere importante per Bing e aiutare indirettamente tramite accessibilità e comportamento di traduzione, ma un beneficio diretto per il posizionamento su Google non è supportato.
  • lang e hreflang sono sostanzialmente la stessa cosa.” No — lang descrive la pagina su cui si trova; hreflang punta ad altri URL. Una pagina può avere un lang corretto e nessun hreflang, oppure un hreflang corretto e un lang sbagliato.
  • “Nessun motore di ricerca si interessa a lang.” Bing lo fa esplicitamente (come fallback dietro content-language). Per qualsiasi sito con traffico reale da Bing, questa non è una situazione “a nessuno importa”.
  • “Lasciare il default lang="en" è innocuo se il mio contenuto non è in inglese.” È quasi parola per parola il fallimento che Mueller ha chiamato “quasi sempre sbagliato,” ed è ciò che innesca prompt di traduzione errati e pronunce errate dello screen reader.
  • “Un lang corretto dà un aumento del 22% del CTR” / “I crawler AI elaborano le pagine con lang-tag il 40% più velocemente.” Queste cifre specifiche circolano su una manciata di blog di marketing SEO senza uno studio, una metodologia o una fonte primaria rintracciabile. Non ho potuto confermare nessuna delle due contro alcuna dichiarazione ufficiale o dato di prima parte — trattale come il tipo di folklore sicuro di sé e infondato che si accumula attorno a argomenti tecnici poco controllati.
  • “Un lang="" vuoto è uguale a non averlo.” No — un valore vuoto esplicito significa “lingua sconosciuta,” uno stato distinto da un attributo realmente assente.

Dove si colloca

Questo è l’approfondimento a livello di attributo del sottocluster HTML SEO — il fratello del trattamento a livello di elemento di <article>, <nav> e <main> nell’articolo sull’HTML semantico, e dell’hub HTML-SEO più ampio che li sovrasta. Per la storia completa del targeting cross-page — i tre metodi di implementazione, le regole reciproche e quanto spesso i cluster si rompono su larga scala — l’approfondimento su hreflang è il posto giusto; il compito di questo articolo è solo tenere distinti i due concetti nella tua testa.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.