How to Create Pages in Nextjs

Introduction Next.js is a powerful React framework widely adopted for building server-side rendered and statically generated web applications. One of its core features is the ease with which developers can create and manage pages, making it an essential skill for anyone working with Next.js. Understanding how to create pages efficiently not only improves development speed but also enhances SEO, us

Nov 17, 2025 - 11:33
Nov 17, 2025 - 11:33
 5

Introduction

Next.js is a powerful React framework widely adopted for building server-side rendered and statically generated web applications. One of its core features is the ease with which developers can create and manage pages, making it an essential skill for anyone working with Next.js. Understanding how to create pages efficiently not only improves development speed but also enhances SEO, user experience, and maintainability of your web projects.

In this tutorial, we will dive deep into how to create pages in Next.js, covering everything from basic setup to advanced routing techniques. Whether you are a beginner or an experienced developer looking to sharpen your skills, this comprehensive guide will provide you with practical knowledge and best practices.

Step-by-Step Guide

1. Setting Up a Next.js Project

Before creating pages, you need a Next.js project. If you haven't set one up yet, follow these steps:

Step 1: Ensure Node.js is installed on your system.

Step 2: Open your terminal and run:

npx create-next-app@latest my-nextjs-app

This command scaffolds a new Next.js project named my-nextjs-app.

Step 3: Navigate into your project directory:

cd my-nextjs-app

Step 4: Start the development server:

npm run dev

Your Next.js app will be accessible at http://localhost:3000.

2. Understanding the Pages Directory

Next.js uses a file-system-based router built on the concept of pages. Each file inside the pages directory automatically becomes a route.

For example:

  • pages/index.js corresponds to the home page (/).
  • pages/about.js corresponds to the /about page.

This convention eliminates the need for explicit route configuration, simplifying routing management.

3. Creating a Basic Page

Lets create a simple About page.

Step 1: Inside the pages folder, create a file named about.js.

Step 2: Add the following React component:

import React from 'react';


export default function About() {

  return (

    <div>

      <h1>About Us</h1>

      <p>Welcome to the About page.</p>

    </div>

  );

}

Step 3: Save the file and visit http://localhost:3000/about to see your new page.

4. Creating Nested Routes

To create nested routes, simply create folders within the pages directory.

For example, to create a blog post page under /blog/post-1:

Step 1: Create a folder named blog inside pages.

Step 2: Inside blog, create a file called post-1.js.

Step 3: Add your component code:

export default function Post1() {

  return (

    <div>

      <h1>Blog Post 1</h1>

      <p>This is the first blog post.</p>

    </div>

  );

}

Visit http://localhost:3000/blog/post-1 to view the nested page.

5. Dynamic Routes

Dynamic routing allows you to create pages that depend on external parameters, such as user IDs or blog slugs.

Step 1: Create a file named [id].js inside a folder, for example, pages/blog/.

Step 2: Add the following code to access the dynamic parameter:

import { useRouter } from 'next/router';


export default function BlogPost() {

  const router = useRouter();

  const { id } = router.query;


  return (

    <div>

      <h1>Blog Post: {id}</h1>

      <p>This page is dynamically generated for post ID {id}.</p>

    </div>

  );

}

Visiting /blog/123 will display content for post ID 123.

6. Using getStaticProps and getServerSideProps

Next.js supports data fetching methods that influence page creation and rendering:

  • getStaticProps: Fetch data at build time for static generation.
  • getServerSideProps: Fetch data on each request for server-side rendering.

Example using getStaticProps:

export async function getStaticProps() {

  const data = await fetch('https://api.example.com/data').then(res => res.json());

  return { props: { data } };

}


export default function Page({ data }) {

  return (

    <div>

      <h1>Data Loaded</h1>

      <pre>{JSON.stringify(data, null, 2)}</pre>

    </div>

  );

}

Best Practices

1. Organize Pages Logically

Structure your pages directory clearly with folders representing feature sets or sections of the site. This keeps the project maintainable as it grows.

2. Use Dynamic Routes for Scalability

Dynamic routes help handle multiple similar pages efficiently, such as user profiles or product pages, preventing the need to create individual files for each.

3. Leverage Static Generation

Whenever possible, use getStaticProps and getStaticPaths to generate pages at build time. This improves performance and SEO by serving pre-rendered HTML.

4. Avoid Excessive Nesting

While nested routes are useful, avoid deep nesting which can complicate URL structures and navigation.

5. Use Custom 404 Pages

Create a custom pages/404.js to handle not-found pages elegantly, improving user experience and SEO.

6. Optimize for SEO

Use Next.js's Head component to add meta tags and titles for each page, enhancing search engine visibility.

Tools and Resources

1. Official Next.js Documentation

The best place to start and reference is the Next.js official docs. It covers all aspects of page creation and routing.

2. VS Code with Next.js Extensions

Visual Studio Code offers extensions that improve Next.js development experience with syntax highlighting, snippets, and IntelliSense.

3. React Developer Tools

Useful for debugging React components in your Next.js pages.

4. ESLint and Prettier

Maintain consistent coding standards and formatting to keep your pages clean and readable.

5. Online Tutorials and Courses

Platforms like Udemy, Coursera, and YouTube offer detailed courses on Next.js page creation and routing.

Real Examples

Example 1: Basic About Page

Create pages/about.js:

export default function About() {

  return (

    <div>

      <h1>About Our Company</h1>

      <p>We build innovative web solutions.</p>

    </div>

  );

}

Example 2: Dynamic Product Page

Create pages/products/[productId].js:

import { useRouter } from 'next/router';


export default function Product() {

  const router = useRouter();

  const { productId } = router.query;


  return (

    <div>

      <h1>Product: {productId}</h1>

      <p>Details about product {productId}.</p>

    </div>

  );

}

Example 3: Static Generation with Data Fetching

Create pages/posts/[id].js using getStaticProps and getStaticPaths:

export async function getStaticPaths() {

  const paths = [{ params: { id: '1' } }, { params: { id: '2' } }];

  return { paths, fallback: false };

}


export async function getStaticProps({ params }) {

  const data = await fetch(https://jsonplaceholder.typicode.com/posts/${params.id}).then(res => res.json());

  return { props: { post: data } };

}


export default function Post({ post }) {

  return (

    <article>

      <h1>{post.title}</h1>

      <p>{post.body}</p>

    </article>

  );

}

FAQs

Q1: How does Next.js routing differ from React Router?

Next.js uses a file-system-based routing mechanism, automatically mapping files in the pages directory to routes. React Router requires explicit route definitions inside your components.

Q2: Can I customize URLs in Next.js?

Yes, dynamic routes and rewrites allow customization of URLs. You can also use next.config.js to configure advanced routing behaviors.

Q3: How do I handle 404 pages?

Create a pages/404.js file to customize the 404 error page. Next.js automatically serves this page when a route is not found.

Q4: What is the difference between getStaticProps and getServerSideProps?

getStaticProps fetches data at build time and generates static pages, ideal for content that doesnt change often. getServerSideProps fetches data on each request, suitable for frequently changing data.

Q5: Can I use API routes alongside pages?

Yes, Next.js allows you to create API routes inside the pages/api directory, enabling backend functionality without leaving the framework.

Conclusion

Creating pages in Next.js is straightforward thanks to its file-based routing system, dynamic routes, and data fetching capabilities. Mastering these fundamentals empowers developers to build scalable, SEO-friendly, and performant applications efficiently.

By following the step-by-step guide and best practices outlined in this tutorial, you can confidently structure your Next.js projects and leverage its advanced features to deliver exceptional web experiences.

Remember to utilize the official documentation and tools to stay updated and refine your skills continuously.