Hreflang: guida completa alla SEO internazionale
La base della SEO multilingue: senza hreflang Google mostra la pagina sbagliata all'utente sbagliato. Sintassi, errori comuni e verifica.
Hreflang è un attributo HTML che dice ai motori di ricerca per quale lingua e regione è destinata ogni versione di una pagina. Google usa questi dati per mostrare agli utenti la versione dei contenuti coerente con la loro lingua e geografia.
Senza hreflang Google prova a indovinare da solo la versione giusta — e spesso sbaglia: un utente di lingua russa riceve la pagina inglese, un tedesco vede la versione francese. Questo riduce la CTR, aumenta la frequenza di rimbalzo e costa conversioni.
Cos'è hreflang
L'attributo hreflang è stato introdotto nel 2011 — Google lo ha creato per risolvere il problema dei contenuti duplicati sui siti internazionali. Se una pagina /about esiste come /en/about, /de/about e /fr/about, Google non deve trattarle come duplicate — ciascuna serve un pubblico separato.
Anno di introduzione
Google ha introdotto hreflang per i siti multilingue
Codici regione
Codici ISO 3166-1 alpha-2 supportati da Google
Reciprocità
Tutte le versioni della pagina devono linkarsi a vicenda
Impatto sulla velocità
Un hreflang implementato correttamente non rallenta il sito
Hreflang è supportato solo da Google e Yandex. Bing usa il meta tag Content-Language e gli header HTTP, ma lavora con la struttura degli URL e il geo-targeting tramite Webmaster Tools. Se il tuo pubblico include utenti di lingua russa, hreflang resta necessario perché Yandex funzioni correttamente.
Quando usare hreflang
Non ogni sito multilingue ha bisogno di hreflang — è importante capire quando l'attributo risolve davvero un problema.
| Situazione | Serve hreflang | Note |
|---|---|---|
| Una lingua, paesi diversi (en-US, en-GB) | Sì | Contenuti diversi (prezzi, ortografia, promozioni) |
| Lingue diverse (en, de, fr) | Sì | Caso d'uso principale di hreflang |
| Una lingua, una regione | No | Inutile duplicare i link verso se stessi |
| Contenuti identici in tutte le versioni | No | Usa canonical |
| Traduzione parziale (70%+ del contenuto) | Sì | Anche le traduzioni parziali richiedono il markup |
| Traduzione automatica senza revisione | No | Google può considerarla spam |
/en-us/ e /en-gb/ senza differenze), conviene usare canonical anziché hreflang.Sintassi e formati
Hreflang usa codici di due standard: ISO 639-1 per la lingua e ISO 3166-1 alpha-2 per la regione. Formato: lingua o lingua-REGIONE.
<!-- Language only -->
<link rel="alternate" hreflang="ru" href="https://example.com/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/" />
<!-- Language + region -->
<link rel="alternate" hreflang="en-US" href="https://example.com/en-us/" />
<link rel="alternate" hreflang="en-GB" href="https://example.com/en-gb/" />
<link rel="alternate" hreflang="fr-FR" href="https://example.com/fr/" />
<link rel="alternate" hreflang="fr-CA" href="https://example.com/fr-ca/" />
<!-- x-default: page for users without a matching locale -->
<link rel="alternate" hreflang="x-default" href="https://example.com/" />In hreflang la regione si scrive sempre in maiuscolo (en-GB, fr-CA), la lingua in minuscolo (en, fr). Molte implementazioni usano tutto minuscolo — Google capisce entrambe le forme, ma seguire il formato canonico è una buona pratica.
| Codice | Significato |
|---|---|
| ru | Russo (qualsiasi regione) |
| en | Inglese (qualsiasi regione) |
| en-US | Inglese per gli Stati Uniti |
| en-GB | Inglese per il Regno Unito |
| de-AT | Tedesco per l'Austria |
| zh-Hans | Cinese semplificato |
| zh-Hant | Cinese tradizionale |
| x-default | Pagina per regione/lingua non definita |
Metodi di implementazione
Hreflang si può implementare in tre modi. La scelta dipende dalla tecnologia e dalla scala del sito.
1. Tag HTML nella sezione head
Il metodo più comune. I tag <link rel="alternate" hreflang="..."> vengono aggiunti al <head> di ogni pagina. Punto cruciale: tutte le versioni della pagina devono linkare tutte le altre versioni, compresa se stesse.
<!-- Page /en/about — links to ALL versions -->
<head>
<link rel="alternate" hreflang="en" href="https://example.com/en/about/" />
<link rel="alternate" hreflang="ru" href="https://example.com/about/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/about/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/about/" />
<link rel="canonical" href="https://example.com/en/about/" />
</head>2. Header HTTP Link
Per PDF, immagini e altre risorse non HTML si usano gli header HTTP. Il metodo funziona anche per qualsiasi pagina, ma richiede configurazione lato server.
# Nginx: add hreflang via HTTP headers
add_header Link '</en/about/>; rel="alternate"; hreflang="en", </about/>; rel="alternate"; hreflang="ru", </de/about/>; rel="alternate"; hreflang="de"';3. Sitemap XML
L'approccio ottimale per i siti grandi (10.000+ pagine). Tutte le relazioni hreflang vengono descritte nella sitemap — questo riduce il peso dell'HTML e centralizza la gestione.
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://example.com/en/about/</loc>
<xhtml:link rel="alternate" hreflang="en"
href="https://example.com/en/about/"/>
<xhtml:link rel="alternate" hreflang="ru"
href="https://example.com/about/"/>
<xhtml:link rel="alternate" hreflang="de"
href="https://example.com/de/about/"/>
<xhtml:link rel="alternate" hreflang="x-default"
href="https://example.com/en/about/"/>
</url>
</urlset>x-default: pagina selettore lingua
Il valore x-default designa la pagina per gli utenti la cui lingua o regione non corrisponde a nessuna delle alternative dichiarate. Google mostra questa versione quando non esiste un hreflang corrispondente.
- Pagina selettore lingua — l'utente arriva su
/choose-language/e sceglie la propria versione - Versione principale del sito — il più delle volte la versione inglese o quella che Google deve mostrare per default
- Homepage — se il sito ha diverse lingue, x-default punta a
/
Canonical + hreflang
Canonical e hreflang risolvono problemi diversi ma lavorano insieme. La regola è semplice: il canonical punta sempre a se stesso (self-canonical) quando la pagina ha hreflang.
<!-- CORRECT: canonical points to self + hreflang covers all versions -->
<link rel="canonical" href="https://example.com/en/about/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/about/" />
<link rel="alternate" hreflang="ru" href="https://example.com/about/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/about/" />
<!-- WRONG: canonical points to a different language version -->
<link rel="canonical" href="https://example.com/ru/about/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/about/" />Se il canonical della pagina inglese punta alla versione russa, Google tratterà la pagina inglese come duplicata e non la includerà nell'indice. Per questo hreflang senza self-canonical è di fatto inutile.
Errori comuni
Secondo i dati di audit, circa il 60% dei siti con hreflang ha almeno un errore critico. Ecco i più frequenti.
Errore 1: link reciproci mancanti
Il problema più diffuso. La pagina A linka la pagina B via hreflang, ma la pagina B non linka indietro la pagina A. Google ignora questi hreflang — senza reciprocità non sono validi.
Errore 2: codici lingua errati
hreflang="en_US"con underscore invece del trattino — codice non validohreflang="english"— una parola invece di un codice ISOhreflang="zh"invece dihreflang="zh-Hans"ohreflang="zh-Hant"— il cinese richiede l'indicazione della scritturahreflang="ru-RU"invece dihreflang="ru"— codice regione superfluo per una lingua senza dialetti
Errore 3: hreflang su pagine non indicizzabili
Se una pagina è bloccata in robots.txt o marcata noindex, l'hreflang per essa è inutile. Google non processa hreflang su pagine che non può indicizzare.
Errore 4: redirect automatici in base alla lingua
Alcuni siti reindirizzano gli utenti in base alla lingua del browser: un visitatore russo chiede /about/ e finisce su /ru/about/. Google vede un redirect 301 e non riesce a processare correttamente hreflang. Soluzione: servi i contenuti senza redirect, usa il cambio via JavaScript o i cookie.
Errore 5: hreflang che puntano a 404 o redirect
Hreflang deve puntare a URL finali e canonical. Link che passano da redirect o verso pagine 404 invalidano l'attributo per quella versione.
Strumenti di verifica
| Strumento | Cosa controlla | Costo |
|---|---|---|
| Google Search Console | Errori hreflang nel report International Targeting | Gratis |
| Aleyda Solis hreflang tool | Validità dei tag su una singola pagina, reciprocità dei link | Gratis |
| TechnicalSEO hreflang checker | Verifica in batch, export degli errori | Gratis / a pagamento |
| Screaming Frog | Scansione completa con analisi hreflang | A pagamento |
| Ahrefs Site Audit | Errori hreflang dentro l'audit SEO | A pagamento |
| Semrush Site Audit | Report hreflang dedicato | A pagamento |
FAQ
Hreflang influisce sul posizionamento?
Ogni pagina del sito ha bisogno di hreflang?
Cosa succede se hreflang punta a un URL con redirect 301?
Posso usare hreflang solo nella sitemap, senza HTML?
Quanto impiega Google a processare un nuovo hreflang?
Check it with SpiderHead
Free and local: run the audit on your own machine.



