Performance scoreis a combined rating between 0 and 100 that measures how fast and stable your website loads. The score is based on Google's Core Web Vitals — three key metrics that measure loading speed and visual stability.
Three metrics that build the score
The performance score is calculated as an average of scores from three Web Vitals:
LCP — Largest Contentful Paint
Measures how long it takes before the largest visible element (e.g. a hero image or heading) has rendered on screen. LCP is the most important measure of perceived loading speed.
Good: ≤ 2.5 s · Needs improvement: ≤ 4.0 s · Poor: > 4.0 s
FCP — First Contentful Paint
Measures how long it takes before the first visible content (text, image, or SVG) appears on screen. FCP shows how quickly the visitor sees that something is happening after clicking the link.
Good: ≤ 1.8 s · Needs improvement: ≤ 3.0 s · Poor: > 3.0 s
CLS — Cumulative Layout Shift
Measures how much the page layout jumps or shifts during loading. A high CLS value means elements (images, ads, buttons) shift unexpectedly — which is frustrating for visitors.
Good: ≤ 0.1 · Needs improvement: ≤ 0.25 · Poor: > 0.25
How is the score calculated?
Each metric yields a sub-score between 0 and 100 based on Google's thresholds. The final score is the average of all available sub-scores.
| Metric | Good | Needs work | Poor |
|---|---|---|---|
| LCP | ≤ 2,500 ms → 100p | ≤ 4,000 ms → 50–100p | > 4,000 ms → 0–50p |
| FCP | ≤ 1,800 ms → 100p | ≤ 3,000 ms → 50–100p | > 3,000 ms → 0–50p |
| CLS | ≤ 0.1 → 100p | ≤ 0.25 → 50–100p | > 0.25 → 0–50p |
For example, if your site's average LCP is 2,000 ms (100p), FCP is 1,500 ms (100p), and CLS is 0.15 (67p), your performance score becomes: (100 + 100 + 67) ÷ 3 ≈ 89.
How Web Vitals are measured technically
Qvicko's tracking pixel collects Web Vitals directly from each visitor's browser using web standard APIs:
- Navigation Timing API — Provides load time and TTFB (Time to First Byte) via
PerformanceNavigationTiming. - Paint Timing API — Provides the FCP value via
performance.getEntriesByType("paint"). - PerformanceObserver — Listens for
largest-contentful-paintandlayout-shiftevents for LCP and CLS.
The pixel waits 100 ms to let the browser stabilize, and an additional 1,000 ms for LCP and CLS observers to report their values. Averages are then computed on the server across all page views in the selected period.
Real values, not simulated
Unlike tools like Google Lighthouse (which runs simulated tests), Qvicko's performance score shows data from real visitors under real network conditions. This provides a more representative picture of the user experience.
Tips to improve your score
- Optimize images — Use the right image format (WebP) and size. Large images are the most common cause of high LCP.
- Set dimensions — Give all images and iframes a fixed width and height to reduce CLS.
- Minimize blocking resources — Load CSS and JavaScript asynchronously where possible.