WordPress speed optimization: a 47-point checklist

A prioritized checklist covering measurement, caching, database work, images, scripts and release verification.

A layered performance audit from server to browser

The short answer

Measure first, fix the largest bottleneck, and retest the flows that matter. This checklist covers 47 concrete checks without prescribing unsafe cache rules or promising a universal load time.

Use this checklist in order of evidence

This 47-point checklist is a working audit for WordPress sites. It does not promise a particular load time or score: hosting, content, visitor devices and business requirements differ. Start with the failing user experience, choose the relevant checks, and verify one class of change at a time.

Prioritize measured bottlenecks before advanced server tuning. A change that saves a small request but breaks checkout is a regression, even if a lab score improves.

Establish the baseline

  1. Choose representative home, article, archive, product and checkout URLs; include signed-in and anonymous sessions.
  2. Record hosting region, device, network conditions, browser and release version so later runs are comparable.
  3. Run repeatable lab tests more than once and retain the range, not just the fastest result.
  4. Check real-user LCP, INP and CLS where field data is available; distinguish URL data from origin data.
  5. Inspect the document request and separate DNS, connection and server-response delay.
  6. Capture a main-thread trace while reproducing the slow interaction, not only during initial load.
  7. Identify the actual LCP element and the request chain needed to display it.
  8. Save a restorable backup and define the key user flows that must still work after changes.

Reduce origin work

  1. Use a supported PHP release compatible with the site; validate upgrades in staging before production.
  2. Check OPcache health and capacity. Do not disable timestamp checks unless deployment explicitly invalidates the cache.
  3. Profile slow PHP paths and repeated database queries before changing server settings.
  4. Review remote API requests in page rendering; use appropriate caching and bounded timeouts.
  5. Check persistent object caching with the host and verify invalidation when content changes.
  6. Cache public HTML only where safe; bypass authenticated, cart, checkout and personalized responses.
  7. Confirm that two different users cannot receive one another’s cached data.
  8. Inspect CPU, memory and worker saturation under representative load before increasing concurrency.
  9. Validate scheduled task execution. If moving WP-Cron to a system scheduler, monitor missed and failed jobs.
  10. Inspect query plans before adding indexes; assess write overhead and test on a representative data copy.
  11. Review oversized autoloaded options with their owning plugin. Back up before targeted cleanup.
  12. Paginate large queries and avoid loading an unbounded collection into memory.

Improve rendering and interaction

  1. Remove unused scripts and styles only after checking menus, forms, checkout and editor requirements.
  2. Defer compatible scripts while preserving dependency order; async is not a substitute for ordered execution.
  3. Inspect render-blocking styles. Test any critical-CSS approach across templates and viewport sizes.
  4. Keep the LCP image discoverable in the initial HTML instead of inserting it late with JavaScript.
  5. Do not lazy-load the LCP image. Use high fetch priority selectively, then inspect the waterfall.
  6. Break expensive JavaScript into measured chunks and yield between them when appropriate.
  7. Batch layout reads and writes to avoid repeated forced layout.
  8. Remove unnecessary third-party widgets; delay optional ones only when their behavior and consent rules permit.
  9. Reserve dimensions for images, embeds and advertisements before their resources arrive.
  10. Check font fallback metrics and layout shifts; use font-display deliberately.
  11. Keep interactive controls usable with keyboard navigation and reduced motion.
  12. Test long pages and low-powered devices; a fast homepage does not prove every template is fast.

Deliver appropriately sized assets

  1. Choose an image width for its rendered slot and expected pixel density.
  2. Compare AVIF, WebP and existing formats on the actual asset rather than assuming a fixed saving.
  3. Provide responsive srcset candidates and a sizes value that reflects the layout.
  4. Lazy-load off-screen images and use asynchronous decoding where appropriate.
  5. Keep essential labels and explanations as HTML; small text inside images is difficult to read.
  6. Self-host or otherwise minimize font requests; load only weights and character sets the site needs.
  7. Preload only truly critical assets after verifying the request waterfall.
  8. Check gzip or Brotli delivery for text assets and avoid recompressing already compressed images.
  9. Use long-lived caching for versioned static assets and change their URL when their content changes.
  10. Load video intentionally. Hiding a video with CSS alone does not guarantee its download stops.

Verify the release

  1. Test login, search, contact forms, cart and checkout after enabling any optimization.
  2. Inspect cache headers and content invalidation on edited pages.
  3. Repeat baseline lab tests with the same conditions and record both gains and regressions.
  4. Monitor field metrics over time; a release is not immediately reflected in a rolling data window.
  5. Set performance budgets and keep a change log so a later regression can be traced to a release.

Frequently asked questions

What should you fix first?

If the initial document is slow, profile the origin and cache behavior. If the document arrives quickly but the main content appears late, inspect the LCP resource and rendering path. If clicks feel slow after loading, investigate JavaScript and layout work during the interaction. Keep the distinction visible in your audit notes.

Does a low Lighthouse score trigger a fixed ranking penalty?

No published rule assigns a fixed Google ranking penalty to a Lighthouse score below a particular number. Use the score to investigate technical opportunities and field data to understand actual visitors.

Do I need to apply all 47 checks to every WordPress site?

No. Use the checklist to identify relevant investigations, then prioritize the bottleneck affecting an important customer journey. A brochure site and a busy WooCommerce store have different requirements. Record why a check is applicable, deferred or unnecessary.

What should I test after changing cache or script settings?

Check menus, search, forms, login and checkout where applicable. Test separate sessions, edit and unpublish content to check invalidation, and compare performance with the original baseline. Keep a rollback available if an optimization breaks a required interaction.

Sources and further reading

Keep exploring

Dig into TTFB and Core Web Vitals diagnosis and responsive image delivery.

Paul Edward

Written by Paul Edward

Senior full-stack web developer working with PHP, Laravel, WordPress and AI-assisted web systems.

More about Paul

Leave a Reply

Your email address will not be published. Required fields are marked *

Loading a quick check… (this needs JavaScript)

Continue reading

Project brief Step 1 of 2 · The work

What do you want built?

A paragraph is genuinely enough to start. If it isn't work I'm right for, I'll say so and point you somewhere better.

The work

Pick everything that applies.

Platform

No idea is a perfectly good answer.

What are you trying to build, and what does it have to do for the people who use it? Write it the way you'd say it out loud.

0 / 1200

Two steps. Under a minute.