Images are often the heaviest elements on web pages, accounting for 50-80% of total page weight. Lazy loading defers image loading until they’re needed, dramatically improving initial page load times and Core Web Vitals scores.

WordPress 5.5+ includes native lazy loading, but understanding when and how to implement it properly makes the difference between fast and slow sites. This guide covers everything from native WordPress lazy loading to advanced optimization with Nexus Pro.
What Is Lazy Loading?
Lazy loading delays loading images and iframes until they’re about to enter the viewport.
How It Works
Traditional Loading:
- Browser loads entire HTML
- Immediately requests ALL images
- Downloads images whether visible or not
- Wastes bandwidth on below-fold images
Lazy Loading:
- Browser loads HTML
- Requests only visible images
- Downloads below-fold images as user scrolls
- Saves bandwidth and improves initial load
Performance Benefits
Faster Initial Load:
- 30-50% reduction in initial page weight
- Improved LCP (Largest Contentful Paint)
- Better Time to Interactive
- Faster perceived performance
Reduced Bandwidth:
- Users don’t download unseen images
- Mobile users save data
- Lower server bandwidth costs
- Improved experience on slow connections
Better Core Web Vitals:
- LCP improves when hero image prioritized
- FID/INP benefits from less processing
- CLS stays low with proper implementation
Native WordPress Lazy Loading
WordPress 5.5+ automatically adds lazy loading to images.
How WordPress Lazy Loading Works
WordPress adds the loading="lazy" attribute to images:
<img src="image.jpg" alt="Description" loading="lazy" width="800" height="600">
Browser Support:
- Chrome 77+
- Firefox 75+
- Edge 79+
- Safari 15.4+
- ~95% of browsers support it
What Gets Lazy Loaded
Automatically Lazy Loaded:
- Content images (added via media library)
- Featured images
- Gallery images
- Widget images
NOT Lazy Loaded:
- First image in content (assumed to be above fold)
- Images with
loading="eager"attribute - Background images (CSS)
- Images added via custom code
Limitations of Native Lazy Loading
Missing Features:
- No iframe lazy loading by default
- Can’t adjust trigger distance
- No placeholder images
- Basic implementation only
When to Use Plugins:
- Need advanced features
- Want placeholder images
- Require iframe lazy loading
- Need fine-grained control
Implementing Lazy Loading with Nexus Pro
Nexus Pro provides enhanced lazy loading with additional controls.
Enable Lazy Loading
Step 1: Access Settings
- Go to Appearance > Customize
- Navigate to Performance Optimization
- Find lazy loading settings
Step 2: Configure Options
Lazy Load Images:
- Toggle ON to enable
- Automatically excludes LCP image
- Works on all content images
Lazy Load Iframes:
- Toggle ON for YouTube embeds, etc.
- Defers video loading until needed
- Significant performance boost
Benefits:
- One-click implementation
- Smart exclusions (hero images)
- Works with responsive images
- Compatible with all themes
Advanced Configuration
Exclude Specific Images:
Add class to images you want to load immediately:
<img src="important.jpg" class="skip-lazy" loading="eager">
Background Images:
For CSS background images, use JavaScript lazy loading:
// Lazy load background images
document.addEventListener('DOMContentLoaded', function() {
const lazyBackgrounds = document.querySelectorAll('.lazy-background');
if ('IntersectionObserver' in window) {
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('visible');
observer.unobserve(entry.target);
}
});
});
lazyBackgrounds.forEach(bg => observer.observe(bg));
}
});
Image Optimization Best Practices
Lazy loading works best with optimized images.
Before Upload
1. Resize Images
- Desktop: 1200-1600px wide maximum
- Mobile: 800px wide sufficient
- Don’t upload 4000px images
2. Choose Correct Format
JPEG:
- Best for photos
- Good compression
- Universal support
PNG:
- Graphics with transparency
- Logos and icons
- Lossless quality
WebP:
- 25-35% smaller than JPEG
- Better quality at same size
- Modern browser support (95%+)
3. Compress Before Upload
Tools:
- TinyPNG – Web-based, excellent compression
- Squoosh – Google’s tool, advanced controls
- ImageOptim – Mac app, batch processing
- RIOT – Windows app, visual comparison
Target: Under 100KB per image
WordPress Image Optimization
Recommended Plugins:
ShortPixel:
- Excellent compression
- 100 images/month free
- WebP conversion
- Lazy loading included
Imagify:
- Good quality/size balance
- Free tier available
- Automatic optimization
- Backup originals
EWWW Image Optimizer:
- Free, unlimited
- Local compression
- No monthly limits
- WebP support
Settings:
- Lossy compression (best balance)
- Convert to WebP
- Strip metadata
- Resize large images
Responsive Images
WordPress generates multiple sizes automatically.
Default Sizes:
- Thumbnail: 150x150px
- Medium: 300x300px
- Large: 1024x1024px
- Full: Original size
srcset Attribute: WordPress adds srcset for responsive images:
<img
src="image-800.jpg"
srcset="image-400.jpg 400w,
image-800.jpg 800w,
image-1200.jpg 1200w"
sizes="(max-width: 600px) 100vw, 600px"
alt="Description"
loading="lazy"
>
Browser selects appropriate size based on:
- Screen size
- Device pixel ratio
- Viewport width
Lazy Loading Iframes
YouTube embeds and other iframes benefit greatly from lazy loading.
Native Iframe Lazy Loading
Add loading="lazy" to iframes:
<iframe
src="https://www.youtube.com/embed/VIDEO_ID"
loading="lazy"
title="Video Title"
></iframe>
Support:
- Chrome 77+
- Firefox 121+
- Edge 79+
- Limited Safari support
With Nexus Pro
Enable iframe lazy loading in Customizer:
- Automatically applies to all iframes
- YouTube, Vimeo, Google Maps
- Significant performance improvement
YouTube Embed Optimization
Use YouTube’s Lite Embed:
Instead of full iframe, load thumbnail first:
<lite-youtube videoid="VIDEO_ID"></lite-youtube>
Benefits:
- Loads 224x faster
- 10x less initial data
- Loads video on click
- Better performance scores
Common Lazy Loading Mistakes
Avoid these errors that hurt performance or user experience.
Mistake 1: Lazy Loading Above-Fold Images
Problem: Hero or featured images lazy loading delays LCP.
Example:
<!-- WRONG: Hero image shouldn't lazy load -->
<img src="hero.jpg" loading="lazy" alt="Hero">
<!-- CORRECT: Load immediately -->
<img src="hero.jpg" loading="eager" alt="Hero">
Solution:
- Never lazy load first screen images
- Use
loading="eager"for hero images - Preload critical images
With Nexus Pro: Automatically excludes above-fold images from lazy loading.
Mistake 2: No Image Dimensions
Problem: Images without width/height cause layout shift (CLS).
Bad:
<img src="image.jpg" loading="lazy" alt="Description">
Good:
<img src="image.jpg" loading="lazy" alt="Description" width="800" height="600">
Why It Matters: Browser reserves space before image loads, preventing layout shift.
Mistake 3: Lazy Loading Too Aggressively
Problem: Images load too late, creating blank spaces as users scroll.
Solution:
- Adjust threshold (load before entering viewport)
- Preload next few images
- Balance performance vs. experience
Mistake 4: Missing Fallback for Older Browsers
Problem: Browsers without lazy loading support don’t load images.
Solution: Use progressive enhancement:
<img
src="image.jpg"
data-src="image.jpg"
loading="lazy"
alt="Description"
class="lazyload"
>
With JavaScript fallback for older browsers.
Mistake 5: Lazy Loading Small Images
Problem: Overhead of lazy loading script exceeds image size.
Rule: Don’t lazy load images under 10KB. The script overhead isn’t worth it.
Testing Lazy Loading
Verify lazy loading works correctly.
Chrome DevTools
Check Loading Attribute:
- Right-click image
- Inspect element
- Verify
loading="lazy"attribute - Check dimensions present
Network Tab:
- Open DevTools (F12)
- Go to Network tab
- Reload page
- Scroll down slowly
- Watch images load as they enter viewport
Performance Tab:
- Record page load
- View timeline
- Check when images load
- Verify deferred loading
Google PageSpeed Insights
Check Metrics:
- LCP should improve
- Total page size reduced
- Fewer initial requests
- Better performance score
Opportunities:
- “Defer offscreen images” should not appear
- If it does, lazy loading not working
Lazy Loading Test
Manual Test:
- Open page in browser
- Disable JavaScript (to test native)
- Scroll slowly
- Images should still load
- Network tab shows deferred requests
Advanced Lazy Loading Techniques
Take lazy loading further for maximum performance.
Intersection Observer API
For custom lazy loading with more control:
// Modern lazy loading implementation
const images = document.querySelectorAll('img[data-src]');
const imageObserver = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.dataset.src;
img.classList.remove('lazy');
observer.unobserve(img);
}
});
}, {
rootMargin: '50px' // Load 50px before entering viewport
});
images.forEach(img => imageObserver.observe(img));
Placeholder Images
Low Quality Image Placeholder (LQIP):
- Create tiny version (20x20px)
- Inline as base64
- Replace with full image when loaded
- Blur effect during transition
Example:
<img
src="data:image/jpeg;base64,/9j/4AAQ..."
data-src="full-image.jpg"
alt="Description"
class="blur-up"
>
CSS:
.blur-up {
filter: blur(10px);
transition: filter 0.3s;
}
.blur-up.loaded {
filter: blur(0);
}
Dominant Color Placeholder
Instead of blurred image, show dominant color:
<div style="background-color: #3B82F6; aspect-ratio: 16/9;">
<img data-src="image.jpg" loading="lazy" alt="Description">
</div>
Prevents white flash while loading.
Monitoring Performance Impact
Track lazy loading effectiveness.
Key Metrics to Monitor
Before Lazy Loading:
- Initial page size
- Number of requests
- LCP time
- Total load time
After Lazy Loading:
- Reduced initial page size (30-50%)
- Fewer initial requests
- Improved LCP (if implemented correctly)
- Faster perceived performance
Google Analytics
Custom Events: Track lazy loaded images:
imageObserver = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
gtag('event', 'lazy_load', {
'event_category': 'images',
'event_label': entry.target.src
});
}
});
});
Monitor which images users actually view.
A/B Testing
Test Variations:
- With vs without lazy loading
- Different trigger distances
- Placeholder vs no placeholder
- Native vs JavaScript implementation
Metrics:
- Bounce rate
- Time on page
- Scroll depth
- Conversion rate
Conclusion
Lazy loading is essential for modern WordPress performance. By deferring below-fold images and iframes, you dramatically improve initial load times and Core Web Vitals scores while maintaining a great user experience.
Quick Implementation Checklist:
- Enable Nexus Pro lazy loading (Customizer > Performance)
- Optimize all images before upload (compress, resize)
- Ensure images have width/height attributes
- Exclude hero/featured images from lazy loading
- Enable iframe lazy loading for embeds
- Test with PageSpeed Insights
- Monitor performance improvements
With Nexus Pro, you get:
- One-click lazy loading activation
- Smart exclusions for LCP images
- Iframe lazy loading included
- Optimized implementation
- No additional plugins needed
Start by enabling lazy loading in Nexus Pro’s Customizer settings, then optimize your existing images. Monitor Core Web Vitals improvements and refine based on your specific content and audience behavior.
Related Articles:

