Next.js Rendering Methods Guide
Production Mode Required
ISR (Incremental Static Regeneration) features only work in production builds. Run
npm run build
followed by npm start
(or equivalent commands for your package manager) to see ISR in action.Rendering Methods Explained
Understanding the different approaches and when to use them
Client-Side Rendering (CSR)
Data is fetched by the browser after the page loads using JavaScript.
- Best for: Private, user-specific data or frequently changing content
- Pros: Reduces server load, interactive without full page refresh
- Cons: Initial load may show loading states, SEO challenges
Time-Based ISR
Pages are statically generated and then regenerated after a specified interval.
- Best for: Content that changes periodically but doesn't need real-time updates
- Pros: Fast page loads, reduced server load, good SEO
- Cons: Data can be stale between regeneration intervals
On-Demand ISR
Pages are statically generated and then regenerated when explicitly requested.
- Best for: Content that changes infrequently or on specific events
- Pros: Fast page loads, data freshness control, good SEO
- Cons: Requires implementation of revalidation triggers
Server-Side Rendering (SSR)
Data is fetched on the server for each request.
- Best for: Pages that need fresh data on every request or need SEO
- Pros: Always fresh data, good SEO, secure data fetching
- Cons: Slower than static pages, higher server load
Troubleshooting Common Issues
Solutions for frequent challenges
ISR Not Working
- Ensure you're running a production build (
npm run build && npm start
or equivalent for your package manager) - Check that you've set the correct
revalidate
value - Verify that your API routes are correctly calling
revalidateTag
orrevalidatePath
Cache Not Updating
- Use unique tags for different content types
- Check browser caching (try hard refresh with Ctrl+F5)
- Ensure your fetch requests include proper cache control headers
Dynamic Server Usage Error
- Use client components for dynamic content in static pages
- Set
dynamic = "force-dynamic"
for fully dynamic pages - Use
fetchCache = "force-no-store"
to disable caching
Official Documentation
Learn more from Next.js resources