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_scriptschecked against$hook_suffixinstead of loading on every screen), targetedscript_loader_tagfiltering for defer/async, removing what the theme or plugins load but never use. - Database and query optimization —
pre_get_poststuning, 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
- Profile first. A waterfall and a query log tell you more than any plugin’s built-in “score.”
- 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.
- 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.