WordPress Performance Optimization

A slow WordPress site is rarely one big problem — it’s fifteen small ones: a plugin enqueueing its CSS on every wp-admin screen “just in case,” a script blocking render because nobody set defer, a query re-running on every page load that could be cached once. I fix Core Web Vitals by finding which of the fifteen apply to your site, not by installing a caching plugin and calling it done.

What I optimize

  • Core Web Vitals — LCP, INP, CLS, diagnosed against the actual render path, not a generic checklist.
  • Asset loading — enqueue scoping (admin_enqueue_scripts checked against $hook_suffix instead of loading on every screen), targeted script_loader_tag filtering for defer/async, removing what the theme or plugins load but never use.
  • Database and query optimization — pre_get_posts tuning, transient caching for expensive queries, cleaning up autoloaded options that bloat every page load.
  • Caching strategy — object cache (Redis/Memcached), page cache, and CDN configuration matched to how the site is actually used, not a one-size preset.

Proof, not a pitch deck

This is the same level of detail as the Enqueue Hooks article on this site — where to enqueue a script, when to check $hook_suffix, why filtering script_loader_tag without checking the handle can break load order. Read it before you hire me for this.

How I work

  1. Profile first. A waterfall and a query log tell you more than any plugin’s built-in “score.”
  2. Fix the root cause, not the symptom. A caching plugin papering over a query that runs 40 times per page load is a temporary fix at best.
  3. Re-measure after each change, not just once at the end.

Who this is for

Sites where speed is costing conversions or rankings, and a generic caching plugin already didn’t fix it. If you haven’t tried a caching plugin yet, start there — I’ll tell you that for free.

Get started

Send me the URL and what “slow” means for your case — a specific page, a specific device, a specific metric. I’ll scope it honestly, including telling you when the fix is a five-minute plugin conflict, not a project.

Get in touch →