# General Translation Knowledge Base: Che cos'è hreflang e come si configura?
URL: https://generaltranslation.com/it/kb/what-is-hreflang.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Hreflang indica a Google quali URL sono versioni linguistiche o regionali della stessa pagina, così che possa mostrare quella giusta nei risultati di ricerca. Puoi aggiungerlo con tag link HTML, intestazioni HTTP Link o una mappa del sito: assicurati che ogni collegamento sia reciproco e usa codici validi come en-GB, non en-UK.
Category: SEO multilingue
Last updated: 2026-10-20
Authors: Kevin Wu, Jackie Chen
Published: 2026-10-20

Hreflang funziona solo se ogni lingua dispone già di un proprio URL, perché associa un URL a un altro. Se non hai ancora scelto la struttura, inizia da [sottodirectory, sottodomini o domini nazionali](/kb/multilingual-url-structure), poi torna qui per aggiungere le annotazioni.

## Cosa fa e cosa non fa hreflang

Hreflang raggruppa gli URL di una stessa pagina in un cluster e assegna a ciascuno una lingua e, facoltativamente, una regione. Se la ricerca di un utente di lingua tedesca corrisponde alla tua pagina dei prezzi in inglese, Google può mostrare al suo posto l&#39;URL tedesco dello stesso cluster. Secondo la [guida alle versioni localizzate](https://developers.google.com/search/docs/specialty/international/localized-versions) di Google, il motore di ricerca può individuare le versioni alternative anche senza annotazioni, ma è consigliabile dichiararle esplicitamente.

È facile aspettarsi da hreflang più di quanto possa offrire:

* **Non è un reindirizzamento.** Hreflang aiuta Google a scegliere quale URL mostrare nei risultati di ricerca, ma non garantisce un risultato specifico. Chi fa clic arriva su quell&#39;URL, e tutto ciò che accade dopo dipende dal tuo server (argomento trattato in [come un sito dovrebbe scegliere la lingua da servire](/kb/locale-routing-seo)).
* **Non rileva la lingua.** Google afferma di non usare né hreflang né l&#39;attributo HTML `lang` per rilevare la lingua di una pagina: la ricava dal contenuto, tramite i propri algoritmi.
* **Non risolve il problema delle pagine non tradotte.** Google considera le versioni localizzate come duplicati solo quando il contenuto principale non è tradotto. Se traduci soltanto la navigazione e il footer, ottieni una pagina che hreflang può etichettare, ma non rendere distinta.

## Come si aggiunge hreflang?

Google considera equivalenti HTML, intestazioni HTTP e mappe del sito, e afferma che usarne più di uno non offre alcun vantaggio nella Ricerca. Scegli il metodo più adatto alla struttura del tuo sito.

### Elementi link HTML

Inserisci un `<link rel="alternate">` per ogni versione, inclusa la pagina corrente, all&#39;interno di `<head>`. L&#39;insieme dei tag è identico in tutte le versioni. Gli URL devono essere assoluti (`https://example.com/de/preise`, non `/de/preise`).

```html
<!-- Identico nell'<head> di /en/pricing, /de/preise e /fr/tarifs -->
<link rel="alternate" hreflang="en" href="https://example.com/en/pricing" />
<link rel="alternate" hreflang="de" href="https://example.com/de/preise" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/tarifs" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/pricing" />
```

Non combinare hreflang con altri attributi come `media` nello stesso `<link>` e verifica l&#39;HTML renderizzato: un link che finisce al di fuori di un `<head>` ben formato non viene preso in considerazione.

### Intestazioni HTTP Link

Per i file privi di un `<head>`, come i PDF, restituisci lo stesso cluster in un&#39;intestazione di risposta `Link`. Ogni URL va racchiuso tra parentesi angolari e le voci vanno separate da virgole.

```http
Link: <https://example.com/en/guide.pdf>; rel="alternate"; hreflang="en",
      <https://example.com/de/leitfaden.pdf>; rel="alternate"; hreflang="de",
      <https://example.com/fr/guide.pdf>; rel="alternate"; hreflang="fr"
```

### Mappa del sito XML

Una mappa del sito evita di inserire le annotazioni nelle pagine. Dichiara il namespace `xhtml`, assegna a ciascun URL una propria voce `<url>` e, all&#39;interno di ognuna, elenca tutte le versioni, compresa quella stessa. Secondo Google, queste voci figlie non rientrano nel limite di URL della mappa del sito.

```xml
<?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/pricing</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/pricing"/>
    <xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/preise"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/tarifs"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/en/pricing"/>
  </url>
  <url>
    <loc>https://example.com/de/preise</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/pricing"/>
    <xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/preise"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/tarifs"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/en/pricing"/>
  </url>
  <url>
    <loc>https://example.com/fr/tarifs</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/pricing"/>
    <xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/preise"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/tarifs"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/en/pricing"/>
  </url>
</urlset>
```

Posiziona la mappa del sito nella radice del sito quando le voci delle pagine che contiene si distribuiscono su più cartelle delle impostazioni regionali. Le [linee guida sulla mappa del sito](https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap) di Google descrivono l&#39;ambito delle directory e le opzioni di invio tra siti diversi; gli URL alternativi hreflang possono puntare ad altri domini.

## Le regole comuni a tutti i metodi

* **Usa, ove possibile, lo stesso set completo, includendo anche la pagina stessa.** Con tre versioni linguistiche, ogni pagina deve avere tre voci. Se mantenere un set completo risulta difficile, Google è in grado di elaborare gruppi reciproci più piccoli; dai la priorità ai link di ritorno tra le nuove versioni e la versione originale o principale.
* **I link devono essere reciproci.** Se la pagina X elenca la pagina Y ma Y non elenca a sua volta X, Google ignora la coppia. In questo modo un altro sito non può spacciarsi per la tua versione tedesca.
* **Aggiungi facoltativamente `x-default`.** Indica un fallback per le lingue senza corrispondenza, come un selettore di lingua o una versione nella lingua predefinita. Non è necessario per il funzionamento di hreflang. Scegli un fallback pertinente alla pagina, anziché rimandare ogni pagina interna alla homepage.
* **I codici sono composti da una lingua seguita, facoltativamente, da una regione.** La lingua segue lo standard ISO 639-1 (`de`), la regione lo standard ISO 3166-1 alpha-2 (`de-CH`) e le maiuscole non contano. Una regione da sola non è valida, e un codice paese al posto della lingua ha tutt&#39;altro significato: `be` indica il bielorusso, non il Belgio.
* **I sistemi di scrittura sono consentiti.** Google accetta i subtag di sistema di scrittura ISO 15924 come `zh-Hans` e `zh-Hant`, facoltativamente con una regione (`zh-Hans-US`). Con `zh-TW`, ricava il cinese tradizionale dalla regione.
* **Fornisci alle varianti regionali un fallback di sola lingua.** Se hai pagine `en-IE`, `en-CA` e `en-AU`, aggiungi una pagina `en` (può essere una delle tre) per chi parla inglese in tutti gli altri paesi.

Alcuni codici locale validi, però, qui non funzionano. `es-419` (spagnolo per l&#39;America Latina) è un tag BCP 47 corretto, ma l&#39;hreflang di Google supporta solo le regioni ISO 3166-1, quindi annota quella pagina come `es` oppure con paesi specifici come `es-MX` ed `es-AR`.

## Le pagine con hreflang dovrebbero usare canonical autoreferenziali?

Per pagine tradotte distinte, il canonical preferito di solito punta alla pagina stessa. Le [linee guida di Google sugli URL duplicati](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls) consigliano, quando si usa hreflang, di indicare un canonical nella stessa lingua o, se non esiste, la migliore alternativa disponibile. Evita di far puntare tutte le pagine tradotte alla versione inglese.

Le pagine regionali nella stessa lingua vanno valutate a parte. Se `en-US` e `en-GB` sono duplicati, puoi scegliere un canonical inglese preferito e usare hreflang per indicare il targeting regionale. Mantieni coerenti i segnali di canonical e hreflang e verifica in Search Console quale canonical ha selezionato Google. Un canonical dichiarato è un segnale forte, non una garanzia.

```html
<!-- Nel <head> di https://example.com/de/preise -->
<link rel="canonical" href="https://example.com/de/preise" />
<link rel="alternate" hreflang="en" href="https://example.com/en/pricing" />
<link rel="alternate" hreflang="de" href="https://example.com/de/preise" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/tarifs" />
```

Due dettagli correlati, dalla stessa pagina: Google ignora i link `rel="canonical"` che includono un attributo `hreflang`, quindi tieni separati i due tipi di link; inoltre, ai fini della canonicalizzazione, Google privilegia gli URL che fanno parte di un cluster hreflang. Usa l&#39;URL canonical di ciascuna versione del cluster, mai una variante con parametri di tracciamento.

## Quali sono gli errori hreflang più comuni?

* **Link di ritorno mancanti.** È il primo errore nell&#39;elenco degli errori comuni stilato da Google. In genere il template di un&#39;impostazione regionale non include il blocco, oppure una nuova lingua è stata aggiunta ad alcune pagine ma non ad altre.
* **Codici non validi.** Google ignora i codici regione riservati come `UK` e `EU`, quindi la regione in `en-UK` non ha alcun effetto: usa `en-GB`. Non vengono riconosciute nemmeno le regioni non supportate, come `419` in `es-419`.
* **URL relativi o con protocolli misti.** Le versioni alternative devono essere URL assoluti e Google sconsiglia di indicare URL `http://` negli hreflang se il sito usa HTTPS.
* **Versioni alternative che non portano direttamente alla pagina indicizzabile prevista.** Usa l&#39;URL canonical finale, non un reindirizzamento né una pagina di errore. Una pagina `noindex` è esclusa dalla Ricerca, quindi non può essere il risultato che vuoi far mostrare a Google. Oltre al codice di stato, verifica anche il contenuto di destinazione e i relativi link di ritorno.
* **Pagine in cui è tradotto solo il template.** Gli hreflang non bastano a renderle distinte e, secondo Google, i contenuti ripetuti peggiorano l&#39;esperienza di ricerca.

## Come si verifica che hreflang funzioni?

Il rapporto Targeting internazionale di Search Console non esiste più: Google [lo ha deprecato](https://support.google.com/webmasters/answer/12474899) insieme all&#39;impostazione di targeting per paese, ma afferma di continuare a supportare e utilizzare hreflang. Al suo posto, usa questi controlli:

* **Controlla una pagina a campione.** Scarica l&#39;HTML e verifica che la pagina elenchi se stessa e tutte le pagine sorelle:

  ```bash
  curl -s https://example.com/de/preise | grep -o '<link[^>]*hreflang[^>]*>'
  ```

* **Testa una pagina live.** La guida di Google rimanda a due strumenti di terze parti che non gestisce direttamente: [l&#39;hreflang tag tester di Merkle](https://technicalseo.com/seo-tools/hreflang/) per verificare un singolo URL e [l&#39;hreflang generator di Aleyda Solis](https://www.aleydasolis.com/english/international-seo-tools/hreflang-tags-generator/) per scrivere i tag.

* **Esegui il crawling dell&#39;intero sito.** Un crawler verifica la reciprocità su tutte le pagine. [L&#39;audit hreflang di Screaming Frog](https://www.screamingfrog.co.uk/seo-spider/tutorials/how-to-audit-hreflang/) segnala link di ritorno mancanti, versioni alternative con stato diverso da 200 o con `noindex`, codici non validi e versioni alternative che non corrispondono all&#39;URL canonical.

* **Valida la mappa del sito.** Esegui `xmllint --noout sitemap.xml` per individuare eventuale XML malformato prima che lo faccia Google.

## Configurare hreflang con General Translation

`gt-next` di General Translation assegna a ogni lingua un proprio URL tramite [`createNextMiddleware`](/docs/react/nextjs/reference/functions/create-next-middleware), prerequisito indispensabile per hreflang. Se usi slug localizzati tramite l&#39;opzione `pathConfig`, come `/fr/a-propos`, ogni percorso localizzato corrisponde all&#39;`href` da elencare nel cluster.

Le annotazioni vere e proprie restano invece nella tua app. Next.js genera i tag `<link rel="alternate" hreflang>` a partire da `metadata.alternates.languages`, e l&#39;articolo [Come si configura la SEO per un&#39;app Next.js multilingue?](/kb/multilingual-nextjs-seo) fornisce un helper che restituisce l&#39;URL canonical e tutte le versioni alternative con una sola chiamata. Parti dalle impostazioni regionali configurate, quindi elenca solo le versioni di ciascuna pagina che hai effettivamente pubblicato.

Se instradi un&#39;impostazione regionale tramite un alias, come `/cn` per il cinese, la [guida SEO sugli alias delle impostazioni regionali](/docs/react/nextjs/locale-alias-seo) usa [`resolveCanonicalLocale`](/docs/react/nextjs/reference/functions/resolve-canonical-locale) in modo che hreflang riporti il codice BCP 47 `zh` mentre l&#39;URL resta `/cn`.

## Punti chiave

* Hreflang associa gli URL a lingue e regioni nei risultati di ricerca. Non reindirizza i visitatori né indica a Google in quale lingua è scritta una pagina.
* Usa un solo metodo (`<link>` HTML, intestazione HTTP `Link` per i PDF oppure `xhtml:link` nella mappa del sito): per Google sono equivalenti.
* Punta a un insieme completo di URL equivalenti, con autoriferimenti e link reciproci. Anche gruppi reciproci più ridotti possono essere elaborati; `x-default` è facoltativo.
* I codici seguono lo standard ISO 639-1, con l&#39;aggiunta facoltativa di una regione ISO 3166-1 alpha-2 o di un sistema di scrittura ISO 15924: `en-GB`, non `en-UK`; `es-MX`, non `es-419`.
* Usa canonical coerenti, di norma autoreferenziali per le traduzioni distinte. Gestisci a parte le pagine regionali duplicate nella stessa lingua e verifica i link di ritorno con un crawler.

## Related questions

- [Come si configura la SEO per un'app Next.js multilingue?](https://generaltranslation.com/it/kb/multilingual-nextjs-seo.mdx): Assegna a ogni lingua un proprio URL con prefisso, come /en/about e /es/about, quindi pubblica html lang, un canonical autoreferenziale, alternative hreflang con x-default, un titolo e una descrizione tradotti e una voce nella mappa del sito per ogni lingua pubblicata. Contrassegna con noindex le versioni non pubblicate. gt-next di General Translation instrada ogni lingua verso il proprio URL e traduce i titoli con getGT.
- [Sottodirectory, sottodominio o ccTLD per la SEO multilingue](https://generaltranslation.com/it/kb/multilingual-url-structure.mdx): Usa sottodirectory come example.com/de/ quando un unico prodotto condivide sito e processo di rilascio. Solo un ccTLD indica un paese, i sottodomini consentono un hosting separato, Google sconsiglia i parametri ?lang= e tratta i domini di fantasia come .io e .ai come generici.
- [Reindirizzamenti per lingua e SEO: URL, cookie o Accept-Language?](https://generaltranslation.com/it/kb/locale-routing-seo.mdx): Lascia che sia l'URL a stabilire la lingua di ogni pagina che vuoi far indicizzare, perché Googlebot non invia alcuna intestazione Accept-Language ed esegue la scansione soprattutto da indirizzi statunitensi. Usa la scelta salvata in un cookie e, in subordine, Accept-Language solo per decidere verso quale pagina reindirizzare una radice neutra come /, con un reindirizzamento temporaneo 302 o 307.
- [Best practice per il selettore della lingua: UX, SEO e accessibilità](https://generaltranslation.com/it/kb/language-switcher.mdx): Indica ogni lingua con il suo nome nativo, ad esempio Deutsch o 日本語, ed evita le bandiere, che rappresentano paesi. Collega ogni opzione alla stessa pagina in quella lingua tramite un link scansionabile, memorizza la scelta in un cookie e non reindirizzare mai automaticamente un URL localizzato.
- [Checklist per il test di localizzazione delle app multilingue](https://generaltranslation.com/it/kb/multilingual-app-launch-checklist.mdx): Verifica nove aspetti in ogni impostazione regionale supportata su una build di produzione: percorsi completi, inclusi gli stati di errore e le email, cambio di lingua, plurali, valuta e fusi orari, espansione del testo, layout right-to-left, accessibilità, distribuzione delle traduzioni e URL per lingua scansionabili. Assegna a ogni verifica un criterio di superamento esplicito.

## Previous and next questions

- Previous question: [Best practice per il selettore della lingua: UX, SEO e accessibilità](https://generaltranslation.com/it/kb/language-switcher.mdx)
- Next question: [Che cos'è l'ICU formato dei messaggi?](https://generaltranslation.com/it/kb/icu-message-format.mdx)

## Sitemap

See the [Knowledge Base sitemap](https://generaltranslation.com/it/kb/sitemap.md) for every article.
