مهاجرت از Pages Router به App Router در Next.js – راهنمای گام‌به‌گام برای توسعه مدرن

App Router در Next.js 13 معرفی شد و جایگزینی مدرن و قدرتمند برای Pages Router است. این مقاله، فرآیند مهاجرت را به‌صورت مرحله‌به‌مرحله توضیح می‌دهد: از به‌روزرسانی نسخه‌ها و ساختار پوشه‌ها تا انتقال کامپوننت‌ها، مسیرها، APIها و استایل‌ها — همه با کمترین تغییرات و بیشترین اطمینان.

App RouterPages RouterNext.js MigrationServer ComponentsCodemods

~2 min read · Updated Dec 13, 2025

چرا به App Router مهاجرت کنیم؟


App Router امکاناتی مدرن برای توسعه وب فراهم می‌کند:

  • کامپوننت‌های سرور: کاهش جاوااسکریپت سمت کلاینت
  • Streaming: بارگذاری سریع‌تر با React Suspense
  • کش هوشمند: کش داده، کش مسیر، کش رندر
  • واکشی ساده‌تر: بدون نیاز به getStaticProps یا getServerSideProps
  • Layout طبیعی: بدون نیاز به الگوهای پیچیده getLayout

نکته طلایی: App Router و Pages Router می‌توانند همزمان استفاده شوند — مهاجرت تدریجی ممکن است.


مرحله ۱: به‌روزرسانی نسخه‌ها


npm install next@latest react@latest react-dom@latest
npm install -D eslint-config-next@latest

در VS Code: Ctrl+Shift+P → "ESLint: Restart ESLint Server"


مرحله ۲: به‌روزرسانی کامپوننت‌های کلیدی


  • <Image>: استفاده از next/image به‌جای next/future/image
  • <Link>: دیگر نیازی به تگ <a> داخل <Link> نیست
  • <Script>: اسکریپت‌های beforeInteractive را به app/layout.tsx منتقل کنید
  • فونت‌ها: استفاده از next/font برای بهینه‌سازی داخلی

مرحله ۳: ساخت پوشه app


project-root/
├── app/
├── pages/
└── ...

مرحله ۴: ساخت layout اصلی


// app/layout.tsx
export const metadata = {
  title: 'وب‌سایت من',
  description: 'ساخته‌شده با عشق و Next.js',
}

export default function RootLayout({ children }) {
  return (
    <html lang="fa">
      <body>{children}</body>
    </html>
  )
}

مرحله ۵: مهاجرت از next/head به metadata


// قبل
<Head><title>عنوان صفحه</title></Head>

// بعد
export const metadata = { title: 'عنوان صفحه' }

مرحله ۶: انتقال صفحات


Pages RouterApp Router
pages/index.jsapp/page.js
pages/about.jsapp/about/page.js
pages/blog/[slug].jsapp/blog/[slug]/page.js

مرحله ۷: مهاجرت واکشی داده


  • getStaticPropsfetch(..., { cache: 'force-cache' })
  • getServerSidePropsfetch(..., { cache: 'no-store' })
  • getStaticPathsgenerateStaticParams()

مرحله ۸: مهاجرت API Routes


// app/api/hello/route.ts
export async function GET() {
  return Response.json({ message: 'سلام دنیا!' })
}

مرحله ۹: مهاجرت هوک‌های مسیریابی


'use client'
import { usePathname, useSearchParams } from 'next/navigation'

const pathname = usePathname()
const searchParams = useSearchParams()

مرحله ۱۰: استایل‌دهی


  • CSS سراسری: در app/layout.tsx ایمپورت شود
  • Tailwind: پوشه app را به content در tailwind.config.js اضافه کنید

مرحله ۱۱: استفاده همزمان از دو Router


مسیریابی بین pages و app باعث بارگذاری کامل می‌شود. برای مسیریابی نرم، از router.push() در App Router استفاده کنید.


مرحله ۱۲: استفاده از Codemodها


npx next-codemod next-image-experimental ./pages
npx next-codemod new-link ./pages

Written & researched by Dr. Shahin Siami

Related Articles

مسیریابی پیشرفته و هوک‌های عملکرد در Next.js — راهنمای توسعه‌دهنده برای App Router

Next.js مجموعه‌ای غنی از هوک‌های کلاینت و ابزارهای کش و ناوبری را در اختیار توسعه‌دهندگان قرار می‌دهد. از خواندن پارامترهای مسیر تا گزارش Web Vitals و مدیریت کش، این مقاله مهم‌ترین ابزارهای App Router را با مثال‌های کاربردی معرفی می‌کند.

Continue

مدیریت احراز هویت و کش در Next.js — راهنمای توسعه‌دهنده برای امنیت و عملکرد پویا

Next.js با معرفی قابلیت‌های آزمایشی جدید، امکان کنترل دقیق‌تر دسترسی و کش داده‌ها را فراهم کرده است. تابع unauthorized برای مدیریت خطای 401 و هدایت کاربران به صفحه ورود، unstable_cache برای کش هوشمند عملیات سنگین، updateTag برای بازسازی آنی داده‌ها، و useLinkStatus برای نمایش وضعیت ناوبری استفاده می‌شوند. این مقاله نحوه استفاده از این ابزارها را با مثال‌های کاربردی و نکات مهم بررسی می‌کند.

Continue

redirect و refresh در Next.js — ریدایرکت‌های هوشمند و تازه‌سازی مسیر در Server Actions

تابع redirect در Next.js برای هدایت کاربر به مسیر جدید استفاده می‌شود و بسته به نوع استفاده، پاسخ HTTP با وضعیت 307 یا 303 ارسال می‌کند. این تابع در Server Components، Client Components، Route Handlers و Server Actions قابل استفاده است. تابع refresh نیز برای تازه‌سازی مسیر کلاینت از درون Server Action استفاده می‌شود. این مقاله نحوه استفاده از هر دو تابع را با مثال‌های کاربردی و نکات مهم توضیح می‌دهد.

Continue

Next.js با معرفی NextRequest و NextResponse، APIهای Request و Response مرورگر را گسترش داده و ابزارهای قدرتمندی برای مدیریت کوکی‌ها، هدرها، ریدایرکت‌ها، بازنویسی مسیرها و پاسخ‌های JSON فراهم کرده است. این مقاله نحوه استفاده از این ابزارها را با مثال‌های کاربردی و نکات امنیتی توضیح می‌دهد.

Next.js با معرفی NextRequest و NextResponse، APIهای Request و Response مرورگر را گسترش داده و ابزارهای قدرتمندی برای مدیریت کوکی‌ها، هدرها، ریدایرکت‌ها، بازنویسی مسیرها و پاسخ‌های JSON فراهم کرده است. این مقاله نحوه استفاده از این ابزارها را با مثال‌های کاربردی و نکات امنیتی توضیح می‌دهد.

Continue

headers، ImageResponse، notFound و permanentRedirect در Next.js — مدیریت درخواست‌ها، تولید تصویر، خطا و ریدایرکت

Next.js ابزارهای قدرتمندی برای مدیریت درخواست‌ها و پاسخ‌ها در کامپوننت‌های سروری فراهم کرده است. تابع headers برای خواندن هدرهای HTTP ورودی، ImageResponse برای تولید تصاویر داینامیک، notFound برای نمایش صفحه خطای 404، و permanentRedirect برای ریدایرکت دائمی کاربران استفاده می‌شوند. این مقاله نحوه استفاده از هر یک را با مثال‌های کاربردی توضیح می‌دهد.

Continue

راهنمای کامل استفاده از metadata و generateMetadata در Next.js

در نسخه‌های مدرن Next.js، مدیریت metadata صفحات بسیار قدرتمندتر و ساده‌تر شده است. metadata به‌صورت خودکار در تگ <head> صفحات تزریق می‌شود و نقش مهمی در SEO، اشتراک‌گذاری اجتماعی و تجربه کاربری دارد. این مقاله دو روش اصلی تعریف metadata را بررسی می‌کند: استفاده از آبجکت ثابت metadata و تابع داینامیک generateMetadata.

Continue