WordPress Speed Optimization Checklist: A Step-by-Step Framework

·

9 min read

·

By WPPerfOps Team

WordPress Speed Optimization Checklist - A Step-by-Step Framework

Most WordPress speed optimization advice is scattered across dozens of blog posts, each recommending a different plugin, a different setting, a different priority. What’s missing is a systematic framework: what to do first, what to do next, and what order gives you the biggest wins for the least effort. This checklist is the exact 33-step process we follow when auditing WordPress sites professionally.

The steps are organized by layer — server, caching, theme, images, plugins, database, and monitoring — and ordered by impact within each layer. Start at Step 1 and work your way down. The early steps deliver the biggest gains; the later steps are refinements. If you want the technical foundation behind these steps, read our Core Web Vitals guide, our cost of a slow site analysis, and our 15 common speed mistakes guide.

Before You Start

Create a spreadsheet to track your progress. For each step, record the before and after metrics. This does three things: it shows you which changes had the biggest impact, it gives you a rollback reference if something breaks, and it proves the value of your work (to yourself, your boss, or your client). Test with PageSpeed Insights, GTmetrix, and Chrome DevTools — and always test on both mobile and desktop.


Layer 1: Server & Hosting

Your server is the foundation. No front-end optimization can overcome a slow server response. These five steps have the highest impact-to-effort ratio of anything on this list.

PHP Upgrade Impact

20-40%

faster page generation

Object Cache Impact

30-50%

faster TTFB

Step 1: Upgrade PHP to 8.2+. Check your current version under Tools → Site Health → Info → Server. PHP 8.2+ is roughly 40% faster than PHP 7.4 at generating pages. This is the single highest-impact, lowest-effort change available. See Mistake 1.

Step 2: Enable object caching (Redis or Memcached). Object caching stores database query results in memory. For sites with complex queries — WooCommerce, membership sites, dynamic content — this reduces TTFB by 30-50%. Requires a server that supports Redis/Memcached. See Mistake 2.

Step 3: Verify GZIP/Brotli compression. Text-based files (HTML, CSS, JS) should be compressed during transfer. Check response headers for content-encoding: br or content-encoding: gzip. If neither appears, your host needs to enable it at the server level.

Step 4: Check your TTFB. Time to First Byte should be under 200ms for a cached page. Test with curl -o /dev/null -w "%{time_starttransfer}" https://yoursite.com or WebPageTest. If TTFB consistently exceeds 300ms, your hosting may be the bottleneck.

Step 5: Enable a CDN. A Content Delivery Network serves static assets from edge locations near your visitors. Cloudflare (free tier available), BunnyCDN, or your managed host’s built-in CDN. This reduces latency for visitors far from your server.


Layer 2: Caching

Caching is the second-highest-impact optimization. A properly cached site serves pre-built HTML to visitors instead of executing PHP and querying the database on every request.

Step 6: Install ONE caching plugin. WP Super Cache, W3 Total Cache, LiteSpeed Cache, or WP Rocket. One. Not two, not three. Multiple caching plugins conflict and break your site. See Mistake 7.

Step 7: Configure page caching with proper exclusions. Exclude cart, checkout, My Account, and any page with user-specific content. Most caching plugins handle WooCommerce exclusions automatically, but verify.

Step 8: Enable browser caching headers. Set appropriate Cache-Control and Expires headers for static assets (images, CSS, JS). Most caching plugins handle this, but verify with Chrome DevTools → Network → check response headers.

Step 9: Configure cache preloading. Cache preloading generates cached pages proactively instead of waiting for the first visitor to trigger caching. This ensures the first visitor to any page gets a fast, cached response.

!

Verify Caching Is Actually Working

After configuring caching, verify it’s working. Open an incognito window, load your site, and check the page source for cache indicators (most plugins add an HTML comment like <!-- Cache served by WP Super Cache -->). Also check response headers for X-Cache: HIT. If your pages aren’t being cached, your caching plugin configuration needs troubleshooting.


Layer 3: Theme & Front-End

Your theme controls the front-end payload — every CSS file, JavaScript library, and font your visitors’ browsers download.

Step 10: Audit your theme weight. Open Chrome DevTools → Network, filter by CSS and JS, and add up the total. A well-optimized theme loads 200-400KB of CSS/JS. Multipurpose themes often load 2-4MB. If yours is above 800KB, investigate what’s loading and why.

Step 11: Remove unused CSS and JavaScript. Use Chrome DevTools Coverage tab to identify unused CSS/JS. Tools like PurgeCSS or plugins like Asset CleanUp can remove unused code. This is often the biggest front-end win.

Step 12: Defer non-critical JavaScript. JavaScript that isn’t needed for the initial page render should be deferred (defer attribute) or loaded asynchronously (async). Most caching and optimization plugins offer this feature.

Step 13: Optimize font loading. Self-host fonts locally (don’t load from Google Fonts CDN), limit to 2-3 weights (regular 400, medium 500, bold 700), and set font-display: swap. Preload critical font files with <link rel="preload">. See Mistake 5.

Step 14: Minimize render-blocking resources. CSS and JavaScript in the <head> blocks rendering until downloaded and parsed. Inline critical CSS (the minimum CSS needed to render above-the-fold content) and defer everything else.

  • Total CSS/JS under 400KB (compressed)
  • No unused CSS loaded on the page (check Coverage tab)
  • Fonts self-hosted with font-display: swap
  • JavaScript deferred or async where possible
  • Critical CSS inlined, rest deferred

Layer 4: Images & Media

Images are typically 50-80% of total page weight. For a complete deep-dive, see our image optimization guide. Here are the essential steps.

Step 15: Convert images to WebP (or AVIF). Install an image optimization plugin (ShortPixel or Imagify) with WebP conversion enabled. WebP delivers 25-34% smaller files than JPEG at the same visual quality.

Step 16: Implement proper lazy loading. WordPress 5.5+ adds loading="lazy" automatically. Verify it’s working on below-the-fold images. Critical: exclude your hero/LCP image from lazy loading.

Step 17: Add width and height to all images. Missing dimensions cause Cumulative Layout Shift (CLS). WordPress adds them automatically for editor images, but check custom theme images and any manually coded <img> tags.

Step 18: Preload your LCP image. Add fetchpriority="high" to your hero image. WordPress 6.3+ does this automatically for the first content image, but verify in your page source.

Step 19: Optimize video embeds. Replace direct YouTube/Vimeo embeds with facades — static preview images that load the actual player only on click. This prevents loading 1MB+ of third-party scripts on every page view.

LCP Before Image Opt

4.2s

LCP After Image Opt

1.8s


Layer 5: Plugins

Every plugin adds code. The goal isn’t zero plugins — it’s ensuring every plugin earns its place.

Step 20: Audit all active plugins. List every plugin and ask: does this directly serve my business goals? If the answer is “maybe” or “I’m not sure what it does,” it’s a candidate for removal.

Step 21: Delete deactivated plugins. Don’t just deactivate — delete. Deactivated plugins clutter your update list, increase your attack surface, and some poorly coded plugins load files even when deactivated. See Mistake 10.

Step 22: Identify heavy plugins with Query Monitor. Install Query Monitor temporarily and check which plugins are adding the most database queries, the most PHP execution time, and the most HTTP requests. This data-driven approach tells you exactly where to focus.

Step 23: Replace bloated plugins with lightweight alternatives. Common swaps: replace Contact Form 7 + multiple add-ons with WPForms Lite (or Fluent Forms). Replace Yoast with Rank Math or SEOPress. Replace Jetpack with individual plugins for only the features you use.

Step 24: Conditionally load plugin assets per page. Use Asset CleanUp or Perfmatters to prevent plugins from loading their CSS and JS on pages that don’t use them. Your contact form plugin doesn’t need to load on every blog post.

  • Social sharing buttons loading on every page (200-400KB of JS)
  • Slider plugins loading on non-slider pages
  • WooCommerce scripts loading on blog posts
  • Multiple analytics scripts instead of consolidated Google Tag Manager

Layer 6: Database

Database optimization is often overlooked but delivers consistent gains, especially for older sites. For a deep dive, see our database optimization guide.

Step 25: Limit and clean post revisions. Add define('WP_POST_REVISIONS', 5); to wp-config.php. Then clean existing revisions: wp post delete $(wp post list --post_type=revision --format=ids) --force --allow-root. See Mistakes 13-14.

Step 26: Remove expired transients. Run wp transient delete --expired --allow-root. WooCommerce sites are especially prone to transient bloat from customer sessions.

Step 27: Audit autoloaded options. Query your database: SELECT SUM(LENGTH(option_value)) FROM wp_options WHERE autoload='yes'; Anything over 1MB is a red flag. Find the worst offenders and set non-critical options to autoload='no'.

Step 28: Clean orphaned metadata. Post meta for deleted posts, user meta for deleted users, and comment meta for deleted comments linger in the database indefinitely. Use WP-Optimize or a targeted SQL query to clean them up.

Step 29: Schedule regular database maintenance. Use WP-Optimize to schedule weekly cleanups of revisions, transients, trash, and spam comments. Automate this so it doesn’t depend on you remembering.


Layer 7: Testing & Monitoring

Optimization without measurement is guesswork. These final steps ensure your improvements stick.

Step 30: Re-test all Core Web Vitals. After completing the steps above, run PageSpeed Insights on your 3-5 most important pages. Compare to your baseline from Step 1. Document the improvements.

Step 31: Set up ongoing monitoring. Google Search Console’s Core Web Vitals report tracks real-user performance over time. UptimeRobot (free tier) monitors uptime and response time. Set up both.

Step 32: Create a monthly maintenance routine. Speed optimization isn’t a one-time project — it’s ongoing. Check page weight monthly, clean the database weekly, audit plugins quarterly. For a complete maintenance framework, see our speed regression prevention guide.

Step 33: Document everything you changed. Keep a changelog of every optimization: what you changed, when, and the measured impact. If a future update breaks something, this log is your roadmap for debugging.

Set Calendar Reminders

Schedule monthly speed checks and quarterly deep reviews on your calendar. Treat performance maintenance like an oil change — skip it, and problems compound silently until something breaks. A 15-minute monthly check prevents hours of emergency troubleshooting later.


Overwhelmed? That’s Normal.

33 steps is a lot. The truth is, most site owners get through the first 10-15 steps and see dramatic improvements — then the remaining steps require deeper technical knowledge (server configuration, database queries, conditional asset loading) that goes beyond what a typical site owner should be expected to handle.

This checklist is the exact process we follow for every client. If you’d rather hand it off to someone who does this every day, our speed optimization service covers every step on this list — plus server-level optimizations that require root access and hosting expertise. Start with a free mini audit to see where your site stands.


Keep Learning

Each layer of this checklist has a corresponding deep-dive guide. Start with the areas where your site needs the most work.

Image Layer Deep-Dive

Image Optimization Guide

Formats, compression, responsive images, lazy loading, preloading, and CDN delivery for every image on your site.

Read the Guide →

E-Commerce Specific

WooCommerce Speed Guide

Cart fragments, caching strategies, product page performance, and database optimization for online stores.

Read the Guide →

Understand the Metrics

Core Web Vitals for WordPress

What LCP, INP, and CLS mean, how to measure them, and why Google uses them to rank your site.

Read the Guide →

What to Do Next

Our Services

See exactly how we optimize WordPress sites for speed, Core Web Vitals, and conversions.

View Services →

Case Studies

Real results from real WordPress sites — before and after optimization with measurable improvements.

View Case Studies →

Pricing

Transparent, one-time pricing. No subscriptions, no hidden fees. See our optimization packages.

View Pricing →