Skip to content

Collections

Shopify collection pagination: the ?page=N URL pattern

Published

How Shopify paginates collections

Shopify paginates collection pages using a ?page=N query parameter. A collection with 96 products and a 24-products-per-page theme setting will paginate as /collections/handle (page 1), /collections/handle?page=2, /collections/handle?page=3, /collections/handle?page=4. Pagination is theme-controlled — the products-per-page count lives in the theme settings or the collection section settings. Themes render explicit page-number links at the bottom of the grid; some themes use infinite scroll instead, which has its own crawl-budget implications.

The pagination URL is not blocked by Shopify's default robots.txt — only the filter URL pattern (/collections/*+*) is2. Paginated URLs are crawlable, indexable, and counted against the collection's crawl-budget. The auto-canonical fires on each paginated URL — page 2's canonical is page 2, not page 1.

The ?page=N URL pattern

Shopify uses the ?page=N query parameter convention across collections, blogs (article pagination), and search results. The bare collection URL (/collections/handle) is page 1 by default. /collections/handle?page=1 also renders page 1 — both URLs serve the same content. Themes should canonical /collections/handle?page=1 back to /collections/handle to avoid a self-duplicate. Most modern themes do this; older custom themes sometimes don't.

A quick audit: open /collections/handle?page=1 directly. View source. The canonical should point to /collections/handle (no ?page=1). If it points to /collections/handle?page=1, your theme has a duplicate-canonical issue worth fixing.

rel=next and rel=prev — retired in 2019, irrelevant in 2026

Google deprecated rel='next' and rel='prev' link markup as an indexing signal in 2019 — John Mueller confirmed Google had stopped using the markup years earlier. Some Shopify themes still emit the markup in the head (it doesn't hurt), but it doesn't help either. Pagination is now a crawl-budget heuristic: Google follows the page links it finds, decides how deep to crawl, and consolidates pages into the collection's overall ranking based on content signals.

What this means for Shopify owners: don't worry about whether your theme emits rel=next/prev. Worry about whether Google can find the deeper pages at all. Themes with explicit page-number links at the bottom of the grid (1, 2, 3, ... Next) are crawlable. Themes with infinite scroll that loads via JavaScript on scroll are harder for Googlebot to reach deeper pages on.

Canonical behaviour across paginated pages

Shopify auto-canonicals every page to its own URL. /collections/handle?page=2 canonicals to /collections/handle?page=2 — not back to page 1. This is the correct behaviour: page 2 contains different products from page 1, so consolidating them via canonical would hide deeper products from Google. The trade-off: the title tag and meta description duplicate across paginated pages unless your theme appends 'Page N' to the title. Most themes don't.

Shopify's SEO overview1 documents the auto-canonical behaviour without distinguishing pagination. The duplicate title-tag issue on paginated collections is real but not catastrophic — Google handles it via crawl-budget rather than indexing every paginated page identically. If you want page-N titles ('Linen Curtains — Page 2 of 4'), the theme code edit lives in main-list-collections.liquid3 via the paginate Liquid tag's current_page property.

Infinite scroll vs paged — the crawl-budget trap

Some Shopify themes implement infinite scroll instead of explicit pagination — products load via JavaScript as the buyer scrolls. The UX win: smoother browsing. The SEO cost: Googlebot doesn't scroll. Without crawlable page links, the deeper products on a long collection become functionally invisible to indexing. Themes that combine the two (visible page links at the bottom AND infinite scroll for interactive users) ship both wins.

The audit: View Source on a long collection (50+ products). Look for explicit <a href="?page=2">-style links near the bottom of the rendered HTML. If they're absent, your theme is JS-loading the pagination and Googlebot is missing the deeper pages. Fix: switch to a theme variant with explicit pagination links, or modify the collection section to emit both the infinite-scroll UX and the crawlable links in the noscript fallback.

The pagination audit

Walk this on every collection with 50+ products. (1) Click into page=2 in a private window. (2) Confirm the canonical points to ?page=2 (not back to bare URL). (3) View source for explicit page-link <a> tags near the bottom of the grid. (4) Check whether the title and meta description differ from page 1. (5) Use GSC's URL Inspection on a deeper page to confirm Google can reach and render it.

  1. Navigate to /collections/handle?page=2 in a private window.
  2. View source. Confirm <link rel="canonical" href=".../collections/handle?page=2">.
  3. Look for explicit <a href="?page=N"> links near the bottom of the grid HTML.
  4. Check title and meta description — duplicate across pages is acceptable but page-N variants are better.
  5. Use Google Search Console > URL Inspection on ?page=3 or deeper. Confirm 'URL is on Google'.
  6. If infinite scroll is in use, confirm noscript fallback exposes crawlable links.

The single highest-value fix on most stores: when a collection has 100+ products and only the first 24 are indexed because the theme is JS-loading the rest. Switch the theme block to explicit pagination and watch the deeper products get crawled within Shopify's 48-72hr automatic indexing window3.