Your WordPress site scores 38 on Lighthouse. You installed a caching plugin. It's now 42. You're frustrated. Here are 15 fixes that actually move the needle — the ones we apply on every client site audit.
This isn't a list of generic tips you've already read. These are the exact optimizations we run through on every WordPress performance audit, ordered by impact. Some are free. Some require a plugin. A few require a developer. All of them work.
How We Measure Impact
Before we start, let's agree on what "fast" means:
- Largest Contentful Paint (LCP): Under 2.5 seconds. This is how fast your main content loads.
- Cumulative Layout Shift (CLS): Under 0.1. This is how much your page jumps around while loading.
- Interaction to Next Paint (INP): Under 200ms. This is how fast your page responds to clicks.
- Lighthouse Performance Score: 90+ on mobile. Desktop is easy — mobile is where most sites fail.
Every fix below includes an expected impact rating: Low (1-5 points), Medium (5-15 points), or High (15-30+ points).
Part 1: Server & Hosting
Fix 1: Upgrade to PHP 8.2+
Impact: Medium-High | Difficulty: Easy | Cost: Free
PHP 8.2 is 15-25% faster than PHP 7.4 in real-world benchmarks. Most quality hosts let you switch PHP versions from your control panel in under a minute.
How to do it:
- Check your current PHP version: Tools > Site Health > Info > Server
- Test compatibility: Install the "PHP Compatibility Checker" plugin
- Switch via your host's control panel (cPanel, Plesk, or custom dashboard)
- Clear all caches after switching
Watch out for: Old plugins that haven't been updated for PHP 8.x. The compatibility checker will flag these. Update or replace them before switching.
Fix 2: Move to Application-Level Hosting
Impact: High | Difficulty: Medium | Cost: $25-100/month
Shared hosting ($5/month GoDaddy, Bluehost, Hostinger basic) is the single biggest performance bottleneck for most WordPress sites. You're sharing CPU, RAM, and disk I/O with hundreds of other sites.
The upgrade path:
| Hosting Tier | Examples | Typical LCP | Monthly Cost |
|---|---|---|---|
| Shared hosting | GoDaddy, Bluehost, Hostinger basic | 4-8 seconds | $3-10 |
| Managed WordPress | Cloudways, SiteGround GoGeek, A2 Turbo | 1.5-3 seconds | $25-50 |
| Premium managed | Kinsta, WP Engine, Flywheel | 1-2 seconds | $30-100 |
| VPS (self-managed) | DigitalOcean, Vultr, Linode | 1-2 seconds | $12-50 |
For most business sites doing under 100K monthly visits, Cloudways ($14/month for a 1GB DigitalOcean droplet) gives you 80% of the performance of a $100/month Kinsta plan.
Fix 3: Enable Server-Level Caching
Impact: High | Difficulty: Easy | Cost: Free (with good hosting)
Plugin-level caching (WP Super Cache, W3 Total Cache) is fine. Server-level caching is better. The difference: server-level caching serves the cached HTML before WordPress even loads. PHP never executes. The database never gets queried.
- Cloudways: Varnish cache built-in. Enable it in the dashboard.
- Kinsta: Edge caching on their CDN. Automatic.
- Nginx FastCGI Cache: If you manage your own server, this is the gold standard.
- LiteSpeed Cache: If your host runs LiteSpeed/OpenLiteSpeed (many shared hosts do), the LiteSpeed Cache plugin leverages server-level caching.
Pro tip: Don't stack caching plugins. Pick one. If your host has server-level caching, you likely don't need a caching plugin at all — just a cache-clearing mechanism.
Fix 4: Add a CDN
Impact: Medium-High | Difficulty: Easy | Cost: Free-$20/month
A CDN (Content Delivery Network) serves your static files — images, CSS, JS, fonts — from servers physically close to your visitors.
- Cloudflare Free: DNS-level CDN, basic optimization, DDoS protection. Good enough for most sites.
- Cloudflare Pro ($20/month): Adds image optimization (Polish), Mirage (lazy loading for mobile), and better cache rules.
- BunnyCDN ($1/month for most sites): If you don't want Cloudflare's DNS proxy model, BunnyCDN is the fastest pure CDN at the lowest cost.
Impact on LCP: If your audience is geographically distributed (e.g., India + US + UK), a CDN can cut LCP by 500ms-2 seconds for distant visitors.
Part 2: Images & Media
Free Download: Website Project RFP Template
Built from the agency side of the table. Get comparable quotes from every agency you evaluate. Includes evaluation criteria.
Fix 5: Serve Images in AVIF/WebP Format
Impact: High | Difficulty: Easy | Cost: Free
JPEG and PNG are dinosaurs. AVIF is 50% smaller than JPEG at equivalent quality. WebP is 25-30% smaller. Your site is probably serving megabytes of unoptimized images.
Best plugins:
- ShortPixel (free tier: 100 images/month): Converts to AVIF/WebP, serves the right format based on browser support. Also compresses originals.
- Imagify: Similar to ShortPixel. The free tier is more generous (20MB/month).
- EWWW Image Optimizer: Handles conversion locally (no API limits) but uses more server resources.
How it works: These plugins generate AVIF/WebP versions of your images and serve them via `` elements or .htaccess rewrite rules. Old browsers get the JPEG fallback automatically.
Fix 6: Implement Proper Lazy Loading
Impact: Medium | Difficulty: Easy | Cost: Free
WordPress 5.5+ has native lazy loading via the loading="lazy" attribute. But it's not enough:
- Above-the-fold images should NOT be lazy loaded. Your hero image, logo, and any image visible without scrolling should load immediately. Lazy loading your LCP image kills your LCP score.
- Add
fetchpriority="high"to your hero/LCP image. This tells the browser to prioritize downloading it.
How to fix it:
// In your theme's functions.php
add_filter('wp_img_tag_add_loading_attr', function($value, $image, $context) {
// Don't lazy load images in the header/hero
if ($context === 'the_content') {
// First image in content should not be lazy loaded
static $first = true;
if ($first) {
$first = false;
return false; // Removes loading="lazy"
}
}
return $value;
}, 10, 3);
Or use the Perfmatters plugin ($24.95/year), which gives you granular control over lazy loading per element.
Fix 7: Use Responsive Image Sizes
Impact: Medium | Difficulty: Medium | Cost: Free
WordPress generates multiple image sizes on upload (thumbnail, medium, large, full). But many themes serve the full-size image regardless of the container size. A 2400px wide image in a 600px container is wasted bandwidth.
Check for this issue: Right-click any image > Inspect. If the rendered size is much smaller than the intrinsic size, you're serving oversized images.
Fix:
- Ensure your theme uses
wp_get_attachment_image()orthe_post_thumbnail()with a defined size, not just the full URL. - Add custom image sizes that match your layout breakpoints:
add_image_size('card-thumb', 400, 300, true);
add_image_size('hero-desktop', 1200, 600, true);
add_image_size('hero-mobile', 600, 400, true);
- Regenerate thumbnails after adding new sizes (use the "Regenerate Thumbnails" plugin).
Fix 8: Replace Video Embeds with Facades
Impact: Medium-High | Difficulty: Easy | Cost: Free
A single YouTube embed adds 500KB-1.5MB of JavaScript, CSS, and iframe overhead. If you have 3 YouTube videos on a page, you're loading 1.5-4.5MB of YouTube's code before your visitor even clicks play.
The fix: Use a lightweight facade that shows the video thumbnail and only loads the full YouTube player when clicked.
- WP YouTube Lyte (free plugin): Replaces embeds with a facade automatically.
- Perfmatters: Has a YouTube lazy load feature built in.
- Manual: Replace the iframe with a thumbnail image + play button, and load the iframe on click with JavaScript.
> On one client WooCommerce site, replacing 4 YouTube embeds with facades dropped the page weight from 6.2MB to 1.8MB and improved LCP from 5.1s to 2.3s.
Part 3: Code & Assets
Fix 9: Remove Unused CSS and JavaScript
Impact: High | Difficulty: Medium | Cost: $0-49/year
The average WordPress site loads 15-30 plugins. Each one enqueues its CSS and JS on every page — even pages where it's not needed. A contact form plugin loading its 50KB stylesheet on your homepage? That's dead weight.
Tools:
- Asset CleanUp (free): Shows you every CSS/JS file loaded per page. Lets you disable them selectively. This is the single most impactful free optimization tool.
- Perfmatters ($24.95/year): Same concept, cleaner UI, plus script manager for granular control.
- WP Rocket ($59/year): Includes unused CSS removal (generates used CSS per page type).
How to use Asset CleanUp:
- Install and activate.
- Visit each major page type (homepage, single post, product page, contact page).
- The plugin shows every CSS/JS file loaded. Disable the ones that page doesn't need.
- Test thoroughly after each change.
Typical savings: 200KB-800KB per page. That's enormous.
Fix 10: Optimize Font Loading
Impact: Medium | Difficulty: Medium | Cost: Free
Google Fonts loaded via in the are render-blocking. Every font family you add is another round-trip to Google's servers before your text renders.
Fixes (in order of impact):
- Self-host your fonts. Download them and serve from your own domain. Eliminates the DNS lookup + connection to fonts.googleapis.com. Use the google-webfonts-helper tool.
- Use
font-display: swapin your@font-facedeclarations. Text renders immediately with a fallback font, then swaps when the custom font loads. - Preload critical fonts. Add
to your. - Limit font weights. Every weight (400, 500, 600, 700) is a separate file. Most sites need 2-3 weights max.
- Use WOFF2 only. WOFF2 has 99%+ browser support. Don't serve WOFF, TTF, or EOT.
Fix 11: Inline Critical CSS
Impact: Medium | Difficulty: Easy (with plugin) | Cost: $0-59/year
Critical CSS is the minimal CSS needed to render above-the-fold content. Inlining it in the `` means the browser can render the visible page immediately without waiting for external stylesheets.
- WP Rocket: Generates and inlines critical CSS automatically. One-click setup.
- Autoptimize + CriticalCSS.com: Free plugin + $2/month API for automatic critical CSS generation.
- Manual: Use the Chrome DevTools Coverage tab to identify critical CSS, then inline it with a `
Free Download: Website Project RFP Template
Built from the agency side of the table. Get comparable quotes from every agency you evaluate. Includes evaluation criteria.
Written by

Founder & CEO
Rishabh Sethia is the founder and CEO of Innovatrix Infotech, a Kolkata-based digital engineering agency. He leads a team that delivers web development, mobile apps, Shopify stores, and AI automation for startups and SMBs across India and beyond.
Connect on LinkedIn