Skip to content
← Todas las preguntas
Principiante

¿Qué es Nuxt y qué modos de renderizado admite?

Nuxt

Nuxt es un framework full-stack construido sobre Vue. Añade server-side rendering, enrutamiento basado en archivos, auto-importaciones, utilidades de obtención de datos y un motor de servidor (Nitro) de serie. Su principal diferenciador es que puedes elegir cómo se renderiza cada página: en el servidor, en el cliente, en tiempo de build o una combinación de los tres.

Renderizado universal (SSR, por defecto)

El servidor ejecuta tu código Vue, genera HTML y lo envía al navegador. Después carga JavaScript e hidrata la página para hacerla interactiva.

ts
// nuxt.config.ts — este es el valor por defecto
export default defineNuxtConfig({
  ssr: true
})

El navegador muestra el contenido de inmediato (bueno para SEO y rendimiento percibido) y luego Vue toma el control para la interactividad.

Renderizado del lado del cliente (SPA)

El servidor envía un HTML vacío y Vue renderiza todo en el navegador.

ts
export default defineNuxtConfig({
  ssr: false
})

Más sencillo de desarrollar (sin restricciones de SSR), más barato de alojar (archivos estáticos), pero sin contenido en el HTML inicial. Úsalo para dashboards, paneles de administración y apps detrás de autenticación donde el SEO no importa.

Generación estática (SSG)

Pre-renderiza las páginas a HTML en tiempo de build. El resultado es un conjunto de archivos estáticos que puedes desplegar en cualquier lugar.

ts
export default defineNuxtConfig({
  routeRules: {
    '/': { prerender: true },
    '/about': { prerender: true },
    '/blog/**': { prerender: true }
  }
})

O genera el sitio completo con nuxt generate.

Renderizado híbrido (el verdadero potencial)

Combina modos de renderizado por ruta usando routeRules. Cada ruta puede tener su propia estrategia:

ts
export default defineNuxtConfig({
  routeRules: {
    '/': { prerender: true },
    '/blog/**': { isr: 3600 },
    '/admin/**': { ssr: false },
    '/api/**': { cors: true }
  }
})
ReglaQué hace
prerender: trueGenera HTML estático en tiempo de build
ssr: falseSolo en el cliente (SPA)
isr: 3600Incremental Static Regeneration, regenera cada hora
swr: trueStale-While-Revalidate, sirve el caché y regenera en segundo plano
cache: { maxAge: 600 }Cachea la respuesta del servidor durante 10 minutos

También puedes definir route rules inline en una página:

vue
<script setup>
defineRouteRules({ prerender: true })
</script>

Contenido solo en el cliente

Cuando partes de una página no pueden ejecutarse en el servidor (APIs del navegador, widgets de terceros):

vue
<template>
  <ClientOnly>
    <BrowserOnlyChart />
    <template #fallback>
      <p>Cargando gráfico...</p>
    </template>
  </ClientOnly>
</template>

En el script, usa import.meta.server e import.meta.client para bifurcar la lógica:

ts
if (import.meta.client) {
  window.addEventListener('resize', handleResize)
}

Cuándo usar cada modo

EscenarioModo de renderizado
Sitio de marketing, blog, documentaciónSSG (prerender: true)
E-commerce con precios dinámicosISR o SWR
Dashboard detrás de loginSPA (ssr: false)
Páginas dinámicas con SEO importanteSSR (por defecto)
Combinación de todo lo anteriorHíbrido con routeRules

Publicado bajo la licencia MIT.