A one-second delay in page load time reduces conversions by 7%. A three-second delay causes 53% of mobile users to abandon the page entirely. If your WordPress site is slow, it's not just annoying — it's actively costing you business.
The frustrating part is that WordPress itself isn't inherently slow. A well-configured WordPress site can score 95+ on Google PageSpeed Insights and load in under a second. What makes WordPress slow is almost always the same handful of problems — and they're all fixable. Here's how to diagnose and fix each one.
First, Diagnose Before You Fix
Before touching anything, get a baseline reading. Use these three tools:
- Google PageSpeed Insights (pagespeed.web.dev) — measures real-world Core Web Vitals (LCP, FID, CLS)
- GTmetrix — gives a waterfall view of every resource that loads
- Query Monitor plugin — shows PHP execution time, memory usage, and database queries per page load
Run these before and after each fix. This keeps you from guessing which change actually helped, and it gives you data to show clients or stakeholders when demonstrating improvement.
Problem #1: No Caching
By default, every WordPress page request executes PHP, queries the database, assembles the HTML, and sends it to the browser. This happens fresh for every single visitor. Caching saves the finished HTML and serves it directly, skipping the PHP/database step entirely.
Without caching, a WordPress page might take 800ms to generate server-side. With caching, that same page serves in 30-50ms. It's the single highest-impact fix on this entire list.
How to fix it:
- • Install WP Rocket ($59/year) — the best overall caching plugin. Handles page cache, browser cache, preloading, and more.
- • Free alternative: LiteSpeed Cache if your host runs LiteSpeed web server, or W3 Total Cache for Apache/Nginx.
- • If you're on Kinsta, WP Engine, or SiteGround, they have server-level caching built in — enable it in the hosting dashboard.
Problem #2: Unoptimized Images
Images are usually the largest bytes transferred on any web page. Uploading a 4MB DSLR photo and displaying it at 600px wide is the most common performance mistake I see on WordPress sites.
The fix has two parts: compression (making the file smaller) and modern formats (WebP instead of JPEG/PNG, which is 25-35% smaller at equivalent quality).
How to fix it:
- • Install Imagify or ShortPixel — both bulk-compress existing images and auto-convert to WebP.
- • Add
loading="lazy"to below-the-fold images (WP Rocket does this automatically). - • Enable the fetchpriority="high" attribute on your hero/above-fold image — this is the Largest Contentful Paint (LCP) element and needs to load fast.
- • Before uploading: resize images to their display size maximum. A 1200px wide slider image doesn't need to be 4000px wide.
Problem #3: Too Many Plugins
This is one of WordPress's most misunderstood performance problems. People assume the number of plugins is the issue. It's not — it's what those plugins load. A single poorly coded plugin that adds 40 database queries on every page load is worse than 20 lightweight plugins combined.
Install the Query Monitor plugin and check the "Queries" and "Scripts & Styles" panels. Look for plugins making excessive database queries or loading large JS/CSS files on pages where they're not needed.
How to fix it:
- • Deactivate any plugin you haven't used in 3+ months. Really.
- • Use Plugin Organizer to disable specific plugins on specific pages (e.g., WooCommerce scripts don't need to load on blog posts).
- • WP Rocket's "Remove Unused CSS" feature can strip plugin CSS that's loaded globally but only used on one page.
Problem #4: Bad Hosting
No amount of optimization will fully compensate for underpowered hosting. Shared hosting on Bluehost, HostGator, or GoDaddy's basic plans puts your site on a server with hundreds of other websites competing for the same CPU and RAM.
If your Time to First Byte (TTFB) — the time before your browser receives the first byte of the page — is above 600ms, your host is the problem. You can check TTFB in GTmetrix under "Waterfall."
| Host Type | Typical TTFB | Best For |
|---|---|---|
| Shared (Bluehost basic) | 400–1200ms | Personal sites, low traffic |
| Managed WP (SiteGround) | 100–300ms | Business sites, small stores |
| Managed WP (Kinsta) | 50–150ms | High-traffic, performance-critical |
| VPS (DigitalOcean) | 30–100ms | Technical users, full control |
Problem #5: No CDN
Even fast hosting is slow if your visitors are far from your server. If your server is in New York and your customer is in London, every request travels 5,500 km each way. A CDN (Content Delivery Network) caches your static files — images, CSS, JavaScript — at servers around the world, serving them from the nearest location.
How to fix it:
- • Cloudflare (free plan) — put your site behind Cloudflare. It acts as a CDN, DDoS protection, and caching layer in one. The single best free infrastructure change you can make.
- • BunnyCDN — pay-as-you-go CDN, very cheap (~$1/100GB), pairs well with WP Rocket's CDN feature.
Problem #6: Render-Blocking JavaScript and CSS
Browsers process HTML top-to-bottom. When they encounter a <script> or <link> tag, they stop rendering and download/process that file first. This is called "render-blocking" — the page appears blank to the user while files load.
How to fix it:
- • Enable "Defer JS" in WP Rocket — loads non-critical JavaScript after the page renders.
- • Enable "Optimize CSS Delivery" — inlines critical CSS and loads the rest asynchronously.
- • Minify and combine CSS/JS files to reduce the number of HTTP requests.
- • Use Google Fonts'
display=swapparameter to prevent font-caused render blocking.
Problem #7: A Bloated Page Builder
Page builders like Elementor, WPBakery, and Divi are convenient, but they come at a performance cost. Elementor, for example, loads its own CSS framework and JavaScript on every page — even pages that don't use it. Some Elementor installations add 400-600KB of assets to every page load.
WPBakery (formerly Visual Composer) is one of the worst offenders — it loads its scripts globally and generates extremely bloated HTML.
How to fix it:
- • If rebuilding: consider Bricks Builder or Kadence Blocks with the native block editor — both generate much cleaner output than Elementor.
- • If keeping Elementor: disable unused Elementor widgets via Elementor → Settings → Performance → Experiments. Also enable "Improved Asset Loading" in experiments.
- • Use WP Rocket's CSS optimization to strip Elementor's unused CSS per-page.
Problem #8: Slow or Unoptimized Database
WordPress stores everything in a MySQL database — posts, meta values, options, revisions. Over time, especially on busy WooCommerce stores or sites with many plugins, this database accumulates thousands of transients, post revisions, spam comments, and orphaned metadata that slow down every query.
How to fix it:
- • Install WP-Optimize or use WP Rocket's database optimization — clean transients, spam, revisions, and unused tables.
- • Limit post revisions in
wp-config.php:define('WP_POST_REVISIONS', 5); - • If you have WooCommerce: install WooCommerce Cart Abandonment Recovery with database cleanup, and limit order status logs.
- • For heavy sites, consider Redis object caching — it caches database query results in memory. Most managed WordPress hosts offer this as a one-click add-on.
What a Realistic Optimization Result Looks Like
Here's a realistic before/after from a WooCommerce site I optimized last year. The site was on SiteGround Business hosting with Elementor and 41 plugins:
| Metric | Before | After |
|---|---|---|
| PageSpeed Score (mobile) | 31 | 78 |
| LCP (Largest Contentful Paint) | 6.8s | 1.9s |
| TTFB | 820ms | 190ms |
| Total Page Size | 4.2MB | 1.1MB |
| Number of Requests | 148 | 62 |
No infrastructure changes, no theme rebuild. Just caching, image optimization, plugin cleanup, and asset optimization. The client reported a 22% increase in conversion rate in the following month.
Where to Start
If you're overwhelmed by this list, start here, in order:
- 1Install WP Rocket (highest impact, covers caching, images, assets, database)
- 2Put the site behind Cloudflare (free, takes 10 minutes)
- 3Run Imagify on all images
- 4Move to managed WordPress hosting if TTFB is above 600ms
- 5Review plugins with Query Monitor and remove what you don't need
Most sites see significant improvement from just steps 1–3. The full list is a path to near-perfect performance scores, but don't let perfection stop you from getting started with the quick wins.
Want a professional performance audit?
I offer WordPress speed optimization as a standalone service — full audit, implementation, and before/after report. Get in touch for a quote.