A WordPress admin plugin to Customize and secure your WordPress dashboard
One score, with the reasons underneath
Checks across environment, database, plugins and security, summed up in a score out of a hundred and explained one by one. Below it, charts of your site's load time and of how the score moves, day by day.If a plugin is slowing the site down or calling external servers, it shows up here by name, with numbers.
How WordPress health score works
It starts at a hundred: every critical issue takes fifteen points off, every warning six. Informational entries take nothing. Each line says what was found and what to do about it, so the number always breaks down into its reasons.
Turn on query profiling and the time spent on the database is attributed to each individual plugin: milliseconds per request, average queries per request and the total. Sampling happens on the public site only, and the feature is designed to be switched on for a while and then off again.
The outbound connection monitor records which external servers each plugin contacts. It may be entirely normal — licensing, updates — or unwanted tracking: the module shows it and leaves the judgement to you.
After every update, the average page build time is compared with the previous period. If it got noticeably worse, a warning says by how much and after which update.
The limits: CPU time, memory and PID per plugin are not shown, because they cannot be measured per plugin from inside WordPress. Database time is the slice that genuinely can be measured, and that is the slice you get.
The optional scan queries the WordPress.org directory to flag plugins untouched for more than two years and those declaring compatibility only with an older WordPress than yours. Add a free WPScan token and it also checks for known vulnerabilities, including the version each was fixed in.
Frequently asked about WordPress performance monitoring and WordPress health score
Five answers on how it measures, what cannot be measured, and what measuring costs.
Turn on query profiling and the time spent on the database is attributed to each individual plugin: milliseconds per request, average queries per request, and the total. It isn’t an estimate derived from file size or hook count — it is the time that plugin actually consumed on your database.
Sampling happens on the public site only and is designed to be switched on for a few days and then off again. After every update, the average page build time is also compared with the previous period: if it gets noticeably worse, a warning tells you by how much and after which update.
Because from inside WordPress they cannot be measured reliably. PHP runs everything in a single process: there is no dependable way to say how much CPU or memory one portion of code consumed while running alongside all the others.
Anyone showing those numbers is estimating them, and an estimate presented as a measurement is worse than no data at all. We would rather give you four real numbers — database time, queries, registered hooks, outbound connections — than six of which three are invented.
It starts at a hundred: every critical issue takes fifteen points off, every warning six, and informational entries take nothing. Each line says what was found and what to do about it, so the number always breaks down into its reasons — it isn’t an opaque grade you have to take on trust.
The checks cover PHP version, HTTPS in the admin, errors visible to visitors, an enabled file editor, the weight of autoloaded options, object caching, pending updates, open registration with the Administrator role, recently created admin accounts, and the state of the database. The score is snapshotted once a day, so you can see whether you are improving.
They complement each other, and there is no reason to replace the core one. The WordPress Site Health screen flags your PHP version, missing updates and configuration problems: it does its job well, but it photographs the present.
What you get here is what that screen doesn’t do: attributing time to individual plugins, keeping thirty and seventy days of history, charting how the score moves, and showing which external servers each plugin contacts.
Measurement samples one request in five and keeps only a daily aggregate for the last seventy days: there is no table growing with every visit. The weekly curve in the chart is a seven-day moving average, so one bad day doesn’t look like a trend.
The charts are SVG generated on the server: no JavaScript library to download, no outbound call to draw them, and they work under strict content security policies and in dark mode.