Next.js App Router vs Pages Router — My Honest Take
Next.js

Next.js App Router vs Pages Router — My Honest Take

10 min

Next.js App Router vs Pages Router

I've built projects with both. Here's the real difference.

What Changes

| Feature | Pages Router | App Router | |---------|-------------|------------| | Routing | File-based /pages | File-based /app | | Data fetching | getServerSideProps, getStaticProps | async components, generateStaticParams | | Layout | Shared component | layout.tsx per segment | | Streaming | Manual | Built-in via loading.tsx |

Server Components by Default

The biggest shift: every component in app/ is a Server Component by default.

tsx
// app/blog/page.tsx — runs on server, never ships to client
export default async function BlogPage() {
    const posts = await getPosts()
    return <div>{posts.map(renderPost)}</div>
}

Need interactivity? Add 'use client':

tsx
'use client'
import { useState } from 'react'

export function SearchBar() {
    const [query, setQuery] = useState('')
    // ...
}

When to Use Which

  • New projects → App Router (it's the future)
  • Existing large codebases → Migrate gradually
  • Simple marketing sites → Either is fine

The App Router is not just a rewrite — it's a mental model shift. Think in Server Components first, then add client interactivity where needed.