Lavorando con grandi Brand internazionali, mi scontro spesso con problemi linguistici causati da una gestione errata dei tag hreflang.
Per questo motivo ho cercato di raggruppare i “pattern” di errore più ricorsivi e creare questa guida che dovrebbe aiutare voi lettori a riconoscere, gestire ed eliminare fino a 15 errori che causano la mancata visibilità sulle SERP delle diverse geografie.
- L’hreflang serve a dire a Google quale versione linguistica/geografica di una pagina mostrare agli utenti.
- Si implementa via tag HTML, sitemap XML o header HTTP.
- Best practice: reciprocità, auto-riferimento, x-default.
- Errori comuni: mismatch, assenza di x-default, mancanza di reciprocità.
Cos’è hreflang e perché è così importante? Breve ripasso per chi fosse alle “prime armi”.
Se gestisci un sito web multilingue, probabilmente ti sei già trovato di fronte alla sfida di far comprendere ai motori di ricerca quale versione linguistica mostrare agli utenti.
Google e gli altri motori di ricerca, infatti, non riescono automaticamente a capire che URL come example.com/it/scarpe e example.com/en/shoes sono versioni della stessa pagina, ma in lingue diverse.
È qui che entrano in gioco i tag hreflang, uno strumento fondamentale per l’ottimizzazione SEO internazionale.
<link rel="alternate" hreflang="it-IT" href="https://example.com/it/scarpe" />
- L’attributo rel=”alternate” indica che la pagina in questione è una versione alternativa all’originale.
- L’attributo hreflang=”it-IT” indica la lingua del contenuto e il Paese geografico di dove dev’essere mostrato. Nell’esempio sopra, viene indicato italiano (lingua) e Italia (Paese)
- L’attributo href è la URL esatta della versione in lingua.
Come implementare i tag Hreflang: la strategia SEO vincente
La domanda sorge spontanea: come faccio ad implementare i tag hreflang? È meglio implementarli nel codice HTML delle pagine o nella sitemap XML? Esistono altri metodi?
Implementazione HTML nel tag <header> della Pagina
PRO:
- Scansione Immediata: Googlebot legge questi tag immediatamente durante la fase di crawling della pagina
- Relazioni Precise: Garantisce maggiore precisione nella definizione delle relazioni tra le diverse versioni linguistiche
- Gestione Semplificata: Risulta più pratico da gestire per siti con un numero limitato di lingue o pagine
CONTRO:
- Manutenzione complessa per più di 100 pagine
- Deve essere presente su ogni singola pagina per tutto il sito
Esempio concreto di come implementare correttamente i tag hreflang nel <head> delle tue pagine, che potete trovare sulla guida di Google Developer relativa agli hreflang
<head>
<link rel="alternate" hreflang="en-gb"
href="https://en-gb.example.com/page.html" />
<link rel="alternate" hreflang="en-us"
href="https://en-us.example.com/page.html" />
<link rel="alternate" hreflang="en"
href="https://en.example.com/page.html" />
<link rel="alternate" hreflang="de"
href="https://de.example.com/page.html" />
<link rel="alternate" hreflang="x-default"
href="https://www.example.com/" />
</head>
Implementazione nella Sitemap XML
PRO:
- Ideale per Siti Complessi: Particolarmente consigliato per portali con numerose pagine e multiple varianti linguistiche
- Comprensione Rapida: Facilita ai motori di ricerca la comprensione dell’intera struttura multilingue
- Gestione Centralizzata: Permette un controllo centralizzato quando si ha a che fare con grandi volumi di contenuti
CONTRO:
- Meno prioritario per Google rispetto all’HTML
- Richiede sitemap XML ben strutturata
Esempio concreto di come implementare correttamente i tag hreflang nella sitemap xml, che potete trovare sulla guida di Google Developer relativa agli hreflang
<url>
<loc>https://www.example.com/english/page.html</loc>
<xhtml:link
rel="alternate"
hreflang="de"
href="https://www.example.de/deutsch/page.html"/>
<xhtml:link
rel="alternate"
hreflang="de-ch"
href="https://www.example.de/schweiz-deutsch/page.html"/>
<xhtml:link
rel="alternate"
hreflang="en"
href="https://www.example.com/english/page.html"/>
</url>
Implementazione attraverso HTTP Header (solo per file non-HTML)
Questo metodo va usato solamente per PDF, documenti e altri file non-HTML.
Esempio concreto di come implementare correttamente i tag hreflang usando gli header HTTP con chiamate in GET, che potete trovare sulla guida di Google Developer relativa agli hreflang
Link: <https://example.com/it/doc.pdf>; rel="alternate"; hreflang="it-IT", <https://example.com/en/doc.pdf>; rel="alternate"; hreflang="en-GB", <https://example.com/de/doc.pdf>; rel="alternate"; hreflang="de-DE"
Ti starai chiedendo qual’è il giusto metodo per implementare questi tag? Ebbene ti consiglio di usarli tutti insieme.
Nel caso in cui, per limiti tecnici o altre ragioni, fossi costretto a scegliere un solo metodo rispetto l’implementazione dei tag hreflang, opta sempre per l’implementazione HTML direttamente nelle pagine.
Google stesso raccomanda questa soluzione poiché:
- I tag nel codice sorgente sono considerati più affidabili
- Offrono maggiore chiarezza al crawler durante la scansione
- Vengono elaborati con priorità rispetto ad altre implementazioni
Quali sono le giuste coppie lingua-Paese? Codici Lingua-Regione (ISO 639-1 + ISO 3166-1)
| Mercato | Codice | Best scenario URL |
|---|---|---|
| 🇮🇹 Italiano (Italia) | it-IT | /it/ |
| 🇨🇭 Italiano (Svizzera) | it-CH | /it-ch/ |
| 🇬🇧 Inglese (UK) | en-GB | /en-gb/ |
| 🇺🇸 Inglese (USA) | en-US | /en-us/ o /us/ |
| 🇩🇪 Tedesco (Germania) | de-DE | /de/ |
| 🇦🇹 Tedesco (Austria) | de-AT | /de-at/ o /at/ |
| 🇫🇷 Francese (Francia) | fr-FR | /fr/ |
| 🇪🇸 Spagnolo (Spagna) | es-ES | /es/ |
| 🇲🇽 Spagnolo (Messico) | es-MX | /es-mx/ o /mx/ |
| 🌐 Globale (fallback) | x-default | /en/ |
Questa tabella è un’idea di come implementare al meglio gli hreflang, prima di cimentarvi con le versioni linguistiche, vi invito a salvarvi tra i preferiti l’elenco completo dei codici ISO Country Code.
Cos’è il tag x-default?
Ti sei accorto che negli esempi sopra avevo inserito anche un’ultima istruzione X-default, vero? Spero di sì e spero che non sei tornato su apposta a controllare! Ebbene questa è un’istruzione molto utile da usare quando:
- Nessuna lingua dell’utente corrisponde a quelle impostate come traduzione/localizzazione
- L’utente proviene da Paesi non targettizzati
- Google non riesce a determinare la lingua
Come scegliere la giusta lingua da inserire come x-default?
Esistono delle best practice che consiglio sempre, in generale l’x-default dovrebbe essere basato su:
- Lingua dominante (nel più del 90% dei casi)
- Il selettore lingua: qualora volessi che l’utente scelga manualmente (es: sito 10+ lingue)
- Mercato principale
Best Practices per l’implementazione corretta dei tag hreflang
Per massimizzare l’efficacia dei tag hreflang, assicurati di seguire queste linee guida fondamentali:
- Auto-riferimento: Includi sempre anche il riferimento alla pagina stessa con l’attributo della lingua corrispondente (es.
hreflang="it") - Reciprocità: Verifica che i tag siano reciproci – ogni versione linguistica deve rimandare a tutte le altre versioni disponibili
- Versione Predefinita: Utilizza sempre l’attributo
x-defaultper indicare quale versione del sito mostrare quando nessuna delle lingue specificate corrisponde alle preferenze dell’utente
Troubleshooting: 15 errori più comuni che devi evitare
Errore #1: Hreflang non reciproco
Sintomo: Search Console → “Mancante tag reciproco”
Diagnosi:
Pagina IT → linka EN ✅
Pagina EN → NON linka IT ❌
Fix: Assicurati che TUTTE le pagine linkino TUTTE le altre versioni
Errore #2: URL canonicalizzato differente da hreflang
Sintomo: Google ignora completamente gli hreflang
Esempio SBAGLIATO:
<!-- Pagina: https://example.com/it/scarpe -->
<link rel="canonical" href="https://example.com/en/shoes" /> <!-- ❌ canonical verso altra lingua -->
<link rel="alternate" hreflang="it-IT" href="https://example.com/it/scarpe" />
Fix: Canonical deve puntare a se stessa, non a versione in altra lingua
<link rel="canonical" href="https://example.com/it/scarpe" /> <!-- ✅ -->
Errore #3: Codice lingua errato
Esempi comuni sbagliati:
<!-- ❌ -->
<link rel="alternate" hreflang="eng" href="..." /> <!-- Bisogna usare "en" "eng" -->
<link rel="alternate" hreflang="UK" href="..." /> <!-- In questo caso Google interpreterà UK come il Paese Ucraina e non come lingua -->
<link rel="alternate" hreflang="en-UK" href="..." /> <!-- Bisogna uasare "GB" e non "UK" -->
<link rel="alternate" hreflang="en-ww" href="..." /> <!-- Nel caso di versioni internazionali non usare "ww" ma lascia solamente "en" -->
Errore #4: Catena redirect nell’hreflang
Problema:
hreflang → https://example.com/it/scarpe (301→) https://example.com/it/scarpe/
Conseguenza: Google potrebbe ignorare l’hreflang
Fix: Hreflang deve puntare alla URL finale (dopo il redirect)
<!-- ✅ CORRETTO -->
<link rel="alternate" hreflang="it-IT" href="https://example.com/it/scarpe/" />
Errore #5: Hreflang su pagine 404 o bloccate da robots.txt
Diagnostica:
- Crawla tutte le URL negli hreflang
- Verifica status code (deve essere 200)
- Verifica che robots.txt non blocchi le URL
Tool: Screaming Frog SEO Spider → Configuration → Hreflang
Errore #6: Stesso contenuto, lingue diverse, nessun hreflang né x-default
Problema senza hreflang: Google vede duplicati → penalizza uno arbitrariamente
Fix: Implementa hreflang per dire a Google “sono versioni legittime” e imposta correttamente l’x-default come fallback
Errore #7: Mancanza del tag autorefenziale
<!-- ❌ SBAGLIATO: manca it-IT autoreferenziale -->
<link rel="alternate" hreflang="en-GB" href="https://example.com/en-gb/running-shoes" />
<link rel="alternate" hreflang="en-US" href="https://example.com/en-us/running-shoes" />
<!-- ✅ CORRETTO: includere sempre se stessa -->
<link rel="alternate" hreflang="it-IT" href="https://example.com/it/scarpe-running" />
<link rel="alternate" hreflang="en-GB" href="https://example.com/en-gb/running-shoes" />
<link rel="alternate" hreflang="en-US" href="https://example.com/en-us/running-shoes" />
Errori #8-14: Quick Error List
| #Errore | Descrizione errore | Fix rapido |
|---|---|---|
| 8 | Hreflang in JavaScript | Metti in HTML statico o HTTP header |
| 9 | Hreflang solo su homepage | Aggiungi su TUTTE le pagine equivalenti |
| 10 | Sitemap XML vs HTML conflitto | Allinea entrambi o usa solo un metodo |
| 11 | URL parametrici in hreflang | Usa URL puliti (no ?lang=it) |
| 12 | Hreflang su versione mobile separata | Implementa anche su m.example.com |
| 13 | Dimenticare UTF-8 encoding | <meta charset="UTF-8"> in head |
| 14 | Dimenticare di inseire il Meta tag lang | Implementare correttamente il tag html <meta lang=""> |
| 15 | Dimenticare di inserire gli hreflang per PDF o altre risorse | Usare gli headers HTTP per tutti i tipi di file non HTML |
Quali strumenti puoi utilizzare per il testing e la validazione degli hreflang?
Una corretta implementazione degli hreflang non solo migliora la visibilità del tuo sito nelle ricerche internazionali, ma contribuisce anche a ridurre il bounce rate servendo agli utenti i contenuti nella lingua più appropriata.
Per tale motivo è tassativo dotarsi degli strumenti giusti per poter analizzare e fixare i vari errori.
Tool essenziali
1. Hreflang Tags Testing Tool (Aleyda Solis)
- URL: https://www.aleydasolis.com/english/international-seo-tools/hreflang-tags-testing-tool/
- Input: URL della pagina
- Output: Errori specifici + fix suggeriti
2. Google Search Console
- Sezione: Esperienza → Internazionale
- Report: Errori hreflang per URL
- ⚠️ Nota: Dati ritardati 2-7 giorni
3. Screaming Frog SEO Spider
- Crawl sito → Hreflang tab
- Export report errori
- Verifica reciprocità automatica
4. Validatore custom (da buon Nerd vi riporto uno script in Python che ho creato e che potete usare)
# Script base per validare hreflang
import requests
from bs4 import BeautifulSoup
def validate_hreflang(url):
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
hreflangs = soup.find_all('link', {'rel': 'alternate'})
# Check 1: Self-reference
self_ref = any(h['href'] == url for h in hreflangs)
# Check 2: Reciprocità
for h in hreflangs:
alt_url = h['href']
alt_response = requests.get(alt_url)
alt_soup = BeautifulSoup(alt_response.text, 'html.parser')
reciprocal = any(link['href'] == url
for link in alt_soup.find_all('link', {'rel': 'alternate'}))
if not reciprocal:
print(f"❌ {alt_url} non linka reciprocamente a {url}")
return True
# Usage
validate_hreflang("https://example.com/it/scarpe")
Cosa mi chiedono più spesso i colleghi SEO o i clienti?
I tag Hreflang influiscono sul ranking?
No direttamente. Ma indirettamente sì: serve il contenuto giusto da mostrare sulle SERP, perché riduce il bounce rate; di conseguenza migliora la UX e a sua volta migliora il ranking (“che al mercato mio padre comprò” [cit. spero non per pochi]).
Quanto tempo deve passare prima che Google riconosca i tag hreflang?
2-4 settimane in media. Per accelerare vi consiglio di implementare i tag in sitemap XML e richiedere l’indicizzazione via Search Console della stessa.
Posso usare l’implementazione HTML e quella via Sitemap XML?
Sì, anzi è consigliato per ridondanza. In caso di conflitto, Google prioritizza la versione HTML.
Serve hreflang tra versione .it e versione .com?
Dipende molto dal contesto: se il contenuto è identico ma il dominio diverso allora sì; se contenuto fosse totalmente diverso, non serve (ma a questo punto usa correttamente i canonical).
Hreflang funziona su Bing?
No. Bing non supporta i tag hreflang. Vi consiglio fortemente di usare content-language meta tag unita alla funziona di geo-targeting in Bing Webmaster Tools. Non sai come fare? Non ti preoccupare consulta la mia guida su come usare al meglio questo strumento.
Cosa devo fare se ho più di 50 lingue?
E chi sei Amazon?! (anzi pensandoci non credo che Amazon abbia tutte queste lingue). In tal caso comunque utilizza il metodo via sitemap XML in quanto è l’unico modo scalabile. Prima di lavorare sugli hreflang, ti consiglio fortemente di prioritizzare le versioni linguistice per mercati che davvero ti portano traffico e revenue.
Errori hreflang rilevati su Screaming Frog, Semrush e altri tool simili impattano negativamente il SEO?
Generalmente no (Google li ignora), ma perdi l’opportunità di ottimizzare traffico internazionale e incrementare la tua visibilità.
Come gestire dialetti? (es: es-ES vs es-MX)
Si parla ovviamente dei dialetti intesi come versioni della stessa lingua ma in Paesi diversi (ad esempio come lo spagnolo della Catalogna, o dell’America Latina rispetto alla Spagna stessa). In questi casi, crea versioni separate se contenuto differisce (es: “coger” in Spagna vs Messico), altrimenti un solo es generico.
Non ho una versione in una lingua su cui voglio espandere la mia visibilità, devo tradurre i contenuti attuali?
No! La risposta corretta è che devi “localizzare” i contenuti, il che siginifica che dovrai creare dei contenuti simili ma basati sulle keyword, i dialetti, gli usi di quel Paese. Non puoi limitarti solamente a tradurre (per quanto più rapido possa essere).
Serve sempre l’Hreflang?
Non serve se il sito è monolingua, in questo caso ti consiglio comunque di impostare l’x-default autoreferenziale. Non serve nel caso di contenuti completamente diversi (in questo caso usa i canonical).
Nel caso di domini con estensioni diverse (esempio .it, .de, .fr, .co.uk, ecc), ma con gli stessi contenuti come mi comporto?
Anche se sono diversi come estensioni ti consiglio ugualmente di inserire gli hreflang su TUTTE le pagine davvero comuni.
Come devo implementare i tag hreflang nel mio CMS?
Ci sono diversi metodi, provo a darti un quadro generale:
- se usi WordPress puoi usare plugin come Polylang e Yoast SEO, oppure WPML;
- se usi Shopify puoi usare app come Weglot o Langify;
- se usi Magento, l’hreflang è nativo e già configurabile senza bisogno di plugin aggiuntivi
Potrebbe interessarti anche...
Approfondisci l'argomento con una consulenza su misura o un corso di formazione dedicato.