Is your WordPress website slow? You're losing money.
Google confirmed it: a 1-second delay in page load time reduces conversions by 7%. If your site takes 5+ seconds to load, most visitors leave before they even see your offer.
I recently took a client's WordPress site from a 45 PageSpeed score to a perfect 100. In this guide, I'll show you exactly how — step by step.
Why WordPress Sites Get Slow
Before fixing anything, you need to understand why WordPress sites slow down:
- Unoptimized images (biggest culprit)
- Too many plugins running unnecessary scripts
- No caching — PHP regenerates every page on every visit
- Unminified CSS and JavaScript files
- Cheap shared hosting with slow server response times
- Render-blocking resources in
<head> - No CDN — serving files from one location worldwide
Most WordPress sites have 5 or more of these issues. Let's fix them all.
Step 1: Run a Baseline Test
Before touching anything, test your current speed.
Go to PageSpeed Insights and enter your URL. Also run it on GTmetrix.
Write down:
- Performance score (mobile + desktop)
- Largest Contentful Paint (LCP)
- Cumulative Layout Shift (CLS)
- Total Blocking Time (TBT)
- Page size and number of requests
This is your baseline. Every fix you make should improve these numbers.
Step 2: Optimize Every Image
Images are usually 60-80% of your page weight. This is the single biggest win.
Convert to WebP format. WebP images are 25-35% smaller than JPEG/PNG with the same quality.
Use a plugin like Smush or ShortPixel to:
- Convert existing images to WebP automatically
- Compress new uploads on save
- Add width and height attributes to prevent layout shift (CLS)
- Enable lazy loading for below-fold images
For your hero image (the first image visitors see), do NOT lazy load it. Set loading="eager" and fetchpriority="high" so it loads immediately.
Before: Hero image 450KB JPEG, no dimensions set
After: Hero image 89KB WebP, dimensions set, CLS = 0
Step 3: Install a Caching Plugin
Without caching, WordPress runs PHP + database queries for every single visitor. With caching, it serves pre-built HTML files — 10x faster.
Install WP Rocket (paid, best option) or W3 Total Cache (free).
Configure it to:
- Enable page caching
- Enable browser caching
- Minify CSS and JavaScript
- Defer non-critical JavaScript
- Enable GZIP compression
Important: Do NOT defer your main stylesheet CSS. This causes CLS (layout shift) — the page renders unstyled then jumps. Only defer scripts, not styles.
Step 4: Minify CSS and JavaScript
Every CSS and JS file adds HTTP requests and bytes. Minification removes whitespace, comments, and unnecessary characters.
If you're using WP Rocket, it handles this automatically.
If you're doing it manually, use tools like npx terser for JavaScript and cssnano for CSS.
I reduced a client's main.js from 19,859 bytes to 10,986 bytes — a 45% reduction — just by minifying.
Step 5: Use a CDN
A CDN (Content Delivery Network) stores copies of your site's static files (images, CSS, JS) on servers worldwide. When someone in the US visits your site, they get files from a US server — not your server in India or Europe.
Cloudflare (free tier) is the easiest option:
- Sign up at cloudflare.com
- Change your domain's nameservers to Cloudflare
- Enable "Auto Minify" and "Brotli compression"
- Turn on caching
This alone can cut load time by 30-50% for international visitors.
Step 6: Choose Fast Hosting
No amount of optimization fixes bad hosting. If your server response time (TTFB) is over 600ms, you need better hosting.
Look for hosting with:
- LiteSpeed or Nginx servers (faster than Apache)
- PHP 8.1+ support
- SSD storage
- Server locations close to your audience
Hostinger Business plan offers excellent speed at an affordable price. Cloudways is great for scaling.
Avoid cheap shared hosting where your site shares resources with hundreds of others.
Step 7: Audit and Remove Unused Plugins
Every active plugin adds PHP execution time, database queries, and often CSS/JS to every page load.
Go through your plugins and ask:
- Do I actually use this?
- Is there a lighter alternative?
- Can I replace 3 plugins with 1?
Common offenders:
- Page builders loading CSS on every page (even pages that don't use them)
- Contact form plugins loading scripts site-wide
- Social sharing plugins with heavy JavaScript
- Multiple SEO plugins installed simultaneously
Rule of thumb: If a plugin loads scripts on your frontend and you don't need it on every page — either configure it to load only where needed, or replace it.
Step 8: Preload Key Resources
Tell the browser in advance what it will need. Add preload hints in your head tag for your main font file, hero image, and dns-prefetch for Google Fonts. This reduces the time the browser spends discovering these resources late.
Preloading your hero image and primary font can reduce LCP by 0.5-1 second.
Step 9: Fix Render-Blocking Resources
"Render-blocking" means the browser stops loading your page to download and parse a CSS or JS file. This delays when the user actually sees content.
Fixes:
- Move non-critical JS to the footer (or add defer attribute)
- Inline critical CSS (above-the-fold styles) directly in head
- Load Google Fonts asynchronously or self-host them
Self-hosting Google Fonts is underrated. Download the font files, serve them from your own server, and add proper font-display: swap CSS. Zero DNS lookups, zero third-party dependency.
Real Results: 45 to 100 PageSpeed
Here's what we did for a client's WordPress site:
| Fix | Impact |
|---|---|
| Converted images to WebP | -68% image weight |
| Added hero image dimensions | CLS: 0.18 to 0 |
| Enabled caching | TTFB: 800ms to 180ms |
| Minified JS | -45% JS size |
| Removed 6 unused plugins | -12 HTTP requests |
| Added Cloudflare CDN | -40% load time globally |
| Preloaded hero + fonts | LCP: 3.2s to 1.1s |
Final result: Mobile 99 / Desktop 100
Quick Checklist
- [ ] All images converted to WebP
- [ ] Hero image has eager loading and dimensions set
- [ ] Caching plugin installed and configured
- [ ] CSS and JS minified
- [ ] Unused plugins removed
- [ ] CDN enabled (Cloudflare minimum)
- [ ] Fonts preloaded or self-hosted
- [ ] PageSpeed score 90+ on both mobile and desktop
- [ ] CLS under 0.1
- [ ] LCP under 2.5 seconds
Need Help Optimizing Your WordPress Site?
Speed optimization takes time to get right — wrong settings can break your site or cause layout shifts.
At CrestVox Studio, we've optimized WordPress sites from sub-50 scores to 95-100 PageSpeed. We handle everything: image optimization, caching configuration, code minification, CDN setup, and Core Web Vitals fixes.
Get a free speed audit → crestvox.com
Related Posts from CrestVox Studio
- WordPress vs Shopify: Which Platform Should You Choose in 2026?
- Top WooCommerce Mistakes That Kill Your Sales (And How to Fix Them)
- Why Your Shopify Store Is Losing Sales – Proven Fixes That Work
Got questions about a specific step? Drop them in the comments — I read every one.
Originally published on CrestVox Studio Blog
Top comments (0)