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 respuesta corta

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

Comience con las URL

Proporcionar a cada versión de idioma una ruta estable

Utilice una estructura de ruta como /fr/pricing o /de/products/widget. La página debe ser accesible directamente, mostrarse en el idioma correspondiente en el servidor y seguir siendo válida cuando un rastreador la solicite sin cookies del navegador ni preferencias de idioma.

  • 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

Generar metadatos

Crear relaciones lingüísticas recíprocas

Next.js admite metadatos con un objeto alternates.languages. Genera el mismo conjunto completo de idiomas desde cada página de configuración regional para que las versiones en inglés, francés y alemán se enlacen entre sí.

  • 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

Renderizar el contenido

Asegúrese de que el idioma de la página coincida con la URL.

Hreflang no es un mecanismo de traducción. La página /fr/products/widget debe mostrar contenido, metadatos, navegación, datos estructurados y valores dinámicos relevantes en francés. Resuelva la configuración regional activa antes de que la respuesta llegue al navegador.

  • 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

Validar el clúster

Compruebe ambas direcciones antes del lanzamiento.

Los motores de búsqueda pueden ignorar grupos de idiomas incompletos o contradictorios. Pruebe cada página publicada en un idioma específico, inspeccione su encabezado y confirme que los enlaces sean recíprocos y que cada página tenga una URL canónica propia.

  • 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 de verificación de producción

Verifique la experiencia lingüística antes del lanzamiento.

  • 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.

Preguntas frecuentes

Preguntas que se hacen los equipos antes de implementar el SEO multilingüe.

Does Next.js generate hreflang automatically?

Next.js proporciona API de metadatos para alternativas de idioma, pero su aplicación debe proporcionar las URL de configuración regional y la asignación de idioma correctas.

Should hreflang URLs be absolute?

Utilice URL HTTPS completas en los metadatos y mapas del sitio de producción para que las relaciones lingüísticas sean inequívocas.

Do I still need canonical tags when using hreflang?

Sí. Hreflang describe versiones equivalentes en otros idiomas o regiones; cada página localizada debe seguir identificando su propia URL canónica.