Skip to main content

Documentation Index

Fetch the complete documentation index at: https://voyager-theme.fasil.in/llms.txt

Use this file to discover all available pages before exploring further.

The collection page (templates/collection.jsonsections/main-collection.liquid) supports three pagination modes. Pick whichever fits your editorial pacing and the visitor behaviour you want to encourage. The default is numbered pagination because it preserves a deliberate reading pace — important for editorial-led catalogs where every product is meant to be considered.

The three modes

ModeBehaviourWhen to use
Pagination (default)Numbered page links at the bottom of the grid. Visitor clicks 2, 3, etc. to load the next page.Editorial catalogs, small-to-medium catalogs (≤ 50 products), brands where deliberate browsing is part of the voice.
Load moreA single Load more pieces button at the bottom. Click to append the next page in place — no full reload.Medium catalogs (50–200 products), wellness/beauty merchants whose customer expects a smooth scroll.
Infinite scrollNew pages auto-load as the visitor scrolls within ~600px of the bottom. No button, no clicks.Large catalogs (200+ products), high-discovery brands where the goal is to keep the visitor browsing.

Switching modes

Theme Customizer → Theme settings → Collection pagination.
SettingDefaultWhat it does
Pagination modeNumbered paginationSwitches between the three modes.
Load more button labelLoad more piecesText on the load-more button. Used in load_more mode.
End-of-list messageYou have reached the end.Shown after the last page is loaded. Used in load_more and infinite_scroll modes.
The setting takes effect on every collection page automatically — no per-collection configuration needed.

How it works under the hood

All three modes use the same Liquid {% paginate collection.products by per_page %} block. The difference is in what renders below the grid:
  • Pagination → renders {{ paginate | default_pagination }} — Shopify’s standard numbered nav.
  • Load more → renders a <button> with data-plp-loadmore + data-next-url attributes. JS in assets/infinite-scroll.js intercepts the click, fetches the next URL via fetch(), parses out the next page’s product cards ([data-plp-grid]), and appends them to the existing grid.
  • Infinite scroll → same as load-more, but JS hides the button and uses an IntersectionObserver with rootMargin: '600px 0px' to auto-trigger the fetch when the sentinel scrolls into view.
After each fetch, the data-next-url attribute is advanced to whatever the freshly loaded page’s next-link is. When that becomes empty, the end-of-list message renders and further loading stops.

SEO considerations

ModeSEO impact
PaginationBest for SEO. Each page is a distinct URL with its own canonical, crawlable by search engines.
Load moreNeutral. The initial page is fully crawlable; appended content isn’t indexed at deeper pages but the products themselves are reachable via their own PDP URLs.
Infinite scrollSame as load more, with a slight risk of users feeling “lost” without a back-to-top reference. The theme ships a back-to-top button to mitigate this — make sure it’s enabled in Theme settings → Animation → Show back-to-top button.

Mixing modes

The setting is global — every collection page uses the same mode. If you need different behavior per collection (e.g. infinite scroll on /collections/all but pagination on curated edits), Voyager doesn’t ship that per-collection override out of the box; ask via the support form if you need it.

Implementation notes

  • Section: sections/main-collection.liquid lines ~214–245 (paginate block)
  • JS: assets/infinite-scroll.js — loaded conditionally only when the mode is load_more or infinite_scroll (gated by {%- if settings.collection_pagination_mode == 'load_more' or settings.collection_pagination_mode == 'infinite_scroll' -%} at the bottom of the section)
  • Styling: .plp-loadmore__* block at the end of assets/premium.css
  • Theme settings: new “Collection pagination” group in config/settings_schema.json