Paginated content uses rel=next/prev or canonicalizes to page 1
Why it matters
Paginated routes without rel=next/rel=prev or canonical consolidation get indexed as disconnected, competing URLs — page 2 of /products ranks against page 1 for the same keywords, splitting link equity and diluting ranking signals. Googlebot treats each paginated URL as a standalone thin page, which suppresses the whole listing's authority and can trigger soft-404 classification on sparse pages.
Severity rationale
High because pagination errors split PageRank across competing URLs and suppress category-level rankings.
Remediation
Emit pagination metadata on every listing route. In app/products/page.tsx, compute the canonical strategy based on the current page:
export async function generateMetadata({ searchParams }) {
const page = Number(searchParams.page) || 1
return { alternates: { canonical: `/products?page=${page}` } }
}
Prefer a single canonicalized view-all page when the listing fits under 100 items.
Detection
-
ID:
pagination -
Severity:
high -
What to look for: Count all paginated routes (pages with
?page=2,?page=3, etc. or/page/2,/page/3patterns). For each paginated route, check for<link rel="next">and<link rel="prev">tags, or canonical URLs pointing to page 1 for consolidation. Enumerate which strategy is used on each route. -
Pass criteria: At least 90% of paginated routes use a consistent pagination strategy (either rel=next/prev links or canonical to page 1). Users can navigate through all pages and crawlers understand the pagination structure. Report: "X of Y paginated routes have pagination markup."
-
Fail criteria: Fewer than 90% of paginated routes have rel=next/prev or canonical strategy, or paginated pages are treated as separate indexable content without consolidation.
-
Skip (N/A) when: The project has no paginated content (no routes with page parameters or pagination UI).
-
Detail on fail:
"3 of 5 paginated routes lack rel=next/prev — /products?page=2, /products?page=3, /blog?page=2 are canonicalized separately". -
Remediation: Use pagination markup in
app/products/page.tsxor whichever route handles pagination:export const metadata = { other: { 'rel-next': page < totalPages ? `https://yoursite.com/products?page=${page + 1}` : undefined, 'rel-prev': page > 1 ? `https://yoursite.com/products?page=${page - 1}` : undefined, }, }
Taxons
History
- 2026-04-18·v1.0.0·Initial import from seo-advanced·automated