Performance as a profit factor: Why lazy loading is mandatory

Today, seconds determine turnover or bounce. Sites that load too slowly lose visibility, conversions, and trust. Lazy Loading It is therefore no longer a technical detail, but elementary for the performance of your website: It saves loading time, reduces costs and directly increases the conversion rate.

Inhalt:

1. What lazy loading does: How it works, benefits and current standards.

2. What mistakes you need to avoid: Why “loading everything lazily” can destroy the UX.

3. How decision makers benefit: Less loading time = more visibility, turnover and cost efficiency.

Inhalt:

1. What lazy loading does: How it works, benefits and current standards.

2. What mistakes you need to avoid: Why “loading everything lazily” can destroy the UX.

3. How decision makers benefit: Less loading time = more visibility, turnover and cost efficiency.

Mobile use has long dominated traffic — and loading speed directly determines rankings, user satisfaction and sales. Even a few hundred milliseconds of delay can cost measurably conversions. This is exactly where lazy loading comes in: Instead of immediately loading the entire page with all images, videos and iFrames, content only appears when it is really needed. This saves data volume, accelerates visible page loading and improves Core Web Vitals — a clear competitive advantage in SEO and UX.

What is lazy loading?

Lazy loading means that certain content — usually images, videos, or iframes — is only loaded as soon as it reaches a user's visible area (“viewport”). This reduces the amount of data the first time a page is accessed and ensures faster loading times.

Since 2020, lazy loading is no longer a JavaScript hack, but a native browser standard. All common browsers such as Chrome, Safari, Firefox, Edge or Opera support the HTML loading attribute. It has three values:

  • loading="lazy” → Content is only loaded when it becomes visible.
  • loading="eager” → Content is loaded immediately (ideal for above-the-fold elements).
  • loading="auto” → The browser itself decides on the loading behavior.

As a result, lazy loading is no longer optional or experimental — it is the recommended best practice for any modern website.

Benefits of lazy loading

Lazy loading is not just a technical feature today, but a clear business lever. The benefits can be summarized in three dimensions:

1. SEO & rankings

  • Google rates load speed and Core Web Vitals as a ranking factor.
  • Less data during initial load → better values for LCP (Largest Contentful Paint) and INP (Interaction to Next Paint).
  • Faster pages are crawled and indexed more frequently.

2. User experience (UX)

  • Content appears noticeably faster, even when the connection is weak.
  • Users can interact instantly without long waiting times.
  • Particularly important on mobile devices: Lower data consumption = better experience for the user.

3. Conversion & sustainability

  • Just 1 second less loading time can increase the conversion rate by several percent.
  • Fewer unnecessarily loaded resources = lower server costs.
  • Optimized data transmission saves CO₂ — a plus point for sustainable web design.

In short: Lazy Loading increases performance, reduces costs and directly contributes to SEO and revenue.

Implementation in practice

Images: “lazy” is the default — but use it correctly

Basic variant:

<imgsrc=” image-800.jpg”
alt="Close-up of product XY”
loading="lazy”
decoding="async”
width="800" height="600" />

  • loading="lazy” delays loading.
  • decoding="async” relieves the main thread.
  • Always set width/height → less CLS.

Responsive + efficient:

<imgsrc=” image-800.jpg”
srcset=” image-400.jpg 400w, image-800.jpg 800w, image-1600.jpg 1600w”
sizes= "(max-width: 768px) 100vw, 768px”
alt="Product XY”
loading="lazy”
decoding="async”
width="800" height="600" />

  • srcset/sizes only provide the necessary resolution for each device.

Important (anti-pattern):

<link rel="preload” as="image”
href=” hero-1600.jpg “imagesrcset=”
hero-800.jpg 800w, hero-1200.jpg 1200w, hero-1600.jpg 1600w”
imagesizes="100vw” />
<imgsrc=” hero-1600.jpg”
srcset=” hero-800.jpg 800w, hero-1200.jpg 1200w, hero 1600.jpg 1600w”
sizes="100vw”
alt="Hero”
loading="eager”
fetchpriority="high”
decoding="async”
width="1600"
height="900" />

  • Do not lazily load LCP/above-the-fold images. Consciously prioritize them:

iFrames & embeds (YouTube, maps, widgets)

Efficient in one line:

<iframe src=” https://www.youtube.com/embed/VIDEO_ID”
title="Product Video”
loading="lazy”
referrerpolicy="strict-origin-when-cross-origin”
width="560"
height="315"
allow="accelerometer; autoplay; clipboard-write; encrypted media; gyroscope; picture-in-picture” />

Even faster: “Lite” embed (loads player only when clicked)

<!-- Platzhalter mit Thumbnail -->
<div class="yt-lite” data-id="VIDEO_ID"role="button” aria-label="Video abspielen"></div>

<script>
const els = document.querySelectorAll ('.yt-lite');
const onClick = el => {
const id = el.dataset.id;
el.innerHTML =
`<iframe src=”https://www.youtube.com/embed/${id}? autoplay=1
title="YouTube video”
loading="eager”
width="560"
height="315"
allow="autoplay; encrypted media” allowfullscreen>
</iframe>
`;
el.classList.add ('playing');
};
const io = 'IntersectionObserver' in window

? new IntersectionObserver (entries => entries.forEach (e => {
if (e.isIntersecting) {
const id = e.target.dataset.id;
e.target.style.backgroundImage =
`url (https://i.ytimg.com/vi/${id}/hqdefault.jpg) `;
io.unobserve (e.target);
}
}))
: zero;
els.forEach (el => {if (io) io.observe (el); el.addEventListener ('click', () => onClick (el));});

</script>

Videos & images as “background”

HTML5 video: only load when necessary

<video
controls
preload="metadata”
poster=” teaser.jpg”
width="1280"
height="720">
<source src="video-720.mp4" type="video/mp4">
</video>

  • preload="metadata” reduces unnecessary traffic.
  • Critically check autoplay background videos (performance, accessibility).

Reload CSS backgrounds “lazy” (if <img>not possible)

<div class="hero" data-bg="hero-1600.jpg"></div>
<script>

const target = document.querySelector ('.hero');
const loadBG = el => el.style.backgroundImage = `url ($ {el.dataset.bg}) `;
if ('intersectionObserver' in window) {
new IntersectionObserver (es => es.forEach (e => {
if (e.isIntersecting) {loadBG (e.target); e.target.classList.add ('bg-loaded');}
})) .observe (target);
} else {loadBG (target);}

</script>

  • Note: Wherever possible, no background image for content images — <img>with loading="lazy” instead.

Fallback & compatibility

Native support is widely available in modern browsers. For older environments, a lightweight fallback is enough:

<img
data-src=” image-800.jpg”
alt="Example”
loading="lazy”
width="800"
height="600" />
<script>

If (! ('loading' in HTMLImageElement.prototype)) {
const imgs = document.querySelectorAll ('img [loading="lazy "] [data-src] ');
const swap = img => {img.src = img.dataset.src; img.removeAttribute ('data-src');};
if ('intersectionObserver' in window) {
const io = new IntersectionObserver (it => es.forEach (e => e.isIntersecting && (swap (e.target), io.unobserve (e.target))));
imgs.forEach (img => io.observe (img));
} else {imgs.forEach (swap);}
}
</script>

Practical tips from projects

  • Placeholder & Blur-Up: Minimizes perceived load time (LQIP/SQIP).
  • Sprite/Icons: load SVG sprites inline, not lazy (icons are often visible).
  • Shops/CMS: Many systems (WordPress, Shopify, Next.js, Nuxt) lazy-load by default — yet explicitly configure LCP elements without lazy.
  • Monitoring: After rollout, check Core Web Vitals (LCP/INP/CLS) and observe real user data (Crux/RUM).

Avoid typical mistakes

Even though lazy loading is now relatively easy to implement, errors always creep in in in practice that cost performance or jeopardize rankings. You should definitely avoid these pitfalls:

  • Lazy loading LCP elements
    The largest visible image (hero, slider, product photo) is usually the LCP (Largest Contentful Paint). If it is loaded lazily, the loading time increases and the Core Web Vital value worsens massively. → Solution: Mark LCP images with loading="eager” and fetchpriority="high”.
  • Do not set width and height information
    Without width and height, the layout jumps as soon as images are reloaded → high CLS (Cumulative Layout Shift). → Solution: Always define fixed dimensions or use aspect ratio.
  • Set everything to “lazy”
    If you blindly load every image and every iframe, you slow down the page instead of speeding it up. Above-the-fold content needs immediate prioritization. → Solution: Lazy load secondary content only (product galleries, long articles, embeds).
  • Ignore fallbacks
    Older browsers or special environments (intranet, kiosk systems) do not support lazy loading. → Solution: Use simple JavaScript fallback or progressive enhancement to ensure that content is always loaded.
  • Forget SEO relevance
    Google does render lazy-load content, but only if it is implemented correctly. Content that only appears after interaction (e.g. after clicking) can be overlooked. → Solution: Don't “hide” important SEO content behind lazy loading.

Recommendations for action for decision makers

Lazy loading is no longer just a technical detail for developers, but a strategic factor for performance and conversion. For decision makers, this means:

  • Set priorities
    Lazy loading must not be activated across the board. Hero images, central product photos, and critical content must be loaded immediately, while secondary media (galleries, videos, long article images) are optimized for lazy loading.
  • Keep an eye on KPIs
    Loading time, Core Web Vitals and Conversion Rate go together. Monitoring tools such as PageSpeed Insights, WebPageTest or Search Console provide clear data as to whether lazy loading is being used correctly.
  • Check regularly
    Browser standards are rapidly evolving. Lazy loading implementations from two years ago are often no longer optimal today. Ongoing tests and technical updates are mandatory.
  • Connect with UX
    Performance is only part of the equation. If you load too aggressively lazy, you risk jerky effects and frustrated users. The motto is: Speed without breaks.

Conclusion: Lazy loading is mandatory, not optional

Lazy loading is a Business must. The data load of modern websites — images in XXL resolution, videos, interactive elements — is constantly growing. Without efficient loading strategies, bounce rates rise, conversion rates fall, and Core Web Vitals worsen.

For companies, this means:

  • Less loading time = more revenue. Two-digit conversion uplifts can be achieved just one second faster.
  • Better rankings. Google prefers high-performance pages — lazy loading is a direct lever for visibility.
  • cost efficiency. Reduced data volume lowers hosting costs and improves mobile usage even in regions with weak connections.

In short, lazy loading is not an optional performance trick, but a strategic competitive advantage. If you implement it consistently, you not only increase the user experience, but also sales, SEO visibility and brand perception.

Peter Voß
September 17, 2019
7. min reading time
Submission failed. Please try again.