Use canonicals on paginated pages
Checks that paginated pages have proper canonicals
- Each paginated page (/page/2, /page/3) should self-canonicalize to its own URL
- Do NOT canonicalize all paginated pages to page 1 — this is a common mistake
- Google dropped support for rel=prev/next in 2019 — don't rely on it
- Use consistent URL patterns for pagination (?page=2 or /page/2, never both)
- Infinite scroll and load-more UIs still need crawlable paginated URLs or links
Rule Details
Pagination splits long content (blog archives, product grids, search results) across multiple URLs. Getting canonical tags right ensures that each page can be individually indexed, which is why pagination should be reviewed together with canonical-url rather than treated as a generic duplicate-content problem.
Code Example
<!-- ❌ WRONG: Paginated pages all canonicalize to page 1 -->
<!-- On /products?page=2: -->
<link rel="canonical" href="https://example.com/products" />
<!-- On /products?page=3: -->
<link rel="canonical" href="https://example.com/products" />This tells Google that pages 2 and 3 are duplicates of page 1. Google stops indexing them. Products only found on page 3 become unreachable from search.
Why It Matters
Incorrect pagination canonicalization can prevent pages 2, 3, and later pages from being indexed. Google's pagination guidance (opens in new tab) makes it clear that later pages are not automatically duplicates of page 1.
Correct Implementation
<!-- ✅ Good: Each paginated page self-canonicalizes -->
<!-- On /products (page 1): -->
<link rel="canonical" href="https://example.com/products" />
<!-- On /products?page=2: -->
<link rel="canonical" href="https://example.com/products?page=2" />
<!-- On /products?page=3: -->
<link rel="canonical" href="https://example.com/products?page=3" />URL Pattern Consistency
Choose one pagination pattern and use it exclusively:
✅ /blog?page=2 (query parameter — consistent)
✅ /blog/page/2 (path segment — consistent)
❌ /blog?page=2 on some pages
❌ /blog/page/2 on other pages (inconsistent — creates duplicates)Next.js Implementation
// app/blog/page.tsx
interface Props {
searchParams: { page?: string }
}
export async function generateMetadata({ searchParams }: Props): Promise<Metadata> {
const page = parseInt(searchParams.page || '1')
const canonicalUrl = page === 1
? 'https://example.com/blog'
: `https://example.com/blog?page=${page}`
return {
alternates: {
canonical: canonicalUrl,
},
}
}What About rel=prev/next?
Google announced in March 2019 that they no longer use rel="prev" and rel="next" link tags as a hint for pagination. The deprecation note in Google's Search blog (opens in new tab) is still the clearest reference for that change.
<!-- Google ignores these since 2019, but other crawlers may still use them -->
<link rel="prev" href="https://example.com/blog?page=1" />
<link rel="next" href="https://example.com/blog?page=3" />Indexing Strategy
Not all paginated pages need to be indexed. Consider:
| Page | Strategy |
|---|---|
| Page 1 | Always index |
| Pages 2–5 | Index if content is unique and valuable |
| Pages 6+ | Consider noindex for very deep pagination |
| Filtered variants | Often noindex + canonical-url to base category |
Some CMS themes automatically add noindex to all paginated pages. Check your page 2+ templates explicitly — this is a common cause of category pages being partially deindexed.
Infinite Scroll Still Needs Crawlable Pagination
Infinite scroll is a UX enhancement, not a replacement for discoverable URLs. Provide real links such as /blog?page=2 or /blog/page/2 so crawlers and no-JS users can still reach later content.
<!-- Visible or fallback pagination links -->
<nav aria-label="Pagination">
<a href="/blog?page=1">1</a>
<a href="/blog?page=2">2</a>
<a href="/blog?page=3">3</a>
</nav>Exceptions
- Necessary utility or compliance pages can be intentionally brief and should not be judged by the same editorial-depth expectations as ranking-focused content.
- AI-assisted drafting is not a failure by itself; flag unsupported claims, missing editorial review, or low-originality output instead.
- When a page has both trust-signal issues and crawl/index problems, make the page eligible to rank first and then improve the content quality signals.
Standards
- Use these references as the standard for the final search-facing HTML, metadata, and crawl behavior.
- Check the implementation against Google Search Central: Pagination best practices before treating the rule as satisfied.
- Check the implementation against Google Blog: rel=prev/next deprecation before treating the rule as satisfied.
Verification
Automated Checks
- Inspect rendered HTML and HTTP headers to confirm the expected metadata or crawlability signal is present.
- Test the affected URL with Google Search Console or equivalent tooling where relevant.
- Re-crawl a representative page set after deployment.
Manual Checks
- Confirm the change does not create conflicting canonical-url, robots, or structured-data signals.
- Disable JavaScript and confirm page 2+ content is still reachable through crawlable links or paginated URLs.
Use with AI
Copy these prompts to use with your AI assistant, or install the MCP server to use directly from Claude, Cursor, or Windsurf.
Check
Verify implementation
Find paginated page sequences (URLs with ?page=, /page/, /p/, or numbered suffixes). For each page, check the canonical tag. Verify that each page self-canonicalizes (page 2 canonical-url = page 2 URL). Flag any paginated page that incorrectly points canonical-url to page 1. If the UI uses infinite scroll or "load more", verify equivalent crawlable pagination links exist.
Fix
Auto-fix issues
Update canonical tags so each paginated page self-references. For /category?page=2, set <link rel='canonical' href='https://example.com/category?page=2' />. Remove any canonical pointing paginated pages to the first page unless those pages genuinely have duplicate content. Add crawlable paginated URLs or fallback links for infinite-scroll interfaces.
Explain
Learn more
Pagination canonical tags tell Google which URL is the preferred version of each page. Setting all paginated pages to canonical-url to page 1 tells Google that pages 2, 3, etc. are duplicates of page 1 — so Google stops indexing them. Content that only appears on page 3 (for example) then becomes unreachable from search.
Review
Code review
Identify paginated URL patterns (URLs with page=, /page/, /p/ parameters). For each paginated page beyond page 1, check the canonical tag. Flag any page 2+ that has a canonical pointing to page 1 (the base URL). Verify that page 1 has a self-referencing canonical. Check that pagination URL format is consistent (no mixing of ?page= and /page/). For JS-driven infinite scroll, verify there is still a crawlable path to page 2+ via real links or paginated URLs.
