Next.js hreflang

Next.js hreflang: implement language alternatives in the App Router

A practical guide to locale routes, reciprocal hreflang links, translated metadata, and dynamic pages in a Next.js App Router application.

/ La risposta breve

Hreflang works when every language version has its own crawlable URL, identifies the complete language set, and links back to the other versions. In Next.js, generate those relationships with route-aware metadata instead of relying on browser language detection alone.

/ 01

Inizia con gli URL

Assegnare a ogni versione linguistica un percorso stabile

Utilizza una struttura di percorso come /fr/pricing o /de/products/widget. La pagina deve essere raggiungibile direttamente, visualizzare la lingua corrispondente sul server e rimanere valida quando un crawler la richiede senza cookie del browser o una preferenza Accept-Language.

  • Keep one canonical URL per language version.
  • Use stable slugs or a documented localized-slug strategy for dynamic pages.
  • Return a real 200 response for every published language route.
App Router route shape
app/
  [locale]/
    products/
      [slug]/
        page.js
        opengraph-image.js
    layout.js
    sitemap.js

// /fr/products/widget
// /de/products/widget
/ 02

Genera metadati

Creare relazioni linguistiche reciproche

I metadati di Next.js supportano un oggetto alternates.languages. Genera lo stesso set completo di lingue per ogni pagina locale, in modo che le versioni inglese, francese e tedesca rimandino tutte l'una all'altra.

  • Include the current page in its own language map.
  • Use fully qualified HTTPS URLs in production.
  • Keep language codes consistent with the locale values used by your application.
generateMetadata with Altified
import { headers } from "next/headers";
import { altified } from "@/lib/altified";

export async function generateMetadata() {
  const locale = (await headers()).get("x-altified-locale") || "en";

  return altified.translatedMetadata({
    locale,
    path: "/pricing",
    origin: "https://example.com",
    locales: ["en", "fr", "de"],
    title: "Pricing",
    description: "Plans for your product.",
  });
}
/ 03

Visualizza il contenuto

Fai in modo che la lingua della pagina corrisponda all'URL

Hreflang non è un meccanismo di traduzione. La pagina all'indirizzo /fr/products/widget deve effettivamente visualizzare contenuti, metadati, navigazione, dati strutturati e valori dinamici pertinenti in francese. Risolvere la lingua attiva prima che la risposta raggiunga il browser.

  • Translate titles, descriptions, Open Graph fields, and visible headings together.
  • Forward the active locale to backend APIs.
  • Use source-language fallbacks while a translation is pending.
Forward the active locale
const response = await altifiedFetch(BACKEND_URL + path);

// The active Altified locale is forwarded to the backend.
const product = await response.json();
/ 04

Convalida il cluster

Verificare entrambe le direzioni prima del lancio

I motori di ricerca possono ignorare i gruppi di pagine incompleti o contraddittori. Testa ogni pagina pubblicata in una determinata lingua, esamina l'intestazione visualizzata e verifica che i link siano reciproci e che ogni pagina abbia un URL auto-canonico.

  • English points to French, German, and English.
  • French points to English, German, and French.
  • Each canonical uses the same language as the page content.
  • Unpublished or incomplete locales are not advertised as live alternatives.

/ Lista di controllo della produzione

Verifica l'esperienza linguistica prima dell'avvio.

  • Every locale has a direct, crawlable URL.
  • Every language page returns translated content and metadata.
  • Hreflang links are reciprocal.
  • Canonicals are self-referential in the page language.
  • Dynamic product and article routes are included.
  • The site sitemap contains the language URL set.

/ Domande frequenti

Domande che i team si pongono prima di implementare la SEO multilingue.

Does Next.js generate hreflang automatically?

Next.js fornisce API per i metadati relativi alle alternative linguistiche, ma la tua applicazione deve fornire gli URL delle impostazioni locali e la mappatura della lingua corretti.

Should hreflang URLs be absolute?

Utilizza URL HTTPS completi nei metadati e nelle sitemap di produzione, in modo che le relazioni tra le lingue siano inequivocabili.

Do I still need canonical tags when using hreflang?

Sì. Hreflang descrive le versioni linguistiche o regionali equivalenti; ogni pagina localizzata dovrebbe comunque identificare il proprio URL canonico.