What are the differences between page router and app router in nextjs?
Assesses fundamental understanding of React conventions, runtime behavior, and memory/performance considerations.
Hiring managers look for precision, avoidance of ambiguous jargon, and ability to explain trade-offs under real production conditions.
Next.js provides two different routing systems: the Page Router (traditional) and the App Router (introduced in Next.js 13). The App Router is built on React Server Components and offers more powerful features for modern web applications.
Here are the main differences between them:
| Feature | Page Router | App Router |
|---------|-------------|------------|
| Directory | Uses pages/ directory | Uses app/ directory |
| Routing | File-based routing with files like pages/about.js | File-based routing with folders and special files like app/about/page.js |
| Components | All components are Client Components by default | All components are Server Components by default |
| Layouts | Custom _app.js and _document.js for shared layouts | Native nested layouts using layout.js files |
| Data Fetching | Uses getServerSideProps, getStaticProps, and getInitialProps | Uses async/await in Server Components with native fetch |
| Loading States | Manual implementation required | Built-in loading.js for streaming and suspense |
| Error Handling | Custom _error.js page | Built-in error.js for error boundaries at any level |
| Streaming | Limited support | Built-in support for streaming with Suspense |
| Server Actions | Not available | Native support for server-side mutations |
| Metadata | Using Head component from next/head | Native Metadata API with metadata object or generateMetadata function |
| Rendering | SSR, SSG, ISR, and CSR | SSR, SSG, ISR, CSR plus React Server Components |
Example of Page Router structure:
pages/
├── index.js // Home page (/)
├── about.js // About page (/about)
├── _app.js // Custom App component
├── _document.js // Custom Document
└── posts/
└── [id].js // Dynamic route (/posts/:id)
Example of App Router structure:
app/
├── page.js // Home page (/)
├── layout.js // Root layout
├── loading.js // Loading UI
├── error.js // Error UI
├── about/
│ └── page.js // About page (/about)
└── posts/
└── [id]/
└── page.js // Dynamic route (/posts/:id)
Note: The App Router is recommended for new Next.js applications as it provides better performance, simpler data fetching patterns, and improved developer experience with React Server Components.
Candidate Response Strategy & Interview Tips
- Start with a concise one-sentence summary: Deliver a direct, confident answer first before expanding into nuances.
- Demonstrate real-world trade-offs: Discuss where this approach excels and when you would avoid it in production systems.
- Discuss complexity & edge cases: Proactively explain time/space complexity or boundary conditions (null values, scale limits).
- Prepare for interviewer follow-ups: Technical hiring panels frequently probe deeper into concurrency, backward compatibility, or alternative libraries.