Learn Next.js Routing FAST - This tutorial gets you upto speed Now!

Learn Next.js Routing FAST - This tutorial gets you upto speed Now!


6 min read


In the previous article, I provided a comprehensive, high-level overview of the latest version, Next.js 13.4, and explored its innovative features and capabilities.

As we continue with this informative series, this third installment will delve deeper into the fundamental concepts that underpin the framework, such as pages, routing, and layouts. By doing so, I aim to provide you with a more thorough understanding of how these core components interact and contribute to the overall functionality and performance of Next.js applications.

Pages in Next.js

At its core, Next.js uses the pages directory to route requests to React components that render the content. For example, pages/index.js maps to the / route.Pages can be further organized into subdirectories like pages/blog and pages/blog/first-post.js. Next.js automatically handles routing based on the file structure.

In Next.js, several types of pages can be utilized to cater to different needs and use cases:

  1. Static Generation

    With this approach, HTML pages are generated during the build process by leveraging the getStaticProps function. This enables the fetching of data from external APIs or Content Management Systems (CMS) to be incorporated into the static HTML. Static Generation is highly suitable for pages that do not require frequent updates, as the content is generated only once at build time, leading to faster load times and improved performance.

  2. Server-side Rendering

    In contrast to Static Generation, Server-side Rendering generates the HTML for each individual request using the getServerSideProps function. This method is particularly beneficial for pages that display frequently updated data, as the content is generated dynamically for every request, ensuring that users always receive the most up-to-date information.

  3. Client-side Rendering

    With Client-side Rendering, the initial page is rendered as an empty shell, which is then populated and hydrated with data using client-side JavaScript. This approach is advantageous for user-specific pages, such as dashboard pages, where the content is tailored to individual users and does not need to be indexed by search engines.

Next.js offers the flexibility to mix and match these rendering strategies across different pages within a single application. This allows developers to optimize their applications by choosing the most appropriate rendering method for each specific use case, resulting in a more efficient and performant user experience.

Dynamic Routes

Given the flexibility to mix and match various rendering strategies across different pages within a single application, developers can optimize their applications by selecting the most suitable rendering method for each specific use case. This results in a more efficient and performant user experience, tailored to the unique requirements of each page.

In the case of dynamic route parameters, such as pages/post/[id].js, developers can access the id parameter within both getStaticProps and getServerSideProps functions. Dynamic routes facilitate the creation of polymorphic templates that can adapt their structure and content based on external data sources. This enables developers to build versatile and responsive pages that cater to a wide range of content variations, without the need for creating multiple static templates.

Catch-all Routes

Catch-all routes, exemplified by pages/post/[...slug].js, provide an even greater level of flexibility by allowing developers to match additional nested parameters within the URL. These routes can accommodate a variety of URL structures and dynamically generate pages based on the specific parameters provided.

This feature is particularly useful for creating hierarchical content structures, such as nested categories or multi-level navigation systems, where the depth and complexity of the content may vary significantly. By leveraging catch-all routes, developers can create more adaptable and scalable applications that can easily accommodate future changes in content organization and presentation.

The Link component, provided by the next/link module, is a powerful feature in the Next.js framework that facilitates efficient client-side navigation between different pages within a web application.

By implementing this component, developers can create a seamless browsing experience for users, as it allows them to navigate through the application without triggering a full page reload. This, in turn, significantly enhances the overall performance and responsiveness of the web application.

<Link href="/about">
    <a>About Us</a>

In this example, the Link component wraps around an anchor tag, which contains the text "About Us". The href attribute specifies the target page, in this case, the "about" page. When a user clicks on the "About Us" link, they will be navigated to the "/about" page without the need for a full page refresh.

Additionally, the Link component offers an optional passHref attribute, which can be set to true to pass the href value as a prop to custom link components. This enables developers to create their own link components with unique styling or behavior, while still leveraging the performance benefits provided by the next/link module.

Layouts in Next JS

In Next.js, layouts play a crucial role in organizing and structuring the overall appearance of web applications. By utilizing the powerful features of the Next.js framework, developers can create highly customizable and dynamic layouts that cater to their specific needs.

One such feature is the Link component, which offers an optional passHref attribute. When set to true, this attribute allows the href value to be passed as a prop to custom link components, providing developers with the flexibility to design their own link components with unique styling or behavior.

Layouts help extract common components like headers, footers into a reusable wrapper. For example:

export default function Layout({ children }) {
return (
    <Header />
    <Footer />

Layouts can then wrap each page and avoid repeating code while maintaining consistency. Next.js 13.4 improves layout nesting and composition through features like nested-layouts/layout.js.

By leveraging the performance benefits provided by the next/link module, developers can ensure that their custom link components not only look and function as desired, but also contribute to an optimized user experience. This is particularly important in modern web applications, where page load times and seamless navigation are essential for maintaining user engagement and satisfaction.


Next.js offers a powerful and flexible framework for creating web applications with optimal performance and user experience. Through features such as dynamic routing, catch-all routes, and the Link component, developers can create adaptable and scalable applications that cater to various content structures. Furthermore, by utilizing different rendering strategies and leveraging the benefits of layouts, Next.js enables developers to build efficient, performant, and engaging web applications tailored to their specific needs.

Now, I'd love to hear your thoughts and gather any questions or topics you'd like me to address in future articles related to anything React and Web Development. Your input will help me provide more valuable insights and cater to your specific interests.

Make sure to follow me on Twitter to get the latest updates regarding everything Web Development, Blog Writing, and Personal Growth!

Did you find this article valuable?

Support Arjun by becoming a sponsor. Any amount is appreciated!