

Smart LazyLoad settings menu in the WordPress admin.
Smart LazyLoad is a free, simple, and lightweight lazy loading plugin. Lazy load WordPress images, videos, and iframes to improve page speed, website performance, and Core Web Vitals scores.
Most lazy load plugins stop at optimize images. Smart LazyLoad also defers responsive <picture> sources, inline background images, avatars, smilies, HTML5 <video>, and iframes such as YouTube and Vimeo.
This plugin also includes support for avatars, emojis, native video, native browser lazy loading, and thumbnail placeholders, as well as the ability to convert YouTube videos.
There is nothing to configure to get started — images are lazy loaded the moment you activate it. 🚀
You get two layers of control:
The rest lives on one settings screen: choose what to lazy load, tune performance, decide how placeholders look, and exclude anything that shouldn’t be touched.
<picture> sources — every <source> inside a <picture> is deferred together with its fallback <img>. The browser still picks the format and crop it wants; only the timing changes.:mrgreen:) that WordPress renders as image files. Smilies rendered as Unicode emoji are left untouched.style="background-image" built from a single url(), or a manual data-bg attribute. Gradients, image-set(), and multi-layer backgrounds are deliberately left untouched.<video> — HTML5 <video> tags, their <source> children, and poster images.loading="lazy", so they really do load straight awayloading="lazy"defer on top, so it never blocks renderingno-lazyload, skip-lazy, data-no-lazyload, data-no-lazy, data-skip-lazynoscript fallbacks, so content is never lost for visitors or crawlers without JavaScriptThe settings screen is organized into five cards:
Master Switch — the single toggle that turns Smart LazyLoad on or off for the entire site. When it’s off, every card below it is dimmed and cannot be edited, but nothing about your saved configuration changes.
What to Lazy Load — a separate toggle for each type: Images, Responsive <picture> Sources, Background Images, Avatars, Smilies, Iframes, YouTube Thumbnail Replacement, and Native Videos.
Performance — Skip First Image (for LCP), Threshold Distance, Use Native Browser Lazy Loading, Defer LazyLoad JavaScript, and Disable for Logged-in Users.
Appearance — Low-Quality Image Placeholder and its source size, an optional Placeholder Background Colour, and the Fade-in Duration.
Advanced — Full-Page Lazy Loading, and a Custom Exclude Selectors box where you list CSS classes to skip — one per line, or separated by commas.
A Reset to Defaults button at the bottom restores every option to its original value in one click.
Open any post, page, or public custom post type in the block editor and look for the Smart LazyLoad panel in the sidebar. Its Lazy Load dropdown has three choices:
The choice is saved as post meta and applies only to that single post — nothing else on the site is affected.
Every filter is prefixed smart_lazyload_.
smart_lazyload_enabled — return `false` to disable lazy loading for the current request.
smart_lazyload_svg_placeholder — replace the default inline SVG placeholder used for images.
smart_lazyload_placeholder — replace the placeholder value used for deferred iframes (default: `about:blank`).
smart_lazyload_excluded_attributes — extend the list of strings that exclude an image, video, or background-image tag from lazy loading.
smart_lazyload_iframe_excluded_patterns — extend the list of strings that exclude an iframe tag from lazy loading.
smart_lazyload_excluded_src — extend the list of substrings checked against an image or background-image URL itself (not just its surrounding tag) to exclude it from lazy loading; useful for dynamic image generators or known placeholder assets.
smart_lazyload_threshold — override the distance-from-viewport threshold, in pixels.
smart_lazyload_youtube_resolution — choose the YouTube thumbnail resolution: `default`, `mqdefault`, `hqdefault` (the default), `sddefault`, or `maxresdefault`.
smart_lazyload_exclude_youtube_thumbnail — return an array of strings; any YouTube iframe whose markup contains one of them keeps a real iframe instead of the click-to-play player.
smart_lazyload_html — filter the processed markup after every lazy-load pass has run.
The former do_smart_lazyload and smll_threshold names still work, so existing snippets keep running.