Skip to main content

Paginated content uses rel=next/prev or canonicalizes to page 1

ab-002471 · seo-advanced.crawlability.pagination
Severity: highactive

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: seo-advanced.crawlability.pagination

  • Severity: high

  • What to look for: Count all paginated routes (pages with ?page=2, ?page=3, etc. or /page/2, /page/3 patterns). 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.tsx or 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