Back to blog
    Header image for the article "Lazy Loading: Speed Up Your Site 3x Without Sacrificing Quality"
    Optimization08/06/20265 min

    Lazy Loading: Speed Up Your Site 3x Without Sacrificing Quality

    Images, videos, and JS – learn what and how to lazy load to ensure your initial page load is lightning fast.

    Author: Meiko Neuman

    Founder and web strategist, Kodulehe Haldus

    What is lazy loading?

    Lazy loading = load only what the user sees right now. The rest loads as the user scrolls down.

    The impact: According to HTTP Archive, the average page is 2.4 MB. With lazy loading, only 600 KB loads initially – 4x faster.

    What should you lazy load?

    1. Images (the most important)

    Native HTML: `html <img src="hero.jpg" alt="Hero" loading="eager" /> <img src="below-fold.jpg" alt="..." loading="lazy" /> `

    Rule: above-the-fold = eager, everything else = lazy.

    2. Videos ```html <video preload="none" poster="thumbnail.jpg"> <source src="video.mp4" type="video/mp4"> </video> ```

    3. iframes (YouTube, maps) ```html <iframe src="..." loading="lazy"></iframe> ```

    Even better for YouTube: lite-youtube-embed – displays a thumbnail and only loads the iframe on click.

    4. JS bundles Code splitting in React: ```tsx const Modal = React.lazy(() => import('./Modal')); ```

    5. CSS Not all CSS needs to be critical. Inline the above-fold CSS and lazy load the rest: ```html <link rel="preload" href="non-critical.css" as="style" onload="this.rel='stylesheet'"> ```

    Image optimisation

    Lazy loading + the right formats + responsive design: `html <picture> <source srcset="hero.avif" type="image/avif"> <source srcset="hero.webp" type="image/webp"> <img src="hero.jpg" alt="Hero" loading="lazy" width="1280" height="720"> </picture> `

    AVIF is 50% smaller than JPEG, WebP is 30% smaller.

    See our detailed image optimisation guide.

    Intersection Observer

    Customised for lazy loading: `js const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { const img = entry.target; img.src = img.dataset.src; observer.unobserve(img); } }); });

    document.querySelectorAll('img[data-src]').forEach(img => observer.observe(img)); `

    However, in 2026, native loading="lazy" is sufficient.

    What NOT to lazy load

    • Above-the-fold content (LCP elements!)
    • Critical CSS
    • Core JS (required for interactivity)
    • Logos and icons (small files)
    • SEO-critical images

    Cumulative Layout Shift (CLS)

    Lazy loading can cause layout shifts if the image does not have defined dimensions.

    <img src="x.jpg" loading="lazy"><img src="x.jpg" loading="lazy" width="800" height="600">

    See also our Core Web Vitals guide.

    WordPress

    WP 5.5+ uses native lazy loading automatically. A separate plugin is usually not required: - ❌ Don't keep extra plugins: they duplicate functionality - ✅ Use native loading + optimise images

    Performance Before/After

    A typical e-commerce store: | Metric | Before | After | |--------|------|--------| | First Contentful Paint | 2.4s | 0.9s | | Largest Contentful Paint | 4.2s | 1.8s | | Total Page Size | 3.8 MB | 850 KB | | Time to Interactive | 5.1s | 2.3s |

    Testing

    Summary

    Lazy loading is a 2-hour optimisation that delivers a 50% performance boost. Our optimisation service includes a full lazy loading audit and implementation. Request a quote.

    Sources

    Need help with your website?

    Our team maintains, optimises and protects your website. Pricing is agreed based on scope.

    Request a quote

    About the author

    Meiko Neuman Founder and web strategist, Kodulehe Haldus. Meiko leads the Kodulehehaldus team and has spent over a decade helping companies maintain and optimise their websites for measurable business results. He writes about website management, SEO, AEO/GEO and the commercial side of the web.

    Related articles