Slow server response
High TTFB can come from overloaded hosting, uncached requests, expensive PHP hooks, remote API calls or database work that must finish before WordPress sends HTML.
If WordPress feels slow, installing another cache plugin is rarely the right first move. I profile the URLs that matter, server response, PHP, database queries, theme output, third-party scripts and Core Web Vitals to find the actual constraint — then fix the smallest set of things that moves real-user performance.
Two sites can both feel four seconds slow and need completely different fixes. One may wait on PHP and MySQL; another may send HTML quickly but block the browser with scripts, fonts and an oversized hero. Treating them with the same plugin stack is how fragile sites get built.
High TTFB can come from overloaded hosting, uncached requests, expensive PHP hooks, remote API calls or database work that must finish before WordPress sends HTML.
Plugin count alone tells you little. What matters is what each plugin executes on the page being tested: queries, PHP work, scripts, styles and external calls.
Consent tools, page builders, analytics, chat, sliders and marketing scripts can keep the main thread busy after the page looks loaded, creating poor INP and sluggish controls.
The LCP element is often a hero image or poster frame. Wrong dimensions, CSS backgrounds, lazy loading or late discovery can turn a fast server into a slow first view.
Autoloaded options, unbounded postmeta queries, search/filter plugins, expired data and background jobs can make uncached requests unpredictable.
Minification, delay-JS, lazy loading and CDN features can overlap. Stacking optimizers may improve a lab score while breaking forms, analytics or real-user rendering.
I start from landing pages, product templates, search, checkout or logged-in workflows and separate backend delay from browser rendering. That makes the fix list shorter, safer and easier to validate.
Search Console and CrUX show real-user experience; Lighthouse and DevTools are then used to reproduce and trace the underlying work.
Compare cold vs warm responses, anonymous vs logged-in traffic and cache HIT/MISS behaviour. Page cache cannot hide slow dynamic requests.
APM, Query Monitor and slow-query evidence reveal which hooks, queries, plugins or external calls dominate backend time.
DevTools shows when the LCP resource is discovered, which scripts block execution and what happens around slow interactions.
If the homepage is fast but categories or products are slow, the problem is usually template-specific — a much better clue than one global score.
Every change is checked visually and functionally on staging, then re-measured after deployment so performance never comes at the cost of revenue paths.
The implementation order follows the trace. I avoid “optimize everything” projects because broad changes create regressions and make it impossible to know what actually improved performance.
Capture field metrics, Lighthouse/DevTools traces, TTFB, cache headers and representative templates before touching code.
Fix avoidable queries, expensive hooks, remote calls, cron/background contention and cache configuration where the server is the bottleneck.
Prioritize the LCP resource, trim render-blocking assets, stop non-critical files loading globally and make font/image delivery predictable.
Cut or defer non-essential JavaScript, simplify event-heavy components and isolate third-party tags that occupy the main thread.
Run checkout, forms, search, navigation and visual checks before production, then verify CDN/page-cache behaviour after release.
Document before/after data on the same URLs and keep guardrails so future plugins or content changes do not undo the work.
You should not be left with a mysterious stack of toggles. The handover explains the bottleneck, what changed, what should be monitored and which optimizations are intentionally not enabled.
A short list of bottlenecks ranked by user impact and implementation risk, not a 40-page automated audit.
Theme, plugin, cache, asset-loading and database changes implemented where the evidence points.
Comparable measurements on the same key templates, with field-data context where available.
Staging validation for forms, commerce, consent, analytics and responsive layouts.
Clear notes for the next developer or marketing team so new scripts/plugins do not silently restore the bottleneck.
If hosting, an API or a plugin vendor is the limiting factor, you get evidence that can actually be escalated.
If the issue spans multiple templates, the WordPress performance service covers diagnosis and implementation across the whole site.
A sudden slowdown often follows a plugin/theme update, cache change, traffic spike, database growth, external API delay or hosting resource constraint. Compare traces around the change window instead of starting with random cleanup.
It can remove repeated backend work for cacheable anonymous pages, but it cannot fully solve slow checkout/account/search requests, heavy JavaScript, poor LCP resource discovery, third-party tags or database work on uncached paths.
Profile the request and asset output. A plugin may be expensive in PHP, create slow queries, call external services or load scripts globally. Controlled staging tests then confirm whether disabling or replacing it removes the measured bottleneck.
Sometimes, but moving hosts before profiling can hide the problem rather than fix it. If CPU saturation, worker limits, storage or cache architecture are the constraint, the trace will show it.
Any performance change can create risk if applied blindly. I use staging, template-specific testing and production verification, especially for checkout, forms, consent and analytics.
Core Web Vitals are one layer of performance. A site can have acceptable lab scores and still feel slow on logged-in, cart or search workflows, so diagnosis covers both field metrics and application speed.