Overall Health is a quick summary grade shown on the page-load detail view. It combines the two most user-visible metrics — load speed and visual stability — into a single Good, Needs Improvement, or Poor label.
It is designed to give a fast, at-a-glance answer for one specific visit without requiring you to interpret raw numbers.
Full page loads
For full browser navigations, Overall Health is based on LCP and CLS:
| Condition | Grade |
|---|---|
| LCP < 3 000 ms and CLS < 0.15 | Good |
| LCP < 5 000 ms and CLS < 0.25 | Needs Improvement |
| Anything else | Poor |
Both metrics must be within their thresholds to reach the higher grade. A fast LCP with a high CLS, or a stable layout with a slow LCP, will not reach Good.
SPA navigations
For in-app route changes (SPA navigations), LCP is not meaningful — the browser does not emit LCP events for pushState navigations. Instead, Witnes uses the Content Complete time (how long until the route stopped rendering new content) combined with CLS:
| Condition | Grade |
|---|---|
| Content Complete < 1 000 ms and CLS < 0.15 | Good |
| Content Complete < 2 500 ms and CLS < 0.25 | Needs Improvement |
| Anything else | Poor |
vs. Sentiment Score
Overall Health and the Sentiment Score are different things and intentionally use different thresholds:
- Overall Health is a quick, two-metric check for this individual page load. It doesn't account for jank, rage quit, interaction dead zones, or historical comparison. It's a useful shortcut, not a complete picture.
- Sentiment Score is the session-level grade shown in the analytics tables. It's based on up to six experience symptoms, includes historical context, and is computed server-side from the processed data. It's the authoritative grade for trend analysis.
It's normal for the two grades to differ on the same visit. A visit can have a fast LCP and stable CLS (Overall Health = Good) but still receive a Sentiment Score of Needs Improvement if there was significant jank or a late-loading resource that timed out.