Lazy loading
Lazy loading means the browser fetches an image or an embed only when the visitor scrolls near it, not when the page opens. WordPress does it by itself, for images since 5.5 and for iframes since 5.7. It must never apply to the main image at the top of a page.
- By
- WP Ministry
- Published
In short
- WordPress adds loading="lazy" to images since 5.5 and to iframes since 5.7, when the tag has a width and a height. That needs no plugin.
- Since 6.3 it leaves the first three images or iframes in the content alone and marks the likely main image with fetchpriority="high".
- The main image at the top of a page must not be lazy-loaded. If it is, Largest Contentful Paint gets slower.
Lazy loading means the browser holds back an image or an embed until the visitor scrolls near it, and does not fetch everything when the page opens. A visitor who never scrolls never downloads what is further down.
In WordPress it is done with the browser's own loading="lazy" attribute on the tag. No plugin and no script is involved. WordPress adds the attribute itself:
- Images, since 5.5. Every image tag that has a
widthand aheight: in post content, excerpts, text widgets and avatars, and images a theme prints throughwp_get_attachment_image(). - Iframes, since 5.7. On the same condition. Most iframes on a WordPress site come from embeds, and only some services supply both dimensions.
- Not the first ones. Since 5.9 WordPress leaves the first image or iframe in the content alone, and since 6.3 the first three, because they are likely to be on screen when the page opens.
- The main image is given priority, since 6.3. WordPress adds
fetchpriority="high"to the image it judges most likely to be the largest in view, and never puts that andloading="lazy"on one tag.
It keeps a loading attribute that a theme or plugin has already written.
Where you meet it
- The page's source.
loading="lazy"on an<img>or<iframe>tag. - PageSpeed Insights. The insight "LCP request discovery" checks three things about the main image. One is that it does not use
loading=lazy. - Older reports and guides. "Defer offscreen images" was an audit that asked for more lazy loading. Lighthouse 13, released in October 2025, removed it. Its release note says browsers already give offscreen images a low priority, so lazy loading saves bandwidth and is unlikely to change what Lighthouse measures.
What goes wrong
- The main image is lazy-loaded. The browser cannot start fetching it until it has worked out where the image sits, so Largest Contentful Paint gets slower. WordPress goes by the order of the tags, not by what the layout puts on screen, and it keeps an attribute a theme or builder wrote. How to fix Largest Contentful Paint has the fix.
- The banner is a CSS background. The attribute works on a tag, not on a background image, so none of the above applies to it. How to lazy load images and videos covers backgrounds, video and embeds.
- Two things lazy-load the same images. If a plugin, a theme or a page builder runs lazy loading of its own, check that it leaves out the first images. The same guide shows how.
- It is expected to fix heavy images. Lazy loading decides when an image is fetched, not how big the file is. See how to optimize WordPress images.
How to look at yours
Open a post with several images, view the page's source and search for loading="lazy". On a current WordPress, the first three images in the content should not carry it and the ones after them should. The large image at the top should carry fetchpriority="high".
Common questions
Do I need a plugin to lazy-load images in WordPress?
No. WordPress has added loading="lazy" to images since version 5.5 and to iframes since 5.7. It does not cover an image set as a CSS background, because the attribute works only on a tag.
Does lazy loading improve a PageSpeed score?
Not much by itself. It saves data for images below the first screen, and Lighthouse dropped its audit for it in version 13 because that is unlikely to change the figures it measures. Applied to the main image, it makes Largest Contentful Paint worse.
How do I stop one image from being lazy-loaded?
Set loading="eager" on its tag in the theme, and WordPress keeps what it finds. To switch the feature off altogether, a developer can return false from the wp_lazy_loading_enabled filter.

