Auditoría técnica SEO para Next.js, 2026
Una lista de verificación de auditoría técnica SEO para sitios Next.js: estrategia de renderizado, metadatos, sitemaps, Core Web Vitals, datos estructurados y hreflang.
Una auditoría técnica SEO de Next.js revisa ocho cosas: estrategia de renderizado, metadatos por ruta, el sitemap y el robots.txt, Core Web Vitals, datos estructurados, títulos duplicados en rutas dinámicas, enlazado interno y, en sitios multilingües, hreflang. Revísalas en orden y detectarás la mayor parte de lo que le cuesta el posicionamiento a un sitio Next.js.
Confirma tu estrategia de renderizado
La generación estática y la regeneración estática incremental (ISR) son las opciones preferidas para SEO en Next.js. ISR prerrenderiza las páginas igual que la generación estática, pero puede actualizar una sola página sin necesidad de un redeploy completo, así que el rastreador obtiene una página estable, rápida y renderizada en el servidor incluso cuando el contenido cambia (Vercel). Esto no es gratis de ignorar: el contenido renderizado en el cliente cuesta más cómputo de rastreo para indexarse, así que delegar al cliente cualquier cosa que quieras posicionar juega en tu contra.
Presta atención a las APIs de tiempo de solicitud. Usar cookies o la prop searchParams dentro de una ruta convierte toda esa ruta en renderizado dinámico, y usar cualquiera de las dos en el layout raíz convierte toda la aplicación en dinámica (Next.js). Limita el uso de estas APIs a lo estrictamente necesario y envuélvelas en límites de Suspense para que el resto de la página siga sirviéndose de forma estática. Una página que lee una cookie para mostrar un encabezado de sesión iniciada, por ejemplo, no necesita que toda la descripción del producto más abajo se renderice también de forma dinámica. Separar ambas cosas mantiene estático el contenido rastreable. Esto es lo primero que revisamos en nuestro trabajo con Next.js y Vercel, porque cada punto siguiente de esta lista asume que la página está llegando al rastreador como HTML renderizado.
Genera los metadatos de forma dinámica, por ruta
Un único bloque <head> estático no puede describir cien artículos de blog o páginas de producto distintas. Las exportaciones por ruta de la Metadata API, generateMetadata en el App Router, leen los datos propios de cada página y generan un título, una descripción y una imagen Open Graph específicos para esa URL (Next.js). Genera una imagen Open Graph por ruta usando la convención de archivo opengraph-image, en lugar de una sola imagen compartida para todo el sitio.
Los títulos y descripciones escritos así deben seguir una disciplina básica de longitud: un título de entre 50 y 60 caracteres, una descripción de entre 100 y 160 caracteres. Cualquier cosa más larga se trunca en el resultado de búsqueda, lo que anula el esfuerzo de escribirla con cuidado.
Audita tu sitemap y tu robots.txt
Google limita cada archivo de sitemap a 50MB sin comprimir o 50.000 URLs. Al superar cualquiera de los dos límites, hay que dividir el contenido en varios archivos de sitemap referenciados desde un índice de sitemaps (Google Search Central). La etiqueta <loc> es el único campo obligatorio. Google ignora por completo priority y changefreq, y solo confía en lastmod si ese valor es consistente y verificablemente exacto respecto a la fecha real de modificación de la página. Un lastmod poco fiable puede hacer que Google descarte el campo en todo el sitio, así que no lo fijes en "ahora" en cada build.
Next.js genera ambos archivos mediante la función generateSitemaps y la convención de archivo robots (Next.js). Confirma que el robots.txt no esté bloqueando ninguna ruta que aparezca en el sitemap. Ese desajuste es habitual después de un rediseño que mueve el contenido a un nuevo segmento de ruta y nadie actualiza las reglas de bloqueo para que coincidan. Los sitemaps también necesitan URLs absolutas y completas, y codificación UTF-8: Google rastrea exactamente lo que aparece listado y no resolverá una ruta relativa por su cuenta (Google Search Central). Enviar un sitemap es una sugerencia, no una garantía, así que un sitio limpio y rastreable sigue importando más que el sitemap en sí.
Alcanza los umbrales de Core Web Vitals
Google mide los tres Core Web Vitals en el percentil 75 de las cargas de página, por separado en móvil y en escritorio. Una puntuación "buena" significa un Largest Contentful Paint por debajo de 2,5 segundos, una Interaction to Next Paint por debajo de 200 milisegundos y un Cumulative Layout Shift por debajo de 0,1 (web.dev). No alcanzar el umbral en el percentil 75 cuenta como fallo aunque tu visitante mediano tenga una experiencia decente.
Lighthouse te da una sola ejecución simulada, útil para detectar regresiones antes de un despliegue, pero no equivale a datos de campo. Combínalo con el hook useReportWebVitals, que envía métricas reales de tus visitantes a tu herramienta de analítica, o revisa directamente el informe de Core Web Vitals en Search Console (Next.js). El componente next/image y el Font Module integrado son las dos palancas más directamente ligadas a LCP y CLS: la optimización de imágenes evita el desplazamiento de diseño y sirve formatos modernos, y el Font Module elimina la solicitud de red externa que provoca que el texto se recoloque después de que la página se pinta.
Valida los datos estructurados contra schema.org
Haz coincidir el tipo de schema.org con lo que realmente hay en la página: una página de producto lleva marcado Product, una ficha de negocio lleva LocalBusiness, una reseña lleva Review. Un marcado genérico o mal asignado no ayuda y puede provocar una revisión manual de ese tipo de dato (Vercel). Pasa cada plantilla, no solo la página de inicio, por el Rich Results Test de Google antes de publicar. Que una página valide no confirma que la ruta dinámica que genera cien variaciones de esa página también lo haga.
Corrige títulos y meta descriptions duplicados en rutas dinámicas
Este es el fallo más común y específico de Next.js, y viene precisamente de la fortaleza del propio framework: un layout heredado por todas las páginas bajo un segmento de ruta. Si una ruta dinámica nunca llama a su propio generateMetadata, cada página bajo ese segmento hereda el título y la descripción del layout padre, palabra por palabra (Ahrefs). Un rastreo completo del sitio con una herramienta como Screaming Frog o Ahrefs saca esto a la luz en minutos: busca un pico de títulos duplicados que coincida exactamente con el número de páginas de un segmento dinámico. La solución es la misma que en la sección de metadatos: genera la descripción a partir de los datos propios de cada página y luego revisa una muestra de páginas renderizadas para confirmar que cada una resuelve a una cadena realmente única.
Configura hreflang para cada idioma que publiques
Cualquier sitio Next.js que sirva más de un idioma necesita etiquetas hreflang que declaren cada variante de idioma y región, configuradas a través del campo alternates.languages de la Metadata API. Sin ellas, los motores de búsqueda pueden tratar el mismo artículo en dos idiomas como contenido duplicado en lugar de dos variantes intencionadas (Vercel). Esto aplica tanto si el segundo idioma es una traducción completa como si es un idioma que, a propósito, recae en el contenido en inglés.
Cómo priorizar la lista
Si solo puedes arreglar una cosa esta semana, arregla primero la estrategia de renderizado. Es la que condiciona todo lo demás en esta lista: una página que el rastreador no puede renderizar como HTML no se beneficia de un bloque de metadatos perfecto ni de datos estructurados válidos si están dentro de ella. Después, Core Web Vitals y la limpieza de metadatos son lo que más impacta más rápido, porque afectan a todas las páginas del sitio a la vez, no solo a una plantilla. Los títulos duplicados en rutas dinámicas van después, porque suelen resolverse con un único cambio en un solo archivo que soluciona cientos de páginas de golpe. Los datos estructurados y hreflang importan, pero son arreglos más acotados, limitados a una plantilla o a un idioma, y pueden dejarse para el final.
Un sitio recién lanzado y un sitio con cinco años de antigüedad necesitan puntos de partida distintos en esta lista, aunque la lista en sí no cambie. Un sitio nuevo es más propenso a tener un vacío de estrategia de renderizado o de metadatos porque nadie lo ha revisado todavía con tráfico real. Un sitio más antiguo es más propenso a haber acumulado títulos duplicados por años de cambios de plantilla, o un sitemap que nadie ha depurado desde una migración. Repasa la lista completa en cualquier caso, pero espera que el primer fallo aparezca en un lugar distinto. Esta es la auditoría que aplicamos antes de cada lanzamiento en Next.js, en este orden, porque hacerlo desordenado significa volver a revisar trabajo que un cambio de renderizado invalidará después.
Preguntas frecuentes
¿Cuál es la diferencia entre una auditoría técnica SEO y una revisión de Core Web Vitals?
Una revisión de Core Web Vitals cubre tres métricas de rendimiento: LCP, INP y CLS. Una auditoría técnica SEO es más amplia. Cubre estrategia de renderizado, metadatos, sitemaps, datos estructurados, problemas de contenido canónico y duplicado, y enlazado interno, con Core Web Vitals como una sección más dentro de ella.
¿Con qué frecuencia debería auditarse técnicamente un sitio Next.js?
De forma trimestral en un sitio que se actualiza activamente es una base razonable. Haz una auditoría inmediatamente después de una actualización de versión mayor del framework, un cambio de estrategia de renderizado o un rediseño que toque el enrutamiento o los metadatos, ya que cualquiera de esos cambios puede romper en silencio algo que esta lista detecta.
¿El App Router de Next.js mejora el SEO automáticamente?
Elimina algunos errores comunes al usar Server Components por defecto y dividir el código automáticamente por segmento de ruta. No configura por ti los metadatos, los datos estructurados ni la estrategia de renderizado. Eso sigue habiendo que configurarlo por ruta, según el checklist de producción de Next.js, actualizado por última vez en marzo de 2026.
¿Cuál es la forma más rápida de corregir meta descriptions duplicadas en rutas dinámicas?
Genera la descripción dentro de generateMetadata a partir de los datos propios de la página, en lugar de una exportación estática en el layout padre. Después revisa una muestra de páginas renderizadas, no solo una, para confirmar que cada página resuelve a una descripción única.