I'm always excited to take on new projects and collaborate with innovative minds.

Address

Kayseri, Turkey

Social

Next.js Page Router vs. App Router: Differences, Purposes and Recommendations

Next.js Page Router vs. App Router: Differences, Purposes and Recommendations

Next.js is a popular framework for building modern React-based web applications. Over time, Next.js's architecture has evolved, and two different routing models have emerged: the Page Router and the App Router. In this post, we'll take a detailed look at how the two systems differ, what each is for, and which one you should be choosing today.


📌 What Is the Page Router?

The Page Router is Next.js's original routing system and was the default before Next.js 13. Every file inside the pages/ directory automatically becomes a route.

🎯 Page Router Features

  • File-based routing: pages/index.js → /, pages/about.js → /about, and so on.
  • getStaticProps and getServerSideProps support: Per-page data fetching functions let you build dynamic or static content.
  • API Routes: pages/api/ is where you define API endpoints.
  • Custom _app.js and _document.js: Used to customize the overall layout of the application.
  • Client-Side Navigation: next/link and next/router are used to optimize transitions between pages.

🛠 When to Use the Page Router

  • Small to medium-sized projects
  • Applications that rely heavily on CSR (Client-Side Rendering)
  • Cases that require compatibility with classic Next.js projects

🔥 What Is the App Router?

The App Router is the new routing system introduced in Next.js 13 and refined in Next.js 14. It lives in the app/ directory and is deeply integrated with React Server Components (RSC).

🚀 App Router Features

  • Server Components: Components run on the server by default, so less client-side JavaScript gets shipped.
  • Layout support: With the file-system-based layout.tsx, you can create layouts that are shared across pages.
  • Server-side data handling (Server Actions): React's new APIs make data handling more efficient.
  • Middleware support: Edge processing (Edge Functions) enables faster, more flexible routing.
  • Route Handlers instead of API Routes: You can now create more flexible API endpoints under app/api/.

🔥 When to Use the App Router

  • Large-scale, complex projects
  • Projects that want to use SSR (Server-Side Rendering) and RSC (React Server Components)
  • Higher-performance, more optimized applications

📊 Page Router vs. App Router Comparison Table

FeaturePage Router (pages/)App Router (app/)
RoutingFile-basedFile-based (with layout support)
Server ComponentsNoAvailable by default
getStaticProps / getServerSidePropsYesNo (fetch() and Server Components are used instead)
Layout SystemCustom _app.js, _document.jslayout.tsx (more advanced)
API Routespages/api/ basedapp/api/ with Route Handlers
MiddlewareIntroduced in Next.js 12More powerful and flexibly integrated
PerformanceMore client-side loadingLess client-side JavaScript
Learning CurveEasier (for those used to Next.js up to version 12)Steeper (requires learning RSC and the new APIs)

❓ Should I Use the Page Router or the App Router?

  • If you're starting a new project, the App Router is recommended. It performs better, and you get to take full advantage of the latest Next.js features.
  • If you're using the Page Router in an existing project, there's no need to rush over to the App Router. That said, you should plan a migration to the App Router in the long run.
  • For projects that rely heavily on API Routes, it's important to carefully analyze the migration to the App Router's new app/api/ structure.
  • For applications that are mostly client-side, the Page Router may still be a better fit in some cases.

🎯 Conclusion

Next.js gives developers flexibility by supporting both the old and the new routing approaches. The Page Router is still supported, but the expectation is a full shift to the App Router in the future. That's why the App Router should be your choice for new projects. For existing projects, you should plan a migration to the App Router wherever possible.

If you're facing a big migration or aren't sure how to port a particular feature, digging into the Next.js docs and building small test projects is a great way to get comfortable with the new system. 🚀

Author Ahmet Yüceler

I build web and mobile products with 6+ years of experience. I share what I learn here.

Get in touch →

Leave a comment

Your email address will not be published. Required fields are marked *