Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when auditing paginated content (blog archives, product category pages, search results). Applies to any site with lists or grids of content split across multiple pages.
.claude/skills/thedaviddias-pagination/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 18% | 0% |
| case-01 | ✓→✓ | = Same ✓ | 4% | 0% |
| case-02 | ✓→✓ | = Same ✓ | -3% | 0% |
| case-03 | ✓→✓ | = Same ✓ | -11% | 0% |
| case-04 | ✓→✓ | = Same ✓ | -20% | 0% |
Incorrect pagination canonicalization can prevent pages 2, 3, etc. from being indexed, removing valuable content from search results and breaking user journeys from search queries that match content on later pages.
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.
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.
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.
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.
For full implementation details, code examples, and framework-specific guidance, see references/rule.md.
Rule page: https://frontendchecklist.io/en/rules/seo/pagination
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | pass→pass | 8,181 | 5,226 | -36% | 1 | 1 | 0% | 1,543 | 1,608 | +4% | 0 | 0 | — |
case-02 | pass→pass | 12,513 | 8,968 | -28% | 1 | 1 | 0% | 2,408 | 2,338 | -3% | 0 | 0 | — |
case-03 | pass→pass | 14,728 | 8,516 | -42% | 1 | 1 | 0% | 2,485 | 2,207 | -11% | 0 | 0 | — |
case-04 | pass→pass | 12,961 | 7,131 | -45% | 1 | 1 | 0% | 2,512 | 2,011 | -20% | 0 | 0 | — |
case-05 | fail→pass | 9,125 | 7,465 | -18% | 1 | 1 | 0% | 1,852 | 2,187 | +18% | 0 | 0 | — |
case-06 | pass→pass | 14,580 | 8,560 | -41% | 1 | 1 | 0% | 2,593 | 2,214 | -15% | 0 | 0 | — |
case-07 | pass→pass | 9,727 | 6,882 | -29% | 1 | 1 | 0% | 1,773 | 1,966 | +11% | 0 | 0 | — |
case-08 | pass→pass | 8,411 | 5,649 | -33% | 1 | 1 | 0% | 1,481 | 1,628 | +10% | 0 | 0 | — |
case-17 | pass→pass | 6,945 | 6,261 | -10% | 1 | 1 | 0% | 1,444 | 1,967 | +36% | 0 | 0 | — |
case-09 | pass→pass | 9,951 | 6,063 | -39% | 1 | 1 | 0% | 1,804 | 1,732 | -4% | 0 | 0 | — |
case-10 | pass→pass | 9,584 | 4,679 | -51% | 1 | 1 | 0% | 1,815 | 1,477 | -19% | 0 | 0 | — |
case-11 | pass→pass | 12,644 | 8,405 | -34% | 1 | 1 | 0% | 2,187 | 2,149 | -2% | 0 | 0 | — |
case-12 | pass→pass | 9,976 | 5,887 | -41% | 1 | 1 | 0% | 1,901 | 1,782 | -6% | 0 | 0 | — |
case-18 | pass→pass | 9,372 | 6,737 | -28% | 1 | 1 | 0% | 1,803 | 1,922 | +7% | 0 | 0 | — |
case-13 | pass→pass | 10,491 | 7,092 | -32% | 1 | 1 | 0% | 1,987 | 1,891 | -5% | 0 | 0 | — |
case-14 | pass→pass | 10,685 | 7,838 | -27% | 1 | 1 | 0% | 1,986 | 2,106 | +6% | 0 | 0 | — |
case-15 | pass→pass | 8,804 | 7,375 | -16% | 1 | 1 | 0% | 1,502 | 1,921 | +28% | 0 | 0 | — |
case-16 | pass→pass | 7,939 | 5,778 | -27% | 1 | 1 | 0% | 1,426 | 1,669 | +17% | 0 | 0 | — |
case-19 | pass→pass | 12,987 | 10,451 | -20% | 1 | 1 | 0% | 2,382 | 2,668 | +12% | 0 | 0 | — |
case-20 | pass→pass | 9,070 | 6,693 | -26% | 1 | 1 | 0% | 1,658 | 1,849 | +12% | 0 | 0 | — |
case-21 | pass→pass | 5,354 | 4,456 | -17% | 1 | 1 | 0% | 1,143 | 1,410 | +23% | 0 | 0 | — |
case-22 | pass→pass | 5,051 | 3,873 | -23% | 1 | 1 | 0% | 996 | 1,298 | +30% | 0 | 0 | — |
case-23 | pass→pass | 13,646 | 7,347 | -46% | 1 | 1 | 0% | 2,295 | 1,963 | -14% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +4 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.