Glosario · Desarrollo web

ISR — Incremental Static Regeneration

Variante de SSG en Next.js que sirve páginas estáticas y las regenera en segundo plano, como mucho una vez cada N segundos (`revalidate`) y solo cuando alguien las visita tras caducar. Combina la velocidad de SSG con la frescura de SSR sin el coste por request.

Qué es y cómo funciona

ISR (Incremental Static Regeneration) parte de páginas estáticas, como en SSG, pero les añade una fecha de caducidad. Indicas un tiempo de revalidación y, mientras no se cumpla, todos los visitantes reciben la misma copia estática. Cuando el tiempo pasa, la siguiente visita sigue recibiendo la copia antigua al instante, y a la vez se dispara la regeneración de una versión nueva en segundo plano. Cuando termina, la copia nueva sustituye a la anterior.

Este patrón se conoce como stale-while-revalidate: se sirve primero lo que hay y se actualiza después. Por eso el tiempo indicado no es una actualización cada N segundos garantizada, sino un máximo de una regeneración por ese intervalo y solo si alguien visita la página.

Además de la revalidación por tiempo, Next.js permite invalidar páginas a demanda, por ejemplo desde un webhook cuando alguien publica en el CMS, con funciones como revalidatePath o revalidateTag. Así la página se refresca cuando el contenido cambia de verdad, no cuando toca por reloj.

Por qué importa

ISR resuelve el dilema típico de las webs de contenido: quieres la velocidad de lo estático, pero no puedes reconstruir todo el sitio cada vez que alguien corrige una errata. Es muy útil en blogs, catálogos y webs conectadas a un CMS headless, donde el equipo de contenidos publica con frecuencia y espera ver el cambio sin pedir un despliegue.

También tiene condiciones. Necesita un servidor o una plataforma que ejecute Next.js, de modo que no funciona en una exportación estática pura. Y si hay varias instancias del servidor, la caché por defecto es independiente en cada una, por lo que conviene configurar una caché compartida. No es la herramienta para datos que deben ser exactos al segundo.

Un ejemplo

Un medio local publica unos veinte artículos al día y tiene miles de páginas históricas. Reconstruirlo todo en cada publicación sería lento, y renderizar en servidor cada visita, innecesario. Con ISR, las páginas se sirven estáticas y la portada se revalida cada pocos minutos. Cuando el CMS publica un artículo, un webhook invalida solo esa ruta y la portada, y el resto del sitio no se toca.

Errores y confusiones frecuentes

  • Poner un tiempo de revalidación muy bajo. Next.js recomienda tiempos altos y, si necesitas precisión, la revalidación a demanda.
  • Creer que el visitante siempre ve lo último. La primera visita tras la caducidad todavía recibe la versión antigua.
  • Usarlo con datos críticos, como stock final o precios en directo. Para eso conviene renderizado en servidor o llamadas a una API desde el cliente.

Conceptos relacionados

Dudas habituales

Preguntas frecuentes sobre ISR

Como mucho una vez por cada intervalo de revalidación que definas, y solo cuando alguien la visita después de que caduque. Si nadie entra, no se regenera. Con revalidación a demanda, además, puedes forzar la actualización cuando cambia el contenido.

Normalmente sí, porque la mayoría de las visitas se sirven de una copia ya generada y el servidor solo trabaja al regenerar. Aun así, la regeneración consume cómputo, y en plataformas que cobran por petición cuenta como uso adicional.

Se sigue sirviendo la última versión generada correctamente y se vuelve a intentar en una visita posterior. Es una ventaja frente a SSR: un fallo temporal de la API de origen no tumba la página.

¿Necesitas aplicarlo en tu proyecto?

Cuéntanos qué quieres conseguir y te decimos, sin compromiso, si ISR tiene sentido en tu caso o si hay una opción mejor.