Skip to content
← Todas las preguntas
Intermedio

¿Cómo funciona el renderizado híbrido (route rules) en Nuxt?

NuxtSSRRendimiento

El renderizado híbrido permite combinar estrategias de renderizado por ruta dentro de la misma app Nuxt. Una página de marketing puede pre-renderizarse en tiempo de build, el blog puede usar ISR y el panel de administración puede ser solo del cliente. Todo se configura en routeRules.

routeRules en nuxt.config.ts

ts
export default defineNuxtConfig({
  routeRules: {
    '/': { prerender: true },
    '/about': { prerender: true },
    '/blog/**': { isr: 3600 },
    '/admin/**': { ssr: false },
    '/api/**': { cors: true },
  }
})

Cada clave es un patrón de ruta. Los patrones glob (**) coinciden con rutas anidadas.

Reglas disponibles

ReglaQué hace
prerender: trueGenera HTML estático en tiempo de build
ssr: falseSolo en el cliente (SPA para esa ruta)
isr: numberIncremental Static Regeneration, caché durante N segundos
swr: number | trueStale-While-Revalidate, sirve el contenido antiguo y actualiza en segundo plano
cache: { maxAge: number }Caché de respuesta del servidor con TTL
redirect: stringRedirección HTTP
cors: trueAñade cabeceras CORS
headers: objectCabeceras de respuesta personalizadas

Cuándo usar cada estrategia

Prerender para contenido que cambia en el momento del despliegue:

ts
routeRules: {
  '/': { prerender: true },
  '/pricing': { prerender: true },
  '/docs/**': { prerender: true },
}

ISR para contenido que cambia periódicamente pero no necesita ser en tiempo real:

ts
routeRules: {
  '/blog/**': { isr: 3600 },       // regenerar cada hora
  '/products/**': { isr: 600 },    // regenerar cada 10 minutos
}

La primera petición tras expirar el caché dispara una regeneración en segundo plano. Los usuarios siempre reciben una respuesta rápida desde el caché.

SWR es similar a ISR pero siempre sirve la versión antigua mientras revalida:

ts
routeRules: {
  '/feed': { swr: true },           // TTL por defecto
  '/leaderboard': { swr: 300 },     // ventana de 5 minutos
}

Solo cliente para páginas detrás de autenticación o sin necesidad de SEO:

ts
routeRules: {
  '/admin/**': { ssr: false },
  '/dashboard/**': { ssr: false },
}

Route rules inline (por página)

En lugar de configurarlo todo en nuxt.config.ts, puedes definir las reglas directamente en la página:

vue
<!-- pages/about.vue -->
<script setup>
defineRouteRules({
  prerender: true
})
</script>

Esto mantiene la estrategia de renderizado junto a la página que la usa.

Combinación de reglas

Las reglas se pueden combinar. Una ruta puede tener caché, cabeceras y CORS a la vez:

ts
routeRules: {
  '/api/public/**': {
    cors: true,
    cache: { maxAge: 60 },
    headers: { 'X-Custom': 'value' }
  }
}

ISR vs SWR vs prerender

prerenderISRSWR
Cuándo se genera el HTMLEn tiempo de buildPrimera petición, luego por intervaloPrimera petición, luego por intervalo
Se muestra contenido desactualizadoNunca (hasta el próximo despliegue)Solo mientras se regeneraSiempre (actualiza en segundo plano)
Requiere servidorNo (archivos estáticos)
Adecuado paraLanding pages, documentaciónPosts de blog, páginas de productoFeeds, dashboards

Publicado bajo la licencia MIT.