There are two distinct ways to optimise images for WordPress. The first is performance, with elements such as file size, format, compression, and CDN. Most guides stop there.
The second is discoverability. That’s the signals that determine whether Google can find your images, understand what they contain, and include them in search results.
The two layers are related but not the same. You can have a perfectly compressed image that Google never indexes, and you can have beautiful alt text on an image that causes a layout shift every time the page loads.
This checklist covers the second layer. The performance fundamentals are in a separate guide if you need those first.
Site-Level Setup
Do these once and they will apply to every image on your site from that point forward.
1. Build an Image Sitemap and Check What’s Actually in It
Search engines can’t rank images they can’t find. An image sitemap gives Google a direct path to every image on your site, which matters if image search drives any meaningful traffic to your content.
SEO plugins typically include images in their XML sitemaps by default. For most sites, that’s sufficient. The scenario where you need to pay attention is when your images are hosted on a CDN subdomain or a different domain from your main site. Standard WordPress sitemaps typically only include files on the primary domain, so CDN-hosted images may simply be absent.
Google’s image sitemap documentation covers what’s required, so check your actual sitemap output, not just whether the sitemap plugin is active.
2. Use One Image Optimization Plugin, Not Two
Running two image optimization plugins simultaneously causes conflicts. Compressed images come out distorted, thumbnails get regenerated incorrectly, and error logs fill up. The plugins compete for the same hooks and the results are unpredictable.
Pick one and configure it properly. For example, ShortPixel Image Optimizer handles compression, WebP and AVIF conversion, EXIF stripping, and AI-generated alt text from a single plugin. That’s enough coverage that you don’t need a second tool doing any of the same jobs.

If you’re currently running more than one image plugin, disable the others before continuing with this checklist.
3. Configure Browser Caching for Images
Browser caching tells a returning visitor’s browser to store static assets locally rather than re-downloading them on each page load. For images, this means everything loads from the visitor’s local cache after the first visit.
If you’re on a caching plugin like WP Rocket or W3 Total Cache, this is probably already handled. Managed hosts like Kinsta and Servebolt configure it at the server level, but it’s confirming since the difference between a properly cached image and an uncached one on repeat visits is significant.
Per-Image Checklist
Run through these every time you publish something on your site.
4. Name Your Files Before Uploading
Image file names are a small but real SEO signal. A file named IMG_20240314_094512.jpg tells Google nothing. A file named shortpixel-bulk-compression-dashboard.jpg tells Google exactly what the image contains.
Rename files before they hit the media library and use descriptive, hyphen-separated names. Keep them accurate and don’t try to keyword-stuff. The goal is to describe the image the same way you’d describe it to someone who can’t see it.
This costs about five seconds per image and compounds quietly across an entire site over time.
5. Declare Width and Height on Every Image
Declaring explicit width and height attributes on tags lets the browser reserve the correct amount of space for an image before it loads. Without them, the layout jumps when the image arrives.
Cumulative Layout Shift (CLS) is a Core Web Vitals metric that Google uses as a ranking signal, and images without dimensions are one of the most common causes of poor CLS scores. The fix is straightforward, just include both attributes for every image.
WordPress adds these automatically for images uploaded through the media library. If you’re embedding images manually, in custom blocks, or via page builders, check the output to be sure. Page builders in particular have a habit of dropping dimension attributes in certain contexts.
6. Handle Your LCP Image Correctly
The Largest Contentful Paint (LCP) image is the most important image on your page from a Core Web Vitals perspective. It’s usually your hero image or featured image, and two things need to be true about it.
First, it must not be lazy loaded. Lazy loading tells the browser to delay fetching an image until it enters the viewport, which on the LCP image directly harms your score. WordPress 5.9 and later automatically exempts the first image in HTML source order, but that’s “first in the HTML” not “first visible on screen.” Page builders and certain themes output other elements before the hero image in the source, so the hero can still pick up loading="lazy" inadvertently. Inspect the markup to be sure.

Second, add fetchpriority="high" to the LCP image tag. This tells the browser to treat that resource as high priority from the moment it’s discovered, rather than waiting until layout completes to boost it. Lab tests across various sites have shown LCP improvements of 20 to 30 percent in some cases, though real-world gains vary considerably.
Results depend on how many competing high-priority resources are loading alongside it. WP Rocket applies this automatically via its critical image preloading feature, but if you’re not using WP Rocket, it’s worth adding manually or via your performance plugin of choice.
The two together, no lazy loading and a high fetch priority, are the most direct image-level actions you can take to improve LCP.
7. Write Accurate Alt Text (or Automate It)
Alt text is how search engines understand what an image contains. It’s also what screen readers use to describe images to visually impaired users, and what browsers display when an image fails to load.
Write it to describe the image accurately and naturally. If the image shows a ShortPixel bulk compression settings screen, say that. “Plugin screenshot” serves nobody. Keyword-stuffing doesn’t fool Google and it even degrades the experience for screen reader users.
For decorative images that carry no informational value, use an empty alt="" attribute rather than omitting the attribute entirely. An empty attribute tells screen readers to skip the image. No attribute at all leaves them to guess.
If you’re managing a large media library, ShortPixel’s AI alt text feature generates alt text automatically from image content in over 100 languages. It’s worth evaluating on your specific content before rolling it out across the whole library, but for sites with thousands of untagged images it’s a reasonable starting point for a bulk-tagging pass.
8. Add Captions Where They Add Context
Google explicitly extracts information about images from captions and image titles on the surrounding page. A well-written caption contributes to the contextual signals around an image and can make a real difference for competitive image search terms.
That said, this isn’t a reason to add captions to every image. Unnecessary captions clutter editorial content. Where a caption would genuinely help a reader understand what they’re looking at, write it.
9. Use Structured Data for Product and Recipe Images
Structured data gives Google additional context about your images that goes beyond what it can infer from alt text and file names alone. Whether it’s worth implementing depends heavily on what kind of site you’re running.
Product images with structured data can appear in Google Shopping panels. Recipe images with structured data are eligible for rich results. If you’re running a WooCommerce store or publishing food content, this is worth implementing. Rank Math, Yoast, and other SEO plugins handle the relevant schema markup automatically for supported post types, so it may already be in place without you having done anything.
For a standard editorial blog, though, this one simply doesn’t move the needle and you can skip it.
10. Test with Search Console’s Core Web Vitals Report, Not Just PageSpeed Insights
The most common image optimisation mistake is running PageSpeed Insights on the homepage, fixing what it surfaces, and declaring the job done.
Your homepage likely has fewer images than any other page on your site. Product pages, blog posts, portfolios, and landing pages are where image weight and image SEO issues actually accumulate.

Google Search Console’s Core Web Vitals report surfaces field data across all your URLs, showing real user experience on your actual pages, not just the ones you’ve tested manually. If you’re seeing LCP or CLS failures at scale, that’s where you’ll find them, and which page types are most affected.
Run your changes against that report, not against a single synthetic test.
Where to Take This Further
These ten items cover the SEO and Core Web Vitals layer of image optimisation.
The compression, format, and delivery fundamentals that belong alongside them are in the image optimisation tips guide. For understanding how WordPress handles responsive images across screen sizes automatically, the responsive images walkthrough covers the srcset and sizes mechanics.
Between all three, you have the full picture. Performance, delivery, and discoverability.
Which of these is already covered on your site, and where are the gaps?