Next.js renders pages first on the server to send ready HTML to the browser. This makes pages load faster and helps search engines understand your site better.
How Next.js renders (server-first model)
export default function Page() { return ( <main> <h1>Hello from Server</h1> </main> ) } // This component runs on the server first, then sends HTML to the browser.
Next.js uses React components that run on the server first by default.
You can add special functions like getServerSideProps to fetch data on the server before rendering.
export default function Home() { return <h1>Welcome to Next.js!</h1> }
export async function getServerSideProps() { return { props: { time: new Date().toISOString() } } } export default function TimePage({ time }) { return <p>Current server time: {time}</p> }
'use client' import { useState } from 'react' export default function ClientComponent() { const [count, setCount] = useState(0) return <button onClick={() => setCount(count + 1)}>Clicked {count} times</button> }
This Next.js page uses getServerSideProps to prepare data on the server. The server sends the complete HTML with the message. The browser shows the message immediately without waiting for JavaScript.
import React from 'react' export async function getServerSideProps() { const message = 'Hello from the server!' return { props: { message } } } export default function Greeting({ message }) { return ( <main> <h1>{message}</h1> <p>This page was rendered on the server first.</p> </main> ) }
Server-first rendering means the server creates the HTML before the browser sees it.
After the server sends HTML, React takes over in the browser to make the page interactive.
You can mix server rendering with client-side code for dynamic features.
Next.js renders pages on the server first to improve speed and SEO.
Use getServerSideProps to fetch data on the server before rendering.
The browser receives ready HTML and then adds interactivity with React.
Practice
Solution
Step 1: Understand server-first rendering purpose
Next.js renders pages on the server to send fully formed HTML to the browser quickly.Step 2: Connect server rendering to SEO and speed
Sending ready HTML helps search engines read content and users see pages faster.Final Answer:
To improve page load speed and SEO -> Option CQuick Check:
Server-first rendering = better speed and SEO [OK]
- Thinking server rendering delays page load
- Believing React is not used in Next.js
- Assuming HTML is not sent to the browser
Solution
Step 1: Identify server-side data fetching functions
Next.js provides getServerSideProps to fetch data on the server at request time.Step 2: Differentiate from other functions
getStaticProps runs at build time, useEffect and componentDidMount run on client side.Final Answer:
getServerSideProps -> Option AQuick Check:
Server data fetch = getServerSideProps [OK]
- Confusing getStaticProps with server-side fetching
- Using client hooks like useEffect for server data
- Thinking componentDidMount runs on server
export async function getServerSideProps() {
return { props: { message: 'Hello from server' } };
}
export default function Page({ message }) {
return <h1>{message}</h1>;
}Solution
Step 1: Understand getServerSideProps role
This function runs on the server and passes props to the component before rendering.Step 2: Determine what is sent to browser
The browser receives fully rendered HTML with the message inside an <h1> tag.Final Answer:
HTML with <h1>Hello from server</h1> -> Option AQuick Check:
Server props produce HTML output [OK]
- Expecting raw JavaScript or JSON instead of HTML
- Thinking page is empty initially
- Confusing client-side rendering with server rendering
export async function getServerSideProps() {
const data = await fetch('https://api.example.com/data');
return { props: { data } };
}
export default function Page({ data }) {
return <div>{data.title}</div>;
}Solution
Step 1: Check fetch usage in getServerSideProps
fetch returns a Response object; to get JSON, .json() must be called.Step 2: Identify missing JSON parsing
Without calling await data.json(), data is not the actual JSON, causing errors in rendering.Final Answer:
fetch returns a Response object, not JSON data -> Option DQuick Check:
fetch needs .json() to get data [OK]
- Assuming fetch returns JSON directly
- Thinking getServerSideProps can't be async
- Believing props can't be passed to components
Solution
Step 1: Understand data freshness needs
Fetching fresh data on every request requires server-side fetching at request time.Step 2: Match Next.js data fetching methods
getServerSideProps runs on each request, while getStaticProps runs once at build time.Step 3: Evaluate client-side fetching
Fetching inside useEffect delays data until after page load, hurting SEO and initial render.Final Answer:
Use getServerSideProps to fetch users on each request -> Option BQuick Check:
Fresh server data = getServerSideProps [OK]
- Using getStaticProps for dynamic data
- Fetching data only on client side
- Hardcoding data instead of fetching
Ready to prove it?
Pass the test and this pattern moves unknown
