-
Minify JavaScript to cut payload
Unminified JS ships with comments, full variable names, and whitespace. Minification (often paired with mangling) routinely cuts 50–70% of bytes.
Frontendmediumeasy5 minApply Fix -
Minify CSS to cut payload
Unminified CSS ships with comments, whitespace, and verbose property values. Minification typically saves 20–40% of CSS bytes with no behaviour change.
Frontendloweasy5 minApply Fix -
Enable a persistent object cache (Redis/Memcached)
WordPress's default object cache is per-request. Persistent object caching makes every cache_get hit a shared store instead of re-doing the database work each time.
Backendhighmoderate30 minApply Fix -
Delete existing post revisions
A one-shot cleanup that removes existing revision rows from wp_posts. Pair it with the post-revisions cap so the table doesn't grow back.
Databasemediumeasy5 minApply Fix -
Limit post revisions per post
WordPress keeps a revision row for every edit by default. Without a cap, long-lived posts accumulate hundreds of revisions and bloat wp_posts.
Databaseloweasy2 minApply Fix -
Clean up expired transients in wp_options
Expired transients aren't deleted by WordPress on schedule. On busy sites they accumulate in `wp_options` and bloat the autoloaded subset.
Databasemediumeasy5 minApply Fix -
Strip ?ver= query strings from static asset URLs
Some CDNs and proxies don't cache URLs with query strings. WordPress appends `?ver=...` to nearly every CSS/JS URL it enqueues, which can completely defeat edge caching.
Infrastructureloweasy5 minApply Fix -
Enable native lazy loading for images
Loading every image at page boot is wasteful when most are below the fold. Native `loading="lazy"` defers them until they're about to scroll into view.
Frontendmediumeasy3 minApply Fix -
Enable gzip (or brotli) compression on the server
Without compression, HTML/CSS/JS go over the wire at full size. Gzip cuts most text responses by 70–80%; brotli does a few percent better.
Infrastructurehigheasy5 minApply Fix -
Enable full-page caching for anonymous traffic
Without a page cache, every anonymous visitor triggers the full WordPress PHP boot + database round-trips. A page cache turns that into a single file read.
Infrastructurecriticalmoderate20 minApply Fix -
Enable browser caching for static assets
Without cache headers, repeat visitors re-download every CSS/JS/image on every page. Adding a long max-age makes the second visit nearly instant.
Infrastructurehigheasy10 minApply Fix -
Truncate a runaway wp-content/debug.log
When WP_DEBUG_LOG is on, errors and notices accumulate in wp-content/debug.log forever. A noisy plugin can grow this file to hundreds of MB and slow every write.
Backendloweasy2 minApply Fix -
Clean up failed Action Scheduler records
WooCommerce's Action Scheduler keeps failed jobs (and their logs) forever by default. On busy stores this can balloon the database with millions of dead rows that no longer affect anything.
Databasemediumeasy5 minApply Fix