---
title: "Pagination with SSG"
description: "Learn to implement page based pagination with Next.js and Vercel."
url: "https://vercel.com/templates/next.js/pagination-with-ssg"
links:
  repository: "https://github.com/vercel/examples/tree/main/solutions/pagination-with-ssg"
  demo: "https://pagination-with-ssg.vercel.app"
  deploy: "https://vercel.com/new/clone?demo-title=Pagination+with+SSG&demo-description=Learn+to+implement+page+based+pagination+with+Next.js+and+Vercel.&demo-url=https%3A%2F%2Fpagination-with-ssg.vercel.app&project-name=pagination-with-ssg&repository-name=pagination-with-ssg&repository-url=https%3A%2F%2Fgithub.com%2Fvercel%2Fexamples%2Ftree%2Fmain%2Fsolutions%2Fpagination-with-ssg&demo-image=%2F%2Fimages.ctfassets.net%2Fe5382hct74si%2F6OxcYHieYE5AQMYpe1PTi6%2F65cd9f88611eb26aa6aea85a90e44423%2Fpagination-with-ssg.vercel.app_.png"
---

# Pagination with SSG

Learn to implement page based pagination with Next.js and Vercel.

This example shows how to implement page based pagination with [SSG](https://nextjs.org/docs/basic-features/data-fetching/get-static-props) in Next.js.

## Demo

https://pagination-with-ssg.vercel.app

## How it works

The first 5 paginated pages are cached in the edge at build time, and the rest are incrementally cached using [ISR](https://nextjs.org/docs/basic-features/data-fetching/incremental-static-regeneration), that way we can avoid increasing build times no matter how many pages we have while still keeping essential pages cached from the
start.

The example showcases a PLP (Product Listing Pages) where:

- There are 100 test products and 1 category (PLP)
- There are 10 results per page for a total of 10 pages, where 5 are pre-generated with `getStaticPaths`

```ts
// pages/category/[page].tsx

export const getStaticPaths = async () => {
  return {
    // Prerender the next 5 pages after the first page, which is handled by the index page.
    // Other pages will be prerendered at runtime.
    paths: Array.from({ length: 5 }).map((_, i) => `/category/${i + 2}`),
    // Block the request for non-generated pages and cache them in the background
    fallback: 'blocking',
  }
}
```

## How to Use

You can choose from one of the following two methods to use this repository:

### Clone and Deploy

Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app) with [npm](https://docs.npmjs.com/cli/init) or [Yarn](https://yarnpkg.com/lang/en/docs/cli/create/) to bootstrap the example:

```bash
npx create-next-app --example https://github.com/vercel/examples/tree/main/solutions/pagination-with-ssg
# or
yarn create next-app --example https://github.com/vercel/examples/tree/main/solutions/pagination-with-ssg
```

Next, run Next.js in development mode:

```bash
npm install
npm run dev

# or

yarn
yarn dev
```

Deploy it to the cloud with [Vercel](https://vercel.com/new?utm_source=github&utm_medium=readme&utm_campaign=edge-middleware-eap) ([Documentation](https://nextjs.org/docs/deployment)).

## Related Templates

### [Next.js Preview Mode](https://vercel.com/templates/next.js/nextjs-preview-mode)

Preview content changes before publishing.

---

## Additional documentation

The [Vercel Knowledge Base](https://vercel.com/kb) contains guides and answers to common questions about Vercel, including deployment, framework configuration, domains, caching, and troubleshooting.
