SSR renders on every request, SSG renders at build time, and ISR regenerates pages in the background after a revalidate interval. It’s a trade-off between freshness, speed, and build time.
These terms describe *when* HTML is generated and how freshness is handled.
In the App Router, this is mostly controlled by caching/revalidation:
// Revalidate this route every 60s (ISR-like)
export const revalidate = 60
// Per-request (SSR-like)
await fetch(url, { cache: 'no-store' })