L'attributo lang dell'HTML: a cosa serve e cosa ignora Google
L'attributo lang dell'HTML dichiara la lingua di una pagina, per esempio <html lang="it">. Lo usano screen reader, browser e strumenti di traduzione. Google invece quasi lo ignora: ricava la lingua dal testo visibile e usa hreflang per collegare le versioni linguistiche. Un valore sbagliato raramente costa posizioni, ma resta un difetto, e sui siti multilingua spesso segnala un problema di template.
A cosa serve
Messo sull'elemento radice, lang vale per tutto il documento. Qualsiasi elemento interno può sovrascriverlo: una citazione in francese dentro un articolo italiano può avere <blockquote lang="fr">.
I primi a leggerlo sono le tecnologie assistive. Lo screen reader sceglie voce e regole di pronuncia in base al valore, quindi una pagina italiana marcata en viene letta con la fonetica inglese, ed è quasi incomprensibile. Per questo le WCAG 2 lo mettono al livello A (criterio 3.1.1, Lingua della pagina), mentre il 3.1.2 copre i passaggi in un'altra lingua al livello AA. L'audit di accessibilità di Lighthouse segnala sia l'attributo mancante sia il valore non valido.
Cosa ne fa Google
Poco. La documentazione di Google sui siti multilingua dice che la lingua di una pagina viene determinata dal contenuto visibile, non da segnali nel codice come l'attributo lang. Le versioni per lingua e per paese si collegano con le annotazioni hreflang, nell'HTML, negli header HTTP o nella sitemap. La guida all'hreflang checker spiega come verificarle.
Quindi lang è una questione di accessibilità e di qualità, non una leva di ranking. Resta però un buon controllo di coerenza: se contenuto, hreflang e lang non dicono la stessa cosa, uno dei tre è sbagliato.
Valori validi: BCP 47 in pratica
Il valore deve essere un tag di lingua BCP 47. Quasi sempre è un codice lingua ISO 639-1, seguito se serve da un codice paese ISO 3166-1. Qualche esempio corretto:
itper l'italiano senza paeseit-CHper l'italiano della Svizzerapt-BRper il portoghese del Brasilees-419per lo spagnolo dell'America Latina (419 è un codice regione UN M.49)zh-Hantper il cinese in caratteri tradizionali
I tag non distinguono maiuscole e minuscole, ma la convenzione vuole la lingua minuscola e il paese maiuscolo. Il paese è facoltativo: lang="it" è validissimo, e spesso è la scelta migliore se il contenuto non è scritto per un solo paese.
Due valori non validi tornano di continuo. it_IT, con il trattino basso, è una stringa di locale presa dal codice lato server, non un tag BCP 47. en-UK sembra giusto ma non lo è: il codice del Regno Unito è GB, e uk è il codice della lingua ucraina.
Gli errori tipici sui siti dei clienti
Il più frequente è un solo valore per tutte le lingue. Plugin di traduzione e front end headless spesso usano lo stesso layout per tutte le versioni, così le pagine /it/ e /de/ escono con lang="en". Contenuto e hreflang dicono italiano, l'elemento radice dice inglese, e chi usa uno screen reader sente la voce sbagliata.
Poi c'è l'attributo che manca del tutto: template scritti a mano, page builder per landing e alcuni export statici non lo mettono.
Il resto lo fanno gli aggiornamenti. Su WordPress l'attributo lo stampa language_attributes() nell'header del tema e segue Impostazioni > Generali > Lingua del sito: un tema nuovo con <html lang="en-US"> scritto a mano lo scavalca. I temi Shopify di norma usano {{ request.locale.iso_code }}, e un tema custom con il valore fisso rompe tutti i mercati tradotti. Succede soprattutto con redesign e cambi di piattaforma, ed è per questo che il controllo sta nella checklist SEO per la migrazione di un sito.
Come controllarlo
Apri il sorgente e guarda il tag <html> di apertura, oppure scrivi document.documentElement.lang nella console del browser. Da terminale:
curl -s https://example.com/it/ | grep -o '<html[^>]*>'
curl mostra l'HTML che invia il server. Se è un framework JavaScript a impostare l'attributo nel browser, guarda anche la pagina renderizzata. Prova un URL per lingua e uno per tipo di template (home, categoria, articolo, prodotto), perché il valore arriva spesso da template diversi.
Lang e hreflang sotto controllo con Deltio
Lo scanner SEO di Deltio legge l'attributo lang su ogni URL monitorato, insieme a title, meta description, H1, canonical e hreflang. Segnala il valore mancante o non valido e confronta ogni scan con il precedente: se un deploy trasforma lang="it" in lang="en", ricevi un alert via email o Slack. Quello che non può fare è giudicare se la lingua dichiarata corrisponde al testo della pagina. Per quello serve ancora un occhio umano.
Starter costa £24 al mese, £20 con fatturazione annuale, e puoi provare Deltio gratis per 14 giorni.
Domande frequenti
- L'attributo lang influisce sul ranking su Google?
- Non direttamente. Google ricava la lingua di una pagina dal contenuto visibile e dichiara di non basarsi sull'attributo lang. Conta però per l'accessibilità, per il comportamento del browser e per gli altri strumenti che leggono la pagina.
- Il valore di lang deve coincidere con quello di hreflang?
- Devono indicare la stessa lingua. Una pagina con hreflang="it" dovrebbe avere lang="it" o una variante regionale come it-IT. Non serve che le stringhe siano identiche, ma hreflang italiano con lang="en" indica un errore di template.
- lang="en-UK" è un valore valido?
- No. BCP 47 usa i codici paese ISO 3166-1 e quello del Regno Unito è GB, quindi il tag corretto è en-GB. UK non è un codice regione valido, e uk in minuscolo è il codice della lingua ucraina.
- Serve ancora il meta tag content-language?
- La specifica HTML considera non conforme il pragma http-equiv content-language e consiglia di usare l'attributo lang. Google li ignora entrambi per riconoscere la lingua, quindi sulle pagine nuove non c'è motivo di aggiungerlo.
- Deltio mi avvisa se l'attributo lang cambia?
- Sì. Lo scanner SEO di Deltio legge l'attributo lang su ogni URL monitorato, segnala i valori mancanti o non validi e confronta scan consecutivi. Ogni cambiamento arriva come alert via email o Slack.