Decide what is needed now, not what appears early in markup
Lazy loading marks a resource as non-critical until needed. Classify by the actual journey: first-view essentials, below-the-fold media, optional embeds, and code for a later route or panel. CMS position is not enough evidence; an image can be offscreen in one template and central to another.
Review cold loads on a small phone and a typical desktop. Also test campaign links and in-page anchors, which can land a visitor farther down the page. That review tells you what must be ready without a scroll-triggered request.
The initial task, visible navigation, key copy, and first meaningful visual should be available immediately.
Lower-page galleries, maps, social embeds, offscreen players, and code for unchosen features are common candidates.
Protect the hero and the initial viewport
Do not lazy-load content likely to be visible when the page opens. Google cautions against it, and web.dev’s focused analysis shows that lazy-loading initial-viewport images can delay LCP. The LCP element may be a hero, product image, poster, or text; verify it on each important template instead of guessing.
Load a confirmed LCP image eagerly. If testing shows a discoverable critical image loses network attention, test a high fetch-priority hint for it. It is a hint, not a command. A critical CSS background image may need an early preload because the parser cannot discover it directly; measure that case.
Check CMS and plugin defaults for featured images that are incorrectly marked lazy on listing pages.
Use cold mobile and desktop loads, not just a desktop design preview.
Reserve space before media arrives
Cumulative Layout Shift, or CLS, is unexpected movement of visible content. A deferred image with no known height can push text and controls after a reader begins scanning or reaches for a button. That is an interaction risk, not merely a metric issue.
Provide accurate width and height attributes for images and video, or reserve the shape with CSS aspect-ratio. Use a placeholder with the component’s final footprint. For a third-party frame, reserve its height and give a clear loading or unavailable state.
Store media dimensions with the asset where possible; a generic ratio is not reliable for mixed image shapes.
Scroll, filter, open panels, rotate a mobile device, and use back navigation to find later shifts.
Keep content discoverable and interactions understandable
Google Search Central says Google does not interact with pages by scrolling or clicking. Important lazy-loaded content should load when visible, and rendered HTML should expose expected content or media URLs. Inspect representative pages in Search Console after implementation.
An indexable infinite list needs a paginated route for each durable chunk: a persistent unique URL, stable content at that URL, and links through the sequence. This also creates a shareable place for people to return to.
When an action reveals content, keep the control keyboard-operable and make the result understandable. For a meaningful non-focus update such as ‘results loaded,’ expose the status programmatically so assistive technologies can announce it without moving focus.
Product details, article body, eligibility information, and task instructions should not first exist after a visitor action.
Do not delay required checkout or authentication controls. Have qualified security and compliance reviewers assess payment, identity, and third-party-script changes.
Use the least fragile mechanism
For ordinary offscreen images and iframes, native browser lazy loading is usually the simplest starting point. The browser decides when a near-viewport request starts; that distance is not a guarantee. The window load event can fire while lazy resources remain incomplete.
Use an Intersection Observer when a named component needs custom activation, such as mounting an expensive panel shortly before it appears. Keep the observer narrow and start work early enough for fast scrolling. Use code splitting for non-initial routes or optional features, not as a reason to delay the current task.
Do not replace a simple source with data attributes, several scripts, and a library unless the added behavior solves a tested need.
An optional embed should have a clear fallback or omission state, not a permanent spinner.
Measure, release, and remediate together
Compare a baseline and candidate on the same URLs, cache state, viewport, and user path. Use cold, constrained mobile testing plus real-device checks where possible. Record LCP, visible sequence, layout shifts, media errors, rendered HTML, and essential actions. Field data complements lab testing.
Ship a reversible, template-scoped change. Record assets moved from eager to deferred, deployment reference, cache action, owner, and first rollback step. If LCP becomes lazy or a conversion path becomes incomplete, remove the rule from that critical asset and verify again. Recheck after theme, CMS, image-service, tag, or embed changes.
Focus on preventing and remediating a broken experience, not on current-status reporting or alerting.
Reverse the affected template setting before retuning every image site-wide.
