Audit my site
Technical SEOIntermediateChecked against Google docs · Oct 2026

Pagination and filters: crawlable lists without a flood of filter URLs

Long lists need more crawlable links so Google can reach every item. Filters need fewer, because every combination becomes a new URL. This lesson covers both, with Google's own rules for each.

Author: Eugene Serbin, Head of SEO at Semalt Updated: 30 October 2026 Reading time: 23 min Visuals: 5

In short

Google finds the items in a long list only by following real <a href> links. It does not click "Load more" buttons and does not scroll, so every page or chunk of a list needs its own URL, a link from the previous page and a self-referencing canonical. Filters are the opposite problem: they create far more URLs than anyone needs, so you decide which few filter pages deserve to be indexed and keep Google from crawling the rest.

Why lists, pagination and filters are an SEO problem

Long lists are everywhere: category pages in a shop, blog archives, internal search results, product reviews, comments under an article. Showing everything at once is slow, so sites split lists into pages, load more items on request or let users narrow the list with filters. Each of these choices has SEO consequences, and they fall into two separate problems.

Problem one: content Google cannot reach. If page 2 of a category is only reachable through a JavaScript button, or if items load only when someone scrolls, Googlebot may see the first 24 products and nothing else. Products and posts that are linked only from deep in the list are discovered late or not at all.

Problem two: URLs that multiply. Every filter, sort order and view option can create a new URL that shows almost the same list. A shop with a handful of filters can produce thousands of such URLs from one category. Google crawls them before it can tell they are useless, which costs your server resources and delays the crawling of pages that matter. Many of them also end up as duplicates or near-empty pages in the index.

Pagination needs more crawlable links. Faceted navigation needs fewer. Most mistakes come from confusing the two.

What Google officially says

“Google generally crawls URLs found in the href attribute of <a> elements. Google's crawlers don't "click" buttons and generally don't trigger JavaScript functions that require user actions to update the current page contents.”

Google Search Central — Pagination, incremental page loading, and their impact on Google Search

“Don't use the first page of a paginated sequence as the canonical page. Instead, give each page its own canonical URL.”

Google Search Central — Pagination, incremental page loading, and their impact on Google Search

“Give each chunk its own persistent, unique URL.”

Google Search Central — Fix lazy-loaded content (infinite scroll)

“If you don't need the faceted navigation URLs potentially indexed, prevent crawling of these URLs.”

Google Search Central — Managing crawling of faceted navigation URLs

Google describes the cost of faceted navigation in two points. Each is a direct quote:

On rel="prev" and rel="next", which many guides still recommend, Google is direct: “Google no longer uses these tags, although these links may still be used by other search engines.”

Pagination, load more or infinite scroll

Google describes three ways to show part of a long list. Pagination uses "next", "previous" and page-number links, one page of results at a time. Load more is a button that adds the next batch to the current page. Infinite scroll loads more content when the user reaches the end of the page.

PatternStrength for usersWeakness for usersWhat Googlebot needs
Pagination“Gives users insight into result size and current position”“Viewing more requires new page loads”Plain <a href> links between pages. Works out of the box when done right.
Load moreOne page for all content; can show the total count near the button“Can't handle very large numbers of results as all of the results are included on a single web page”A real link to the next page behind the button. Without it, Google sees only the first batch.
Infinite scrollOne page, the user just keeps scrolling“Can lead to "scrolling fatigue" because of unclear result size”Paginated URLs behind the scroll, linked sequentially. Google does not scroll.

Whichever pattern you choose, Google's crawling rule is the same: it follows links found in the href of <a> elements. For a shop, Google also suggests a second route: “consider using a sitemap file or a Google Merchant Center feed to help Google find all of the products on your site.” A sitemap helps discovery, but it does not replace crawlable links inside the list.

Pagination best practice

Diagram · How paginated pages should link
Pagination link structure Four paginated category pages: /shoes/, /shoes/?page=2, /shoes/?page=3 and the last page. Each links to the next one with an a href link, every later page links back to page 1, and each page has a canonical pointing to itself. PAGE 1PAGE 2PAGE 3LAST PAGE /shoes//shoes/?page=2/shoes/?page=3/shoes/?page=9 canonical: itselfcanonical: itselfcanonical: itselfcanonical: itself items 1–24items 25–48items 49–72last items + category intro nextnext… every page also links back to page 1 Arrows are ordinary <a href> links in the HTML, not buttons or JavaScript events. Page numbers and item counts are illustrative.
Each page has its own URL, links forward to the next page, links back to page 1 and canonicalises to itself.

Give each page a unique URL

Google's instruction is “Give each page a unique URL.” It suggests a query parameter: “include a ?page=n query parameter, as URLs in a paginated sequence are treated as separate pages by Google.” A path such as /shoes/page/2/ works just as well. Pick one format and use it everywhere: in links, canonicals and the sitemap.

Link pages sequentially

Google recommends that you “include links from each page to the following page using <a href> tags. This can help Googlebot (the Google web crawler) find subsequent pages.” The pager must be in the HTML the server sends, as normal links. A pager built from <span onclick> elements, or one that only appears after a click, is invisible to the crawler.

Numbered links (1, 2, 3 … 9) are better than "next" alone, because they shorten the path to deep pages. With only "next", page 20 is twenty clicks away from the category.

Link back to the first page

Google adds: “consider linking from all individual pages in a collection back to the first page of the collection to emphasize the start of the collection to Google.” “This can give Google a hint that the first page of a collection might be a better landing page than other pages in the collection.” A "1" link in the pager or a breadcrumb to the category does this.

Self-referencing canonical on every page

Page 2 shows different items from page 1, so it is not a duplicate of page 1. A canonical from page 2 to page 1 asks Google to treat them as the same page, and the items linked only from page 2 lose their crawl path. Give each page a canonical to itself:

<!-- on https://example.com/shoes/?page=2 -->
<link rel="canonical" href="https://example.com/shoes/?page=2">

No # fragments for page numbers

“Don't use URL fragment identifiers (the text after a # in a URL) for page numbers in a collection.” The reason, in Google's words: “If Googlebot sees a URL to the next page that only differs by the text after the #, it may not follow the link, thinking it has already retrieved the page.” /shoes/#page=2 is the same URL as /shoes/ for Google.

rel="prev" and rel="next"

Google no longer uses them. You do not need to add them, and removing them changes nothing in Google. Other search engines may still read them, so leaving existing tags in place does no harm. What Google relies on is the visible links between pages.

Titles and descriptions of paginated pages

Google normally recommends distinct titles, but makes an exception here: “pages in a paginated sequence don't need to follow this recommendation. You can use the same titles and descriptions for all pages in the sequence. Google tries to recognize pages in a sequence and index them accordingly.” Adding "– Page 2" to the title is still a common, harmless habit that helps users who have several tabs open. Keep the category introduction text on page 1 only; repeating it on every page adds nothing.

The page 1 duplicate

Many CMSs make the first page available at two URLs: /shoes/ and /shoes/page/1/ (or /shoes/?page=1). That is a plain duplicate. Page 1 should live only at the clean category URL. Redirect /page/1/ and ?page=1 with a 301 to https://example.com/shoes/, and make the "1" link in the pager and every "back to page 1" link point to the clean URL.

Page numbers that do not exist

If the category has nine pages, /shoes/?page=50 should return HTTP 404, not an empty list with status 200 and not a redirect to page 1. Google lists “nonexistent pagination URLs” among the URLs that should return 404. The same applies when products sell out and the last pages disappear.

Speed between pages

Google suggests: “Consider using preload, preconnect, or prefetch to optimize the performance for a user moving to the next page.” This is a user experience improvement; it does not change how Google crawls the series.

Code · Pager markup, wrong vs correct

✕ Google cannot follow this

<!-- on /shoes/?page=2 -->
<link rel="canonical"
      href="https://example.com/shoes/">

<a href="#page=3">3</a>
<button onclick="loadPage(4)">
  Next</button>
<a href="/shoes/page/1/">1</a>
  • Canonical to page 1
  • Page number in a fragment
  • "Next" is a button, not a link
  • Link to the page 1 duplicate

✓ Crawlable

<!-- on /shoes/?page=2 -->
<link rel="canonical"
      href="https://example.com/shoes/?page=2">

<a href="/shoes/">1</a>
<a href="/shoes/?page=3">3</a>
<a href="/shoes/?page=3">Next</a>
  • Canonical to itself
  • Real URLs in href
  • Page 1 at the clean category URL
The left pager looks fine to users, but every link that matters to Googlebot is either missing or points to the wrong URL.

Should deep paginated pages be noindex?

Some sites add noindex to page 2 and beyond, so that only page 1 appears in search. It works for its narrow purpose, but it has a cost that is easy to miss.

The safer default is to keep paginated pages indexable with self-referencing canonicals. If deep pages are a problem, fix the structure instead:

A "view all" page is an option only for small lists that load quickly. For large categories it brings back the performance problem pagination was meant to solve.

Keep noindex for list variations that are genuinely useless in search: sort orders, view modes, items-per-page options. Google names this use itself: “To avoid indexing variations of the same list of results, block unwanted URLs from being indexed with the noindex robots meta tag or discourage crawling of particular URL patterns with a robots.txt file.”

Infinite scroll and load more done crawlably

The rule for both patterns is the same: build normal pagination underneath, then add the scrolling or the button on top with JavaScript. Google puts it this way: “Google Search does not interact with your page.” What users get as one long page, Google must be able to reach as a series of ordinary URLs. Google's checklist for infinite scroll:

  1. Persistent URLs. “Give each chunk its own persistent, unique URL.”
  2. Stable content per URL. “Ensure that the content shown on each URL remains the same every time it's loaded in a browser.” Use absolute page numbers such as ?page=12. “Avoid using relative elements like ?date=yesterday in these URLs.”
  3. Sequential links. “Link sequentially to the individual URLs so that search engines can discover the URLs in a paginated set.” Keep these links visible and usable, for example a pager at the bottom of the page.
  4. An updated address bar. When a new chunk becomes the main visible part of the page, “update the displayed URL using the History API.” Users can then refresh, share and link to the part of the list they are looking at.
// when chunk 3 scrolls into view
history.pushState(null, "", "/shoes/?page=3");

For a "Load more" button, the simplest crawlable version is a real link that JavaScript enhances. Crawlers see a link to page 2; users who click get the next batch added in place:

<a href="/shoes/?page=2" class="load-more">Load more shoes</a>
<!-- JavaScript intercepts the click, fetches page 2 and appends it -->

Then test it. Open the page in URL Inspection in Search Console, view the rendered HTML and check that the links to the next page are there. Then open /shoes/?page=2 directly in a browser: it must work as a standalone page with its own items.

How faceted navigation explodes into URLs

Faceted navigation is the set of filters on a listing page: colour, size, brand, price, rating and so on. Google calls it “a popular and useful feature” for visitors, but notes that its most common implementation, which is based on URL parameters, “can generate infinite URL spaces”. A typical filter URL looks like this:

https://example.com/shoes/?color=red&size=9&brand=acme

Change any value and the URL changes. The number of URLs is the product of all the options, not the sum.

Illustration · How three filters multiply
Filter combinations multiplying into URLs Illustrative example: colour with 8 values plus not set gives 9 options, size 6 plus 1 gives 7, brand 5 plus 1 gives 6. 9 times 7 times 6 is 378 filter URLs from one category. Four sort orders make it 1,512. Multi-select filters and different parameter orders multiply it again. COLOURSIZEBRAND 8 values6 values5 values + not set = 9+ not set = 7+ not set = 6 ××= 378 URLs from one category page × 4 sort orders = 1,512 URLs ONE OF THEM /shoes/?color=red&size=9&brand=acme&sort=price Multi-select filters (red and blue), price ranges and a different parameter order multiply it again. Illustrative numbers
Three modest filters on one category already produce hundreds of URLs; a real shop has many categories and more filters.

The same list also reappears at new URLs through parameters that are not filters at all: sort orders (?sort=price), view modes (?view=grid), items per page (?limit=48) and tracking tags. None of these should ever be indexable.

The damage is the one Google describes: overcrawling and slower discovery. Google also warns that “crawling faceted URLs tends to cost sites large amounts of computing resources due to the sheer amount of URLs and operations needed to render those pages.” On top of that, many combinations show the same few products or none at all, so the index fills with near-duplicate and empty pages. There is no penalty for this, but signals get split and the pages you care about are crawled later.

One thing has changed for good: Search Console's URL Parameters tool has been retired. You cannot tell Google how to treat parameters from the outside any more. Control has to happen on the site itself.

Your options for filter URLs

Google first asks one question: do you need these URLs in search at all? If not, it recommends preventing crawling, and gives two main ways to do it. It then mentions two weaker signals, and its pagination guide adds noindex for list variations.

robots.txt disallow for filter parameters

Google's view: “Oftentimes there's no good reason to allow crawling of filtered items, as it consumes server resources for no or negligible benefit; instead, allow crawling of just the individual items' pages along with a dedicated listing page that shows all products without filters applied.” Its example file:

user-agent: Googlebot
disallow: /*?*products=
disallow: /*?*color=
disallow: /*?*size=
allow: /*?products=all$

The /*?*color= pattern matches the parameter anywhere in the query string, whatever its position. Things to know before you use it:

Filters in URL fragments

“Google Search generally doesn't support URL fragments in crawling and indexing.” So if your filters change only the part after #, for example https://example.com/shoes/#color=red&size=9, Google sees just /shoes/. In Google's words, a fragment-based filter “will have no impact on crawling (positive or negative).” This is clean for filters you never want in search, but it also means none of those filter states can ever rank.

rel="canonical" to the unfiltered page

A filtered URL can point its canonical to a broader version, for example from ?color=red&size=9 back to the category. According to Google, this “may, over time, decrease the crawl volume of non-canonical versions of those URLs.” The words "may" and "over time" matter: Google still has to crawl the filter URLs to read the tag, and the canonical is a hint. It also only makes sense where the filtered page is close enough to the target to count as a duplicate. It is a good choice when the filtered URLs have external links or traffic you want to consolidate.

rel="nofollow" on filter links

Adding nofollow to filter links can help, but Google warns that “every anchor pointing to a specific URL must have the rel="nofollow" attribute in order for it to be effective.” One link without it, in a breadcrumb, a sitemap or another site, is enough for the URL to be crawled.

Google sums up both: “these methods are generally less effective in the long term than the previously mentioned methods.”

noindex robots meta tag

Google's pagination guide lists noindex for filtered and sorted versions of a list. It reliably keeps those URLs out of search results. It does not reduce crawling, because Google has to fetch each page to see the tag. Use it when the URLs must stay crawlable, for example while you clean up indexed filter URLs, or when you cannot express the pattern in robots.txt.

Table · Options for filter URLs compared
MethodSaves crawlingKeeps out of the indexConsolidates signalsMain trade-off
robots.txt disallowYesMostly; a blocked URL can still be indexed without its contentNoGoogle cannot see noindex or canonical on blocked URLs; does not clean up URLs already indexed
URL fragments (#)Yes; no new URLs existYesNot neededFilter states can never be indexed or ranked
rel="canonical"Only graduallyUsually; it is a hintYesGoogle calls it less effective in the long term; pages are still crawled
rel="nofollow"PartlyNoNoWorks only if every link to the URL has it; less effective in the long term
noindexNoYesNoThe page must be crawled to see the rule; never combine with a robots.txt block
robots.txt and fragments control crawling; canonical, nofollow and noindex only influence what happens after a URL is found.

A practical combination for most shops: filter links that should not be indexed point to parameter URLs blocked in robots.txt (or use fragments), sort and view options never appear as crawlable links, and a small set of chosen facet pages get clean, indexable URLs.

Which facets deserve indexable landing pages

Some filter combinations match what people actually search for: "red running shoes", "nike running shoes", "waterproof hiking boots". Blocking all facets throws that demand away. The trick is to choose these pages deliberately instead of letting the filter system decide.

Decision tree · Should this filter page be indexable?
Deciding whether a facet page should be indexable If the parameter only sorts, changes the view or page size, keep it out of the index. If nobody searches for the combination, block or canonicalise it. If there are too few products, point it to the parent category. If it combines more than one or two facets or the results change all the time, block or canonicalise it. Otherwise build an indexable landing page with a static URL, its own title, H1 and intro, a self canonical, internal links and a sitemap entry. YesNoNoNo NoYesYesYes Does it only sort, change theview or the number per page? Do people search for thiscombination? Are there enough productsfor a useful page? One or two facets, withfairly stable results? Never indexableNot indexableNot indexableNot indexable no crawlable links; noindex or blockblock, fragment or canonicalcanonical to the parent categoryblock, fragment or canonical Indexable landing page static URL, own title, H1 and intro, self canonical, linked, in sitemap
Only a small share of filter combinations pass every question; those become real landing pages, the rest stay out of the index.

For each combination that passes, build it like a real category page:

  1. Confirm demand in keyword research or in Search Console queries for the parent category.
  2. Give it a clean, static URL, such as https://example.com/running-shoes/red/, instead of ?color=red. A separate URL format also makes it easy to keep the robots.txt rules for parameters intact.
  3. Write a unique title, H1 and short intro for that combination ("Red running shoes"), not the parent category text.
  4. Use a self-referencing canonical and list the URL in the XML sitemap.
  5. Link to it internally from the parent category, menus or related guides, with plain <a href> links.
  6. Paginate it like any category if it has more products than fit on one page.

Everything else stays non-indexable. The most effective way is not to produce crawlable links to those combinations in the first place.

Rules for facet URLs you let Google crawl

If you decide that some filter URLs may be crawled and indexed, Google lists rules to keep the damage small. Remember its warning: “Keep in mind that having these URLs crawled means an increased resource usage on your server and, potentially, slower discovery of new URLs on your site.”

&

“Use the industry standard URL parameter separator '&'.” Commas, semicolons and brackets “are hard for crawlers to detect as parameter separators”.

fixed order

For filters in the path, such as /products/fish/green/tiny, Google asks you to “ensure that the logical order of the filters always stays the same and that no duplicate filters can exist.” Apply the same discipline to parameters: always ?color=red&size=9, never also ?size=9&color=red.

404

“Return an HTTP 404 status code when a filter combination doesn't return results.” The same goes for “duplicate filters or otherwise nonsensical filter combinations, and nonexistent pagination URLs.”

no redirect

“if a filter combination has no results, don't redirect to a common "not found" error page. Instead, serve a "not found" error with the 404 HTTP status code under the URL where it was encountered.”

one URL format

Internal links, canonicals and the sitemap all use the same parameter order and the same lowercase values.

Google notes one exception: on a single-page app, returning a real 404 for each combination might not be possible, and the separate best practices for single-page apps apply.

Check how your lists and filters are crawled

OurSEO Tools crawls up to 1,000 pages and records the status code, canonical and indexability of every URL, so you can spot parameter URLs, page 1 canonicals and empty pages returning 200 in one run.

69-point checklistTechnical crawlContent analysis

Common mistakes

How to audit pagination and filters step by step

  1. Crawl the site and group the URLs found by parameter (page, color, sort and so on). An unexpectedly large group is your first lead.
  2. Check Search Console. In the Crawl stats report, look at which URLs Googlebot spends its requests on. In the Page indexing report, look for parameter URLs under statuses such as "Duplicate without user-selected canonical" and "Crawled - currently not indexed".
  3. Check paginated pages in the raw HTML: self-referencing canonical, pager built from <a href> links, no page numbers in fragments.
  4. Request /page/1/ and ?page=1 and confirm they 301 to the clean category URL.
  5. Request a page number past the end and a filter combination with no results. Both should return 404 at that URL, not a redirect.
  6. Test load-more and infinite-scroll pages in URL Inspection: the rendered HTML should contain links to the next page, and each page URL should work on its own.
  7. Compare robots.txt with your parameter list. Every filter, sort and view parameter you do not want crawled is covered; pagination and chosen landing pages are not.
  8. Check the sitemap: it should list canonical category pages, chosen facet landing pages and item pages, and no sort, view or random filter URLs.

OurSEO Tools can cover part of this in one run. Its 69-point checklist includes indexation, URLs and duplicates, redirects and internal linking, and its technical crawl of up to 1,000 pages records the status code, canonical, indexability and load time of every URL, which makes parameter URLs, wrong canonicals on paginated pages and empty pages returning 200 easy to spot.

FAQ

Should paginated pages have a canonical to page 1?

No. Google says: “Don't use the first page of a paginated sequence as the canonical page. Instead, give each page its own canonical URL.” Every page in the series shows different items, so each one points to itself.

Do I still need rel="prev" and rel="next"?

Not for Google, which no longer uses them. Other search engines may still read them, so existing tags can stay. What Google needs is normal links from each page to the next.

Should I noindex page 2 and beyond?

Usually not. It saves no crawling, and over time Google may follow the links on those pages less, which can hide deep products. Keep paginated pages indexable with self-referencing canonicals, and use noindex for sort and view variations instead.

Is infinite scroll bad for SEO?

Not if there is normal pagination underneath: a persistent URL for each chunk, sequential links between them and the address bar updated with the History API. Without that, Google sees only the first chunk, because it does not scroll.

robots.txt or canonical for filter URLs?

If you do not need filter URLs in search, Google prefers preventing crawling: robots.txt rules or filters in fragments. A canonical to the unfiltered page reduces crawling only gradually and Google calls it less effective in the long term, but it does consolidate signals if filter URLs already have links or traffic.

What should an empty filter page return?

HTTP 404 at the same URL. Google asks for 404 for filters with no results, duplicate or nonsensical filters and page numbers that do not exist, and says not to redirect them to a common error page.

Sources

Quotes checked against the official pages on 30 October 2026.