Se il tuo sito WordPress serve contenuti in più lingue o si rivolge a regioni diverse, implementare i tag hreflang è essenziale per l'ottimizzazione dei motori di ricerca. Senza di essi, Google e altri motori di ricerca potrebbero mostrare la versione linguistica sbagliata nei loro risultati o trattare le tue pagine tradotte come contenuti duplicati, diluendo i tuoi ranking tra tutte le versioni linguistiche. I tag hreflang dicono ai motori di ricerca esattamente quale lingua e variante regionale rappresenta ciascuna pagina, garantendo che gli utenti atterrino sempre sulla versione più rilevante.
Cosa sono i tag hreflang e come li usano i motori di ricerca
Hreflang è un attributo HTML che specifica la lingua (e opzionalmente il target geografico) di una pagina. Appare come elemento <link> nella sezione <head> della tua pagina, oppure come voce nella tua sitemap XML. Ecco come appare un tipico set di tag hreflang per una pagina disponibile in inglese e italiano:
<link rel="alternate" hreflang="en" href="https://example.com/en/about/" />
<link rel="alternate" hreflang="it" href="https://example.com/it/chi-siamo/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/about/" />Quando Googlebot scansiona una pagina e trova questi tag, capisce che entrambi gli URL rappresentano lo stesso contenuto in lingue diverse. Serve quindi la versione appropriata in base alle preferenze linguistiche e alla posizione del ricercatore. Il tag x-default funge da fallback generico per gli utenti la cui lingua o regione non corrisponde a nessuno dei valori hreflang specificati.
Hreflang usa codici lingua ISO 639-1 (ad es. en, it, fr) e opzionalmente codici paese ISO 3166-1 Alpha 2 (ad es. en-US, it-CH, pt-BR). Il solo codice lingua si rivolge a tutti gli utenti di quella lingua indipendentemente dalla posizione, mentre aggiungere un codice paese limita il targeting a una regione specifica.
Quando hai bisogno del targeting regionale rispetto al solo linguistico
La scelta tra codici solo linguistici (come it) e codici specifici per regione (come it-IT, it-CH) dipende dalla tua strategia di contenuti:
- Solo lingua (
it): Usalo quando il tuo contenuto in italiano è adatto a tutti gli utenti italofoni indipendentemente dal loro paese. Questa è la scelta giusta per la maggior parte dei blog, siti informativi e prodotti SaaS. - Specifico per regione (
it-IT,it-CH): Usalo quando hai contenuti separati adattati a paesi specifici. Ad esempio, un negozio e-commerce con disponibilità diversa di prodotti, prezzi o informazioni legali per Italia rispetto a Svizzera richiede tag specifici per regione.
Un errore comune è usare codici specifici per regione quando i codici solo linguistici sarebbero sufficienti. Se il tuo contenuto italiano è identico per tutti gli italofoni, it è più semplice ed evita la necessità di creare pagine separate per regione.
Configurare hreflang con WPML
WPML (WordPress Multilingual Plugin) è il plugin multilingua premium più utilizzato e gestisce automaticamente i tag hreflang:
- Acquista WPML Multilingual CMS su wpml.org e installalo.
- Esegui la procedura guidata di configurazione. Scegli la tua lingua predefinita e aggiungi tutte le lingue che il tuo sito supporta.
- Seleziona la tua struttura URL. WPML supporta sottocartelle (
/en/,/it/), sottodomini (en.example.com) o domini separati. Le sottocartelle sono le più comuni e le più semplici da gestire. - Inizia a tradurre i tuoi contenuti. Per ciascun articolo o pagina, clicca sull'icona "+" accanto alla lingua di destinazione nel pannello lingua di WPML per creare una traduzione.
- WPML genera automaticamente tag hreflang per ogni pagina che ha traduzioni. Aggiunge anche il tag
x-defaultche punta alla tua versione in lingua predefinita.
Per verificare l'output, visualizza il sorgente di una pagina tradotta e cerca hreflang. Dovresti vedere un tag <link> per ogni lingua, incluso quello per la pagina corrente (un hreflang auto-referenziale, che è obbligatorio).
WPML si integra anche con Yoast SEO e Rank Math. Quando entrambi i plugin sono attivi, il plugin SEO prende il controllo della generazione hreflang e aggiunge un proprio livello di convalida che può individuare configurazioni errate comuni.
Configurare hreflang con Polylang
Polylang è una popolare alternativa gratuita a WPML. Genera automaticamente tag hreflang per tutte le traduzioni collegate:
- Installa e attiva Polylang dalla directory dei plugin WordPress.
- Vai a Lingue > Lingue e aggiungi ogni lingua che il tuo sito supporta. Imposta locale, codice lingua e formato URL (sottocartella consigliata).
- Assegna una lingua a ogni articolo e pagina esistente. Polylang aggiunge una colonna lingua all'elenco degli articoli, rendendo facile vedere quali sono stati tradotti.
- Collega le traduzioni tra loro. Quando modifichi un articolo, usa la casella "Traduzioni" nella barra laterale per collegarlo all'equivalente in altre lingue.
- Polylang emette automaticamente tag hreflang nella
<head>per tutte le traduzioni collegate.
Una differenza importante rispetto a WPML: Polylang non aggiunge automaticamente il tag x-default in tutte le configurazioni. Per garantire che sia presente, vai a Lingue > Impostazioni > Hreflang e verifica che x-default sia impostato sulla tua lingua principale. Se usi Polylang Pro (la versione premium), questo viene gestito automaticamente.
Configurare hreflang con TranslatePress
TranslatePress adotta un approccio diverso permettendoti di tradurre i contenuti direttamente nel frontend:
- Installa e attiva TranslatePress.
- Vai a Impostazioni > TranslatePress e aggiungi le tue lingue.
- Clicca su "Traduci il sito" nella barra degli strumenti admin per aprire l'editor di traduzione visiva.
- Naviga a qualsiasi pagina e clicca sugli elementi di testo per tradurli inline.
- TranslatePress gestisce automaticamente la generazione di tag hreflang per tutte le pagine tradotte.
TranslatePress memorizza le traduzioni nel database invece di creare articoli separati, il che significa che la gestione dei tuoi contenuti è più semplice, ma le opzioni di struttura URL sono più limitate.
Combinare Yoast SEO o Rank Math con plugin multilingua
Sia Yoast SEO che Rank Math riconoscono i popolari plugin multilingua e prendono il controllo della generazione di tag hreflang quando entrambi sono attivi. Questa integrazione aggiunge convalida extra:
- Corrispondenza URL canonical: Il plugin SEO verifica che l'href hreflang corrisponda all'URL canonical di ciascuna pagina, prevenendo una configurazione errata comune.
- Gestione noindex: Le pagine contrassegnate come noindex vengono automaticamente escluse dall'output hreflang, poiché i motori di ricerca non dovrebbero comunque indicizzarle.
- Integrazione sitemap: Le annotazioni hreflang sono incluse nella sitemap XML generata dal plugin SEO, fornendo ai motori di ricerca una seconda fonte di dati hreflang.
Se usi Yoast SEO con WPML o Polylang, controlla SEO > Generale > Funzionalità e assicurati che la funzione hreflang non sia disabilitata. Rank Math gestisce questo automaticamente senza configurazione aggiuntiva.
Implementazione manuale di hreflang in WordPress
Per siti con configurazione multilingua personalizzata (ad es. utilizzando installazioni WordPress separate per ciascuna lingua o un approccio CMS headless), potresti dover aggiungere manualmente i tag hreflang:
function add_hreflang_tags() {
if (is_singular()) {
$post_id = get_the_ID();
// Definisci la tua mappatura lingua-URL
// Memorizza le traduzioni come post meta o in una tabella personalizzata
$translations = array(
'en' => get_post_meta($post_id, '_url_en', true),
'it' => get_post_meta($post_id, '_url_it', true),
'fr' => get_post_meta($post_id, '_url_fr', true),
);
// Rimuovi voci vuote
$translations = array_filter($translations);
// Aggiungi la pagina corrente (hreflang auto-referenziale è obbligatorio)
$current_lang = get_locale();
$lang_code = substr($current_lang, 0, 2); // 'en_US' diventa 'en'
$translations[$lang_code] = get_permalink();
// Emetti i tag hreflang
foreach ($translations as $lang => $url) {
echo '<link rel="alternate" hreflang="' . esc_attr($lang) . '" href="' . esc_url($url) . '" />' . "\n";
}
// x-default (di solito punta all'inglese o alla tua lingua principale)
if (!empty($translations['en'])) {
echo '<link rel="alternate" hreflang="x-default" href="' . esc_url($translations['en']) . '" />' . "\n";
}
} elseif (is_front_page() || is_home()) {
// Gestisci la homepage separatamente
$home_translations = array(
'en' => 'https://example.com/en/',
'it' => 'https://example.com/it/',
'fr' => 'https://example.com/fr/',
);
foreach ($home_translations as $lang => $url) {
echo '<link rel="alternate" hreflang="' . esc_attr($lang) . '" href="' . esc_url($url) . '" />' . "\n";
}
echo '<link rel="alternate" hreflang="x-default" href="' . esc_url($home_translations['en']) . '" />' . "\n";
}
}
add_action('wp_head', 'add_hreflang_tags');In una configurazione di produzione, sostituirai gli array URL hard-coded con lookup dinamici dal tuo sistema di mappatura delle traduzioni, sia esso post meta, una tabella di database personalizzata o una chiamata API alla tua piattaforma di gestione delle traduzioni.
Aggiungere hreflang alle sitemap XML
Per siti con migliaia di pagine, specificare hreflang nella tua sitemap XML può essere più efficiente che aggiungere tag a ogni pagina HTML. L'approccio sitemap XML riduce la dimensione della pagina e fornisce ai motori di ricerca una fonte centralizzata di dati hreflang. Ecco il formato XML:
<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="it"
href="https://example.com/it/chi-siamo/" />
<xhtml:link rel="alternate" hreflang="x-default"
href="https://example.com/en/about/" />
</url>Sia WPML che Polylang aggiungono automaticamente annotazioni hreflang alle loro sitemap. Se usi Yoast SEO insieme a un plugin multilingua, Yoast include hreflang anche nella sua sitemap. Per implementazioni manuali, puoi usare un plugin come "XML Sitemap Generator for Google" e personalizzare l'output della sitemap per includere voci hreflang.
Puoi usare contemporaneamente sia tag hreflang HTML che annotazioni della sitemap XML. Google elabora entrambi e li riconcilia. In caso di conflitti tra i due, Google utilizza la propria euristica per determinare la mappatura corretta.
Regole hreflang cruciali che devi seguire
Hreflang è notoriamente facile da implementare in modo errato. Segui queste regole per evitare insidie comuni:
- Il collegamento bidirezionale (reciproco) è obbligatorio: Se la pagina A (inglese) contiene un hreflang che punta alla pagina B (italiano), la pagina B deve anche contenere un hreflang che punta indietro alla pagina A. Se il collegamento è unidirezionale, i motori di ricerca lo ignorano completamente. Questo è l'errore hreflang più comune.
- L'hreflang auto-referenziale è obbligatorio: Ogni pagina deve contenere un tag hreflang che punti a se stessa. Se la tua pagina inglese ha tag hreflang per le versioni italiana e francese, deve anche avere un tag hreflang per la versione inglese che punti al proprio URL.
- Usa solo URL canonical: L'URL in ogni tag hreflang deve corrispondere esattamente all'URL canonical di quella pagina. Se una pagina ha un tag
rel="canonical"che punta a un URL diverso, usa l'URL canonical nel tag hreflang, non l'URL della pagina corrente. - Ogni variante linguistica ha bisogno del set completo: Con 4 versioni linguistiche, ogni variante di pagina deve contenere tutti i 4 tag hreflang più x-default. Set incompleti fanno sì che i motori di ricerca ignorino l'intera annotazione hreflang per quel gruppo di pagine.
- Le pagine devono restituire un codice di stato 200: Non includere negli URL hreflang URL che reindirizzano (301/302) o restituiscono errori (404/500). I motori di ricerca contrassegnano questi come errori hreflang e possono eventualmente smettere di elaborare le tue annotazioni hreflang.
- Includi sempre x-default: Il tag x-default funge da fallback per gli utenti la cui lingua o regione non corrisponde a nessuna delle tue varianti specificate. Senza di esso, questi utenti potrebbero non vedere affatto i tuoi contenuti nei risultati di ricerca.
Debug e convalida della tua implementazione hreflang
Dopo aver configurato i tag hreflang, è cruciale una convalida approfondita. Anche piccoli errori possono rendere inutilizzabile l'intera configurazione hreflang:
- Analisi InspectWP: Esegui ogni versione linguistica del tuo sito attraverso InspectWP. Rileva tutti i tag hreflang ed elenca ogni variante linguistica, rendendo facile verificare che tutti i tag siano presenti e puntino agli URL corretti.
- Google Search Console: Controlla il rapporto Targeting internazionale (sotto Strumenti e rapporti precedenti) per gli errori hreflang. Google segnala problemi come collegamenti di ritorno mancanti, codici lingua sconosciuti e conflitti hreflang con tag canonical.
- Ispezione manuale del codice sorgente: Visualizza il sorgente di ciascuna versione linguistica e verifica che i tag hreflang siano presenti, bidirezionali e auto-referenziali. Controlla che gli URL siano assoluti (non relativi) e utilizzino il protocollo corretto (https, non http).
- Audit con Ahrefs o Screaming Frog: Per siti di grandi dimensioni, usa uno strumento crawler per controllare tutte le pagine contemporaneamente. Questi strumenti possono identificare tag hreflang mancanti, collegamenti non reciproci e disallineamenti di codici lingua sull'intero sito.
Hreflang per reti WordPress Multisite
Se gestisci un WordPress Multisite in cui ogni sito secondario rappresenta una lingua diversa, l'implementazione di hreflang richiede consapevolezza cross-site. WPML supporta configurazioni Multisite e collega i contenuti tra i sottositi. Per implementazioni manuali, devi interrogare i database degli altri sottositi per trovare il corrispondente articolo tradotto e costruire dinamicamente l'URL hreflang. La funzione WordPress switch_to_blog() ti consente di interrogare i dati di un altro sottosito all'interno della stessa rete.
Considerazioni sulle prestazioni per siti multilingua di grandi dimensioni
Sui siti con molte lingue (10+), i tag hreflang possono aggiungere un markup significativo a ogni pagina. Ogni pagina ha bisogno di un tag per lingua più x-default, quindi un sito con 15 lingue aggiunge 16 elementi <link> alla head di ciascuna pagina. Per i siti sensibili alle prestazioni, vale la pena considerare le seguenti strategie:
- Usa hreflang nella sitemap XML invece dell'HTML: Spostare le dichiarazioni hreflang nella sitemap rimuove completamente il markup dalle tue pagine, riducendo la dimensione delle pagine.
- Cache dell'output hreflang: Se generi tag hreflang dinamicamente (ad es. da query del database), memorizza nella cache il risultato con transient WordPress o la tua object cache per evitare ripetuti hit al database a ogni caricamento di pagina.
- Usa l'header HTTP per contenuti non HTML: Per PDF e altre risorse non HTML, puoi dichiarare hreflang usando l'header HTTP
Linkinvece dei tag HTML.