Skip to Content
Component ExamplesPagination

Overview

Pagination lets users move through pages of content. When built with bare number links, screen readers announce only “1, link, 2, link, 3, link” with no context about what the numbers mean or which page is active. The correct pattern wraps pagination in a <nav> landmark, uses a list for structure, gives each link a descriptive aria-label, marks the active page with aria-current="page", and disables unavailable controls with aria-disabled.

WCAG Criteria:

Key requirements:

  • Wrap pagination in <nav aria-label="Pagination"> to create a navigation landmark
  • Use <ul> and <li> to provide list structure
  • Add aria-label="Page X" to each page link so numbers have meaning
  • Mark the current page with aria-current="page"
  • Provide Previous/Next links with descriptive labels
  • Use aria-disabled="true" on unavailable controls (e.g., Previous on page 1)

Semantic Pagination vs. Plain Number Links

Inaccessible
<!-- No landmark, no labels, no current page indicator --> <div> <a href="/results?page=1">1</a> <a href="/results?page=2">2</a> <a href="/results?page=3">3</a> <a href="/results?page=4">4</a> <a href="/results?page=5">5</a> </div>
Live Preview
Accessible
<nav aria-label="Pagination"> <ul style="list-style:none;display:flex;gap:4px;margin:0;padding:0;"> <li> <!-- Disabled when on first page --> <a href="/results?page=0" aria-disabled="true">Previous</a> </li> <li> <a href="/results?page=1" aria-label="Page 1">1</a> </li> <li> <a href="/results?page=2" aria-label="Page 2">2</a> </li> <li> <a href="/results?page=3" aria-label="Page 3" aria-current="page">3</a> </li> <li> <a href="/results?page=4" aria-label="Page 4">4</a> </li> <li> <a href="/results?page=5" aria-label="Page 5">5</a> </li> <li> <a href="/results?page=4" aria-label="Next page">Next</a> </li> </ul> </nav>
Live Preview

What’s wrong with plain number links?

  • No <nav> landmark — screen reader users cannot find pagination via landmarks
  • No list structure — the group of links has no semantic relationship
  • “3” alone is meaningless — a screen reader just says “3, link” with no page context
  • The current page is only styled differently — no programmatic indicator for assistive technology
  • No Previous/Next controls for sequential navigation

What the screen reader announces:

VersionAnnouncement
Inaccessible (plain links)“1, link. 2, link. 3, link. 4, link. 5, link”
Accessible (<nav> + <ul>)“Pagination, navigation. List, 7 items. Previous, dimmed, link. Page 1, link. Page 2, link. Page 3, current page, link. Page 4, link. Page 5, link. Next page, link”

Resources