400 products, 24 indexed: the pagination problem
Infinite scroll and load-more buttons can hide most of your catalogue from Google. How to check yours in two minutes, and the canonical mistake that follows.
Ashraful
Shopify Select Partner

If you have a collection with 400 products and only the first 24 are ranking, this is usually why.
Pagination sounds like a design detail. It is actually the mechanism that decides whether Google ever sees most of your catalogue, and it goes wrong in a specific, common way that nobody notices because the store looks fine to a human.
What is going wrong
Your collection page shows 24 products, then a "load more" button or an infinite scroll that fetches the next batch as you scroll.
That is pleasant for a customer. For a search engine it can mean that products 25 through 400 do not exist, because Google's crawler does not scroll and does not click. If the only route to product 300 is a JavaScript interaction, that product may never be crawled, never indexed, and never appear in search.
You have 400 products and a catalogue that behaves, from Google's point of view, like it has 24.
How to check yours in two minutes
No code required.
Look for real links. Open your collection page and scroll to the bottom. If you see numbered page links, or a "next" link, hover one and check the address bar shows something like ?page=2. That is a real URL and Google can follow it.
If you only see a "Load more" button with no address, or the page just keeps extending as you scroll, that is the problem shape.
Ask Google directly. Search site:yourstore.com/collections/your-collection and see roughly how many pages come back. If you have 400 products and Google shows a handful of pages, something is stopping it.
Check Search Console. Pages report, look at Discovered but not indexed and Crawled but not indexed. A pile of product URLs sitting there is a crawling problem, not a content problem.
What correct looks like
The pattern that works keeps real, crawlable links even when the visible experience is a button.
{%- paginate collection.products by 24 -%}
{%- for product in collection.products -%}
{%- render 'product-card', product: product -%}
{%- endfor -%}
{%- if paginate.pages > 1 -%}
<nav class="pagination" aria-label="Pagination">
{%- if paginate.previous -%}
<a href="{{ paginate.previous.url }}" rel="prev">Previous</a>
{%- endif -%}
{%- for part in paginate.parts -%}
{%- if part.is_link -%}
<a href="{{ part.url }}">{{ part.title }}</a>
{%- else -%}
<span aria-current="page">{{ part.title }}</span>
{%- endif -%}
{%- endfor -%}
{%- if paginate.next -%}
<a href="{{ paginate.next.url }}" rel="next">Next</a>
{%- endif -%}
</nav>
{%- endif -%}
{%- endpaginate -%}
Those are real anchors with real URLs. Google follows them and reaches every product.
You can still have your load-more button. Build it as an enhancement over these links: the links exist in the HTML, and JavaScript intercepts the click to load in place. Customers get the smooth experience, crawlers get the paths. If the JavaScript fails, the links still work, which is a bonus.
The canonical mistake that follows
The second common error, and it is the one that quietly deletes pages 2 onwards from the index.
Someone sets the canonical tag on every paginated page to point at page one:
<!-- wrong -->
<link rel="canonical" href="{{ collection.url }}">
That tells Google "pages 2 through 17 are duplicates of page 1, ignore them." Google obliges. You built the crawlable links and then instructed Google to disregard where they lead.
Each page should be canonical to itself:
<link rel="canonical" href="{{ canonical_url }}">
Shopify's canonical_url already includes the page parameter and handles this correctly. Themes break it by overriding with something hand-written.
While you are there, page 2 onwards should not carry the same title tag and meta description as page 1. Appending the page number is enough and stops them competing:
<title>
{{ collection.title }}
{%- if paginate.current_page > 1 %}, page {{ paginate.current_page }}{% endif -%}
</title>
How many products per page
There is a trade-off and no universally right answer.
Fewer per page means faster loading and more pages for Google to crawl through, which on a large catalogue can mean the deepest products are several clicks from anywhere.
More per page means fewer clicks to depth but a heavier page, and 100 product images on one page is its own performance problem.
Practical range: 24 to 48 for most stores. Shopify's maximum is 50.
What matters more than the number is click depth. Every product should be reachable within about three clicks of the homepage. If your deepest product is on page 17, it is effectively invisible regardless of how correct your pagination markup is. That is a navigation and collection-structure problem, and the answer is usually more, tighter collections rather than fewer huge ones.
The things worth checking today
- Do your collection pages have real, hoverable page links, or only a button?
- Does each paginated page canonical to itself, or to page one?
- Is your deepest product within three clicks of the homepage?
- Does Search Console show product URLs stuck in Discovered but not indexed?
Any one of those going the wrong way is worth a developer's afternoon, and it affects your whole catalogue rather than a single page.
We fix collection crawlability as part of Shopify SEO and theme work, and it is one of the first things our audit checks, because a store with 400 products and 24 indexed is losing more traffic than any amount of blog writing will replace.
The free store audit checks your collection pagination, canonicals, and indexation, and reports back by email. Or book a 30 minute call and we will look at your collections together.
About the author
Ashraful
Shopify Select Partner, Top Rated Plus on Upwork. 700+ Shopify projects shipped over 7+ years: themes, apps, migrations, speed, Hydrogen. Solo shop, no agency middlemen.
Read the full storyWorking on a Shopify project?
That's what I do every day. Pick whichever feels lower-friction.
More from the blog
Keep reading

Kajabi to Shopify: moving courses and memberships
Courses are not products and entitlements are not order history. The three routes out of Kajabi, what each costs, and why the subscription migration is the risky part.
Read
The redirect map that protects your rankings in a migration
The one piece of migration work that decides whether you keep your traffic. Where the URL list comes from, the four mapping rules, and why redirecting to the homepage fails.
Read
WooCommerce to Shopify without losing your Google rankings
Rank loss on a migration is preventable, not luck. The seven steps that protect your traffic, including the content audit almost nobody does and the one change to never stack.
Read