How to Speed Up a WordPress Site (Without Breaking It)
A slow WordPress site is almost never slow for exotic reasons. In our experience four causes account for the overwhelming majority: oversized images, cheap hosting, too many plugins, and render-blocking scripts. Fix those and you have usually solved the problem — the remaining tweaks are refinements.
First, measure properly
Before changing anything, get a baseline. Run PageSpeed Insights on your three most important pages and note the Core Web Vitals. Check the field data section if it is available — that is real visitor data and matters more than the lab score.
1. Images — usually the single biggest win
Images are typically 60–70% of page weight on a business site, and the fix is straightforward.
- Convert to WebP — typically 25–35% smaller than JPEG at equivalent quality
- Resize before uploading; a 4000px photo displayed at 800px wastes most of its bytes
- Enable lazy loading for anything below the fold
- Set explicit width and height so the layout does not shift as images load
- Never lazy-load your hero image — it is your LCP element and delaying it directly hurts the metric
2. Hosting
The cheapest shared hosting puts hundreds of sites on one server. When a neighbour gets busy, your site slows down, and no amount of plugin tuning fixes that. If your server response time is above 600ms, hosting is your bottleneck and everything else is a distraction.
| Hosting type | Typical response | Suits |
|---|---|---|
| Budget shared | 800ms – 2s | Very low traffic sites |
| Quality shared | 300 – 600ms | Most small business sites |
| Managed WordPress | 150 – 400ms | Business-critical sites |
| VPS / cloud | 100 – 300ms | High traffic, stores |
3. Caching
Without caching, WordPress rebuilds every page from the database on every request. Page caching stores the finished HTML and serves that instead — frequently the difference between a 1.5s and a 0.4s response.
- Enable page caching (WP Rocket, LiteSpeed Cache, or your host's built-in option)
- Turn on browser caching so repeat visitors re-download less
- Add a CDN if you have visitors outside your host's region
- Exclude cart, checkout and account pages from caching on eCommerce sites
4. Plugins
Plugin count matters less than plugin quality, but both matter. Each active plugin can add queries, scripts and stylesheets to every page — including pages that never use it.
- 1Deactivate and delete anything unused; deactivated plugins are still a security surface
- 2Look for plugins doing one small job that your theme or another plugin already covers
- 3Watch for plugins loading assets site-wide — a contact form plugin should not load on every page
- 4Replace heavy page builders on simple pages with native blocks where practical
5. Fonts
Custom fonts are a common and invisible cause of slow first paint. Each weight is a separate file, and text stays invisible until they load unless you tell the browser otherwise.
- Self-host rather than pulling from a third-party CDN — one less connection to set up
- Load only the weights you actually use; three is usually plenty
- Use font-display: swap so text renders immediately in a fallback
- Preload the font used for your headline
6. Scripts and stylesheets
- Defer JavaScript that is not needed for the initial render
- Remove unused CSS, particularly from page builders
- Load analytics and chat widgets after the page has rendered
- Audit third-party scripts ruthlessly — each one is a request to somebody else's server
What to do, in what order
| Fix | Effort | Typical impact |
|---|---|---|
| Compress and resize images | Low | High |
| Enable page caching | Low | High |
| Remove unused plugins | Low | Medium |
| Upgrade hosting | Medium | High |
| Optimise fonts | Low | Medium |
| Defer JavaScript | Medium | Medium |
| Add a CDN | Medium | Medium (high if international) |
Do the first three rows before considering anything clever. They cost an afternoon and usually solve the problem.
Frequently asked questions
Why is my WordPress site slow?
In most cases: oversized images, no caching, cheap hosting, or too many plugins — often several at once. Start by checking server response time; if it is above 600ms, hosting is the bottleneck.
What is a good page load time?
Aim for LCP under 2.5 seconds on mobile. Total load time is a less useful measure than the Core Web Vitals, because it counts things visitors never wait for.
Do caching plugins actually help?
Substantially, yes — page caching is usually the single largest server-side improvement available on WordPress. Just exclude cart and checkout pages if you run a store.