WordPress Speed

WordPress Speed Optimisation Checklist: 30 Fixes in Priority Order

The complete WordPress speed checklist — 30 fixes organised by priority and difficulty. Start with the quick wins, work down to advanced optimisations.

Jamie McKaye
Jamie McKaye
10 min read
WordPress Speed Optimisation Checklist: 30 Fixes in Priority Order
Key Takeaways
  • Start with the quick wins (items 1–8) — they take minutes each and deliver the highest impact per unit of effort
  • Medium-priority items (9–20) require more technical knowledge but unlock the next tier of performance gains
  • Advanced items (21–30) require server access and engineering expertise — this is where professional optimisation services earn their value
  • You don’t need to complete all 30 items to see dramatic improvement — most sites see a 40–60 point PageSpeed increase from items 1–12 alone
  • Order matters: fix server/hosting issues first, then assets, then delivery — optimising CSS is pointless if your TTFB is 2 seconds

How to Use This Checklist

Each item includes a difficulty rating (Easy / Medium / Hard) and an estimated impact on PageSpeed scores (High / Medium / Low). Start from the top and work down — the list is deliberately ordered by ROI, with the highest-impact, lowest-effort items first. It’s the practical companion to our complete WordPress speed optimisation guide.

Priority matrix with four quadrants — high impact easy fixes densely packed in green top-left, high impact hard in amber top-right, low impact easy sparse bottom-left, low impact hard nearly empty in red bottom-right
Start top-left: high impact, easy to implement. Work diagonally toward bottom-right. The first 8 items typically deliver 60% of total speed improvement.

Check each item off as you complete it. Test your PageSpeed score after every 3–4 changes to track progress. Some changes interact — image optimisation plus lazy loading plus CDN together deliver more than the sum of their individual impacts.

Not sure it’s worth the effort? Here’s how slow Core Web Vitals impact your SEO rankings. If you complete items 1–8 and your score is still below 70, the remaining issues are server-level problems that require the advanced items (21–30). If you complete 1–12 and score above 85, focus on the medium-priority items for the final push to 95+.

Quick Wins — Do These First

1. Upgrade PHP to 8.2+ Easy High Impact

PHP 8.2 is 30–50% faster than PHP 7.4 for WordPress workloads. This single change can reduce TTFB by 100–300ms. Check your current version in WordPress dashboard (Tools → Site Health) or via php -v on the server. Upgrade in your hosting control panel — most managed hosts support one-click PHP version changes. Test on staging first, as some older plugins may not be compatible with PHP 8.2+.

2. Install and configure a caching plugin Easy High Impact

If your host doesn’t provide server-level page caching, install WP Rocket ($59/year) or WP Super Cache (free). Enable page caching, browser caching, and cache preloading. This eliminates the PHP + database overhead for repeat visitors. See our complete caching guide for configuration details. Impact: 30–70% faster page loads for cached pages.

3. Enable Brotli or Gzip compression Easy High Impact

Text compression reduces the transfer size of HTML, CSS, and JavaScript by 60–80%. Brotli provides 15–20% better compression than Gzip. Check if compression is enabled: curl -H "Accept-Encoding: br,gzip" -I your-site.com — look for Content-Encoding: br or Content-Encoding: gzip. Most hosts enable Gzip by default. Cloudflare enables Brotli automatically. If neither is enabled, add Gzip via .htaccess (Apache) or nginx.conf.

4. Compress all existing images Easy High Impact

Install ShortPixel or Imagify and run the bulk optimiser on your entire media library. Use lossy compression at quality 80 (or “glossy” in ShortPixel). Enable WebP conversion. Expected result: 60–80% reduction in total image file sizes. This is typically the single largest payload reduction available. See our complete image optimisation guide.

5. Enable lazy loading for images Easy Medium Impact

WordPress 5.5+ adds loading="lazy" to images automatically. Verify by inspecting image tags in your page source. Ensure your hero/LCP image does NOT have lazy loading — WordPress 6.3+ handles this automatically, but check. Lazy loading prevents below-fold images from blocking initial page load.

6. Remove unused plugins Easy Medium Impact

Deactivate and delete every plugin you’re not actively using. Each plugin adds database queries, CSS files, and JavaScript to your site — even if it’s only active in the admin. Audit your plugin list: if you can’t explain what a plugin does within 5 seconds, you probably don’t need it. After deletion, check wp_options for leftover autoloaded data from the removed plugin.

7. Add explicit image dimensions Easy Medium Impact

Ensure every <img> tag has width and height attributes. This prevents Cumulative Layout Shift (CLS) — a Core Web Vitals metric. WordPress adds these automatically for editor-inserted images, but check custom theme templates and page builder output. Run PageSpeed Insights and look for the “Image elements do not have explicit width and height” diagnostic.

8. Set up Cloudflare CDN (free tier) Easy Medium Impact

Point your domain’s DNS to Cloudflare. The free tier provides global CDN caching for static assets, Brotli compression, and basic DDoS protection. Setup takes 15 minutes. Static assets (CSS, JS, images) are automatically cached at 300+ global edge locations. International visitors see dramatic speed improvements. For WordPress-specific edge caching, add Cloudflare APO ($5/month).

Medium Priority

9. Convert images to WebP Medium High Impact

If you haven’t already done this as part of item 4, convert all images to WebP format. WebP is 25–35% smaller than JPEG at equivalent quality. ShortPixel, Imagify, and the WebP Express plugin all handle conversion automatically. Ensure your server or CDN serves WebP to supported browsers with proper content negotiation or <picture> elements.

10. Defer non-critical JavaScript Medium High Impact

Add defer to all JavaScript files that aren’t needed for above-fold rendering. Use the script_loader_tag filter in functions.php or enable WP Rocket’s “Delay JavaScript” feature. This eliminates render-blocking JavaScript and can improve FCP by 1–3 seconds on mobile. See our complete JavaScript deferral guide. Test thoroughly — jQuery-dependent features may break.

11. Remove unused CSS Medium High Impact

Use Chrome DevTools Coverage tab to identify unused CSS. Remove it via WP Rocket’s “Remove Unused CSS” feature, Asset CleanUp Pro (per-page management), or PurgeCSS (build tool). Typical WordPress sites load 60–85% unused CSS. See our complete CSS removal guide. Always test on staging first — CSS removal can break hover states and JavaScript-dependent styles.

12. Inline critical CSS Medium High Impact

Extract the CSS needed for above-fold content and inline it in the <head>. Defer the full stylesheet. This eliminates render-blocking CSS entirely. WP Rocket does this automatically. For manual implementation, use the Critical or Penthouse tools. The single most impactful CSS optimisation technique — can transform FCP from 3+ seconds to under 1 second.

13. Clean database (revisions, transients, spam) Easy Medium Impact

Delete post revisions (wp post delete $(wp post list --post_type=revision --format=ids) --force), expired transients (wp transient delete --expired), and spam comments. Set WP_POST_REVISIONS to 3 in wp-config.php. Run wp db optimize to reclaim space. See our database optimisation guide.

14. Optimise autoloaded options Medium Medium Impact

Check autoloaded data size: wp db query "SELECT SUM(LENGTH(option_value)) FROM wp_options WHERE autoload='yes'". If over 1MB, identify and remove options from deleted plugins. Change rarely-used options to non-autoloaded. This directly reduces PHP memory usage and speeds up every uncached page load.

15. Preload the LCP image Medium Medium Impact

Add a <link rel="preload"> tag in the <head> for your LCP image. This tells the browser to start downloading the image before it encounters the <img> tag in the HTML. Combined with fetchpriority="high" on the image itself, this can improve LCP by 200–500ms. Most effective when the LCP image URL is predictable (same hero image on every page).

16. Preconnect to third-party origins Easy Low Impact

Add <link rel="preconnect"> tags for third-party domains your site loads resources from (Google Fonts, analytics, CDN domains). This establishes TCP/TLS connections early, saving 100–300ms per domain. Example: <link rel="preconnect" href="https://fonts.googleapis.com" crossorigin>.

17. Self-host Google Fonts Medium Medium Impact

Download your Google Fonts and serve them from your own domain. This eliminates DNS lookup + connection to fonts.googleapis.com and fonts.gstatic.com (two extra third-party connections). Use font-display: swap or font-display: optional to prevent font loading from blocking rendering. Better still, use system fonts — they load instantly with zero network requests.

18. Limit post revisions in wp-config Easy Low Impact

Add define('WP_POST_REVISIONS', 3); to wp-config.php. This prevents future revision accumulation. Combined with the one-time cleanup in item 13, this keeps your database lean permanently.

19. Disable wp-cron and use real cron Medium Low Impact

WordPress’s built-in wp-cron runs on every page load, adding 50–100ms of overhead. Disable it with define('DISABLE_WP_CRON', true); in wp-config.php and set up a real server cron job to trigger it: */5 * * * * curl -s https://your-site.com/wp-cron.php >/dev/null 2>&1. This runs scheduled tasks every 5 minutes without impacting page load performance.

20. Audit and replace heavy plugins Medium Medium Impact

Use Query Monitor to identify plugins that add the most database queries or load the heaviest CSS/JS. Common replacements: swap Elementor Forms for WPForms Lite, replace Jetpack with individual lightweight plugins for the features you actually use, switch from Slider Revolution to a CSS-only approach. Each heavy plugin replaced can save 100–500ms of load time. Not sure which plugins are the culprits? Our guide on why WordPress sites run slow walks through diagnosis for each one.

Advanced — Requires Technical Expertise

21. Implement Redis object caching Hard High Impact

Install Redis on your server (or enable via hosting panel), install the Redis Object Cache plugin, and configure the connection in wp-config.php. Database query time drops from 50–200ms to 2–10ms for cached queries. Essential for WooCommerce sites and any site with logged-in users. See our database guide for setup instructions.

22. Configure server-level page caching Hard High Impact

Set up Varnish or Nginx FastCGI cache at the server level. This bypasses PHP entirely for cached pages — 10–50x faster than plugin-based page caching. Requires server configuration access (Nginx conf files or Varnish VCL). Cloudways provides Varnish out of the box; self-managed servers need manual setup. See our server-level optimisation guide.

23. Enable HTTP/2 or HTTP/3 Hard Medium Impact

HTTP/2 multiplexes requests over a single connection, eliminating the overhead of multiple TCP connections. HTTP/3 uses QUIC (UDP-based) for even faster connection establishment. Most CDNs (Cloudflare, BunnyCDN) support HTTP/3 automatically. For your origin server, ensure Nginx is configured with HTTP/2 support (it usually is by default on modern installations).

24. Tune Nginx worker processes and buffers Hard Medium Impact

Optimise worker_processes (match CPU cores), worker_connections (1024–4096), keepalive_timeout (30–60s), and buffer sizes. Proper tuning ensures your server handles concurrent requests efficiently without wasting memory. Requires SSH access and Nginx configuration knowledge. Improper settings can cause server errors under load.

25. Implement critical CSS extraction per template Hard High Impact

Generate separate critical CSS for each template type (homepage, single post, archive, page, product). Inline the template-specific critical CSS and defer the full stylesheet. More effective than WP Rocket’s one-size-fits-all approach because each template gets exactly the CSS it needs above the fold.

26. Remove jQuery dependency from frontend Hard Medium Impact

Deregister jQuery on the frontend and replace jQuery-dependent code with vanilla JavaScript. Eliminates the 90KB+ render-blocking jQuery/jQuery Migrate payload. Only practical if your theme and critical plugins don’t depend on jQuery — test exhaustively. See the jQuery section of our JavaScript guide.

27. Optimise WooCommerce cart fragments Hard High Impact (WooCommerce)

WooCommerce’s wc-ajax=get_refreshed_fragments fires on every page load, adding 200–500ms of server-side processing. Disable it on pages without a mini-cart, or load it on hover/click of the cart icon instead of on page load. This is one of the most impactful WooCommerce-specific optimisations — it reduces uncached server load by 30–50%.

28. Add database indexes for slow queries Hard Medium Impact

Use Query Monitor to identify queries over 10ms. Add MySQL indexes on the columns these queries filter or join on. Common: ALTER TABLE wp_postmeta ADD INDEX meta_value_index (meta_value(191)); for WooCommerce product queries. Only add indexes for confirmed slow queries — unnecessary indexes waste memory and slow writes.

29. Implement edge caching (Cloudflare APO) Medium High Impact

Cloudflare APO ($5/month) caches your entire WordPress page at Cloudflare’s 300+ edge locations. TTFB drops to 20–50ms worldwide. Install the Cloudflare WordPress plugin, enable APO, and configure cache bypass rules for logged-in users and WooCommerce dynamic pages. The highest-value $5/month you can spend on WordPress performance.

30. Rebuild critical page templates from scratch Hard Highest Impact

Replace bloated page builder templates with purpose-built, hand-coded templates. A custom homepage template typically loads 15–30KB of CSS instead of 800KB+ from a page builder. This is the nuclear option — it requires a developer who can build WordPress templates from scratch. But the performance difference is staggering: sites go from PageSpeed 40 to PageSpeed 100. This is VeloPress’s core service: rebuilding the templates that matter most for speed.

What to Do Next

If you’ve checked off items 1–8, well done — you’ve handled the quick wins that most WordPress sites are missing. Your PageSpeed score should be noticeably higher.

If you’ve worked through items 9–20 and your score is still below 85, the remaining bottlenecks are server-level issues (items 21–30) that require engineering expertise: server caching configuration, Redis setup, Nginx tuning, and potentially rebuilding your theme templates.

This is exactly where VeloPress specialises. Items 21–30 are what we do every day — the server-level optimisation work that plugins can’t reach. If you’ve done the easy wins and hit a wall, get your free audit to find out exactly what’s left to fix and what it will cost.

Frequently Asked Questions

How long does it take to complete this entire checklist?

Items 1–8 (quick wins) can be completed in 2–3 hours. Items 9–20 (medium priority) typically take 1–2 days of focused work. Items 21–30 (advanced) require 3–5 days of engineering work and deep WordPress/server knowledge. VeloPress clients typically see full completion of all applicable items within 5 business days.

Do I need to complete all 30 items?

No. Most sites see a 40–60 point PageSpeed improvement from items 1–12 alone. The advanced items (21–30) deliver diminishing returns unless your site has specific bottlenecks in those areas. Focus on the items that address your site’s specific issues — use PageSpeed Insights to identify which diagnostics your site fails, and match them to checklist items.

What PageSpeed score should I aim for?

For most business sites, a mobile PageSpeed score of 85+ is good, 90+ is excellent. Scoring 100 on mobile is achievable but requires a purpose-built theme (item 30) — sites using page builders typically cap out at 85–95 even with full optimisation. For desktop, 95+ is the standard target. Focus on passing all Core Web Vitals (LCP, FID/INP, CLS) — these matter more than the aggregate score.

Will these optimisations affect my site’s functionality?

Items 1–8 are virtually risk-free. Items 10–12 (JavaScript deferral, CSS removal, critical CSS) carry some risk of visual or functional breakage — always test on staging first. Items 21–30 require careful implementation and thorough testing. The riskiest items are JavaScript deferral (can break interactive elements), CSS removal (can break layouts), and jQuery removal (can break plugin features).

Should I hire someone for this or DIY?

Items 1–8: DIY. They’re straightforward and well-documented. Items 9–20: DIY if you’re technically comfortable, hire if you’re not. Items 21–30: Hire unless you have server administration experience. The cost of professional optimisation (VeloPress starts at £249) is typically recouped within weeks through improved conversion rates from faster load times.

Checked off items 1–8 and still not fast enough?

VeloPress handles items 21–30 — the engineering work that plugins can’t reach

Server caching, Redis, Nginx tuning, critical CSS extraction, and template rebuilds. We’ve scored 100 on PageSpeed for over 150 WordPress sites. Your site could be next.

Get Your Free Audit →
View Pricing
Jamie McKaye

Jamie McKaye

Founder, VeloPress

Founder of VeloPress. 18 years in digital marketing, SEO, and web performance engineering. Optimised 150+ WordPress sites to score 95-100 on PageSpeed Insights. Based in Surrey, UK.

Get Started

Still struggling with WordPress speed?

VeloPress fixes this every day. We'll diagnose exactly what's slowing your site down and build a plan to hit 90+ on PageSpeed Insights.

Get Your Free Audit View Pricing

See what a full audit looks like — view sample report