Demo
layout.tsx
Rendering Strategies Comparison (Server)
StrategyWhen BuiltUpdatesBest For
Static (SSG)Build time onlyRequires new deployMarketing pages, docs
ISRBuild + backgroundTime or on-demandBlog, e-commerce
Dynamic (SSR)Every requestAlways freshDashboards, user data
Static Pages (SSG)

Pre-rendered at Build Time

These pages are generated once and served from CDN

Getting Started with Next.js

15,234 views

/getting-started

Understanding the App Router

12,456 views

/app-router

React Server Components

9,876 views

/server-components

app/blog/[slug]/page.tsxtsx
Incremental Static Regeneration (ISR)

Static with Background Updates

Pages revalidate in the background after a time interval

Time-based ISR

Revalidates every 60 seconds

export const revalidate = 60;

On-demand ISR

Revalidates via API/webhook

revalidatePath('/blog/post')

ISR Behavior

Serves cached HTML, revalidates in background after interval

Dynamic Segments Fallback

Handling Unknown Slugs

Control behavior for paths not in generateStaticParams

dynamicParams: true

Render on-demand (default)

dynamicParams: false

Return 404 for unknown

loading.tsx

Show skeleton while generating

Build Output Preview (Server)

During next build, you see which routes are static, dynamic, or ISR:

Route                          Size     First Load JS
┌ ○ /                            1.2 kB      89.5 kB
├ ○ /about                       845 B       88.9 kB
├ ● /blog                        1.1 kB      89.3 kB
├   └ /blog/[slug]
├       ├ /blog/getting-started
├       ├ /blog/app-router  
├       └ /blog/server-components
├ λ /dashboard                   2.3 kB      91.1 kB
└ ○ /contact                     756 B       88.8 kB

○  (Static)   prerendered as static content
●  (SSG)      prerendered with getStaticProps or generateStaticParams
λ  (Dynamic)  server-rendered on demand