A plugin cannot reliably diagnose “the site is slow” from one score. WordPress performance spans PHP execution, database work, object cache, scheduled jobs, remote APIs, browser assets, page cache, and the origin server. The useful tools expose evidence from one layer at a time.
Start with WordPress’s built-in information, add one profiler, and reproduce one slow operation. Installing ten overlapping monitoring plugins at once changes the system you are trying to measure.
Establish a Reproducible Slow Path
Define the symptom before enabling diagnostics:
- uncached home page is slow;
- product editing times out;
- cart or checkout pauses;
- admin screens are slow but the public site is fast;
- a scheduled WooCommerce action builds a backlog;
- the first request is slow while cached requests are fast.
Record the URL or action, whether the user is logged in, cache state, timestamp, and approximate response time. Test the same path three to five times. A random visit during a backup or import is not a baseline.
Use a staging copy for invasive tests. A current database copy with customer data must be access-controlled and sanitised; do not send order details, credentials, or payment metadata to diagnostic services.
1. Start with Built-in Site Health
Open Tools → Site Health. The official Site Health documentation explains both views:
- Status identifies critical and recommended configuration issues;
- Info reports WordPress, plugin, theme, server, database, PHP, filesystem, and size details.
Check loopback requests, REST API health, PHP version, active PHP sessions, filesystem permissions, background updates, and missing modules. Site Health does not identify a slow SQL query, but it can expose a broken prerequisite before deeper profiling.
Export the Info report only into a private support channel. Review it for paths, server identifiers, and other environment details first.
2. Use Query Monitor for One Request
Query Monitor is the most useful first plugin for request-level diagnosis. It shows database queries, PHP errors, hooks, HTTP API calls, scripts, styles, templates, environment data, and the plugin or theme responsible for many events.
On the slow page, inspect:
- total page-generation time and peak memory;
- slow, duplicate, and erroneous queries;
- queries grouped by component;
- external HTTP calls and their duration;
- PHP warnings or deprecated calls;
- scripts and styles with missing or excessive dependencies.
A 600 ms query repeated 20 times points to a different fix than a single 12-second remote API call. Preserve screenshots or exported details from the specific request rather than saying “Query Monitor was red.”
Query Monitor adds some overhead, especially on pages with hundreds of queries. Compare patterns and responsible components, not its instrumented timing with an external production benchmark.
3. Isolate Plugin and Theme Conflicts
WordPress’s official troubleshooting lesson recommends Health Check & Troubleshooting mode. It disables plugins and switches theme only for the administrator’s diagnostic session, while ordinary visitors continue to see the normal site.
Enable components in controlled groups:
- WooCommerce and the default theme;
- payment, shipping, and tax integrations;
- page builder and theme;
- product add-ons and search/filter plugins;
- analytics, consent, marketing, and feeds;
- cache and optimisation layers last.
Retest the same action after every change. If the problem returns, halve the last group to narrow the cause. Troubleshooting mode reduces visitor impact but is not a substitute for a backup and staging environment.
4. Inspect Cron and WooCommerce Queues
WP Crontrol exposes scheduled WordPress cron events, their recurrence, and callbacks. Look for overdue events, extremely frequent custom jobs, duplicate schedules, and callbacks that never clear.
Do not delete unfamiliar events as a performance experiment. Identify their owning plugin and determine whether they represent pending business work.
WooCommerce also has built-in status, logs, and scheduled-action screens. Failed or perpetually pending Action Scheduler jobs can explain delayed emails, subscriptions, webhooks, stock synchronisation, and admin load. Read the exception and callback before retrying a large queue.
5. Correlate with Server Metrics
WordPress plugins see only part of the request. At the same timestamp, inspect:
- PHP-FPM or LiteSpeed process saturation;
- CPU steal, load, and memory pressure;
- slow database queries and lock waits;
- disk latency and free space;
- Redis availability and hit behaviour;
- web-server access/error logs;
- outbound DNS and network latency.
If every plugin appears slow, the shared bottleneck may be PHP workers, storage, database capacity, or a saturated host. If only one component’s query or API call dominates, investigate that component first.
PHP Limits Are Guardrails, Not Speed Controls
Raising memory_limit, max_execution_time, or upload limits does not make WooCommerce faster. It lets a slow or memory-heavy operation run longer. Extremely high values can delay failure and increase the impact of concurrent requests.
Set upload limits for actual business requirements, keep display_errors off in production, use OPcache according to the hosting platform, and tune PHP worker capacity from measured concurrency. Change settings through the supported cPanel MultiPHP editor or hosting configuration rather than editing generated files directly.
A Minimal Diagnostic Kit
For most cases, use:
| Tool | Best question |
|---|---|
| Site Health | Is the WordPress/server environment obviously misconfigured? |
| Query Monitor | Which query, hook, PHP error, or remote call slows this request? |
| Troubleshooting mode | Does a plugin or theme cause the problem? |
| WP Crontrol | Is WordPress cron late, duplicated, or excessive? |
| WooCommerce Status and Scheduled Actions | Are store jobs or integrations failing? |
| Host monitoring and logs | Is the bottleneck below WordPress? |
Remove temporary diagnostic plugins when the investigation ends, document the evidence and fix, then measure the original slow path again under the same conditions. Performance work is complete only when the user-visible operation improves without breaking checkout, background jobs, caching, or security.