The Infinite Scroll SEO Problem Nobody Talks About
On this page
Infinite scroll hides content from Google when the next batch of items loads only because someone scrolled. Google’s guide to pagination and incremental page loading says its crawlers don’t click buttons and generally don’t trigger JavaScript functions that require user actions to update the page. What they do follow is URLs in the href attribute of <a> elements. Build a hybrid: keep the scroll for people, and put a set of real, linked, self-canonical page URLs underneath it, so every item can be reached without scrolling.
What Google does with a scrolling list
Google’s JavaScript SEO basics describe link discovery at two points. Googlebot parses the server’s response for URLs in href attributes, and after rendering it parses the rendered HTML for links again. Links injected with JavaScript are fine, as long as they are real crawlable links.
What doesn’t happen is the scroll. Rendering runs the page’s scripts, but nothing scrolls the page, so a handler that appends items on scroll generally doesn’t run, and the items it would have added don’t appear in the rendered HTML.
You can see this directly. Inspect a listing URL in Search Console, open the rendered HTML, and count the items. If a visitor who scrolls sees 300 products and the rendered HTML holds 24, the other 276 are only reachable if another path leads to them.
Phantom pagination
One half-fix makes things look solved when they aren’t. A team makes ?page=2, ?page=3 and so on work as URLs, but nothing on the site links to them; the only way to reach them is the scroll. The URLs exist, but Google has no <a href> to follow to them. You carry the duplication and maintenance of pagination and get none of the crawl path. A paginated URL that nothing links to depends on another discovery route, such as a sitemap.
The hybrid: real pages under the scroll
Google’s pagination guide lists three practices. Two of them build the crawl path; the third keeps it clean:
- Link pages sequentially. Each page links to the next one with a normal
<a href>link. The guide also suggests linking from every page in the collection back to the first page. - Give each page its own URL, such as
?page=4. Google treats the URLs in a paginated sequence as separate pages. - Don’t index filtered or re-sorted versions of the same list.
Build the scroll on top of those pages. The scroll script can load page 5’s items when the visitor nears the end of page 4. Meanwhile the link to page 5 stays in the markup for any crawler, and for a visitor who wants to jump.
Google’s lazy-loading guide adds the pieces that keep the two in sync:
- Each chunk keeps the same content every time its URL loads. Number chunks absolutely, so page 12 stays page 12; a relative value such as “yesterday” changes meaning from day to day.
- When a new chunk becomes the main thing on screen, update the displayed URL with the History API, so a visitor who refreshes, shares or links gets the chunk they were looking at.
For product catalogs, the pagination guide also suggests a sitemap file or a Google Merchant Center feed as extra ways to help Google find every product.
Canonicals, fragments and rel=prev/next
Three details can break a paginated series; check each one:
- Canonical. Don’t point every page’s canonical at page one. Google’s guide says not to use the first page of a paginated sequence as the canonical, and to give each page its own. Page 3 canonicalizes to page 3.
- Fragments. Don’t put page numbers after a
#. The guide says Google ignores fragment identifiers, and may not follow a link to a next page that differs only by its fragment. - rel=prev/next. Google no longer uses these link elements, the guide says, though other search engines may. For Google, the
<a href>links carry the sequence.
The fragment point runs opposite to faceted navigation, where putting filters in fragments is a way to keep them out of crawling. For page numbers, that same behavior is exactly what you don’t want.
Order and data leaks
- Scroll order has to match page order. If the items a visitor scrolls past differ from what
?page=2returns, products can end up on no page Google can reach, or on two. The paginated URLs should return the same sequence the scroll shows. - Check what powers the scroll. Scroll scripts load items from somewhere, such as a JSON endpoint or an API route. Check whether those endpoints are crawlable URLs that return duplicate listing data, and decide deliberately whether they should be.
The cost to visitors
Infinite scroll affects the page experience as well as crawling, and these costs are easier to agree on with a UX team:
- Layout shift. Items injected without reserved space push content around. web.dev’s CLS guidance says sites should aim for a CLS of 0.1 or less for at least 75% of page visits.
- Responsiveness. Heavy scroll handlers compete with the main thread. web.dev’s INP guide sets good responsiveness at 200 milliseconds or less.
- The back button. Scroll deep, open a product, press back. If you land at the top of a reset list, the scroll position wasn’t preserved, and the visitor has to find their place again.
On the loading method itself: IntersectionObserver is one of the approaches Google’s lazy-loading guide lists, because it loads items when they become visible rather than waiting for a scroll event. It still doesn’t create the paginated URLs. The linked page structure is what gives Google a path to item 276.
Why the rendered HTML makes the case
“Infinite scroll is bad for SEO” sounds like an opinion, and a design team can reasonably push back on an opinion. The rendered HTML is harder to argue with. Show the item count in URL Inspection next to the count a scrolling visitor sees. Then the hybrid stops being a concession to SEO and becomes a fix for a page that ships part of its catalog where Google can’t reach it. The scroll stays, because the page links sit alongside it.
Frequently asked questions
Does Googlebot scroll the page to load more items?
No. Google says its crawlers don’t click buttons and generally don’t trigger JavaScript functions that need a user action. Content that arrives only on scroll generally isn’t in the rendered HTML. Check the item count there in URL Inspection.
Should every paginated page canonicalize to page one?
No. Google says not to use the first page as the canonical and to give each page its own canonical URL. Page 3 points to page 3.
Does Google still use rel=prev and rel=next?
No. Google’s pagination guide says it no longer uses these tags, although other search engines may. Sequential <a href> links are what show Google the series.