नमस्ते दोस्तों! 🙏
स्वागत है The Easy Master पर!
क्या तुमने कभी सोचा है – Next.js App Router ने क्या बदल दिया? Next.js 13 के बाद से Pages Router और App Router – दो अलग-अलग तरीके हैं routes बनाने के.
App Router ने React Server Components (RSC) को default बना दिया है – यही सबसे बड़ा change है!
Next.js App Router vs Pages Router Hindi में समझना बहुत जरूरी है क्योंकि:
- 2026 में App Router default recommendation है
- Better performance – Server Components se JS bundle छोटा होता है
- Nested layouts – Persistent layouts आसान
- Streaming – Data slow हो तो भी page show होता है
- Interview mein pakka App Router questions puche jayenge
Aaj kya seekhoge?
| Topic | Kya Seekhega? |
|---|---|
| App Router Kya Hai? | Introduction aur history |
| Folder Structure | app/ vs pages/ |
| Special Files | page.tsx, layout.tsx, loading.tsx |
| Server vs Client Components | 'use client' directive |
| Data Fetching | getServerSideProps vs async fetch() |
| Metadata | next/head vs export const metadata |
| Migration Guide | Step-by-step kaise migrate karein |
Kya tumhe pata hai?
App Router और Pages Router ek saath chal sakte हैं! तुम page-by-page migrate कर सकते हो.
तो चलिए शुरू करते हैं – Next.js App Router vs Pages Router Hindi सीखने का सफर! 🚀
Table of Contents
1. Next.js Routing – Introduction
Next.js file-based routing use करता है – files and folders automatically routes बन जाते हैं.
Pages Router (Old Way – 2016 से):
pages/
├── index.js → /
├── about.js → /about
├── blog/
│ ├── index.js → /blog
│ └── [slug].js → /blog/:slug
└── api/
└── users.js → /api/usersApp Router (New Way – 2022 से):
app/
├── page.js → /
├── about/
│ └── page.js → /about
├── blog/
│ ├── page.js → /blog
│ └── [slug]/
│ └── page.js → /blog/:slug
└── api/
└── users/
└── route.js → /api/usersNext.js App Router vs Pages Router Hindi में हम सब कुछ detail में समझेंगे।
2. App Router Kya Hai? – Overview
App Router Next.js 13 (2022) में introduce हुआ. यह Pages Router का successor है और React Server Components (RSC) पर based है.
Key Features:
When was App Router introduced?
- Next.js 13 (Oct 2022) – App Router introduced (experimental)
- Next.js 13.4 (May 2023) – App Router stable
- 2026 – App Router is now default recommendation
3. Folder Structure – app/ vs pages/
Pages Router Structure:
my-app/
├── pages/
│ ├── _app.js # Global wrapper
│ ├── _document.js # HTML document wrapper
│ ├── index.js # Home page
│ ├── about.js # /about
│ ├── blog/
│ │ ├── index.js # /blog
│ │ └── [slug].js # /blog/:slug
│ └── api/ # API routes
├── components/
├── styles/
└── public/App Router Structure:
my-app/
├── app/
│ ├── layout.js # Root layout (replaces _app + _document)
│ ├── page.js # Home page
│ ├── about/
│ │ └── page.js # /about
│ ├── blog/
│ │ ├── page.js # /blog
│ │ ├── loading.js # Loading UI for /blog
│ │ └── [slug]/
│ │ ├── page.js # /blog/:slug
│ │ └── loading.js # Loading UI for dynamic route
│ ├── dashboard/
│ │ ├── layout.js # Dashboard-specific layout
│ │ ├── page.js # /dashboard
│ │ └── settings/
│ │ └── page.js # /dashboard/settings
│ └── api/
│ └── users/
│ └── route.js # /api/users
├── components/
├── styles/
└── public/Key Differences:
4. Special Files – page, layout, loading, error
App Router में special files define UI for each route segment.
Special Files Reference:
Example: Complete Blog Structure
// app/layout.js (Root Layout)
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>
<header>My Site</header>
<main>{children}</main>
<footer>© 2026</footer>
</body>
</html>
);
}
// app/blog/layout.js (Blog Layout - nested)
export default function BlogLayout({ children }) {
return (
<div>
<aside>Blog Sidebar</aside>
{children}
</div>
);
}
// app/blog/page.js (Blog listing)
export default async function BlogPage() {
const posts = await getPosts();
return (
<div>
{posts.map(post => <PostCard key={post.id} post={post} />)}
</div>
);
}
// app/blog/loading.js (Loading UI)
export default function Loading() {
return <div>Loading posts...</div>;
}
// app/blog/error.js (Error UI)
'use client';
export default function Error({ error, reset }) {
return (
<div>
<h2>Something went wrong!</h2>
<button onClick={reset}>Try again</button>
</div>
);
}5. Server vs Client Components – 'use client'
यह सबसे important difference है!
Pages Router (All Client Components):
// pages/counter.js
import { useState } from 'react';
export default function Counter() {
const [count, setCount] = useState(0); // ✅ Works
return <button onClick={() => setCount(count + 1)}>{count}</button>;
}App Router (Server Components by Default):
// app/counter/page.js
import { useState } from 'react';
export default function Counter() {
const [count, setCount] = useState(0); // ❌ ERROR!
// "useState" cannot be used in Server Components
return <button>...</button>;
}Solution: Add 'use client' directive:
// app/counter/page.js
'use client'; // ✅ Add this at the top!
import { useState } from 'react';
export default function Counter() {
const [count, setCount] = useState(0);
return <button onClick={() => setCount(count + 1)}>{count}</button>;
}Server Components vs Client Components:
When to use which?:
// ✅ Server Component (default) – for data fetching, static content
export default async function ProductPage() {
const product = await db.product.findUnique(...);
return <div>{product.name}</div>;
}
// ✅ Client Component – for interactivity
'use client';
export function AddToCartButton({ productId }) {
const [isAdded, setIsAdded] = useState(false);
return <button onClick={() => setIsAdded(true)}>Add to Cart</button>;
}6. Data Fetching – Old vs New Way
Pages Router (getServerSideProps / getStaticProps):
// pages/blog/[slug].js
export async function getServerSideProps({ params }) {
const res = await fetch(`https://api.example.com/posts/${params.slug}`);
const post = await res.json();
return { props: { post } };
}
export default function BlogPost({ post }) {
return (
<div>
<h1>{post.title}</h1>
<p>{post.content}</p>
</div>
);
}App Router (async Server Component):
// app/blog/[slug]/page.js
async function getPost(slug) {
const res = await fetch(`https://api.example.com/posts/${slug}`, {
next: { revalidate: 3600 } // ISR: revalidate every hour
});
return res.json();
}
export default async function BlogPage({ params }) {
const post = await getPost(params.slug);
return (
<div>
<h1>{post.title}</h1>
<p>{post.content}</p>
</div>
);
}Key Differences:
7. Metadata – next/head vs export metadata
Pages Router (next/head):
// pages/about.js
import Head from 'next/head';
export default function About() {
return (
<>
<Head>
<title>About Us - My Site</title>
<meta name="description" content="Learn about our company" />
</Head>
<div>About content</div>
</>
);
}App Router (export metadata):
// app/about/page.js
import type { Metadata } from 'next';
export const metadata: Metadata = {
title: 'About Us - My Site',
description: 'Learn about our company',
};
export default function About() {
return <div>About content</div>;
}Dynamic Metadata:
// app/blog/[slug]/page.js
export async function generateMetadata({ params }) {
const post = await getPost(params.slug);
return {
title: post.title,
description: post.excerpt,
};
}
export default async function BlogPage({ params }) {
const post = await getPost(params.slug);
return <div>{post.content}</div>;
}8. Routing Features – Parallel & Intercepting Routes
App Router में advanced routing features हैं जो Pages Router में नहीं हैं.
Parallel Routes (@folder):
// app/dashboard/@analytics/page.js
export default function Analytics() {
return <div>Analytics Dashboard</div>;
}
// app/dashboard/@users/page.js
export default function Users() {
return <div>Users Management</div>;
}Intercepting Routes ((.)folder):
// app/feed/page.js (feed page)
// app/feed/(.)photo/[id]/page.js (intercepts /photo/:id from feed)
// Modal opens instead of navigationRoute Groups ((folder)):
// app/(marketing)/about/page.js → /about (no /marketing in URL)
// app/(shop)/products/page.js → /products (no /shop in URL)9. Performance Comparison
Streaming Example:
// app/blog/page.js
import { Suspense } from 'react';
export default function BlogPage() {
return (
<div>
<h1>My Blog</h1>
<Suspense fallback={<div>Loading posts...</div>}>
<PostList />
</Suspense>
</div>
);
}
async function PostList() {
const posts = await getPosts(); // Takes 2 seconds
return posts.map(post => <div key={post.id}>{post.title}</div>);
}Result: Header immediately shows, posts load later!
10. Migration Guide – Pages से App में कैसे Shift करें
Step 1: Update Next.js Version
npm install next@latest react@latest react-dom@latestStep 2: Create app Directory
mkdir appStep 3: Create Root Layout (app/layout.js)
// app/layout.js
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>{children}</body>
</html>
);
}Step 4: Migrate Pages One by One
Both routers can coexist! Migrate incrementally.
// Step 4a: Move page to app directory
// pages/about.js → app/about/page.js
// Step 4b: Convert data fetching
// Before (pages/about.js)
export async function getServerSideProps() {
const data = await fetchData();
return { props: { data } };
}
// After (app/about/page.js)
export default async function About() {
const data = await fetchData();
return <div>{data}</div>;
}Step 5: Add 'use client' Where Needed
// Move interactive components to client components
'use client';
import { useState } from 'react';
export function InteractiveButton() {
const [count, setCount] = useState(0);
return <button onClick={() => setCount(count + 1)}>{count}</button>;
}Step 6: Migrate Metadata
// Before (pages/about.js with Head)
import Head from 'next/head';
// After (app/about/page.js)
export const metadata = {
title: 'About',
description: 'About our company',
};Step 7: Migrate API Routes
// Before: pages/api/users.js
export default function handler(req, res) {
res.json({ users: [] });
}
// After: app/api/users/route.js
export async function GET() {
return Response.json({ users: [] });
}11. App Router vs Pages Router – Comparison Table
12. When to Use Which?
✅ Use App Router for:
- New projects (2026 में default recommendation)
- Complex layouts (dashboards, nested sidebars)
- Performance-critical apps (need smaller JS bundle)
- SEO-focused projects (better metadata API)
- Data-heavy pages (benefit from server components)
✅ Use Pages Router for:
- Legacy projects (no time/budget for migration)
- Simple static sites (3-5 pages)
- Teams not ready for RSC learning curve
Migration Decision Tree:
क्या तुम new project शुरू कर रहे हो?
│
├── YES → ✅ App Router use करो
│
└── NO (existing Pages Router project)
│
├── क्या तुम्हारे पास migration budget/time है?
│ │
│ ├── YES → Incrementally migrate करो
│ └── NO → Pages Router continue करो13. Common Mistakes + Solutions
Mistake 1: Using useState in Server Component
// ❌ Error
export default function Page() {
const [count, setCount] = useState(0); // Error!
}
// ✅ Solution: Add 'use client'
'use client';
export default function Page() {
const [count, setCount] = useState(0); // Works!
}Mistake 2: Forgetting async keyword
// ❌ Error (await without async)
export default function Page() {
const data = await getData(); // Error!
}
// ✅ Correct
export default async function Page() {
const data = await getData(); // Works!
}Mistake 3: Using next/router in App Router
// ❌ Error
import { useRouter } from 'next/router';
// ✅ Use from 'next/navigation'
import { useRouter } from 'next/navigation';Mistake 4: Not adding Root Layout
// ❌ Error: No root layout found
// ✅ Solution: Create app/layout.js
export default function RootLayout({ children }) {
return (
<html>
<body>{children}</body>
</html>
);
}14. Quick Cheat Sheet
App Router Special Files:
| File | Purpose |
|---|---|
page.js | Route UI |
layout.js | Shared UI for segment |
loading.js | Loading UI (Suspense) |
error.js | Error UI (boundary) |
not-found.js | 404 UI |
route.js | API route |
Quick Commands:
# Create new Next.js project with App Router (default)
npx create-next-app@latest my-app
# Create with Pages Router
npx create-next-app@latest my-app --use-pages-routerMigration Checklist:
- Update to Next.js 13.4+
- Create
appdirectory - Create root
layout.js - Migrate
_app.jsand_document.jsto layout - Migrate pages one by one
- Add
'use client'for interactive components - Replace
getServerSidePropswith async components - Replace
next/headwithexport metadata - Migrate API routes to
route.js - Delete migrated pages from
pages/
15. FAQ
Q1: Next.js App Router vs Pages Router Hindi में सबसे important difference kya hai?
Server Components – App Router में components server par render होते हैं by default, Pages Router में client par. इससे JS bundle छोटा होता है और performance better होती है.
Q2: Kya App Router Pages Router को replace कर देगा?
Haan, long term में. Next.js official recommendation है – new projects में App Router use करो. Pages Router को support मिलता रहेगा.
Q3: Kya dono routers ek saath use kar sakte hain?
Haan! Next.js allows both pages/ and app/ directories to coexist. तुम page-by-page migrate कर सकते हो.
Q4: App Router में getServerSideProps ka alternative kya hai?async Server Component – directly fetch inside component:
export default async function Page() {
const data = await fetchData();
return <div>{data}</div>;
}Q5: App Router में SEO kaise handle karein?export const metadata use करो – better than next/head.
Q6: App Router performance kyun better hai?
Server Components default हैं – client-side JavaScript bundle smaller. Streaming support से initial load faster.
Q7: 'use client' kab use karein?
Jab tumhe interactivity चाहिए – useState, useEffect, event handlers, browser APIs.
Q8: App Router में API routes kaise banayein?app/api/route.js file banाओ:
export async function GET() {
return Response.json({ data: 'Hello' });
}Q9: Migration में सबसे पहले क्या करना चाहिए?
Root layout (app/layout.js) बनाओ – यह _app.js और _document.js को replace करता है.
Q10: 2026 में कौन सा router use karein?
App Router – यह future है और Next.js का default recommendation है.
16. Conclusion
बहुत बढ़िया दोस्तों! आज हमने Next.js App Router vs Pages Router Hindi को पूरी detail में समझा.
Quick Recap:
Mera personal experience:
App Router pehle complex lagta hai – Server Components, 'use client', नया folder structure – thoda time lagta hai adjust होने में.
Tum bhi ye steps follow karo:
- ✅ App Router concepts समझो
- ✅ नया project
create-next-appसे बनाओ (default App Router) - ✅
page.jsऔरlayout.jsसमझो - ✅ Server vs Client components समझो
- ✅ धीरे-धीरे old projects migrate करो
अब तुम्हारी बारी है!
नीचे comment में बताओ:
- क्या तुमने App Router try किया है?
- तुम्हें कौन सा feature सबसे useful लगा?
- अगला topic क्या चाहिए? (Next.js 15 Features? Server Actions? Middleware?)
The Easy Master पर बने रहो। Happy Coding with Next.js! 🚀⚛️
Resources
- Next.js App Router Documentation
- Next.js Pages Router Documentation
- Migration Guide – Next.js Official
- React Server Components Documentation
Additional Resources
- Express.js Setup – पहला Server कैसे बनाएं (Step-by-Step) 2026
- Express.js Routing – GET POST PUT DELETE Complete Guide
- Express Middleware समझे – Application, Router, Error Middleware
- Express req and res Objects – Query, Params, Body, Headers Explained
- Express Static Files और Templating – EJS से Dynamic HTML Banaye
- Express Router – API Routes को Organize करें (Modular Code)
- Express.js में Environment Variables – .env File कैसे Use करें
- Express File Upload Multer Tutorial | Image PDF Hindi 2026
- Express Security – Helmet, CORS, Rate Limiting, Validation (2026)
- Express + TypeScript – Type-Safe API कैसे बनाएं 2026
- Express MongoDB CRUD – Complete REST API Example 2026
- Express Logging – Morgan और Winston से Debug करें
- Express API Testing – Supertest से Routes Test करें
- MongoDB Setup – CRUD Operations समझे (Beginner Guide) 2026
- MongoDB Compass से GUI Database Manage करने का आसान तरीका | Beginner Tutorial 2026
- Node.js MongoDB Connection – Mongoose Setup समझे 2026
- MongoDB Data Modeling – Embedded Documents vs References 2026
- MongoDB Indexing – Query Speed बढ़ने करने का आसान तरीका
- MongoDB Aggregation Pipeline – Stages समझे | Practical Examples
- Express MongoDB CRUD – Complete REST API Example
- Mongoose ODM – Schema, Model, and Validation समझे 2026
- MongoDB Atlas – Cloud Database Free में Deploy करें 2026
- JWT Authentication MongoDB – User Login System कैसे बनाएं 2026