Pagination Design
Pagination helps users move through long lists while keeping their place. It suits search results, tables and archives where users jump around or share links to a page.
By Mohamed Farhan · Updated Oct 19, 2026
Inside the example
The live example above is plain HTML with Tailwind utility classes, so you can paste it into any Tailwind project. It uses type sizes text-sm (14px) and spacing px-3 (12px), py-2 (8px), gap-1 (4px), px-1 (4px), constrained by max-w-lg. Everything sits on a 4px grid, which keeps rhythm consistent when you adapt it.
Colors use Tailwind's neutral stone scale so the pattern stays brand-agnostic. Swap stone-900 for your primary color on the main action, keep body text dark and check contrast after any change.
Anatomy
- 1.Previous and next
- Large, clearly labelled targets.
- 2.Page numbers
- First, last, current and neighbours.
- 3.Ellipsis
- Shows skipped ranges.
- 4.Result count
- 'Showing 21-40 of 312' sets expectations.
Common variations
- Numbered pagination with previous, next and page numbers.
- Simple previous and next, for content like blog archives.
- Load more button, which appends results while keeping the user in control.
- Infinite scroll, for feeds where users browse rather than search.
States to design
- Current page: highlighted and marked with aria-current.
- Disabled previous or next: on the first or last page.
- Loading: when the next page is fetched without a full reload.
- Single page: pagination hidden when everything fits.
A walkthrough
A buyer searches an industrial parts catalog and gets 312 results. Below the list she sees 'Showing 21 to 40 of 312 results', Previous and Next buttons, and page numbers 1, 4, 5, 6 and 16, with page 5 highlighted. She jumps to the last page to check the oldest listings and then back to page 2.
Each page has its own URL, including her filters for brand and voltage, so when she shares page 3 with a colleague he sees exactly the same results. When she changes the sort order to price, the results reset to page 1 and the focus moves to the results heading, so she is not left at the bottom of an empty-looking page.
On her phone, the same pagination shows only Previous, the current page and Next, each large enough to tap comfortably, plus the result count. After trying both, the team later tests a 'Show 20 more' button on mobile and finds that buyers browse deeper with it, while desktop users still prefer numbered pages for comparing results.
How different products use it
Search results and stores use numbered pagination so users can return to a page and compare items.
Data tables in admin tools combine pagination with rows-per-page selectors and total counts.
Blogs and archives often use simple Newer and Older links.
Visual design guidelines
Page links should be at least 36 to 44px square for easy clicking, with the current page clearly filled or outlined. Group previous and next buttons with text labels at the edges, and center the page numbers. Show the result count nearby in quieter text.
Best practices
Do
- Always show first and last pages.
- Make the current page visually distinct.
- Keep the page number in the URL so it can be shared.
- Use generous touch targets on mobile.
Don't
- Do not show every page number for long lists.
- Do not reset filters when changing pages.
- Do not use pagination where infinite scroll suits a feed better.
On mobile
On mobile, show fewer numbers: previous, current page, next, and perhaps the last page. Make targets at least 44px, and consider a 'Load more' button, which is often easier than tapping small numbers.
Common mistakes
- Losing filters or sort order when changing pages.
- Not updating the URL, so users cannot share or return to a page.
- Scrolling to the wrong place after loading a new page.
- Infinite scroll on pages with important footers.
Edge cases to plan for
- Thousands of pages need a jump-to-page input or better filtering.
- Results changing between pages (new items added) can cause duplicates; use cursors on the backend where possible.
- Very few results should hide pagination entirely.
- Filters reducing results must reset to page one.
Accessibility checklist
- Wrap pagination in a nav with aria-label="Pagination".
- Mark the current page with aria-current="page".
- Give previous and next buttons text labels, not only arrows.
Implementation notes
Wrap pagination in a nav with an aria-label of Pagination, use real links with page numbers in the URL, and mark the current page with aria-current="page". After loading a new page dynamically, move focus to the results heading.
In your design system
In a design system, pagination is a component that takes the current page, total pages and a link builder, and handles truncation with ellipses internally. Provide a compact variant for mobile and a load-more variant, and pair it with a result-count component and a rows-per-page select for tables.
How to measure whether it works
Track how many users go beyond the first page. If few do, improve sorting and filtering so the best results appear first. Compare engagement between pagination and load-more variations.
Pre-launch checklist
Microcopy you can use
A step-by-step design process
- Choose the model: numbered pages, load more or infinite scroll.
- Decide page size and whether users can change it.
- Design the page number logic with first, last and neighbours.
- Keep state in the URL, including filters and sort.
- Design the mobile version with fewer numbers and larger targets.
- Manage focus and scroll after loading a new page.
Usability test tasks
Before shipping, run a short usability test with five or so people from your audience. Give them tasks rather than instructions and watch where they hesitate:
- Go to the last page of results.
- Move to page 3 and share the link.
- Change the number of results per page.
- Return to the results after opening an item.
Key terms
- Offset pagination: Fetching results by page number and size.
- Cursor pagination: Fetching results after a specific item, which avoids duplicates.
- Infinite scroll: Loading more results automatically as the user scrolls.
- Load more: A button that appends the next set of results.
Writing the copy
Use 'Previous' and 'Next' rather than arrows alone. Result counts should be precise and human: 'Showing 21 to 40 of 312 results'. For load-more buttons, say what will load: 'Show 20 more products'.
Prompts to generate variations
If you use an AI UI generator such as Inspo AI, these prompts are a good starting point for exploring variations of this pattern:
- Design pagination for a data table with result count, rows-per-page select and first/last/neighbour page numbers.
- Create a load-more pattern for an ecommerce product grid with a count of remaining products.
- Design compact mobile pagination for search results.
Related patterns
Pagination often appears with data tables, search results and loading states for dynamic content.
Generate this pattern for your product
Inspo AI designs the full pattern with every state, grounded in how real products solve it, and exports React + Tailwind.
Sources and further reading
- WAI-ARIA Authoring Practices Guide · Accessible keyboard and screen reader patterns for UI components.
- WCAG 2.1: Non-text Contrast · Contrast requirements for buttons, borders and icons.
- WCAG 2.1: Use of Color · Why color should never be the only way information is shown.
- Nielsen Norman Group articles · Usability research on interface patterns.
More UI patterns
Questions people ask
Pagination or infinite scroll?
Pagination is better for search results, tables and anything users compare or revisit. Infinite scroll suits casual browsing feeds.
How many page numbers should I show?
Usually the first, last, current page and one or two neighbours on each side, with ellipses for gaps.
Should pagination be at the top or bottom?
Bottom is standard. For long tables, adding it at the top as well helps users jump without scrolling.
Is infinite scroll bad for SEO?
It can be if content only loads on scroll. Provide paginated URLs as well so search engines can reach every item.
How many results per page?
Commonly 20 to 50 for lists and 12 to 48 for product grids. Let users change it for data tables.

↘ Building Inspo AI | AI-Powered Design Research & Builder Platform | Design Engineer.