Tag hreflang: cos'è, come si usa e gli errori da evitare
Il tag hreflang dice a Google quale lingua mostrare a ogni utente. Sintassi, regole, codici ISO corretti, x-default, rapporto con il canonical ed errori tipici.
Aggiornato il 24 settembre 2026 · 5 min di lettura
Hai tradotto il sito in inglese e tedesco, ma Google continua a mostrare la versione italiana a chi cerca da Berlino. Quasi sempre il problema ha un nome: hreflang.
Ecco cos'è, come si scrive, le regole da rispettare e come controllarlo.
Cos'è il tag hreflang
hreflang è un attributo che dice a Google: «questa pagina esiste anche in altre lingue, a questi indirizzi». Si scrive come un elenco di link nell'<head> di ogni pagina:
<link rel="alternate" hreflang="it" href="https://tuosito.it/prezzi/" />
<link rel="alternate" hreflang="en" href="https://tuosito.it/en/pricing/" />
<link rel="alternate" hreflang="de" href="https://tuosito.it/de/preise/" />
<link rel="alternate" hreflang="x-default" href="https://tuosito.it/prezzi/" />
Ogni riga collega una versione al suo codice di lingua. È un segnale forte, non un ordine: se è scritto bene Google lo segue, se è scritto male lo ignora.
Perché conta per la SEO
Senza hreflang succedono tre cose:
- Google mostra la lingua sbagliata, e l'utente se ne va.
- Le versioni vengono raggruppate e Google ne mostra una sola.
- Perdi posizioni nei mercati esteri, proprio quelli per cui hai pagato la traduzione.
Non è un fattore di ranking diretto, ma decide quale versione vede ogni utente.
Le regole da rispettare
| Regola | Cosa significa |
|---|---|
| Reciprocità | Se la pagina A indica B come versione inglese, B deve indicare A come versione italiana |
| URL assoluti | Sempre https://tuosito.it/en/, mai /en/ |
| Autoreferenza | Ogni pagina include anche sé stessa nell'elenco |
| Codici ISO validi | Lingua in ISO 639-1, regione facoltativa in ISO 3166-1 |
| x-default | Una versione di riserva per chi parla altre lingue |
Il modo più semplice per rispettare reciprocità e autoreferenza è usare lo stesso blocco hreflang su tutte le versioni. Se manca il link di ritorno, Google scarta la coppia.
Codici di lingua: gli errori tipici
Il formato è lingua oppure lingua-REGIONE, con il trattino. Per il pubblico italiano: it per tutti, it-IT per l'Italia, it-CH per la Svizzera italiana.
Molti errori nascono dal confondere paese e lingua:
| Sbagliato | Corretto | Perché |
|---|---|---|
en-UK | en-GB | Il codice del Regno Unito è GB |
jp | ja | Il giapponese è ja |
cn | zh | Il cinese è zh |
kr | ko | Il coreano è ko |
dk | da | Il danese è da |
gr | el | Il greco è el |
cz | cs | Il ceco è cs |
ua | uk | L'ucraino è uk |
en_US | en-US | Serve il trattino, non l'underscore |
Un codice non valido viene semplicemente ignorato.
x-default
x-default indica la pagina da mostrare quando nessuna lingua corrisponde a quella dell'utente: di solito l'originale o una pagina di scelta della lingua. Conviene aggiungerlo sempre.
Tre modi per implementarlo
- Nell'
<head>di ogni pagina. Il metodo più diffuso e più facile da controllare. - Nella sitemap XML. Con elementi
xhtml:linkper ogni URL: comodo sui siti grandi, perché gestisci tutto in un solo file. - Nell'header HTTP
Link. Utile per PDF e file non HTML, che non hanno un<head>.
Se ne usi due, devono dire esattamente la stessa cosa.
hreflang e canonical
Il canonical serve a indicare l'URL ufficiale tra pagine identiche nella stessa lingua. Una traduzione non è un duplicato.
La regola è una sola: ogni versione linguistica ha un canonical che punta a sé stessa. La pagina /en/pricing/ ha canonical /en/pricing/, non /prezzi/.
<!-- Su https://tuosito.it/en/pricing/ -->
<link rel="canonical" href="https://tuosito.it/en/pricing/" />
Se il canonical punta a un'altra lingua, Google non indicizza la traduzione e ignora l'hreflang di quella pagina. È l'errore più costoso, perché dal browser non si vede nulla.
Non dimenticare html lang
<html lang="en"> dichiara la lingua della pagina a browser, lettori di schermo e motori di ricerca. Deve essere coerente con l'hreflang: se /en/ dice lang="it", i segnali si contraddicono.
Gli errori più comuni
- URL con
http://o senzawwwquando il sito usahttps://www. - hreflang verso pagine con redirect,
404onoindex. - Lo stesso codice di lingua ripetuto due volte.
- Traduzioni caricate solo con JavaScript sullo stesso URL: hreflang non ha niente a cui puntare.
Come verificarlo
- Codice sorgente: apri una pagina tradotta, premi
Ctrl+U(Cmd+Opt+Usu Mac) e cercahreflangecanonical. - Search Console: nel report Pagine, il motivo «Pagina alternativa con tag canonical appropriato» sulle traduzioni è il segno tipico di un canonical sbagliato.
- La verifica SEO multilingua gratuita di Lantis: controlla in un colpo hreflang nell'head e nell'header HTTP (codici, URL assoluti, autoreferenza, x-default, duplicati), html lang e canonical, e visita fino a sei versioni tradotte per vedere se rimandano indietro.
Per un controllo completo del sito segui l'audit SEO multilingua.
Come Lantis lo automatizza
Scrivere hreflang a mano su 50 pagine in quattro lingue significa gestire centinaia di link. Lantis serve ogni lingua sul proprio URL (una sottocartella come /en/) e aggiunge in automatico:
- hreflang per tutte le lingue, più
x-default; - l'
html langcorretto su ogni versione; - un canonical autoreferenziale per ogni pagina tradotta.
Funziona con una riga di codice su Webflow, WordPress, Shopify o qualsiasi sito, e su Framer con il plugin. Da 3 € al mese per lingua, prime 100 traduzioni gratis, senza carta. Vedi come tradurre un sito Framer o Webflow.
Domande frequenti
hreflang è obbligatorio per un sito multilingua?
Non è obbligatorio, ma senza hreflang Google deve indovinare quale versione mostrare. Su un sito multilingua è uno dei segnali più importanti.
Meglio "it" o "it-IT"?
Se hai una sola versione italiana, it basta e copre tutti gli utenti italofoni. Usa it-IT e it-CH solo se hai contenuti diversi per Italia e Svizzera, per esempio prezzi in euro e in franchi.
Il canonical delle pagine tradotte deve puntare all'originale?
No. Ogni traduzione deve avere un canonical verso sé stessa. Se punta all'originale, Google non indicizza la traduzione e ignora il suo hreflang.
Posso usare hreflang con ?lang=en?
In teoria sì, ma è una struttura fragile. Meglio una sottocartella per lingua (/en/, /de/), che Google scansiona senza ambiguità.
Come faccio a sapere se il mio hreflang funziona?
Il modo più rapido è la verifica gratuita: segnala codici non validi, link di ritorno mancanti, x-default assente e canonical in conflitto.
Disponibile anche in English · Français · Deutsch · Português · हिन्दी · Русский · 日本語 · 한국어 · Türkçe · Bahasa Indonesia · العربية