{post.title}
{post.content}
--- title: Prerender Error with Next.js --- ## Why This Error Occurred While prerendering a page during `next build`, an error occurred. This can happen for various reasons, including: 1. Incorrect file structure or non-page files in the `pages/` directory 2. Expecting props to be populated which are not available during prerendering 3. Using browser-only APIs in components without proper checks 4. Incorrect configuration in `getStaticProps` or `getStaticPaths` ## Possible Ways to Fix It ### 1. Ensure correct file structure and use App Router for colocation #### Pages Router In the Pages Router, only special files are allowed to generate pages. You cannot colocate other files (e.g., components, styles) within the `pages` directory. Correct structure: ``` pages/ ├── index.js └── about.js components/ └── Header.js styles/ └── globals.css ``` #### App Router (Next.js 13+) The App Router allows [colocation](/docs/app/building-your-application/routing#colocation) of pages and other files in the same folder. This provides a more intuitive project structure. Example folder structure: ``` app/ ├── layout.tsx ├── page.tsx ├── about/ │ └── page.tsx └── blog/ ├── page.tsx └── PostCard.tsx ``` ### 2. Handle undefined props and missing data #### Pages Router For the Pages Router, use conditional checks and return appropriate props or a 404 page: ```jsx export async function getStaticProps(context) { const data = await fetchData(context.params.id) if (!data) { return { notFound: true, } } return { props: { data }, } } ``` ### 3. Handle fallback in dynamic routes If you're using `fallback: true` or `fallback: 'blocking'` in `getStaticPaths`, ensure your page component can handle the loading state: ```jsx import { useRouter } from 'next/router' function Post({ post }) { const router = useRouter() if (router.isFallback) { return
{post.content}