/ โ† Image Optimisation Fixes / WordPress Image Optimiser
In this guide
  1. Why WordPress image optimisers stop working
  2. Common causes, by symptom
  3. How to diagnose it with a few commands
  4. LiteSpeed Cache image optimisation not working
  5. Elementor image optimiser and choosing a plugin
  6. Server and CDN notes: Apache, nginx, Plesk and Cloudflare
  7. The fix, step by step
  8. Edge cases worth knowing
  9. Keeping image optimisation working
  10. Questions and answers

Why WordPress image optimisers stop working

Every WordPress image optimisation plugin does the same three jobs, and a failure in any one of them looks the same from the dashboard: the numbers do not move, or the images on the page are still heavy JPEGs.

  1. Queue. When you upload an image, WordPress creates several resized copies (thumbnail, medium, large and any sizes your theme registers). The plugin adds the original and those copies to a queue, usually processed in the background by WP-Cron.
  2. Process. The plugin compresses each file and often makes a WebP or AVIF copy. Cloud plugins such as LiteSpeed Cache (through QUIC.cloud) and Elementor's image optimiser send the files, or a link to them, to an external service and fetch the results back. Local plugins use the image libraries in your own PHP, GD or Imagick.
  3. Deliver. The smaller file has to reach the visitor. That means rewriting the HTML to point at the new file, wrapping images in a <picture> element, or a server rule that swaps the file when the browser says it accepts WebP.

Most "not working" reports are not a broken plugin. They are a stalled queue, a service that cannot reach your images, a used-up monthly allowance, or new files that exist on disk but are never served because the web server or a CDN ignores the rewrite. Finding which of the three stages has stopped is the whole diagnosis.

Common causes, by symptom

SymptomLikely causeWhere to look
Queue stuck at the same number, nothing processedWP-Cron disabled or never triggered on a quiet siteDISABLE_WP_CRON in wp-config.php, the plugin's cron settings
Requests sent but images never come backThe cloud service cannot download your images: firewall, bot protection or hotlink rules return 403Your server access log and any security plugin or Cloudflare firewall events
Stopped part-way through the monthFree plan allowance or credits used upThe plugin's account or quota page
Error that the site is not connected or the key is invalidSite URL changed, staging copy, or key not linkedPlugin connection settings
WebP files exist but the page still loads JPEGDelivery not working: nginx ignores .htaccess, page cache serves old HTML, CDN cached the originalcurl with an Accept header, page source
Local plugin says WebP is not supportedPHP GD or Imagick built without WebP or AVIFPHP info for the version your site actually uses
Images broken, doubled or blurryTwo plugins compressing or rewriting the same filesActive plugin list, theme and page builder settings

How to diagnose it with a few commands

If you have SSH access, these checks take a couple of minutes and tell you which stage has failed. Replace the paths and domain with your own. On Plesk the site usually lives under /var/www/vhosts/example.com/httpdocs.

1. Were optimised copies created at all?

cd /var/www/vhosts/example.com/httpdocs
find wp-content/uploads -name '*.webp' | wc -l
find wp-content/uploads -name '*.avif' | wc -l
ls -la wp-content/uploads/2026/09/ | head -20

A count of zero means the process stage has never completed. LiteSpeed Cache stores its copies next to the original with an extra extension, for example hero.jpg.webp. Other plugins use hero.webp or a separate folder.

2. Are background jobs running?

grep -n "DISABLE_WP_CRON" wp-config.php
wp cron test
wp cron event list --fields=hook,next_run_relative | grep -iE 'litespeed|image|optim'

If wp cron test fails, or events show as overdue by hours, the queue cannot move. WP-CLI comes with Plesk and most managed hosts.

3. Does the server deliver the new file?

curl -sI -H "Accept: image/webp,*/*" https://example.com/wp-content/uploads/2026/09/hero.jpg | grep -iE 'content-type|vary|cf-cache-status'
curl -s https://example.com/ | grep -oE 'src="[^"]+\.(webp|avif|jpe?g|png)"' | head

The first command shows whether a server rewrite swaps the JPEG for WebP, and whether a Vary: Accept header is sent. The second shows what the page HTML actually references. If the plugin rewrites URLs, you should see .webp addresses in the HTML.

4. Can PHP make WebP and AVIF?

php -r 'echo function_exists("imagewebp") ? "GD WebP yes\n" : "GD WebP no\n";'
php -r 'echo function_exists("imageavif") ? "GD AVIF yes\n" : "GD AVIF no\n";'
php -r 'echo class_exists("Imagick") ? implode(",", Imagick::queryFormats("WEBP")) . "\n" : "no Imagick\n";'

Run these with the same PHP version the site uses. On Plesk that may be /opt/plesk/php/8.3/bin/php rather than the system php, and the two can have different extensions loaded.

LiteSpeed Cache image optimisation not working

LiteSpeed Cache does not compress images on your server. It sends a request to QUIC.cloud, which downloads your originals, processes them and makes them ready to pull back. The image optimisation part works on any web server, not only LiteSpeed, although page caching needs a LiteSpeed server.

Elementor image optimiser and choosing a plugin

Elementor's image optimiser plugin is also a cloud service. It needs the site connected to an Elementor account, works through a monthly allowance on the free plan, and processes existing images through a bulk screen. When it does nothing, check that the site is still connected after any domain change, that allowance is left this month, and that the bulk screen shows no errors against single files.

Elementor's own lazy loading and image settings are separate from compression. If images are compressed but load late or not at all, see loading lazy not working rather than the optimiser.

Choosing an image optimisation plugin for WordPress

ApproachExamplesGood forWatch out for
Cloud compressionLiteSpeed Cache with QUIC.cloud, Elementor's optimiser, ShortPixel, Imagify, SmushShared hosting where PHP lacks good image librariesMonthly allowances, service blocked by firewalls
Local conversionConverter for Media, EWWW in local mode, the WordPress Performance Team's Modern Image Formats pluginServers with GD or Imagick that support WebP and AVIFCPU use on large libraries, needs server delivery rules
Image CDNA CDN or service that resizes and converts on the flyLarge catalogues and many sizesMonthly cost, a second domain for images

Pick one. The best choice is the one whose delivery method suits your server: URL rewriting in the HTML works everywhere, while Accept-header rewrites need server rules. For format choices see image format fixes, and for the wider WordPress picture see image fixes in WordPress.

Server and CDN notes: Apache, nginx, Plesk and Cloudflare

Plugins that swap files based on the browser's Accept header write their rules to .htaccess. That works on Apache and LiteSpeed. It does nothing on nginx, which never reads .htaccess.

Apache or LiteSpeed (.htaccess)

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{REQUEST_FILENAME}.webp -f
RewriteRule ^(wp-content/uploads/.+\.(?:jpe?g|png))$ $1.webp [T=image/webp,L]
</IfModule>
<IfModule mod_headers.c>
<FilesMatch "\.(jpe?g|png)$">
Header append Vary Accept
</FilesMatch>
</IfModule>

nginx

The map block belongs in the http context, for example in its own file under /etc/nginx/conf.d/. The location block goes in the site's server configuration. This version suits copies named hero.jpg.webp:

map $http_accept $webp_suffix {
    default   "";
    "~*webp"  ".webp";
}

location ~* ^/wp-content/uploads/.+\.(png|jpe?g)$ {
    add_header Vary Accept;
    try_files $uri$webp_suffix $uri =404;
}

Test with sudo nginx -t and reload with sudo systemctl reload nginx.

Plesk

In Apache and nginx Settings, the option to serve static files directly by nginx means JPEG and PNG requests never reach Apache, so the plugin's .htaccess rules are skipped. Either remove jpg, jpeg and png from that list, or add the nginx rules above. The additional nginx directives box sits inside the server block, so put the map in a file under /etc/nginx/conf.d/ instead.

Cloudflare and other CDNs

Standard Cloudflare plans do not keep separate cached copies of an image for each Accept value, so an Accept-based swap behind the CDN can cache whichever version was requested first. Behind a CDN, prefer a plugin mode that rewrites the image URLs in the HTML to .webp files, then purge the cache. More on this in image CDN fixes.

The fix, step by step

Step 1

Find which stage has stopped

Open a page with recent images, view the page source and search for the image file names. Then check the uploads folder for .webp or .avif copies with find. If no copies exist, the queue or processing has failed. If copies exist but the HTML still references .jpg files, delivery has failed. Note which it is, because the rest of the fix depends on it, and write down the queue numbers the plugin shows today.

Step 2

Check the connection and allowance

In the plugin settings, confirm the site is connected to its cloud service on the live domain, not a staging address or the old http version. Open the account or quota page and check how many images or credits remain this month. If the allowance is used up, either wait for the reset, buy credits or switch to a local plugin. Reconnect if the domain has changed, then send a single image to test.

Step 3

Make sure background jobs run

Run wp cron test and look in wp-config.php for DISABLE_WP_CRON. If WP-Cron is disabled or unreliable, add a server cron that runs wp cron event run --due-now every five minutes for the site. In LiteSpeed Cache, switch on the automatic request and automatic pull options. Wait ten minutes, reload the image optimisation screen and check that the waiting count has fallen and the processed count has risen.

Step 4

Let the service reach your images

Send a batch, then search your access log with grep ' 403 ' for blocked requests on /wp-content/uploads/ made at that time. If a security plugin, Cloudflare bot rule, hosting firewall or hotlink protection is blocking requests, allow the optimisation service or relax the rule for the uploads folder. Send another batch and confirm the log now shows 200 responses and that images come back as optimised.

Step 5

Check PHP image support for local plugins

If you use a local plugin, check that the PHP version running the site has GD or Imagick with WebP and, if wanted, AVIF support, using php -r with function_exists('imagewebp'). On Plesk, use the PHP binary for the site's version. If support is missing, install or enable the extension in the PHP settings, restart PHP, and run the plugin's server check again until it reports WebP as available.

Step 6

Keep only one optimiser active

List active plugins with wp plugin list --status=active and look for more than one tool compressing images, creating WebP or rewriting image URLs. Page builders, themes and cache plugins often include their own. Keep the one you trust, switch off the overlapping features in the others, and clear their settings. Reload a page and check that each image appears once, sharp, with a single rewritten address.

Step 7

Fix delivery on the server or CDN

Choose a delivery method that suits your setup. Behind a CDN, use the plugin's HTML rewrite mode so pages reference .webp files directly. On Apache, check the plugin's .htaccess rules are present. On nginx, or Plesk with static files served by nginx, add the map and try_files rules, run sudo nginx -t and reload. Then rerun the curl test and confirm the content type is image/webp.

Step 8

Purge caches and verify

Purge the plugin page cache, any server cache and the CDN cache. Open the page in a private window, open DevTools, filter the Network panel by images and check the Type column shows webp or avif and the sizes are smaller. Run a lab speed test to compare the image transfer size with your earlier figure, and check a second template, such as a blog post, in the same way.

Edge cases worth knowing

Keeping image optimisation working

  1. Set up a real server cron that triggers WP-Cron every five minutes, so queues move even when the site has no visitors.
  2. Keep one optimiser active, and note in your site records which plugin owns compression, WebP and lazy loading.
  3. After any domain change, staging push or migration, reconnect the cloud service and check the allowance.
  4. Once a month, run the curl check on a recent upload and spot-check a page's HTML for .webp or .avif addresses.
  5. Resize originals before upload. A 6,000 pixel photo compressed well is still far heavier than a 2,000 pixel one; see image size fixes.

For the speed effect of all this across your theme, the WordPress page speed guide covers caching and scripts alongside images.

Questions and answers

1. Why is LiteSpeed image optimisation not working?

LiteSpeed image optimisation usually stops because the site is not linked to QUIC.cloud on its live domain, the automatic pull is off so finished images never come back, or a firewall blocks QUIC.cloud from downloading your originals. Check the connection first, switch on the automatic request and pull options, and make sure WP-Cron runs. If the queue moves but pages still show JPEG files, the WebP replacement setting is off or an old cached copy of the page is being served, so purge every cache layer after changing it.

2. Why is the Elementor image optimiser not working?

The Elementor image optimiser most often fails because the site lost its connection to the Elementor account after a domain or URL change, or because the monthly allowance on the free plan has run out. Reconnect from the live domain and check the remaining allowance. Then look at the bulk screen for errors against single files, and confirm WP-Cron is running so the background queue can move. If images compress but load late or blank, the cause is lazy loading settings rather than the optimiser.

3. What is the best image optimisation plugin for WordPress?

The best image optimisation plugin for WordPress is the one that suits your hosting and delivery set-up, rather than one named product. On shared hosting with weak PHP image libraries, a cloud plugin such as LiteSpeed Cache with QUIC.cloud, ShortPixel or Imagify is easiest. On a server with GD or Imagick supporting WebP and AVIF, a local plugin avoids allowances. Behind a CDN, choose a plugin that rewrites image URLs in the HTML. Whatever you choose, run only one.

4. Why are my images still JPEG after converting to WebP?

Your images are still JPEG because the WebP copies were created but are not being delivered. The page HTML may still point at the JPEG, the server may be ignoring the plugin rewrite rules, or a cache may be serving an older copy. nginx does not read .htaccess files, and Plesk can serve images straight from nginx, which skips Apache rules. Check the page source for webp addresses, test the image with curl and an Accept header, then purge the page cache and the CDN.

5. Do I need a LiteSpeed server to use LiteSpeed image optimisation?

No, the image optimisation in the LiteSpeed Cache plugin works on any web server, because the compression happens on QUIC.cloud rather than on your hosting. What needs a LiteSpeed or OpenLiteSpeed server is the page caching part of the plugin. On Apache or nginx you can still use the image features, but you need another way to cache pages, and you should check that WebP delivery works on your server, because some rewrite methods depend on server rules.

6. Can I use two image optimisation plugins at the same time?

You should not run two image optimisation plugins on the same images. Compressing an already compressed JPEG again lowers quality for little saving, and two plugins rewriting image addresses or adding picture elements can produce broken or duplicated images. It is fine to use one plugin for compression and a separate tool for something unrelated, such as page caching, as long as only one of them handles compression, WebP conversion and URL rewriting. Switch off the overlapping features in the others.

7. Will optimising images improve my SEO?

Optimising images helps SEO indirectly by making pages load faster, which improves Largest Contentful Paint and the experience for visitors on mobile. Google uses page experience signals, but they are a small factor compared with relevant content. Smaller images also mean Google can crawl your pages more efficiently, and correctly named files with good alt text help in image search. Compression alone will not lift rankings for a page that does not answer the search, so treat it as one part of a wider fix.

Check which images on your page are still too heavy

The image optimisation audit on aiwebpageseo.com lists every image on a page with its format, file size and dimensions, so you can see straight away whether your plugin's WebP or AVIF versions are actually being served.

Open Image Optimisation Fixes โ†’
๐Ÿ’ฌ Got a problem?
Related Guides: All Image Optimisation Fixes  ·  Image Fixes in WordPress  ·  Image Format Fixes  ·  Image CDN Fixes  ·  WordPress Page Speed  ·  Learning Hub

About aiwebpageseo

aiwebpageseo.com is a data-driven SEO and AEO (Answer Engine Optimisation) platform providing a free suite of technical SEO tools. Rather than relying on AI-theorised assumptions, the platform analyses live URL performance, delivering objective diagnostics, page speed metrics, CLS debugging, and site crawl data alongside actionable technical tutorials.