SEO multilingua in Next.js: hreflang, sitemap e fallback della lingua
Una configurazione pratica per gli attributi hreflang alternates, x-default, le sitemap localizzate, gli slug tradotti e le catene di fallback per la lingua in un sito Next.js multilingua.
View as MarkdownTradurre i contenuti è solo la prima metà della SEO multilingua. La seconda metà consiste nello spiegare ai motori di ricerca come sei intervenuto: quale URL serve una specifica lingua, qual è quella predefinita e cosa mostrare quando una lingua non ha ancora una traduzione. Sbagliare significa vedere Google indicizzare le pagine in francese per query in inglese, oppure considerare dieci traduzioni diverse come contenuti duplicati. ↵↵Ecco la checklist che utilizziamo e come Scribe ne genera la maggior parte partendo dai contenuti che già conosce.↵↵## Gli attributi hreflang alternates in ogni pagina↵↵Ogni pagina localizzata deve dichiarare tutte le versioni correlate, inclusa se stessa, oltre a un attributo x-default che punta alla versione destinata alle lingue senza corrispondenza. In Next.js, questo corrisponde al campo alternates.languages nei metadati della pagina.↵↵La parte più complessa riguarda gli slug tradotti. Se /docs/getting-started diventa /fr/docs/premiers-pas in francese, i link alternativi devono utilizzare lo slug localizzato e non quello inglese preceduto dal prefisso della lingua. Scribe memorizza lo slug tradotto insieme a ogni traduzione. L'helper alternates() in fase di esecuzione restituisce la mappa completa per ogni documento, trasformando il codice dei metadati in un semplice ciclo invece di una tabella di ricerca da aggiornare manualmente.↵↵Due regole fondamentali per evitare gli errori più comuni:↵↵- L'attributo hreflang deve essere reciproco. Se la pagina in francese rimanda a quella in tedesco, la pagina in tedesco deve fare lo stesso con quella in francese. Generare entrambe le versioni dallo stesso archivio garantisce questa reciprocità.↵- Gli URL canonici devono fare riferimento a se stessi per ogni lingua. L'URL canonico della pagina francese è l'URL in francese. Puntare i link canonici di tutte le lingue verso l'inglese comunica a Google di escludere le traduzioni dall'indice.↵↵## Una sitemap ottimizzata per le lingue↵↵Ogni URL inserito nella sitemap dovrebbe includere gli stessi link alternativi, oltre a x-default. La funzione sitemapEntries() di Scribe restituisce una voce per ciascun documento con tutti gli URL localizzati e un campo lastmod calcolato in base ai campi integrati publishedAt e updatedAt. In questo modo la sitemap rimane aggiornata senza dover inserire le date a mano.↵↵I documenti rimossi non dovrebbero semplicemente sparire nel nulla. Scribe mantiene i reindirizzamenti in un file _redirects.json specifico per tipologia. Gli URL obsoleti reindirizzano tramite 301 verso il loro sostituto in ogni lingua, preservando così l'autorevolezza dei link acquisita.↵↵## Fallback della lingua invece di errori 404↵↵Quali contenuti dovrebbe mostrare /fr-CA/guide se la pagina è stata tradotta in francese, ma non nel francese del Canada? Un errore 404 rende inutile la traduzione esistente. Servire direttamente la versione inglese senza avvisare disorienta i lettori.↵↵Scribe gestisce automaticamente il problema attraverso una catena di fallback. Una variante regionale rimanda alla sua lingua base prima di passare all'inglese. Ad esempio, fr-CA prova prima con fr, per poi passare a en. Allo stesso modo, zh-Hant-TW cerca zh-Hant, poi zh e infine en. In fase di esecuzione, il sistema indica quale lingua è stata effettivamente servita tramite actualLocale. Il layout può così informare correttamente l'utente e i parametri prerenderizzati includono gli URL di fallback, garantendo l'esistenza delle pagine in fase di compilazione.↵↵## Anche i metadati sono contenuti↵↵I titoli e le meta description influiscono sul posizionamento e meritano la stessa attenzione dedicata al corpo del testo. In Scribe, questi sono normali campi del frontmatter traducibili, dotati di hash e convalidati come ogni altro elemento. Il prompt di traduzione è pensato per la transcreazione piuttosto che per una resa letterale. Un dettaglio cruciale, specialmente quando si devono ottimizzare i 60 caratteri di un tag title.↵↵## Il punto della situazione↵↵Non stiamo parlando di nulla di esotico. Si tratta solo di organizzazione. Link alternativi, canonici, sitemap, redirect e fallback derivano tutti da un'unica domanda. Tale domanda è: "quale documento esiste, in quale lingua e a quale URL". Un CMS che gestisce le traduzioni come dati primari può fornire questa risposta da un'unica posizione centrale. Collegare manualmente questi elementi tra un CMS in hosting, una piattaforma di traduzione e un router è proprio il punto in cui la SEO multilingua solitamente fallisce.↵↵Scopri come combinare tutti gli elementi nella guida alle API in fase di esecuzione, oppure parti dalla guida introduttiva.