August 22, 2026
WordPress dashboard showing caching and image optimization settings for site speed improvement
Learn how to speed up WordPress with image compression, caching, hosting upgrades, and plugin audits that reduce load time and improve Core Web Vitals.

A slow WordPress site doesn’t just frustrate visitors – it costs you traffic, conversions, and search rankings. Google’s Core Web Vitals measure Largest Contentful Paint, Cumulative Layout Shift, and Interaction to Next Paint, and every second of delay pushes users toward the back button. Most speed problems trace back to a handful of fixable culprits: bloated images, missing caching, poor hosting, and code that loads everything everywhere. This article walks through the changes that actually move your load time from sluggish to fast, with the exact steps you take in your dashboard and the specific breaks you’ll hit along the way.

The setup

You need access to Plugins > Add New for caching and image tools, your hosting control panel for server-level changes, and potentially wp-config.php via SFTP or the file manager in your host’s dashboard. This article focuses on the mechanical fixes that reduce page weight and server response time, not subjective design tweaks or advanced server tuning that requires command-line access.

Start with images because they dominate page weight

Images make up roughly 34% of the average mobile page weight, and on WordPress sites with galleries or WooCommerce product pages, that percentage climbs higher. The fix splits into two parts: compress existing images and serve them in modern formats.

Install a plugin like ShortPixel, Imagify, or EWWW Image Optimizer from Plugins > Add New. Each plugin scans your media library and rewrites JPEGs and PNGs as WebP or AVIF files, which cut file size by 30-50% without visible quality loss. ShortPixel’s free tier gives you 100 images per month; after that you pay per credit or subscribe. Imagify offers 25 MB monthly free, then shifts to paid plans. EWWW has an unlimited free version that converts locally but is slower, or a paid cloud tier that’s faster.

wordpress performance

After install, go to Settings > ShortPixel (or your chosen plugin). Set compression to Lossy for photos and Glossy if you need near-lossless quality. Enable Create WebP versions and Deliver the next-gen versions via picture tag so browsers that support WebP use it, while older browsers fall back to JPEG. Then click Bulk Optimize to process your entire library. The plugin queues images and converts them in the background.

Next, turn on lazy loading. WordPress 5.5 added native lazy loading for images and iframes, so any <img> tag automatically gets loading="lazy". If your theme or page builder strips that attribute, install a3 Lazy Load or use the lazy load option built into WP Rocket or NitroPack. Lazy loading defers offscreen images until the user scrolls near them, which dramatically improves Largest Contentful Paint on long pages.

Implement page caching to skip PHP execution

Every uncached WordPress page runs a full PHP script and multiple database queries to assemble HTML. Caching stores that final HTML as a static file and serves it directly, bypassing PHP entirely. This single change often cuts server response time from 800 milliseconds to under 150 milliseconds.

Install WP Rocket, LiteSpeed Cache (if your host runs LiteSpeed), or W3 Total Cache. WP Rocket is premium ($59 per year for one site) but includes page cache, minification, lazy load, and CDN integration in one interface. LiteSpeed Cache is free but only works on LiteSpeed servers; if your host uses Apache or Nginx, skip it. W3 Total Cache is free and works on any stack, but its dashboard is dense and intimidating for first-time users.

For WP Rocket, go to Settings > WP Rocket after activation. The File Optimization tab has checkboxes for Minify CSS files and Minify JavaScript files. Check both. Scroll to Optimize CSS delivery and enable it; this inlines critical CSS and defers the rest. Under the Media tab, confirm Enable for images and Enable for iframes and videos are checked. Save and clear your cache. The plugin now serves cached HTML on every page load until you update a post or theme file, which purges the relevant cache entries.

For WooCommerce sites, go to WP Rocket > Advanced Rules and add cart, checkout, and my-account URLs to the Never Cache URL(s) list. These pages show user-specific content and must stay dynamic. Add one URL per line:

/cart/
/checkout/
/my-account/

Object caching stores database query results in memory, so repeated queries return instantly. If your host offers Redis or Memcached, install the Redis Object Cache plugin from Plugins > Add New. Activate it, go to Settings > Redis, and click Enable Object Cache. The plugin connects to your host’s Redis instance (most managed hosts auto-configure this) and caches transients, post queries, and term lookups.

Audit your plugins and hosting tier

Every active plugin adds overhead. Some plugins – like contact forms or SEO tools – have negligible impact. Others – like page builders, social share counters, or related-post engines – fire dozens of queries per page. Go to Plugins > Installed Plugins and deactivate anything you haven’t used in 30 days. If you need a plugin’s feature occasionally, activate it on demand instead of leaving it running.

Use the Query Monitor plugin to see which plugins slow your site. Install it from Plugins > Add New, activate, and load a typical page on the front end. Click the Query Monitor link in the admin bar, then the Queries by Component tab. This lists every plugin and theme file with the number of database queries and total execution time. If one plugin accounts for 40% of query time, find a lighter alternative or disable the specific feature causing the slowdown.

Hosting matters more than any plugin. Shared hosting on a $5-per-month plan puts your site on a server with hundreds of other accounts, competing for CPU and memory. If your server response time (Time to First Byte) exceeds 600 milliseconds, your hosting is the bottleneck. Upgrade to managed WordPress hosting like WP Engine, Kinsta, or Cloudways, or move to a VPS with dedicated CPU cores. Managed hosts run object caching, server-level caching, and CDN integration by default, which eliminates the need for many optimization plugins.

What breaks

Caching plugin conflicts with the theme or page builder

You enable WP Rocket or LiteSpeed Cache, clear the cache, and your homepage looks broken – missing styles, jumbled layout, or JavaScript features that don’t fire. The cause is usually CSS or JavaScript minification combining files in the wrong order, or critical CSS inlining that strips styles the theme expects in the head. Go to Settings > WP Rocket > File Optimization and uncheck Combine CSS files and Combine JavaScript files. Save and clear the cache. If that fixes it, re-enable one at a time to find the conflict. If the problem persists, disable Optimize CSS delivery. Some themes load critical CSS inline already, and doubling up breaks rendering.

WebP images don’t display or show broken icons

You bulk-convert images to WebP, but some browsers or plugins show a gray box or broken image icon. The plugin created WebP files but didn’t configure your server to serve them with the correct MIME type. Check your .htaccess file in the root directory via SFTP or the file manager. Look for a block that starts with <IfModule mod_rewrite.c> and contains rewrite rules for WebP. If it’s missing, add this after the WordPress rewrite block:

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

Save, upload, and clear your cache. If your server runs Nginx instead of Apache, add the equivalent config to your nginx.conf or ask your host to do it.

Cache purges but new content still shows stale version

You publish a post or update a product, purge the cache, and the old version still appears on the front end. The plugin purged its own cache but didn’t purge your CDN cache, or your host runs an additional server-level cache layer. If you use Cloudflare, go to your Cloudflare dashboard, click Caching > Configuration, and click Purge Everything. Then go back to Settings > WP Rocket > CDN (or your plugin’s equivalent) and enter your Cloudflare API key so the plugin auto-purges Cloudflare on every cache clear. If your host is Kinsta, WP Engine, or SiteGround, they run their own edge cache. Log into your host’s dashboard and find the Purge Cache or Clear CDN Cache button. Some hosts let you purge via a plugin; check your host’s documentation for the exact integration method.

FAQs

Do I need a CDN if my hosting already has caching?

Yes, if your audience is geographically spread. A CDN stores static assets – images, CSS, JavaScript – on servers around the world and serves them from the location closest to each visitor. Hosting caching speeds up dynamic page generation on your origin server, but the HTML still travels the full distance from your server to the user. Cloudflare’s free tier gives you global CDN with automatic SSL and DDoS protection. Connect it by changing your domain’s nameservers in your registrar’s dashboard to the ones Cloudflare provides, then enable Auto Minify and Brotli in the Cloudflare Speed settings.

Should I disable WordPress embeds and emojis?

Only if you never paste YouTube links or use emoji in posts. WordPress loads wp-embed.min.js and wp-emoji-release.min.js on every page by default. Disabling them saves two HTTP requests and about 15 KB. Add this to your theme’s functions.php or a custom plugin:

remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'wp_print_styles', 'print_emoji_styles' );

The impact is small, but on a site with hundreds of embeds or no emoji use, it’s a free win.

Can I speed up WooCommerce checkout specifically?

Disable cart fragments if you don’t show a live cart count in the header. WooCommerce’s cart fragment AJAX fires on every page load to update the mini cart widget, adding 200-500 milliseconds. Install the Disable Cart Fragments plugin or add this to functions.php:

add_action( 'wp_enqueue_scripts', function() {
  wp_dequeue_script( 'wc-cart-fragments' );
}, 11 );

On checkout, disable unnecessary payment gateways and shipping methods. Each active gateway loads its own JavaScript and CSS. Go to WooCommerce > Settings > Payments and disable any method you don’t actively use. Under Shipping, remove shipping zones and methods that don’t apply to your customers.

What’s the difference between page cache and object cache?

Page cache stores the final rendered HTML of a page and serves it to every visitor until you change the content. Object cache stores individual database query results in memory so WordPress doesn’t re-run the same query multiple times per page load. Page cache has the bigger speed impact for anonymous visitors. Object cache helps logged-in users and admin pages, which can’t use page cache because they show personalized content. Use both for maximum speed – page cache via WP Rocket or LiteSpeed Cache, object cache via Redis Object Cache if your host supports it.

How do I test if my speed changes actually work?

Run a before-and-after test with GTmetrix, WebPageTest, or Google PageSpeed Insights. GTmetrix shows waterfall charts that reveal which assets load slowly. Focus on Time to First Byte (server response), Largest Contentful Paint (main content visibility), and total page size. After each change – image compression, caching, plugin removal – clear your cache, test in an incognito window, and compare the metrics. A good baseline for WordPress is TTFB under 300 milliseconds, LCP under 2.5 seconds, and total page weight under 2 MB. If you implement caching and image optimization and still exceed those numbers, your hosting is the next variable to fix.

Verdict: Start with image compression and caching if you’re on shared hosting with decent uptime, because those changes deliver the biggest speed gains per hour invested. Upgrade your hosting tier first if your server response time exceeds 600 milliseconds, because no plugin can overcome a slow origin server. Combine both approaches on a high-traffic WooCommerce site where every 100-millisecond improvement translates directly to conversion rate.