# Why Your Blog Has 200 Posts But Only Page 1 Is Indexed

Google deprecated rel=prev/next as a ranking signal in 2019, but it still uses the chain for discovery. More urgently: the canonical-to-page-1 anti-pattern — where every paginated page declares /page-1/ as canonical — silently de-indexes every deep page. The checker follows the chain up to 10 pages and validates every rule.

Author: J.A. Watte
Published: May 8, 2026
Source: https://jwatte.com/blog/blog-tool-pagination-sanity/

---

Your blog has 12 pages of content. Only page 1 shows up in Google. Pages 2 through 12 exist, are linked, have sitemaps entries, and never appear in search. The usual culprit isn't a crawl problem — it's the canonical-to-page-1 anti-pattern.

A template ships `<link rel="canonical" href="/blog/">` on every paginated page. Pages 2-12 all declare "my canonical is page 1." Google believes them, merges signals into page 1, and doesn't index the rest. The template author thought they were "deduplicating." They were deleting 90% of their blog from the index.

[Pagination Sanity Check](/tools/pagination-sanity/) follows the rel=next chain from page 1 up to 10 pages and validates every pagination rule.

## Six checks it runs

1. **Chain follows from page 1.** `rel=next` link exists and points at a live next page.
2. **No canonical-to-page-1 anti-pattern.** Each page should canonical to itself, not to page 1 (unless pages 2+ are deliberately noindexed).
3. **Pages self-canonical.** `<link rel="canonical" href="<this-page-url>">` — the most common correct pattern.
4. **No `?page=` inside canonical URLs.** A canonical with `?page=` is usually a bug; canonicals should be clean.
5. **rel=prev symmetric with rel=next.** Page 3's `prev` should point at page 2.
6. **No noindex on paginated pages.** Unless you specifically want deep pages out of the index.

## What the fix looks like

For a correct paginated series:

```html
<!-- Page 1 -->
<link rel="canonical" href="https://site.com/blog/">
<link rel="next" href="https://site.com/blog/page/2/">

<!-- Page 2 -->
<link rel="canonical" href="https://site.com/blog/page/2/">
<link rel="prev" href="https://site.com/blog/">
<link rel="next" href="https://site.com/blog/page/3/">
```

Every page canonical to itself. rel=next/prev forming a chain. No noindex. That's it.

## Why not just noindex the deep pages

Some SEO advice says "just noindex pages 2+." That works if the deep pages have no search value and only serve as archive navigation. For most blogs, deep pages do have search value — old posts ranking for long-tail keywords, each individually. Noindex kills that entirely.

The right default is: let paginated pages be indexable, each self-canonical, connected by rel=next/prev.

## Related reading

- [Index Coverage Delta](/tools/index-coverage-delta/) — what's actually indexed vs sitemap
- [Sitemap Audit](/tools/sitemap-audit/) — XML structure
- [Param Crawl-Waste](/tools/param-crawl-waste/) — `?page=` as crawl-waste

## Fact-check notes and sources

- Google on rel=next/prev deprecation: [developers.google.com/search/blog/2019/03/rel-next-and-prev](https://developers.google.com/search/blog/2019/03/rel-next-and-prev)
- Google canonicalization docs: [developers.google.com/search/docs/crawling-indexing/canonicalization](https://developers.google.com/search/docs/crawling-indexing/canonicalization)

---

*The $100 Network covers blog archive architecture at scale. Pagination sanity is the one check that prevents silent deep-page de-indexing.*


---

Canonical HTML: https://jwatte.com/blog/blog-tool-pagination-sanity/
RSS: https://jwatte.com/feed.xml
JSON Feed: https://jwatte.com/feed.json
Hero image: https://jwatte.com/images/blog-tool-pagination-sanity.webp
