Cyber SEO: 50% de descuento en todos los planes anuales
Preferencias

La privacidad es importante para nosotros, por lo que tiene la opción de desactivar ciertos tipos de almacenamiento que pueden no ser necesarios para el funcionamiento básico del sitio web. Bloquear categorías puede afectar a su experiencia en el sitio web. Más información (Política de cookies)

Aceptar todas las cookies

SEO en Next.js: renderizado, metadatos, sitemap y un blog que posiciona

Guía de SEO en Next.js: elegir SSG, SSR o ISR, definir metadatos y canónicas, generar sitemap.xml, alimentar un blog por webhook y seguir siendo legible para las IA.

Publicado el:
25/10/2026
-
Actualizado el:
25/10/2026
Portada de la guía de Sorank sobre SEO en Next.js, con una página renderizada en el servidor, sus metadatos, su sitemap y las rutas del blog

Herramientas

Thibault Besson-Magdelain, fundador de Sorank

Acerca del autor

Thibault Besson-Magdelain

Fundador de Sorank, 5+ años de experiencia en SEO, entusiasta de GEO.
En esta página

En resumen

Next.js es uno de los mejores frameworks de React para SEO porque envía a los rastreadores HTML completo en lugar de una carcasa vacía. Para posicionar, prerrenderiza las páginas de contenido (generación estática o ISR), define títulos, descripciones y canónicas con la Metadata API, genera sitemap.xml y robots.txt desde la carpeta app, usa enlaces reales y códigos de estado correctos, y mantén el contenido principal fuera del código que solo se ejecuta en el navegador, ya que la mayoría de los rastreadores de las IA no ejecutan JavaScript.

¿Quiere ir más lejos? Pregunte a

Quiz rápido

¿Es el SEO para ti y cómo empezar?

4 preguntas rápidas para ver si Google puede traerte clientes.

Pregunta 1 de 425%
¿La gente busca en Google lo que vendes?

El SEO en Next.js consiste sobre todo en tomar la decisión correcta en cada ruta: qué se renderiza en el servidor, qué se almacena en caché y qué llega al HTML antes de que se ejecute cualquier script. Google explica en sus conceptos básicos de SEO para JavaScript que procesa las aplicaciones JavaScript en tres fases (rastreo, renderizado e indexación) y que el renderizado en el servidor o el prerrenderizado «sigue siendo una gran idea». Next.js lo hace por defecto. Esta guía cubre el App Router (Next.js 13 y posteriores), con notas para el antiguo Pages Router.

¿Next.js es bueno para el SEO?

Sí. Una aplicación React clásica renderizada en el cliente envía un archivo HTML casi vacío y construye la página en el navegador; los buscadores deben renderizarla y muchos bots nunca lo hacen. Next.js renderiza React en el servidor, de modo que la respuesta HTML ya contiene encabezados, texto, enlaces y metadatos. Nuestra guía de SEO para JavaScript explica por qué esa diferencia importa para la indexación.

En el App Router, los componentes son Server Components por defecto. Incluso los componentes marcados con 'use client' se prerrenderizan a HTML en el servidor. El punto débil son los datos: todo lo que cargas dentro de useEffect, o solo después de un clic, falta en el HTML inicial. Obtén el contenido en Server Components y reserva los componentes de cliente para la interactividad.

SSG, SSR, ISR o CSR: ¿qué modo de renderizado elegir?

Next.js permite combinar modos ruta por ruta. La elección afecta a la frescura, la velocidad y lo que reciben los rastreadores.

ModoCuándo se genera el HTMLVeredicto SEOIdeal para
Generación estática (SSG)En el buildEl mejor: HTML completo, muy rápidoLanding pages, documentación, artículos atemporales
Regeneración estática incremental (ISR)En el build y luego actualizado en segundo plano o bajo demandaEl mejor para sitios grandes o cambiantesBlogs, catálogos de productos, páginas de un CMS
Renderizado en el servidor (SSR)En cada solicitudBueno: HTML completo, depende de la velocidad del servidorPáginas personalizadas o en tiempo real
Renderizado en el cliente (CSR)En el navegadorDébil: contenido invisible para la mayoría de los botsPaneles tras un inicio de sesión

La documentación de Next.js sobre ISR enumera sus ventajas: actualizar contenido estático «sin reconstruir todo el sitio» y gestionar grandes cantidades de páginas sin builds eternos. Una ruta con export const revalidate = 3600 se regenera como máximo una vez por hora; para un control exacto, llama a revalidatePath o revalidateTag cuando cambie el contenido. ISR no funciona con una exportación estática (output: 'export'). Para las aplicaciones que deben seguir renderizándose en el cliente, nuestra guía de SEO para aplicaciones de una sola página repasa las soluciones.

Consejo

Comprueba lo que reciben los bots, no lo que muestra tu navegador: ejecuta curl sobre la URL o abre view-source y busca una frase del artículo. Si no está en el HTML sin procesar, depende de JavaScript.

¿Cómo se definen títulos, descripciones y canónicas con la Metadata API?

La Metadata API sustituye a next/head en el App Router. Según la documentación de Next.js sobre metadatos, exportas un objeto metadata estático desde un layout o una página, o una función generateMetadata cuando los valores dependen de datos, y Next.js genera las etiquetas del head. Ambos solo se admiten en Server Components.

export async function generateMetadata({ params }) {
  const { slug } = await params
  const post = await getPost(slug)
  return {
    title: post.title,
    description: post.excerpt,
    alternates: { canonical: `/blog/${slug}` },
    openGraph: { images: [post.cover] },
  }
}

Cinco reglas que evitan la mayoría de los problemas:

  • Define metadataBase en el layout raíz (tu dominio de producción), para que las canónicas relativas y las URL de Open Graph se vuelvan absolutas.
  • Usa una plantilla de título en el layout raíz, como '%s | Marca', para que cada página tenga un título único con la marca una sola vez.
  • Da a cada página indexable una canónica autorreferenciada mediante alternates.canonical; protege frente a duplicados creados por parámetros de URL y barras finales. Nuestra entrada del glosario sobre la etiqueta canónica resume las reglas.
  • Escribe una descripción por página, generada a partir del contenido en generateMetadata, nunca un valor por defecto para todo el sitio.
  • Añade imágenes Open Graph con un archivo opengraph-image en la carpeta de la ruta y comprueba el resultado con una herramienta de vista previa Open Graph.

En las páginas dinámicas, Next.js transmite los metadatos en streaming después de los primeros bytes para acelerar el renderizado. La documentación indica que el streaming está desactivado para los bots que esperan los metadatos en el head, detectados por su user agent (Bingbot, Twitterbot y Slackbot figuran entre los ejemplos), y que la opción htmlLimitedBots permite ajustar la lista. Si un rastreador que te importa no está incluido, añádelo. En el Pages Router, el equivalente es el componente Head de next/head, con un atributo key para evitar etiquetas duplicadas.

¿Cómo se generan sitemap.xml y robots.txt en Next.js?

Ambos son archivos especiales de la carpeta app. Un archivo sitemap.ts que exporta una función que devuelve URL se convierte en /sitemap.xml; un archivo robots.ts se convierte en /robots.txt. La referencia del sitemap señala que el archivo se almacena en caché por defecto y que el límite de Google es de 50.000 URL por sitemap; por encima, generateSitemaps lo divide en varios archivos.

import type { MetadataRoute } from 'next'

export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
  const posts = await getPosts()
  return posts.map((p) => ({
    url: `https://example.com/blog/${p.slug}`,
    lastModified: p.updatedAt,
  }))
}

Incluye solo URL canónicas, indexables y que respondan 200, con la fecha real de actualización en lastModified. El sitemap también acepta alternates.languages para sitios multilingües. En robots.ts, apunta al sitemap y decide qué bots de IA pueden rastrear el sitio; nuestro artículo sobre robots.txt para los rastreadores de IA los enumera. Más detalles del formato en nuestra entrada sobre el sitemap XML.

¿Qué detalles técnicos rompen con más frecuencia el SEO de un sitio Next.js?

ProblemaQué ocurreSolución
Navegación con onClick y router.pushGoogle solo sigue elementos a con hrefUsar el componente Link de next/link, que genera un enlace real
Contenido inexistente servido como página 200«Soft 404» en Search ConsoleLlamar a notFound() para que la ruta devuelva un estado 404
Redirecciones temporales para páginas movidasredirect() envía un 307Usar permanentRedirect() o permanent: true en next.config (308)
Barras finales mezcladasDos URL para la misma páginaElegir una con la opción trailingSlash y mantener canónicas coherentes
Despliegues de preproducción indexadosCopias duplicadas del sitio en GoogleEnviar noindex en los dominios que no son de producción
Contenido de pestañas cargado al hacer clicTexto ausente del HTMLRenderizar todo el contenido en el servidor y ocultarlo con CSS si hace falta

Todos estos fallos reducen la rastreabilidad: un rastreador debe poder descubrir cada URL mediante enlaces y obtener un código de estado limpio.

¿Cómo se añaden datos estructurados en Next.js?

La documentación de Next.js recomienda renderizar el JSON-LD en una etiqueta script de tipo application/ld+json directamente en el componente de página o de layout, a partir de los mismos datos que la página, y escapar el carácter < en el JSON serializado para evitar inyecciones. Como se renderiza en el servidor, Google y los rastreadores de IA lo ven en el HTML sin procesar. Usa Article (o BlogPosting) para los artículos, Organization en el layout raíz, BreadcrumbList para las páginas profundas y Product en e-commerce. Un generador de schema te da un bloque válido de partida; después valida la página con la prueba de resultados enriquecidos de Google.

¿Cómo hacer que un sitio Next.js sea lo bastante rápido para las Core Web Vitals?

Next.js incluye componentes que resuelven las causas habituales de unas malas Core Web Vitals:

  • next/image: redimensiona imágenes, sirve formatos modernos, aplica carga diferida por defecto y exige dimensiones, lo que evita desplazamientos de diseño. Marca la imagen principal de la parte visible como prioritaria para que no se cargue en diferido (suele ser el elemento del Largest Contentful Paint).
  • next/font: aloja las fuentes en tu propio dominio y evita el desplazamiento causado por el cambio tardío de fuente.
  • next/script: carga los scripts de terceros con una estrategia (afterInteractive, lazyOnload) en lugar de bloquear la página.
  • Menos JavaScript en el cliente: cada frontera 'use client' añade código que descargar e hidratar, lo que pesa en el Interaction to Next Paint en móvil.

Mide datos de campo, no solo una puntuación de laboratorio: nuestra guía de PageSpeed Insights explica cómo leer ambos.

¿Cómo montar un blog en Next.js que posicione?

Un blog en Next.js suele adoptar una de tres formas: archivos MDX o Markdown en el repositorio (sencillo, pero cada artículo exige un commit y un despliegue), un CMS headless (Sanity, Contentful, Strapi, Payload) consultado desde Server Components, o un webhook de publicación que recibe artículos de una herramienta externa. En los tres casos el patrón SEO es el mismo: una ruta dinámica app/blog/[slug] con generateStaticParams, generateMetadata, ISR, un sitemap alimentado por la misma fuente y una página índice que enlaza todos los artículos.

El webhook saca la publicación del ciclo de despliegue. Un Route Handler recibe el artículo, lo guarda y revalida las páginas afectadas:

// app/api/publish/route.ts
import { revalidatePath } from 'next/cache'

export async function POST(request) {
  if (request.headers.get('authorization') !== `Bearer ${process.env.PUBLISH_SECRET}`) {
    return new Response('Unauthorized', { status: 401 })
  }
  const article = await request.json()
  await savePost(article)
  revalidatePath('/blog')
  revalidatePath(`/blog/${article.slug}`)
  return Response.json({ ok: true })
}

Atención

Protege el endpoint con un secreto y revalida la ruta pública exacta. La documentación de ISR advierte que, con varias instancias de servidor y la caché de archivos por defecto, la revalidación bajo demanda solo limpia la instancia que recibe la llamada; usa un gestor de caché compartido.

¿Cómo ayuda el SEO en Next.js a que te citen las IA?

El renderizado en el servidor es la primera condición del GEO (optimización para motores generativos). El análisis de Vercel de diciembre de 2024, The rise of the AI crawler, concluyó que «ninguno de los grandes rastreadores de IA renderiza JavaScript actualmente», citando a GPTBot, ChatGPT-User, OAI-SearchBot, ClaudeBot y PerplexityBot, y contó 569 millones de solicitudes de GPTBot y 370 millones de Claude en su red en un mes. Una página Next.js que prerrenderiza su texto, sus encabezados y su JSON-LD es legible para todos ellos; una página renderizada en el cliente no lo es.

La segunda condición es un contenido que merezca ser citado: artículos que respondan a una pregunta por sección, con fuentes, cifras y definiciones claras, publicados con regularidad. Esa es la parte que automatiza Sorank, nuestro producto. Sorank es un software de SEO y GEO en autopilot: encuentra tus palabras clave y su generador de artículos de blog redacta 20, 60 o 120 artículos al mes con fuentes, enlaces internos e imágenes. En un sitio Next.js, se conecta mediante el webhook personalizado descrito en la página de instalación: tu Route Handler recibe cada artículo, lo guarda y revalida el blog. El seguimiento de menciones en IA comprueba después cada semana si ChatGPT, Claude y Gemini citan tu marca.

Formulario del generador de artículos de blog de Sorank que crea un artículo SEO a partir de una palabra clave objetivo

En pocas palabras: prerrenderiza cada página que quieras que encuentren, define los metadatos en el servidor y alimenta el sitemap desde la misma fuente que el contenido. Next.js aporta las herramientas; las posiciones y las citas de las IA dependen de lo que publiques con ellas. Para mantener un blog en Next.js con artículos nuevos, consulta los planes de Sorank, desde 49 € al mes con 3 días de prueba gratis.

Preguntas frecuentes

¿Next.js es mejor que React para el SEO?

Next.js está construido sobre React, así que la comparación es entre formas de renderizar. Una aplicación React de una sola página por defecto se renderiza en el navegador y envía un HTML casi vacío, mientras que Next.js prerrenderiza las páginas en el servidor o durante el build. Los rastreadores, incluidos los bots de IA que no ejecutan JavaScript, reciben el contenido completo con Next.js sin configuración adicional.

¿Next.js genera un sitemap automáticamente?

No por sí solo. En el App Router añades a la carpeta app un archivo sitemap.ts que devuelve tus URL, y Next.js lo sirve en /sitemap.xml. En sitios grandes, generateSitemaps reparte la lista en varios archivos, ya que Google acepta hasta 50.000 URL por sitemap.

¿Conviene usar el App Router o el Pages Router para el SEO?

Ambos pueden posicionar bien porque los dos prerrenderizan HTML. El App Router es la opción recomendada para proyectos nuevos: los Server Components reducen el JavaScript en el cliente, y la Metadata API, sitemap.ts y robots.ts gestionan de forma nativa los archivos SEO. En un sitio existente con Pages Router, migrar rara vez compensa solo por el SEO.

Nuestro blog para empresas ambiciosas

Nuestras herramientas SEO gratuitas

Ver todas nuestras herramientas gratuitas

PROBARON SORANK ANTES QUE USTED

Testimonios de fundadores ambiciosos

Crecimiento orgánicoE-commerce

0 a 10000 visitantes en 5 meses

Celio Fabianomonrobotlavevitre.fr
Crecimiento orgánicoSoftware

0 a 5000 clientes en 8 meses

Thibault BMsorank.com
Crecimiento orgánicoOcio y aviación

De 0 a 1104 clics en 4 meses

Dominiqueflight-sensations-idf.com
Crecimiento orgánicoSoftware musical

x30 de clics en 4 meses

Valentin Cordiertiger-sounds.com
Crecimiento orgánicoSalud y bienestar

x30 de clics en 4 meses

Rodrigue Bretonalthevia.com