
- Next.js - Home
- Next.js - Overview
- Next.js - Project Setup
- Next.js - Folder Structure
- Next.js - App Router
- Next.js - Page Router
- Next.js Features
- Next.js - Pages
- Next.js - Data Fetching
- Next.js - ISR
- Next.js - Static File Serving
- Next.js - Pre-Rendering
- Next.js - Partial Pre Rendering
- Next.js - Server Side Rendering
- Next.js - Client Side Rendering
- Next.js Routing
- Next.js - Routing
- Next.js - Nested Routing
- Next.js - Dynamic Routing
- Next.js - Parallel Routing
- Next.js - Imperative Routing
- Next.js - Shallow Routing
- Next.js - Intercepting Routes
- Next.js - Redirecting Routes
- Next.js - Navigation and Linking
- Next.js Configuration
- Next.js - TypeScript
- Next.js - Environment Variables
- Next.js - File Conventions
- Next.js - ESLint
- Next.js API & Backend
- Next.js - API Routes
- Next.js - Dynamic API Routes
- Next.js - Route Handlers
- Next.js - API MiddleWares
- Next.js - Response Helpers
- Next.js API Reference
- Next.js - CLI Commands
- Next.js - Functions
- Next.js - Directives
- Next.js - Components
- Next.js - Image Component
- Next.js - Font Component
- Next.js - Head Component
- Next.js - Form Component
- Next.js - Link Component
- Next.js - Script Component
- Next.js Styling & SEO
- Next.js - CSS Support
- Next.js - Global CSS Support
- Next.js - Meta Data
- Next.js Advanced Topics
- Next.js - Error Handling
- Next.js - Server Actions
- Next.js - Fast Refresh
- Next.js - Internationalization
- Next.js - Authentication
- Next.js - Session Management
- Next.js - Authorization
- Next.js - Caching
- Next.js - Data Caching
- Next.js - Router Caching
- Next.js - Full Route Caching
- Next.js - Request Memoization
- Next.js Performance Optimization
- Next.js - Optimizations
- Next.js - Image Optimization
- Next.js - Lazy Loading
- Next.js - Font Optimization
- Next.js - Video Optimization
- Next.js - Script Optimization
- Next.js - Memory Optimization
- Next.js - Using OpenTelemetry
- Next.js - Package Bundling Optimization
- Next.js Testing
- Next.js - Testing
- Next.js - Testing with Jest
- Next.js - Testing with Cypress
- Next.js - Testing with Vitest
- Next.js - Testing with Playwright
- Next.js Debugging & Deployment
- Next.js - Debugging
- Next.js - Deployment
- Next.js Useful Resources
- Next.js - Interview Questions
- Next.js - Quick Guide
- Next.js - Useful Resources
- Next.js - Discussion
Next.js - Pre-Rendering
In Next.js, pre-rendering technique provides better user experience and SEO results for the webpage. In this chapter we will learn what is pre rendering, why it is used, and types of pre-rendering.
What is Pre-Rendering?
Pre-rendering is a technique used in Next.js for generating HTML pages in advance, instead of serving a blank HTML page and waiting for JavaScript to render the content on the client side. By default, Next.js pre-renders every page. The process of loading JavaScript to pre-rendered HTML page is called hydration.

Why Pre-Rendering?
- Pre-rendering reduces the interacting time by delivering ready-to-use HTML.
- Search engines can crawl pre-rendered content more easily.
- Pre-rendering give better user experience.
Types of Pre-Rendering
In Next.js, we have two forms of pre-rendering:
Static Site Generation
Static Site Generation is a server rendering strategy where we generate HTML pages at the time of building application. That means in production, the HTML page is generated when we run 'next build'. This HTML will then be reused on each request.
By default all the Next.js components that does not involve fetching data from external source follows static rendering strategy. Static rendering is commonly used in blog pages, documentation pages, and marketing pages.
Implement Static Site Generation
To implement static site in Next.js we can use `getStaticProps()` function to fetch data during build time. See the example below.
export async function getStaticProps() { const data = await fetch( 'link/to/api.com').then( res => res.json() ); return { props: { data }, // Pass data as props to the component }; } export default function HomePage({ data }) { return <div>{data.title}</div>; }
Server Side Rendering
Server Side Rendering (SSR) is a feature in Next.js, where the server processes a request and sends a fully rendered HTML page to the client. In Server-Side Rendering, the HTML page is generated on each request. So the browser doesnt have to wait for JavaScript to execute before displaying content. This make page load faster and visible to search engines.
In the other words, Server-Side Rendering ensures dynamic contents of a webpage is fetched and rendered on the server before being sent to the client.
Implement Server Side Rendering
Server Side Rendering can be implemented using the `getServerSideProps()` function. See the code below:
export async function getServerSideProps() { // Fetch data from API const response = await fetch('https://link/to/api'); const data = await response.json(); // Pass data as prop to the page component return { props: { data } }; } export default function Page({ data }) { return ( <div> <h1>Server-Side Rendered Data</h1> <ul> {data.map((item) => ( <li key={item.id}>{item.title}</li> ))} </ul> </div> ); }