SEO para frameworks de JavaScript
SEO para frameworks de JavaScript — React, Next.js, Vue, Nuxt, Angular, Svelte y Astro. Cómo el modo de renderizado (SSR, SSG, CSR) determina lo que Google puede indexar y qué frameworks gestionan mejor el SEO de fábrica.
Idiomas
El SEO para frameworks de JavaScript depende del modo de renderizado: SSG y SSR proporcionan a Googlebot HTML preconstruido; CSR requiere una ejecución de JavaScript que puede funcionar o fallar. Next.js y Nuxt ofrecen la mayor cantidad de soporte SEO integrado (SSR, SSG, ISR y API de metadatos). React y Vue puros en modo CSR son las opciones más arriesgadas para SEO. La arquitectura de islas de Astro es excelente para SEO de forma predeterminada. Angular requiere SSR mediante @angular/ssr (antes Angular Universal) para una indexación fiable.
TL;DR — La mayoría de los frameworks de JavaScript construyen las páginas en el navegador del visitante (CSR). Esto funciona bien para los usuarios, pero es posible que los motores de búsqueda no ejecuten el JavaScript y no vean tu contenido. La solución es usar un modo del framework que construya las páginas en el servidor (SSR) o durante la compilación (SSG). Next.js y Nuxt lo facilitan; React y Vue puros en modo CSR requieren trabajo adicional.
Por qué los frameworks de JavaScript plantean problemas de SEO
Google procesa JavaScript mediante rastreo, renderizado e indexación, y los recursos bloqueados o que fallan pueden cambiar el resultado renderizado. Evidence for this claim Primary standard or official documentation supporting the adjacent article claim. Scope: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confidence: high · Verified: Google: JavaScript SEO basics El modo de renderizado y la implementación de los metadatos importan más que la marca del framework por sí sola. Evidence for this claim Primary standard or official documentation supporting the adjacent article claim. Scope: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confidence: high · Verified: web.dev: Rendering on the Web
Los sitios web tradicionales envían HTML completo desde el servidor. Los rastreadores de motores de búsqueda descargan ese HTML y pueden indexar el contenido de inmediato. Los frameworks de JavaScript suelen funcionar de otra manera: el servidor envía un archivo HTML mínimo y después JavaScript se ejecuta en el navegador para construir el contenido real de la página.
Si un rastreador de motores de búsqueda no ejecuta tu JavaScript (o lo ejecuta pero algo falla), ve una página vacía. Ese es el problema de SEO de CSR.
Modos de renderizado explicados
- SSG (generación de sitios estáticos) — las páginas se construyen como HTML durante el despliegue. Los rastreadores reciben HTML completo sin necesidad de JavaScript. Es la mejor opción para SEO.
- SSR (renderizado del lado del servidor) — el servidor construye el HTML de nuevo para cada solicitud. Los rastreadores reciben HTML completo. También es excelente para SEO.
- CSR (renderizado del lado del cliente) — JavaScript construye la página en el navegador. Los rastreadores deben ejecutar JavaScript para ver el contenido. Google puede hacerlo, pero se producen fallos y el descubrimiento es más lento.
Frameworks según su seguridad SEO de fábrica
Los más seguros:
- Astro — genera HTML estático de forma predeterminada; JavaScript solo donde tú lo activas
- Next.js — ofrece SSG, SSR e ISR; API completa de metadatos; estándar del sector
- Nuxt — lo mismo para el ecosistema Vue; excelente compatibilidad con SSR/SSG
Requieren configuración:
- Angular — CSR de forma predeterminada; necesita
@angular/ssr(antes Angular Universal) para un SEO seguro - React — CSR de forma predeterminada; necesita Next.js o React Router (modo framework) para SSR/SSG
- Vue — CSR de forma predeterminada; necesita Nuxt para SSR/SSG
- Svelte — CSR de forma predeterminada; SvelteKit añade compatibilidad con SSR/SSG
TL;DR — En el nivel técnico, el SEO de los frameworks de JS consiste en: (1) la arquitectura de renderizado del payload HTML inicial, (2) la inyección de metadatos en
<head>antes de enviar la respuesta, (3) cómo gestiona el framework la hidratación y el descubrimiento de enlaces, y (4) la antigüedad de la caché ISR. Next.js tiene las herramientas SEO integradas más completas (API de Metadata,app/sitemap.tsintegrado y optimización de imágenes). Astro es el más seguro para SEO por su arquitectura.
Modo de renderizado, API de metadatos y compatibilidad con ISR por framework
Las capacidades y los valores predeterminados de los frameworks cambian con cada versión; verifícalos en la documentación oficial de cada uno. Evidence for this claim Primary standard or official documentation supporting the adjacent article claim. Scope: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confidence: high · Verified: web.dev: Rendering on the Web Ningún modo de renderizado garantiza la indexación ni el posicionamiento. Evidence for this claim Primary standard or official documentation supporting the adjacent article claim. Scope: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confidence: high · Verified: Google: JavaScript SEO basics Cuando compares frameworks para tomar una decisión, prueba las mismas rutas, el mismo contenido, el mismo destino de despliegue y las mismas herramientas para cada candidato: un benchmark que cambie cualquiera de esos elementos no mide el framework, sino la diferencia de configuración.
| Framework | Renderizado predeterminado | API de metadatos integrada | Compatibilidad con SSR/SSG | Compatibilidad SEO del ecosistema |
|---|---|---|---|---|
| Astro | SSG (islas) | Sí (<head> en archivos .astro, Content Collections para datos estructurados) | Ambos | Fuerte |
| Next.js | SSR/SSG (configurable) | Sí (API de Metadata en App Router) | Ambos + ISR | Excelente |
| Nuxt | SSR de forma predeterminada | Sí (useHead, useSeoMeta) | Ambos + ISR | Excelente |
| SvelteKit | SSR de forma predeterminada | Sí (svelte:head) | Ambos | Buena |
| React Router (modo framework) | SSR de forma predeterminada | Sí (exportación meta) | SSR + Deferred | Buena |
| Angular | CSR de forma predeterminada | Mediante los servicios Meta/Title de Angular | Mediante @angular/ssr | Moderada |
| React (puro) | CSR | Manual (react-helmet-async; react-helmet no recibe mantenimiento) | Mediante Next.js/Gatsby | Depende del wrapper |
| Vue (puro) | CSR | Manual (@unhead/vue; vue-meta no recibe mantenimiento) | Mediante Nuxt | Depende del wrapper |
Remix v2 y React Router v7 se han fusionado: el renderizado del servidor y el modelo de carga de datos de Remix ahora se distribuyen como el «modo framework» de React Router, que es la ruta de actualización estable para las aplicaciones Remix v2. Remix 3 es una reescritura independiente y experimental sin React (beta), no el sucesor de Remix v2; no lo trates como una opción SSR lista para usar en una base de código React.
Tiempo de los metadatos, enlaces rastreables y antigüedad de la caché ISR
Momento de la inyección de metadatos — Los metadatos (<title>, <meta>) deben estar en la respuesta del servidor, no añadirse mediante JavaScript después de cargar la página. La API de Metadata de Next.js, useSeoMeta de Nuxt y el componente <head> de Astro lo gestionan correctamente. document.title = '...' o React Helmet en modo CSR no lo hacen: se ejecutan después de servir el HTML inicial.
Descubrimiento de enlaces — Googlebot descubre enlaces analizando el HTML. Es posible que no descubra los enlaces añadidos mediante JavaScript (onClick, enrutamiento dinámico sin etiquetas <a>). Usa elementos <a href> reales para la navegación importante.
Hidratación y contenido duplicado — Si SSR y CSR renderizan contenido diferente (un desajuste de hidratación), puedes acabar con contenido indexado que no coincide con lo que ven los usuarios. Comprueba si hay errores de hidratación en la consola del navegador.
Soft 404 — Los routers del lado del cliente pueden mostrar silenciosamente una interfaz de «página no encontrada» mientras devuelven un estado HTTP 200. Los motores de búsqueda las indexan como páginas reales. Asegúrate de que tu página 404 devuelva un estado 404 real y de que las redirecciones del lado del servidor devuelvan 301.
Invalidación de la caché ISR — En configuraciones ISR de Next.js y Nuxt, las páginas obsoletas pueden servirse a los rastreadores durante la ventana de revalidación. Establece un intervalo revalidate basado en el tiempo y, para el contenido que cambia según un calendario que no controlas (por ejemplo, al guardar en un CMS), combínalo con una revalidación bajo demanda activada desde un handler de ruta respaldado por un webhook. Consulta la guía de ISR de Next.js para ver la API completa.
// app/blog/[id]/page.tsx — time-based revalidation
export const revalidate = 3600 // re-check this page at most once an hour
// app/api/revalidate/route.ts — on-demand revalidation, called by a CMS webhook
import { revalidatePath } from 'next/cache'
import { NextRequest, NextResponse } from 'next/server'
export async function POST(request: NextRequest) {
const { path, secret } = await request.json()
if (secret !== process.env.REVALIDATE_SECRET) {
return NextResponse.json({ message: 'Invalid secret' }, { status: 401 })
}
revalidatePath(path) // e.g. '/blog/1' — next request regenerates fresh HTML
return NextResponse.json({ revalidated: true })
} El SEO de un framework de JavaScript está determinado principalmente por el modo de renderizado. Tanto SSG (páginas construidas como HTML estático durante el despliegue) como SSR (páginas renderizadas en el servidor para cada solicitud) son opciones seguras para la indexación en motores de búsqueda. CSR (páginas renderizadas por completo en el navegador mediante JavaScript) es más arriesgado: Google puede ejecutar JavaScript, pero los fallos y las demoras son habituales y el descubrimiento es más lento.
Next.js (meta-framework de React): el soporte SEO integrado más completo. API de Metadata de App Router, SSG/SSR/ISR, optimización de imágenes, app/sitemap.ts integrado (el paquete next-sitemap ahora solo hace falta para las extensiones que no cubre), precarga a nivel de enlace. Es el estándar del sector para aplicaciones React sensibles al SEO.
Nuxt (meta-framework de Vue): capacidades equivalentes para Vue. Composables integrados useSeoMeta() y useHead(), SSR/SSG/ISR y módulo Nuxt SEO. Excelente para sitios basados en Vue.
Astro: la arquitectura de islas envía cero JavaScript de forma predeterminada. Las páginas son HTML estático; la interactividad se añade mediante «islas» explícitas. Es el framework de JS con mayor seguridad SEO de fábrica. Excelente para sitios con mucho contenido.
SvelteKit: SSR de forma predeterminada y excelente compatibilidad con metadatos mediante svelte:head. SEO sólido con una configuración mínima.
Angular: CSR de forma predeterminada; requiere @angular/ssr (antes Angular Universal) para una indexación fiable. Históricamente ha sido el más problemático para SEO de los frameworks principales.
React (puro): CSR de forma predeterminada. Requiere Next.js, React Router (modo framework) o Gatsby para SSR/SSG. Nota: el modelo de renderizado del servidor de Remix v2 se ha fusionado con React Router v7/v8 como «modo framework»: esa es la ruta de actualización mantenida, no la beta separada y experimental de Remix 3 sin React. No uses CRA/Vite-React puro para contenido que deba posicionarse.
Vue (puro): el mismo problema. Usa Nuxt para aplicaciones Vue críticas para el SEO.
Svelte (puro): CSR de forma predeterminada. Usa SvelteKit para SSR/SSG.
Lista de comprobación de SEO para frameworks de JavaScript
Universal (se aplica a todos los frameworks)
- Verifica el modo de renderizado:
curl -s URL | grep "<title>"— el título debe aparecer en el HTML sin procesar - Comprueba que
<title>y<meta name="description">estén en la respuesta del servidor - Usa etiquetas
<a href>reales para todos los enlaces navegables (no solo handlers de clic) - Asegúrate de que las páginas 404 devuelvan HTTP 404, no 200
- Asegúrate de que las redirecciones usen 301/302 del lado del servidor, no
window.location.href - Genera un sitemap XML y envíalo
- Añade
robots.txta tu directorio público
Next.js
- Usa la API de Metadata de App Router (exportación
metadataogenerateMetadata()) - Elige SSG (
generateStaticParams) o SSR (dynamic = 'force-dynamic') según la ruta - Añade un archivo
app/sitemap.ts(compatibilidad integrada con sitemaps de App Router) para la mayoría de los sitios; recurre al paquetenext-sitemapsolo si necesitas sitemaps entre dominios u otras extensiones que el tipo integradoMetadataRoute.Sitemapno modele - Usa
next/imagepara todas las imágenes (WebP automático, dimensionado y carga diferida) - Verifica los valores de ISR
revalidate: establece ventanas cortas para las páginas que se actualizan con frecuencia
Nuxt
- Usa
useSeoMeta()ouseHead()en cada componente de página - Instala el módulo
@nuxtjs/sitemap - Usa el SSR integrado de Nuxt (o
nuxt generatepara SSG) - Configura
robots.txtmediante@nuxtjs/robots
Astro
- Pasa las propiedades SEO a tu componente
<BaseHead>en cada página - Usa la integración
@astrojs/sitemapde Astro - Mantén las islas de JavaScript al mínimo; evita convertir secciones estáticas en islas
Angular
- Activa SSR mediante
ng add @angular/ssr - Usa los servicios
MetayTitlepara los metadatos - Añade transfer state para evitar una doble consulta a la API durante la hidratación
Análisis detallado de frameworks
- SEO para React
- SEO para Next.js
- SEO para Vue
- SEO para Nuxt
- SEO para Angular
- SEO para Svelte
- SEO para Astro
Lecturas relacionadas
Registro de cambios
Actualizado el 11 ago 2026.
Resumen editorial y detalles registrados del cambio.Detalles del cambio
-
Los detalles del cambio están disponibles actualmente en inglés.
-
Los detalles del cambio están disponibles actualmente en inglés.
-
Los detalles del cambio están disponibles actualmente en inglés.
La comparación completa no está disponible: no se archivó una instantánea anterior para esta revisión.
Actualizado el 19 jul 2026.
Resumen editorial y detalles registrados del cambio.Detalles del cambio
-
Los detalles del cambio están disponibles actualmente en inglés.
-
Los detalles del cambio están disponibles actualmente en inglés.
-
Los detalles del cambio están disponibles actualmente en inglés.
-
Los detalles del cambio están disponibles actualmente en inglés.
-
Los detalles del cambio están disponibles actualmente en inglés.
-
Los detalles del cambio están disponibles actualmente en inglés.
La comparación completa no está disponible: no se archivó una instantánea anterior para esta revisión.