MaxtDesign

WordPress Performance Optimization Checklist

Sub-second WordPress load times — caching layers, image pipelines, database hygiene, third-party script audits, and the wins that actually move Core Web Vitals.

15 min readWordPress performance,caching,Core Web Vitals,optimization,TTFB
M
MaxtDesign
Engineering

Sub-second WordPress is achievable on a budget host with the right disciplines. Most slow WordPress sites are slow not because the platform is heavy but because the layers above it — themes, plugins, third-party scripts, media handling — accrete weight without anyone watching. This is the working checklist: measurement first, then the wins ranked by impact-to-effort.

Measure before you optimize

Three measurement layers, all worth running:

  • PageSpeed Insights / Lighthouse— the lab measurement most people start with. Gives you Core Web Vitals scores and specific recommendations. Lab data is consistent but doesn't reflect real users.
  • CrUX / GSC Core Web Vitals report— field data from real Chrome users. Slower to update (28-day rolling window) but it's what Google actually ranks against.
  • RUM (real user monitoring) via web-vitals.js, Cloudflare RUM, or Sentry. Gives you per-session telemetry with attribution to specific deploys.

For the deeper Core Web Vitals architecture and what each metric measures, see Core Web Vitals 2026: The Technical SEO Blueprint. This article is the WordPress-specific implementation work.

Hosting — the foundation

You can't outrun bad hosting. Cheap shared hosting on oversold servers caps how good your TTFB can be. The hosting tiers worth knowing:

  • Budget shared hosting ($5-15/mo) — fine for low-traffic brochure sites; TTFB will be 600-1200ms on cache misses
  • Managed WordPress hosts (Kinsta, WP Engine, Pressable, $30-100+/mo) — built-in object caching, full-page cache, server-level optimizations; TTFB 100-300ms
  • VPS or dedicated ($30-200/mo) — full control, requires sysadmin work, can be very fast or very slow depending on configuration
  • Edge-served headless(Vercel, Cloudflare Pages, Netlify) — different architecture, fastest possible but doesn't fit all WordPress workflows

For most clients, managed WordPress hosting is the right starting point — the per-month cost is recovered immediately in the time you don't spend tuning Nginx.

Caching — the highest-leverage layer

Three caching layers work together. Get all three right.

  • Page cache — full HTML responses cached at the server or edge, served without invoking PHP for anonymous traffic. The biggest single win.
  • Object cache(Redis, Memcached) — caches the database queries WordPress runs internally. Cuts down on the "30+ DB queries per page" default.
  • Browser cache— long max-age headers on static assets so returning visitors don't re-download.

On managed hosts, page cache and object cache are usually built in — verify they're actually running. On a generic VPS or shared, install one of the WP-aware caches: WP Rocket (paid, easy), W3 Total Cache (free, complex), Cache Enabler (free, lightweight), or LiteSpeed Cache if you're on a LiteSpeed server.

The image pipeline

Images are the largest performance lever on most WordPress sites. The discipline:

  • Serve next-gen formats. WebP for general, AVIF for the leading-edge browsers. Most major optimization plugins (ShortPixel, Imagify, EWWW, Smush) handle conversion.
  • Responsive sizes. WordPress generates multiple sizes by default; serve the right one with srcset. Don't ship a 2400px image to a phone displaying 400px.
  • Compress. 80-85% JPEG/WebP quality is indistinguishable from 100% in most cases and 30-40% smaller. AVIF lets you push compression further.
  • Lazy load below-the-fold. loading="lazy" works in every modern browser. Apply to all non-LCP images. See Lazy Loading Images the Right Way for the full pattern.
  • Reserve dimensions. Always set width and height on <img> elements (or aspect-ratio via CSS). Layout shift from late-loading images is a major CLS source.

For LCP images specifically — the hero, the above-fold images — preload them and skip lazy loading:

&lt;link rel="preload" as="image"
      href="/wp-content/uploads/2026/04/hero.webp"
      imagesrcset="/wp-content/uploads/2026/04/hero-mobile.webp 768w,
                   /wp-content/uploads/2026/04/hero.webp 1920w"
      imagesizes="100vw"&gt;

Database hygiene

WordPress databases bloat over time. Common bloat sources:

  • Post revisions — limit to 5-10 with define( 'WP_POST_REVISIONS', 10 ) in wp-config; clean up old ones
  • Auto-drafts — accumulate forever, clean quarterly
  • Spam comments — empty the spam folder; it sits in the database otherwise
  • Transients— expired transients sometimes don't self-clean depending on how plugins set them
  • Orphaned meta from uninstalled plugins — their postmetaentries persist if the plugin didn't clean up on uninstall

WP-Optimize, Advanced Database Cleaner, or a one-time WP-CLI run can clean these. Add proper indexes if your usage patterns warrant — slow query log via the database server tells you what needs indexing.

Plugin and theme audit

Every active plugin is loaded, every page load. The audit:

  • Use Query Monitor to see which plugins are spending the most time. Top offenders may be replaceable with lighter alternatives.
  • Deactivate plugins you're not actively using and remove their files — deactivated plugins still consume disk space and can be reactivated by an attacker. See WordPress security best practices.
  • Themes: page builders (Elementor, Divi, Beaver) add real weight. They're fine for sites that benefit from no-code editing, but for sites where speed matters more than edit-anywhere, a developer-built block theme or classic theme will be 30-50% faster out of the box.

Third-party scripts — the silent INP killer

The single biggest performance regression source on well-built WordPress sites is third-party scripts the marketing team adds via GTM. Every tag is a download, parse, execute, and memory cost.

Audit pass:

  • List every external script firing on the page
  • For each: do we know why it's here? If not, remove.
  • Defer non-essential scripts to load rather than parser-blocking
  • Move heavy session-replay tools (Hotjar, FullStory) to async with delayed load
  • Combine related tags into GTM where possible — one container instead of five

On checkout pages especially, third-party script bloat is the dominant INP cause. See WooCommerce checkout optimization for the checkout-specific discipline.

CSS and JS delivery

  • Inline critical CSS for above-the-fold content; load the rest asynchronously. Plugins like Autoptimize or RocketLazyLoadCriticalCSS handle this.
  • Defer non-critical JavaScript. Most theme JavaScript can be deferred without breaking interactivity.
  • Self-host fonts and analytics where possible. Self-hosted fonts skip a DNS lookup; self-hosted GA4 (via Cloudflare Worker proxy) avoids the third-party round trip.
  • Preconnect to known third-party origins. <link rel="preconnect"> warms up DNS + TLS for fonts, analytics, ad servers.

HTTP/2, HTTP/3, and Brotli

Server-level wins your host should already have:

  • HTTP/2 or HTTP/3 (multiplexing reduces handshake cost)
  • Brotli compression (better than gzip; supported by every modern browser)
  • OCSP stapling on TLS
  • 0-RTT for repeat HTTPS connections

On managed hosts, all of these are usually default. On VPS, verify with curl -I --http2 -v.

The full checklist

  • - [ ] Hosting tier matches site traffic and revenue
  • - [ ] Page cache active and verified (curl with no cookies returns cached HTML)
  • - [ ] Object cache (Redis/Memcached) configured and reporting hits
  • - [ ] Browser cache headers set with sensible max-age (1 year for hashed assets, shorter for HTML)
  • - [ ] WebP/AVIF conversion automatic for new uploads
  • - [ ] All images have width + height attributes; aspect-ratio reserved in CSS
  • - [ ] LCP image preloaded with imagesrcset
  • - [ ] Below-fold images use loading="lazy"
  • - [ ] Post revisions limited via WP_POST_REVISIONS
  • - [ ] Database cleaned (revisions, auto-drafts, spam, transients) within last 90 days
  • - [ ] Active plugin list audited within last 90 days; unused plugins removed
  • - [ ] Query Monitor profiled in dev to identify slow plugins
  • - [ ] Third-party scripts audited; non-essential removed or deferred
  • - [ ] Critical CSS inlined; non-critical async
  • - [ ] Non-critical JS deferred
  • - [ ] Fonts self-hosted or preloaded with font-display: swap
  • - [ ] Preconnect to known third-party origins
  • - [ ] HTTP/2 or HTTP/3 enabled at server
  • - [ ] Brotli compression enabled
  • - [ ] CrUX field data reviewed within last 28 days
  • - [ ] RUM tooling collecting real-user web-vitals data

Worked through, this checklist gets most WordPress sites under 1.5s LCP, INP under 200ms, and CLS near zero. The compounding payoff: search rankings tick up, conversions tick up, support tickets about "site is slow" tick down. For sites where this matters, our SEO and content strategy service includes performance work as a first-class deliverable. For lazy loading specifically — the highest-leverage single technique — see Lazy Loading Images the Right Way.

Need help putting this into practice?

MaxtDesign builds the AI-powered web stacks the articles describe — from agentic workflows to performance-first WordPress + WooCommerce. Talk to us about your project.