A slow WordPress site costs you twice. Visitors leave before the page finishes loading, and Google ranks the faster competitor above you.
Page speed is a confirmed Google ranking factor, and Core Web Vitals are part of the algorithm. You may have seen the claim that a one second delay cuts conversions by 7%. That number traces back to an internal Amazon test from around 2006 and has been recycled ever since. A more recent and better documented figure comes from Google and Deloitte’s 2020 study “Milliseconds Make Millions”, which found that a 0.1 second improvement in mobile load time lifted retail conversion rates by 8.4%. The exact percentage will vary by site. The direction never does.
WordPress performance problems are almost always fixable. Most slow sites share the same handful of issues, and most of those have practical solutions that don’t need a developer. This guide covers all of them, ordered from highest impact to more advanced.
Step 1: Measure First, Then Optimize
Before changing anything, get a baseline. You can’t tell if your fixes are working without knowing where you started.
Three tools are worth your time:
Google PageSpeed Insights (pagespeed.web.dev) matters most because it uses real user data and reports your Core Web Vitals directly. These are the metrics Google uses in ranking (we cover the ranking side in detail in Does Core Web Vitals affect SEO):
- Largest Contentful Paint (LCP): how long it takes for the main content to appear. Aim for under 2.5 seconds.
- Interaction to Next Paint (INP): how quickly the page responds to user interaction. Aim for under 200 milliseconds.
- Cumulative Layout Shift (CLS): how much the layout jumps around while loading. Aim for under 0.1.
GTmetrix gives you a waterfall showing which files load, in what order, and how long each one takes. This is where you find the specific bottleneck.
Pingdom Tools lets you test from different geographic locations, useful if your audience is concentrated in one region.
Run your homepage and two or three of your most important pages through PageSpeed Insights and GTmetrix at minimum. Write down the scores and the specific recommendations each tool flags. Those recommendations map directly onto the steps below.
Step 2: Start with Your Hosting
Hosting is the foundation. No amount of plugin work compensates for an underpowered server.
On cheap shared hosting, the server itself is the bottleneck. You’re sharing resources with hundreds or thousands of other sites, and when any of them spikes, yours slows down. Fix this first, especially for a business site.
What to look for in performance-oriented hosting:
Server-side caching. Good WordPress hosts include server-level caching (Nginx FastCGI cache, Redis, or Varnish) that serves pages from memory instead of regenerating them from the database on every visit. This alone can cut TTFB (Time to First Byte) by 30-40% or more.
PHP 8.x. PHP 8 is noticeably faster than PHP 7.x, which many sites are still running. Check your version under Tools > Site Health > Info > Server. If you’re on 7.4 or older, ask your host to upgrade.
NVMe or SSD storage. Disk read speed affects how quickly the server retrieves your database and files.
Data centre location. The server should sit close to most of your visitors. If your audience is in Ontario, a Canadian data centre will beat one in the US or Europe, all else being equal.
If you run a business website on a $5/month shared plan, upgrading hosting is the highest-return move available to you. Managed WordPress hosting from Kinsta, WP Engine, or Cloudways is built for WordPress performance and handles many of the optimizations in this guide at the infrastructure level.
Step 3: Install a Caching Plugin
Caching is the most impactful plugin-level change you can make. Without it, WordPress builds a fresh page for every visitor by running PHP and database queries each time. With it, WordPress serves a pre-built static HTML file. The difference is large.
Three caching plugins have earned their reputation:
WP Rocket is the one we install on most client sites. Page caching, browser caching, minification, lazy loading, and database cleanup all work out of the box with little configuration. The dashboard is clear and it rarely conflicts with themes or plugins. The downside is that it’s paid only, from around $59/year for one site.
Key WP Rocket settings to enable:
- Page caching (on by default)
- Browser caching
- GZIP compression
- Minify HTML, CSS, and JavaScript
- Defer non-critical JavaScript
- Lazy load for images and iframes
- Database cleanup (schedule it weekly)
W3 Total Cache is the most configurable free option: page, browser, object and database caching, CDN integration, and minification. The tradeoff is complexity. It has a steep learning curve, and a misconfigured install can slow the site down or break pages. If you’re comfortable with technical settings, it’s a powerful free tool. If not, start with WP Rocket or LiteSpeed Cache.
LiteSpeed Cache is the right pick if your host runs a LiteSpeed web server (common with cPanel hosts such as Hostinger, A2 Hosting, and Namecheap). It uses server-level caching other plugins can’t reach, which makes it very fast in that environment. On non-LiteSpeed servers the plugin still works but loses its main advantage.
One rule: never run two caching plugins at once. They conflict, and the usual result is slower pages and broken layouts. Pick one and configure it fully.
Step 4: Optimize Your Images
Images are almost always the largest share of page weight, roughly 45% of total size on an average page. Large, uncompressed images are one of the most common reasons WordPress sites score badly in PageSpeed Insights.
Image optimization has two parts: compression and format.
Compression shrinks file size without a visible loss in quality. ShortPixel, Imagify, and Smush connect to your media library and compress images as you upload them. Most images lose 50-80% of their file size with no difference the eye can see.
Format matters as well. WebP delivers the same visual quality as JPEG or PNG at roughly 25-35% smaller size, and every current browser supports it. ShortPixel and Imagify can convert your existing library to WebP and serve it automatically.
Two practical rules:
Never upload images larger than your layout displays. If blog images render at 800px wide, a 4000px original is wasted bytes. Resize before uploading.
Use JPEG for photographs, PNG for graphics that need transparency, and WebP wherever you can.
Lazy loading means images load only when the visitor scrolls near them, instead of all at once. WordPress has had native lazy loading since version 5.5, and most caching plugins (WP Rocket included) extend it to iframes and videos. Make sure it’s on. If you want to go deeper, including how to exclude above-the-fold images so lazy loading doesn’t hurt LCP, read our guide to lazy loading in WordPress.
Step 5: Use a Content Delivery Network (CDN)
A CDN keeps copies of your static assets (images, CSS, JavaScript, fonts) on servers in many locations. When someone loads your site, those files come from the server nearest to them rather than from your origin.
This matters whenever visitors are far from your server’s physical location. Less distance for the data to travel means less load time.
Cloudflare is the most widely used CDN and its free tier covers basic CDN delivery, DDoS protection, and some performance features. The Pro and Business plans add more aggressive caching, image optimization, and Polish (automatic WebP conversion). Cloudflare works at the DNS level, so it sits in front of your server and filters traffic before it reaches WordPress.
BunnyCDN is a cheaper alternative with strong performance and simple pricing. Many WordPress developers prefer it.
KeyCDN and Amazon CloudFront suit sites that need more configuration control.
WP Rocket, W3 Total Cache, and LiteSpeed Cache all have built-in CDN settings. Connecting one usually takes 10-15 minutes.
Step 6: Minify and Defer CSS and JavaScript
Older speed guides told you to do three things here: minify, combine, and defer. Two of those still apply. Combining doesn’t.
Minification strips whitespace, comments, and unneeded characters from CSS and JavaScript files. The files get smaller and behave exactly the same. Enable HTML, CSS, and JS minification in your caching plugin (in WP Rocket it’s under File Optimization). Be careful with JS minification: some scripts break when minified, so check the site for visual or functional issues afterwards.
Combining files (concatenation) was the standard advice when browsers could only open a few connections at a time. Under HTTP/2 and HTTP/3 the browser multiplexes many small files over a single connection, so merging everything into one giant file gains nothing and often hurts, because a change to one line invalidates the cache for the whole bundle. WP Rocket removed its Combine JavaScript option for this reason. If your plugin still offers combine, leave it off.
Defer non-critical JavaScript is the setting that moves the needle most in this step. By default scripts load synchronously and block rendering until each one finishes. Deferring tells the browser to load those scripts after the main content, which improves LCP directly.
Render-blocking resources (scripts and stylesheets that stop the page displaying until they’ve loaded) are one of the most frequent PageSpeed Insights warnings. Deferred loading and a sensible load order usually clear most of them.
Step 7: Clean Up and Optimize Your Database
WordPress keeps everything in its database: posts, pages, comments, plugin settings, revisions, and a lot of accumulated junk. Over time it fills with:
- Post revisions (WordPress saves one every time you save a draft)
- Spam and trashed comments
- Orphaned data from deleted plugins
- Transients (temporary data that doesn’t always clean itself up)
- Overhead from deleted rows
A bloated database makes queries slower, which raises TTFB and drags down load time everywhere. On older blogs the biggest offender is usually the comments table: if nothing filters spam, tens of thousands of junk rows pile up in wp_comments. Emptying the spam folder helps once. The lasting fix is to stop WordPress comment spam before it gets written to the database at all.
Database cleanup tools:
WP-Optimize is the most popular dedicated cleaner. It removes revisions, spam, and orphaned data, defragments tables, and runs on a schedule so you don’t have to remember.
WP Rocket has database optimization built in under its Database tab, so if you already use it you don’t need another plugin.
Adminer or phpMyAdmin give direct database access for advanced cleanup, if you’re comfortable writing SQL.
Cap revisions at 3 per post instead of unlimited by adding this line to wp-config.php:
define( 'WP_POST_REVISIONS', 3 );
Step 8: Choose a Lightweight Theme
Your theme directly affects load time. Heavy themes with dozens of built-in features, animations, and multiple slider scripts ship far more CSS and JavaScript than lean ones.
The fastest WordPress themes have a few things in common: minimal default CSS, modular loading (scripts only where a page needs them), no bundled plugins trying to replace standalone tools, and clean code.
GeneratePress and Astra are the two most recommended performance themes. Both come in under 30KB in their base configuration, while many premium themes load 300-500KB of CSS before a single image. Both work with the major page builders if you need visual editing. For the full filter we apply (payload, mobile-first, update cadence, plugin compatibility), see our guide on how to choose a WordPress theme.
If your theme is heavy and you’re not ready to switch, look at what it loads by default. Some themes load slider libraries, icon fonts, and animation libraries on every page even where nothing uses them. Asset CleanUp or Perfmatters lets you switch specific scripts and stylesheets off on pages that don’t need them.
Step 9: Audit and Reduce Your Plugins
Every active plugin adds code that runs on your server. Some cost almost nothing. Others are heavy and slow the whole site down.
The cost depends on what the plugin does. A plugin that adds features through JavaScript adds requests and file size. One that runs database queries on every page load adds server time. One that calls an external API on every page load can add real latency.
How to find the slow ones:
Query Monitor is a free plugin that shows database queries, HTTP requests, and script load time per plugin. Use it on a staging site to see which plugins generate the most overhead.
GTmetrix waterfall shows every file loading on the page and how long each takes. If a plugin drags a large JavaScript library onto every page, you’ll spot it here.
Plugin reduction rules:
Delete unused plugins rather than just deactivating them. Inactive plugins still have files on your server and some still run database queries.
Look for consolidation. If you have separate plugins for contact forms, newsletter signup, popups, and social sharing, one well-built tool may replace several of them.
Avoid plugins that load large JavaScript libraries (full jQuery UI, Slick Slider, and the like) on pages that don’t need them.
Step 10: Enable GZIP or Brotli Compression
Compression is a server-level feature that shrinks the files sent from your server to the browser. GZIP typically reduces HTML, CSS, and JavaScript by 60-80%. Brotli, a newer algorithm supported by all current browsers, compresses a little better still.
Most caching plugins enable GZIP through .htaccess rules. To check whether it’s on, open your browser’s developer tools, go to the Network tab, and look at the Content-Encoding header on any page response. Online GZIP checkers work too.
If your host supports Brotli, turn it on. It’s available on many LiteSpeed and Nginx servers; ask your host or look in your control panel.
If you would rather hand all of this to someone else, our WordPress speed optimization service covers the audit and the fixes.
Quick Priority Checklist
For a site that needs improvement now, work through these in order:
- Test with Google PageSpeed Insights and GTmetrix to get your current scores and specific issues
- Check your PHP version and upgrade to PHP 8.x if needed
- Install and configure a caching plugin (WP Rocket is the fastest to set up correctly)
- Compress and convert images to WebP with ShortPixel or Imagify
- Enable lazy loading for images and iframes
- Set up Cloudflare (free tier) for CDN and basic performance features
- Enable GZIP or Brotli compression (usually through your caching plugin or host)
- Minify HTML, CSS, and JavaScript, and leave “combine” off
- Defer non-critical JavaScript
- Clean your database and limit post revisions
- Audit your plugins and remove what you don’t need
- Evaluate your theme’s performance footprint
What a Typical Run of This Checklist Looks Like
Numbers on a checklist are abstract, so here is the pattern we see most often when we apply steps 2 through 9 to a WordPress business site on shared hosting with a page-builder theme. These are illustrative values drawn from that typical starting point, measured the way we always measure: PageSpeed Insights, mobile, field data. Your own before and after will differ, but the shape of the change is consistent.
| Core Web Vital | Typical before | Typical after | Google’s “good” threshold |
|---|---|---|---|
| LCP | 4.1 s | 1.9 s | Under 2.5 s |
| INP | 310 ms | 140 ms | Under 200 ms |
| CLS | 0.24 | 0.04 | Under 0.1 |
Most of the LCP gain usually comes from two moves: getting off shared hosting and deferring the page builder’s JavaScript. Image compression and WebP do the rest. INP improves once the render-blocking scripts are deferred and unused plugin assets are removed. CLS drops almost entirely from fixing image dimensions and font loading, which is why it moves the most in percentage terms.
FAQ: WordPress Speed Optimization
What is a good page load time for WordPress?
Under 2 seconds is the standard target for total load time. For Core Web Vitals specifically: LCP under 2.5 seconds, INP under 200 milliseconds, and CLS under 0.1. Google considers these thresholds “good” scores and they’re what you should be aiming for in PageSpeed Insights.
What is the single biggest cause of a slow WordPress site?
It depends on the site, which is why testing first is important. The most common culprits are low-quality shared hosting with no server-side caching, large unoptimized images, and too many resource-heavy plugins. For most sites, fixing those three areas produces the biggest improvement.
Do I need a caching plugin if my host already does caching?
Possibly not, or you may need a lighter one. Managed WordPress hosts like Kinsta and WP Engine include server-side caching that can replace what a caching plugin does for page serving. Caching plugins also handle minification, lazy loading, database optimization, and CDN integration, which server-side caching doesn’t cover. Check what your host provides and configure accordingly to avoid duplication.
Is WP Rocket worth the cost?
For most business websites, yes. The time saved in configuration, the breadth of features, and the reliability make it worth the annual fee. If budget is tight, LiteSpeed Cache (free, on compatible servers) or W3 Total Cache with the Smush image optimizer can get similar results with more effort.
How does page speed affect my Google rankings?
Google confirmed page speed as a ranking factor for mobile search and expanded Core Web Vitals as a ranking signal through its Page Experience update. A slow page won’t necessarily drop out of rankings if it has strong content and authority, but a fast page, all else being equal, will rank above a slow one. Speed also affects bounce rate: users who leave before a page loads are a behavioural signal Google can read as poor quality.
Can I speed up WordPress without a plugin?
Yes, some improvements don’t require plugins. Upgrading PHP, choosing a lightweight theme, compressing images before uploading, enabling GZIP at the server level through .htaccess, and moving to better hosting all improve speed without any plugins. But for most site owners, caching and image optimization plugins provide the most speed improvement per hour invested.
How do I know which plugins are slowing down my site?
Use the Query Monitor plugin to see how much each plugin contributes to page generation time and database queries. GTmetrix’s waterfall shows all the external files loading and their load times. If a plugin’s assets appear repeatedly and load slowly, that’s your target for replacement or reconfiguration.
What is lazy loading and should I enable it?
Lazy loading delays the loading of images and iframes until the user scrolls close to them rather than loading everything when the page first opens. It reduces initial page weight and is particularly effective on pages with many images. WordPress has had native lazy loading for images since version 5.5, and caching plugins extend it to videos and iframes. Enabling it is almost always beneficial, as long as above-the-fold images are excluded.
Does a CDN really make a difference for a local business?
For visitors located near your server, the impact is smaller. For visitors outside that region, a CDN can cut load times noticeably by reducing the distance data travels. Even for local businesses, Cloudflare’s free tier adds benefits beyond geography: HTTP/2 and HTTP/3 delivery, caching at the edge, and DDoS protection. It’s worth setting up regardless of where your audience is.
My site scores well on desktop but poorly on mobile. Why?
Mobile devices have less processing power than desktops, so JavaScript execution is much slower. Mobile connections are also more variable. The main fixes for poor mobile scores are reducing JavaScript, deferring non-critical scripts, making above-the-fold content load first, and using next-gen image formats. Google uses mobile Core Web Vitals in its ranking signals, so mobile should be the priority.
If your WordPress site has speed issues that plugins alone haven’t fixed, our technical SEO service includes a full Core Web Vitals audit with specific fixes. For a fast, properly built WordPress site from the start, our WordPress web design and WordPress maintenance service cover both the build and ongoing performance monitoring.
