DEV Community

Cover image for WordPress Performance Optimization Checklist: A Practical Guide to Building Faster Websites
Digital Unicon
Digital Unicon

Posted on

WordPress Performance Optimization Checklist: A Practical Guide to Building Faster Websites

Google made that clear when Core Web Vitals became a ranking signal, and users made it clearer still — studies consistently show that a one-second delay in page load time can reduce conversions by 7% or more. On mobile, where most of your traffic likely originates, the numbers are even more punishing.

In 2026, slow websites don't just lose SEO ground. They lose customers. They lose trust. And in competitive markets, they lose to faster competitors who figured this out earlier.

This guide is a complete WordPress performance optimisation checklist — practical, developer-focused, and built from real-world experience. Whether you're optimising a new build or rescuing a sluggish legacy site, these are the exact steps that move the needle.


What Causes Slow WordPress Websites?

Before fixing anything, it helps to understand what actually slows WordPress down. The culprits are usually predictable:

  • Poor hosting — Shared servers with overloaded resources are the single biggest bottleneck most people ignore.
  • Heavy themes — Page builder themes loading 500KB+ of CSS and JavaScript on every page are performance landmines.
  • Plugin bloat — 40 active plugins, each adding its own scripts and styles, adds up fast.
  • Unoptimised images — Still the most common issue: 3MB JPEGs uploaded straight from a phone camera.
  • Render-blocking resources — CSS and JavaScript loaded in the <head> that delay the browser from painting anything.
  • Database bloat — Thousands of post revisions, expired transients, and orphaned metadata quietly slowing queries.
  • No caching — WordPress generates every page from scratch for every visitor, every time.
  • Excessive third-party scripts — Chat widgets, analytics, heatmaps, and pixel trackers adding 600ms of blocking time.

Identify which of these are your primary issues before spending hours optimising the wrong thing.


The Complete WordPress Performance Optimization Checklist

1. Choose High-Performance Hosting

This is where performance is won or lost before you write a single line of code.

Shared hosting puts your site on a server with hundreds of others competing for the same CPU and memory. It's affordable, and it shows.

VPS hosting gives you dedicated resources — a significant improvement for mid-traffic sites that need predictable performance.

Managed WordPress hosting (Kinsta, WP Engine, Flywheel, Cloudways) handles server-level optimisations for you: NGINX, PHP 8.x, Redis, CDN integration, and automatic caching. For client work, this is almost always the right call.

What to look for in a host:

  • PHP 8.2+ with OPcache enabled
  • NGINX or LiteSpeed (not Apache alone)
  • Server-level caching (Redis or Memcached)
  • Data centre location close to your primary audience
  • HTTP/3 support

2. Use a Lightweight Theme

Your theme sets the performance ceiling for everything else. A 1.2MB theme loading 12 stylesheets and jQuery plugins – it doesn't matter how well you optimise images.

Recommended lightweight themes:

  • GeneratePress — Clean, modular, loads under 10KB of CSS by default
  • Kadence — Block-first, excellent performance scores out of the box
  • Blocksy — Modern, fast, great WooCommerce support
  • Twenty Twenty-Four (core) — If you're going full FSE (Full Site Editing), this is surprisingly capable

Avoid themes built entirely around WPBakery or Divi if performance is a priority. They're great for clients who want design control — and they will cost you Core Web Vitals points.


3. Audit and Remove Unnecessary Plugins

More plugins don't mean a slower site — bad plugins do. But the correlation is hard to ignore.

Run this audit quarterly:

  1. List every active plugin
  2. Ask: Does this plugin solve a problem we actually have right now?
  3. Check if the plugin loads scripts or styles on pages where it isn't used
  4. Look for plugins that duplicate functionality (two SEO plugins and two form plugins)

A useful tool here: Query Monitor shows you exactly which plugins are adding database queries, HTTP requests, and scripts to each page load. It's free and essential.

For detecting plugin performance impact, disable them one by one and benchmark with PageSpeed Insights. The results are often surprising.


4. Implement Page Caching

WordPress is a dynamic system — by default, every page request triggers PHP execution and database queries. Caching breaks that cycle.

Browser caching stores static assets (images, CSS, JS) in the visitor's browser so repeat visits don't re-download everything. Set via HTTP headers``.

Server-side caching (Redis and Memcached) caches database query results in memory, dramatically reducing PHP execution time.

Page caching pre-generates static HTML files of your pages and serves them directly, bypassing PHP and MySQL entirely.

Common solutions that handle all three:

  • WP Rocket — Paid, easiest setup, solid results
  • LiteSpeed Cache — Free, excellent on LiteSpeed servers
  • W3 Total Cache — Free, more configuration required
  • WP Super Cache — Lightweight, good for simpler sites

If your managed host provides server-level caching, test that before adding a plugin layer on top. Double-caching can cause stale content issues.


5. Optimize Images

Images are consistently the biggest contributor to page weight. The good news: the gains here are huge with minimal effort.

Format first:

  • WebP — 25-35% smaller than JPEG at equivalent quality; supported in all modern browsers
  • AVIF — 40-50% smaller than JPEG; adoption is growing but verify browser support for your audience

Compression: Use lossy compression aggressively — most users can't tell the difference at 75-80% quality. Tools: Squoosh, ImageOptim, ShortPixel, Imagify.

Lazy loading: Add lazy to images below the fold. WordPress has added this natively since 5.5, but verify your theme isn't overriding it.

Responsive images: WordPress generates `srcset them automatically. Make sure your theme isn't loading a 1200px image in a 400px container.


6. Minify and Combine Assets

Minification removes whitespace, comments, and unnecessary characters from CSS and JS files — typically a 20-30% size reduction.

CSS: Minify all stylesheets. Use critical CSS (inline above-the-fold styles; defer the rest) to eliminate render-blocking CSS entirely.

JavaScript: Minify and defer non-critical scripts. Use async for independent scripts and defer for everything else.

Combining files: This was essential pre-HTTP/2. With HTTP/2 multiplexing, combining isn't always beneficial — but for legacy hosting environments still on HTTP/1.1, it still matters. Check your server before making assumptions.


7. Eliminate Render-Blocking Resources

Render-blocking resources are CSS and JavaScript ``that force the browser to stop parsing HTML until they're downloaded, parsed, and executed.

For CSS: Inline critical CSS (the styles needed for above-the-fold content) and load the full stylesheet asynchronously:

<link rel="preload" href="styles.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="styles.css"></noscript>
Enter fullscreen mode Exit fullscreen mode

For JavaScript: Move scripts to the footer where possible. Use defer on scripts that don't need to run before the page renders.

Practical tip: Run Lighthouse, check the "Eliminate render-blocking resources" opportunity, and work through it methodically. One resource at a time. Don't try to fix everything simultaneously.


8. Use a CDN

A Content Delivery Network caches your static assets (images, CSS, JS) on servers distributed globally and delivers them from the location nearest to each visitor.

The noticeable difference: for an audience spread across multiple countries or continents. For a local business serving one city, the gains are smaller but still meaningful for asset delivery.

When CDN makes a real impact:

  • International or national audience
  • High-traffic sites where origin server load matters
  • Sites with lots of large assets (images, video thumbnails)

Cloudflare's free tier handles most use cases well. If you're on managed WordPress hosting, a CDN is usually included.


9. Optimize Fonts

Google Fonts is convenient — and it's one of the most common performance mistakes on WordPress sites.

The problem: Loading fonts from Google's servers adds a cross-origin request, DNS lookup, and potential render-blocking behaviour.

Better approach — local hosting:

@font-face {
  font-family: 'Inter';
  src: url('/fonts/inter-400.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: swap; /* Critical — prevents invisible text during load */
}
Enter fullscreen mode Exit fullscreen mode

font-display: swap is non-negotiable. Without it, browsers may show invisible text while the custom font loads (FOIT — Flash of Invisible Text).

Additional tips:

  • Load only the font weights you actually use (don't load 8 weights if you use 2)
  • Preload critical fonts with <link rel="preload">
  • Consider system font stacks for utility interfaces where branding matters less

10. Database Optimization

WordPress databases accumulate junk over time. Post revisions, expired transients, orphaned metadata, and spam comments all add query overhead.

What to clean:

  • Post revisions — WordPress saves every draft. Limit with: `define('WP_POST_REVISIONS', 5); "in"
  • Expired transients — temporary data that should auto-delete but often doesn't
  • Orphaned metadata — postmeta rows left behind by deleted plugins
  • Trashed posts and comments — empty the trash regularly

Automate it: Use WP-Cron or a plugin like WP-Optimise for scheduled database maintenance. Don't rely on manual cleanup — it won't happen consistently.

// Limit post revisions in wp-config.php
define('WP_POST_REVISIONS', 5);

// Or disable revisions entirely (not recommended for content-heavy sites)
define('WP_POST_REVISIONS', false);


11. Optimize Core Web Vitals

Core Web Vitals are Google's user experience metrics that directly impact search rankings.

LCP (Largest Contentful Paint) — How fast the largest visible element loads. Target: under 2.5 seconds.

  • Optimize your hero image (preload it, use WebP, avoid lazy loading the above-the-fold image)
  • Improve server response time (TTFB)
  • Eliminate render-blocking resources above the fold

CLS (Cumulative Layout Shift) — Visual stability as the page loads. Target: under 0.1.

  • Always set explicit "" and "" on images and embeds
  • Avoid injecting content above existing content after page load
  • Reserve space for ads and dynamic content

INP (Interaction to Next Paint) — Replaced FID in 2024; measures responsiveness to all user interactions. Target: under 200ms.

  • Reduce JavaScript execution time
  • Break up long tasks (>50ms) into smaller chunks
  • Minimize third-party script impact

12. Reduce Third-Party Scripts

Chat widgets. Google Tag Manager loading 8 tags. Facebook Pixel. Hotjar. LinkedIn Insight. Each one adds HTTP requests, JavaScript parsing time, and potential render-blocking behaviour.

Audit your third-party scripts:

  1. Open DevTools Network tab
  2. Filter by domain to see what's loading from external sources
  3. Measure the timing impact of each

Strategies:

  • Load non-critical scripts (chat widgets, heatmaps) after user interaction or after a delay
  • Self-host scripts where possible (Google Analytics can be proxied)
  • Remove scripts you're not actively using — analytics from a campaign that ended six months ago is just dead weight

javascript
// Delay non-critical scripts until after page interaction
window.addEventListener('DOMContentLoaded', function() {
setTimeout(function() {
// Load chat widget, heatmap, etc.
loadChatWidget();
}, 3000);
});


13. Enable GZIP or Brotli Compression

Compression reduces the size of text-based assets (HTML, CSS, JS) before sending them over the network. Brotli is newer and typically achieves 15-20% better compression than GZIP.

Enable in .htaccessApache:

apache
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/css application/javascript
</IfModule>

Or in nginx.conf "

nginx
gzip on;
gzip_types text/html text/css application/javascript application/json;
gzip_comp_level 6;

Verify compression is active using GiftOfSpeed or Chrome DevTools (look for gzip or deflate in response headers).


14. Modern Image and Video Delivery

Images: Covered in step 5 — but also consider serving images through a CDN with on-the-fly transformation (Cloudinary, Bunny.net, or similar) for dynamic resizing and format conversion based on the requesting browser.

Video: Never upload video directly to WordPress. Host on Vimeo or YouTube and embed.

Better yet — replace video embeds with preview thumbnails.

Load the actual iframe only when the user clicks. This approach eliminates 400-600KB of YouTube's scripts from your initial page load — a significant INP and LCP improvement.


15. Monitor Performance Regularly

Optimisation isn't a one-time task. Plugins get updated, content gets added, and performance drifts. Monitor it.

Tools:

  • Lighthouse (built into Chrome DevTools) — Quick local audit
  • PageSpeed Insights — Real-world CrUX data combined with lab results
  • GTmetrix — Waterfall charts, detailed breakdown, good for regression testing
  • WebPageTest — Most detailed; film strips, connection simulation, multi-location testing

Set a calendar reminder to run performance audits monthly. For client sites, build it into your retainer scope.


How I Optimize a WordPress Site From Start to Finish

Here's the actual workflow I follow when taking on a performance project:

Step 1: Baseline measurement
Run PageSpeed Insights, GTmetrix, and WebPageTest before touching anything. Screenshot and save the results. You can't prove improvement without a baseline.

Step 2: Hosting audit
Check PHP version, TTFB, and whether caching is already in place at the server level. Most performance problems start here.

Step 3: Plugin audit
Activate Query Monitor, browse key pages, and note everything that's loading. Deactivate unused plugins and check for duplicates.

Step 4: Image optimization
Run an image audit. Find the largest images, compress and convert them to WebP, and check that lazy loading is in place.

Step 5: Caching setup
Implement page caching if not already in place. Configure browser cache headers. If on managed hosting, enable their built-in caching.

Step 6: Asset optimization
Minify CSS and JS. Defer non-critical scripts. Inline critical CSS for above-the-fold content.

Step 7: Database cleanup
Limit revisions, clean expired transients, and run a full database optimisation pass.

Step 8: Core Web Vitals pass
Check LCP source, fix CLS issues (image dimensions and layout shift), and audit INP-impacting scripts.

Step 9: Third-party audit
Open DevTools, identify every third-party script, and eliminate or defer anything non-essential.

Step 10: Re-measure and document
Run the same tests from Step 1. Document the before/after delta for each metric. If you're on a retainer, this report is your proof of value.


Common Performance Mistakes

Installing too many optimization plugins
Two caching plugins fighting each other. A minification plugin conflicting with a CDN plugin. A critical CSS plugin breaking the page builder's output. Pick one well-configured solution, not five mediocre ones.

Chasing a perfect PageSpeed score
A PageSpeed score of 100 doesn't mean your site feels fast to users. Real-world CrUX data (Chrome User Experience Report) matters more than lab scores. Focus on LCP, CLS, and INP values, not the number in the circle.

Ignoring hosting quality
You can spend days optimising assets and still get outpaced by a competitor on a faster server. Hosting is the foundation. Don't optimise on top of bad infrastructure.

Overusing page builders
Page builders are excellent tools for the right context. But every Elementor section, every WPBakery row, adds DOM weight and JavaScript overhead. Know the trade-offs before committing to them for performance-sensitive projects.

Neglecting mobile performance
Most WordPress optimisation advice defaults to desktop benchmarks. Your mobile users are on slower connections, with less CPU, and they represent the majority of your traffic. Test on real devices, not just Chrome's responsive mode.


WordPress Performance Optimization Checklist Summary

  • [ ] Hosting: PHP 8.2+, NGINX, server-side caching
  • [ ] Theme: Lightweight, minimal CSS/JS output
  • [ ] Plugins: Audited and deactivated unnecessary ones
  • [ ] Caching: Page cache, browser cache, server-side cache
  • [ ] Images: WebP/AVIF, compressed, lazy-loaded, responsive srcset
  • [ ] Assets: CSS/JS minified, scripts deferred
  • [ ] Render-blocking: Critical CSS inlined, render-blocking JS removed
  • [ ] CDN: Static assets served from CDN
  • [ ] Fonts: Self-hosted, font-display: swap, preloaded
  • [ ] Database: Revisions limited, transients cleared, scheduled cleanup
  • [ ] Core Web Vitals: LCP < 2.5 s, CLS < 0.1, INP < 200 ms
  • [ ] Third-party scripts: Audited, deferred or removed
  • [ ] Compression: GZIP or Brotli enabled
  • [ ] Video: No direct uploads, facades for embeds
  • [ ] Monitoring: Regular audits with Lighthouse, GTmetrix, WebPageTest

Conclusion

WordPress performance optimisation isn't a single task you check off and forget. It's a discipline — one that pays compounding returns in SEO rankings, conversion rates, and user satisfaction.

The highest-impact items on this list are almost always the same: better hosting, image optimisation, proper caching, and eliminating unnecessary scripts. Start there. Most sites can achieve a 40-60% improvement in load time from those four changes alone before touching anything else.

Then keep going. Audit your Core Web Vitals quarterly. Review your plugin stack when a project wraps. Check that your images are still optimised after a content team uploads a month of blog posts.

The fast sites aren't fast because someone optimised them once. They're fast because someone made performance part of the process.

Top comments (0)