// SEO plans from €35/hour or €395/month// from €35/hr · €395/mo Free SEO checker[email protected]+31 6 4555 9353
Free SEO audit
technical seo

Lazy Loading SEO: Do It Without Hiding Content

Lazy loading speeds pages up, but a faulty setup can keep content hidden from Google. This guide explains Google’s rule that everything must load when it enters the viewport, which techniques are safe, what not to lazy-load, how to handle infinite scroll, and how to test it.

  • Viewport loading rule
  • Safe techniques
  • Infinite scroll URLs
  • Test with URL Inspection
ruleviewport
enters viewport -> content loads
needs click or scroll -> Google
may never see it
// quick answer
Make sure all relevant content loads once it becomes visible in the viewport, using browser-native lazy loading, IntersectionObserver (with a polyfill) or a viewport-based library. Loading must not depend on user actions, because Google Search does not interact with your page. Do not lazy-load content users see on arrival. For infinite scroll, give each chunk a unique persistent URL, link them sequentially and update the address bar with the History API.

The risk

Lazy loading is a common performance and user experience practice, but a faulty setup can hide content from Google. Because Google Search does not scroll or click through your page, content gated behind a scroll or click event may never be seen.

Safe techniques named by Google

TechniqueNotes
Built-in browser lazy loadingFor images and iframes
IntersectionObserver APIUse a polyfill for older browsers
JavaScript libraryOne that loads content when it enters the viewport
<img src="photo.jpg" loading="lazy" width="800" height="600" alt="...">

The snippet is my own illustration of browser-native lazy loading. Setting width and height also helps avoid layout shift (my own note; see CLS).

What not to lazy-load

  • Do not lazy-load content users see immediately on arrival; it delays display and is noticeable (Google).
  • The main hero image that is often the LCP element is a likely case (my own application of that rule). See LCP.
  • Do not make loading depend on a user action such as scroll or click.

Infinite scroll and pagination

chunksSplit long content into chunks, each with its own persistent, unique URL
stableA URL returns the same content every time; use absolute page numbers, not relative filters like yesterday
linksLink chunk URLs sequentially so crawlers can find the full set
historyWhen a new chunk becomes the main content, update the address bar with the History API

See pagination SEO and JavaScript SEO basics.

How to test

  • Use the URL Inspection tool to confirm all content loads.
  • Check the rendered HTML for your content.
  • Confirm image and video URLs appear in the src attributes of img and video elements in the rendered HTML.

Set up lazy loading step by step

1
list

List below-the-fold images

Only those not visible on arrival.

below fold
2
exclude

Exclude the hero image

Load it normally.

hero
3
apply

Apply native lazy loading

loading=lazy on images and iframes.

loading=lazy
4
size

Set dimensions

Width and height to avoid shifts.

width/height
5
inspect

Inspect rendered HTML

All image src values present.

URL Inspection
6
measure

Check Core Web Vitals

Confirm no regressions.

CWV

Performance notes

Google’s page frames lazy loading as a performance practice. Over-lazy loading can hurt LCP, so keep above-the-fold images eager (my own note). See image SEO and Core Web Vitals for WordPress.

Notes for WordPress sites

  • WordPress adds loading=lazy by default to many images (my own note); check that the hero image is not affected.
  • Optimisation plugins may replace src with data attributes; verify the rendered HTML still has real src values.
  • Sliders and tabs that load content only on interaction need review.

Troubleshooting

SymptomLikely cause (my own diagnosis)Action
Images missing in Google Imagessrc not in rendered HTMLFix loader or use native lazy loading
Content below fold not indexedLoads only on scroll eventLoad on viewport entry
Slow LCPHero image lazy-loadedLoad it eagerly
Infinite scroll items unreachableNo chunk URLsAdd paginated URLs

Checklist

Rules

  • Loads on viewport entry
  • No click gating
  • No scroll-event gating
  • Hero loads eagerly

Images

  • Real src in rendered HTML
  • Width and height set
  • Alt text present
  • Native lazy loading

Infinite scroll

  • Unique chunk URLs
  • Sequential links
  • Stable content
  • History API updates

Test

  • URL Inspection
  • Rendered HTML
  • CWV after change
  • Recheck after plugins

What Google’s page does not say

It does not give a scripted test, noscript fallbacks, structured data or image sitemap guidance, viewport sizes or timing thresholds, specific library recommendations, or lazy-loading advice for content other than images, iframes and video.

Key terms

Lazy loading
Loading content only when needed.
Viewport
The visible part of the page.
IntersectionObserver
Browser API detecting visibility.
History API
Updates the URL without reload.

Common mistakes

mistake 1

Click-gated content

Google does not click.

Load on viewport.
mistake 2

Lazy-loading the hero

Delays display.

Load eagerly.
mistake 3

Missing src in HTML

Images not seen.

Check rendered HTML.
mistake 4

Infinite scroll without URLs

Content unreachable.

Add chunk URLs.
mistake 5

Relative page filters

Unstable content.

Use absolute page numbers.
mistake 6

Not testing

Hidden issues.

Use URL Inspection.

Related guides

faq

Lazy loading questions

Does lazy loading hurt SEO?

Only when set up so content does not load without user action.

Which methods are fine?

Browser built-in lazy loading, IntersectionObserver with a polyfill, or a viewport-based library.

Does Google scroll?

Google Search does not interact with your page.

What should I not lazy-load?

Content users see immediately on arrival.

How do I do infinite scroll safely?

Use unique chunk URLs, link them sequentially and update the address bar with the History API.

How do I test?

URL Inspection and rendered HTML; confirm image URLs are in src attributes.

Can I use page filters like yesterday?

No. Use absolute page numbers.

Does Google cover noscript?

Not on the page I used.

sources

The viewport rule, techniques, infinite scroll guidance and tests come from Google’s page. The hero-image application, code sample, WordPress notes, troubleshooting and checklists are my own.

Scroll to Top