The Health Check opens the analyzer on the score breakdown. This guide explains exactly how the number is computed, what each slice measures, and what the score cannot tell you. Hub: WordPress.org Ops.
Why a score at all?
Looking at a plugin listing, most developers scan a handful of fields in sequence: last updated, tested up to, install count, rating, support threads. The health score automates that scan and collapses it into a single number so you can compare three candidates without doing the mental arithmetic five times per plugin.
It is a decision aid, not a verdict. A plugin that scores 85 may still be wrong for your setup. A plugin that scores 55 may be the only good option for a niche use case and still work perfectly. Read the five slices and form your own opinion — the score is the starting point.
Five slices (20 points each)
The score is always a whole number from 0 to 100, built from five equally weighted components.
Slice 1 — Updates (recency of last_updated)
| Days since last update | Points |
|---|---|
| 0 – 90 days | 20 |
| 91 – 180 days | 16 |
| 181 – 365 days | 12 |
| 366 – 730 days (1–2 years) | 6 |
| 731 – 1095 days (2–3 years) | 2 |
| Over 3 years | 0 |
last_updated is the field in the plugin information API. It reflects the most recent push to the WordPress.org SVN repository. It does not reflect private patches, hotfixes applied outside the directory, or any activity on GitHub or GitLab mirrors.
Some authors maintain plugins on external VCS and push to the directory only at major releases. A plugin updated 18 months ago may be actively maintained in a private repo. The score reflects what WordPress.org knows, not what the author is doing.
Slice 2 — Compatibility (tested up to vs current WordPress)
| Relationship of tested vs current | Points |
|---|---|
| Tested to current major (e.g., 6.x) | 20 |
| One minor behind (e.g., 6.4 when 6.5 is current) | 15 |
| One major behind | 8 |
| Two or more majors behind | 2 |
| Not yet known (current WordPress fetch failed) | 10 (neutral) |
tested is self-reported by the plugin author. WordPress.org does not run compatibility tests. A plugin with tested: 6.7 and the current WordPress at 6.7 earns full points — but that only means the author declared it. “Works in my dev environment” is the typical bar for bumping this field.
The current WordPress version is fetched from the core version-check API once per hour by the proxy and shared across all requests in that window.
Slice 3 — Popularity (active install bucket)
| Install bucket | Points |
|---|---|
| 1+ million | 20 |
| 500k+ | 17 |
| 100k+ | 14 |
| 10k+ | 10 |
| 1k+ | 6 |
| Under 1k or unavailable | 2 |
The install bucket is a lower bound. 10,000+ means at least 10,000 sites have the plugin active in a WordPress installation that participates in the directory’s active install tracking. It does not include sites that self-host WordPress without the anonymous install tracking, enterprise platforms that strip the telemetry, or sites that have the plugin installed but deactivated.
The 20-point ceiling means popularity cannot rescue a plugin that scores poorly on updates and compatibility. A million-install plugin that was last updated four years ago and is tested two major versions behind might only score around 50.
Slice 4 — Reviews (rating and rating volume)
| Condition | Points |
|---|---|
| 4.5+ stars with 50+ ratings | 20 |
| 4.0+ stars with 20+ ratings | 16 |
| 3.5+ stars with 10+ ratings | 12 |
| Any rating, fewer than 10 ratings | 8 |
| No ratings | 5 (neutral rather than zero) |
The raw rating is on a 5-star scale with a num_ratings count. We penalise low volume: a plugin with two 5-star ratings from the author’s friends is not the same as a plugin with 2,000 ratings averaging 4.8. The floor at “no ratings” is 5 rather than 0 because a new or niche plugin with no ratings is not necessarily bad — it is just unknown.
Slice 5 — Support (resolved thread ratio)
| Condition | Points |
|---|---|
| 80%+ resolved (20+ total threads) | 20 |
| 60–79% resolved | 15 |
| 40–59% resolved | 10 |
| Under 40% resolved | 4 |
| Fewer than 5 threads (too small a sample) | 10 (neutral) |
| No thread data | 10 (neutral) |
Support thread data (support_threads and support_threads_resolved) is in the plugin info API. A plugin where authors consistently reply and close threads earns near-full points here. A plugin with 200 open threads and 10 resolved does not.
Plugins with very few threads get the neutral 10 because a small sample can make a good plugin look either perfect (one thread, one closed) or terrible (one thread, still open) through noise alone.
Activity vs health — they are different signals
The health score does not determine the activity label. These are computed separately:
- Health answers: “Given what the listing says right now, does this plugin look maintained, popular, and well-reviewed?”
- Activity answers: “Does the update pattern suggest this plugin is still being actively worked on?”
A plugin with 5+ million installs that has not been updated in 22 months might score 68 on health (popularity and support are strong; updates and possibly compatibility drag it down) while earning “low activity” on the abandoned label. That is intentional — these are different questions and they deserve different answers.
The activity label is explained in full in the abandoned check use-case guide.
What the score never measures
- Security vulnerabilities — no CVE data, no static analysis, no dependency audit. A 95-score plugin may have a known XSS. Use Patchstack or WPScan for CVE lookups.
- Code quality — we do not read PHP, JavaScript, or CSS in the zip. The score is entirely based on listing metadata.
- Performance impact — load time, database queries, front-end assets. The listing has nothing about these.
- Licence — GPLv2, GPLv3, commercial add-ons. Not in the info API.
- Your specific setup — whether this plugin conflicts with your theme, WooCommerce version, or another plugin you run.
How to act on the score
Score 80–100 — The listing looks healthy. Still read the changelog before upgrading on a production site, and still check requires_php against your actual hosting PHP.
Score 60–79 — Caution is warranted. Look at which slices are low. If updates are dragging it down but installs and support are strong, the plugin may be stable. If tested-up-to is three versions behind, run it in staging.
Score 40–59 — At least two slices are weak. Identify the reason. If it is an old, low-install plugin with no reviews and unresolved threads, look for an alternative. If it is an intentionally maintenance-free utility (pure CSS, no PHP hooks), the score may be misleading.
Score below 40 — The listing has multiple red flags. That does not make it unusable, but you need to understand why before installing. Check when it was last updated, whether it is tested against your WordPress, and whether anyone has had success with it on the support forum.
Related
- Plugin Analyzer — score + all tabs in one place
- Vet a plugin before install
- See if a plugin is abandoned
- All WordPress.org Ops tools