Checklist de SEO para Next.js (App Router)

Checklist de SEO para Next.js con el App Router, con código | We.Inc

Checklist de SEO para el App Router: metadata y generateMetadata, metadataBase, plantillas de título, canonical, hreflang, sitemap.ts, robots.ts e imágenes OG, con código.

Checklist de SEO para Next.js (App Router)

En el App Router, las etiquetas SEO salen de un objeto metadata exportado o de una función generateMetadata en los archivos layout y page, que solo funcionan en Server Components. Define metadataBase una vez en el layout raíz, añade app/sitemap.ts y app/robots.ts, da a cada ruta un canonical mediante alternates y coloca un archivo opengraph-image junto a las páginas que lo necesiten.

Dónde va cada pieza

El App Router trae soluciones integradas para casi todas las tareas de SEO técnico, pero están repartidas en una docena de páginas de documentación. Esta checklist las reúne en orden, con código para copiar en cada punto, y las casillas te permiten seguir el avance de tu propio proyecto.

Preguntas frecuentes

¿Puedo usar generateMetadata en un componente de cliente?

No. El objeto metadata y generateMetadata solo se admiten en Server Components, porque Next.js tiene que resolverlos en el servidor antes de renderizar. Mantén la página como Server Component e importa un componente de cliente para las partes interactivas.

¿Por qué params es una Promise en generateMetadata?

Las versiones actuales de Next.js pasan params y searchParams como Promises, así que escribes const { slug } = await params dentro de un generateMetadata async. El código escrito para versiones anteriores que lee params.slug directamente necesita actualizarse.

¿Cómo hago un sitemap con más de 50,000 URL en Next.js?

Usa generateSitemaps en un archivo sitemap.ts. Devuelve una lista de ids, y el export por defecto genera un sitemap por id. En Next.js 16 el id llega como Promise. Los archivos se sirven en rutas como /product/sitemap/1.xml.

¿Next.js añade una etiqueta canonical automáticamente?

No, salvo que la definas tú. Añade alternates.canonical en la metadata de cada ruta, normalmente como ruta relativa, por ejemplo /blog/my-post, y deja que metadataBase la convierta en una URL completa.

¿Puedo exportar a la vez metadata y generateMetadata?

No, un segmento de ruta puede exportar uno u otro. Usa el objeto estático cuando nada dependa de la petición o de datos obtenidos, y generateMetadata cuando sí dependa.

Primero estático, dinámico donde haga falta

El renderizado sigue importando

Código para cada punto

Layout raíz: metadataBase, plantilla de título y valores por defecto

Se define una vez en app/layout.tsx. Las páginas hijas que exportan title: "Pricing" se muestran como Pricing | Northside.

Ruta dinámica: generateMetadata con canonical

params se espera con await. getPost representa tu propia función de datos.

app/sitemap.ts

Devuelve una entrada por URL. changeFrequency y priority son opcionales y Google los ignora, así que se omiten.

app/robots.ts

Genera robots.txt en la raíz del sitio.

app/blog/[slug]/opengraph-image.tsx

Dibuja una imagen para compartir de 1200 por 630 a partir del título del post con ImageResponse de next/og. Los exports alt, size y contentType se convierten en etiquetas og.

Límites de los archivos de imagen

Imágenes para compartir basadas en archivos

metadataBase definido en app/layout.tsx

Permite que todos los demás campos de URL sean rutas relativas

Plantilla de título más valor por defecto en el layout raíz

Da a cada página un sufijo coherente, como | Acme

Título y descripción únicos en cada página

Metadata estática o generateMetadata por ruta

Canonical en cada ruta indexable

hreflang para las rutas traducidas

alternates.languages, o en el sitemap

app/sitemap.ts solo incluye URL canónicas activas

Divídelo con generateSitemaps cuando sea grande

app/robots.ts con una línea de sitemap

Bloquea solo zonas como /admin o /api

Imagen Open Graph para las rutas clave

Archivo opengraph-image con texto alternativo

noindex en rutas pobres en contenido o privadas

robots: { index: false } en la metadata de esa ruta

Contenido renderizado en el servidor

Revisa el código fuente de la página, no solo lo que muestra el navegador

La checklist

{count} de {total} hechos

Empieza gratis · Sin tarjeta de crédito

Relacionado: Guías

Producto

Para quién es

Funciones

Recursos

Empresa

Mapa del sitio