# Performance and web vitals

> Measure how fast your pages load and respond for real visitors, find the slow ones, and know what counts as a good value.

This page shows how to measure the speed of your site as your visitors experience it. After reading it you can switch web vitals on, read the Performance screen, and tell why a page has no values yet.

## What is measured

Web vitals are measurements that browsers take while a page is used. The full script collects them and sends them along.

| Short name | Full name | What it tells you |
| --- | --- | --- |
| LCP | Largest Contentful Paint | How long the largest image or block of text takes to appear |
| INP | Interaction to Next Paint | How long the page takes to respond to a click, a tap or a key press |
| CLS | Cumulative Layout Shift | How much the layout jumps around while the page loads. A score without a unit |
| FCP | First Contentful Paint | How long until the first text or image appears |
| TTFB | Time to First Byte | How long the server takes to start answering |

These come from real visits, on the devices and connections your visitors really have. They are not a test run in a lab, and there is no score out of a hundred: each measurement keeps its own unit.

## What a good value is

Every measurement is sorted into one of three bands. The limits are the widely used public ones for web vitals.

| Measurement | Good, up to | Poor, above |
| --- | --- | --- |
| LCP | 2.5 seconds | 4 seconds |
| INP | 200 milliseconds | 500 milliseconds |
| CLS | 0.1 | 0.25 |
| FCP | 1.8 seconds | 3 seconds |
| TTFB | 0.8 seconds | 1.8 seconds |

Anything between the two limits is shown as "Needs work".

The band is always judged on one number, which the dashboard labels `p75`. It is the value that three out of four page loads stayed at or below. A plain average would hide the slow loads, and those are the ones visitors notice.

## Switch it on

Web vitals are off until you ask for them. Owners and Admins can switch them on.

1. Open Settings, Installation and find "Tracking options".
2. Switch on "Web Vitals" and save.
3. The screen now tells you that the snippet loads a different script file. Copy the tag again and replace the tag on your site with it.

Step three matters. Only the full script measures web vitals, and the tag you installed first loads the light one. With the old tag in place the option stays without effect. [Add the tracker](/docs/tracker) explains the two scripts.

You can also set `data-vitals="true"` on the tag of the full script yourself. See [script options](/docs/script-options).

Each page load with web vitals on sends one extra hit, the sample, and a sample uses one unit of your monthly allowance like any other hit. [Plans, usage and limits](/docs/plans-and-usage) explains the allowance.

## How a sample is taken

- There is one sample per page load. It is sent when the visitor leaves the page or puts it in the background, because some values are only final at that point.
- A sample describes the page the browser loaded. In an app that changes pages without a full reload, the values are filed under the page that was loaded first, not under the pages opened after it.
- INP exists only when the visitor clicked, tapped or typed, so it has fewer samples than the others.
- A browser measures only what it supports. A measurement the browser cannot take is simply missing from the sample.

Stored with a sample are the path of the page, the hostname, the values, and the country, browser, operating system and device type of the request. No visitor identifier is stored with it. A sample that arrives during a visit keeps a reference to that visit, used only to drop a duplicate. No report reads it.

A value that cannot be real is dropped by itself and the rest of the sample is kept. For a timing that means zero or less, or more than 120 seconds. For CLS it means less than zero or more than 100. A second sample for the same page from the same visit within 60 seconds of the first is dropped as a duplicate.

## The Performance screen

Open **Performance** in the sidebar of a site. Members of the workspace and Viewers of the site can open it. A shared dashboard link does not include it.

**The tiles.** One tile per measurement shows its `p75` for the date range, with the band it falls in. Select a tile to make it the measurement the rest of the screen is about. With a comparison switched on, a tile also shows its change against the other period.

**Over time.** The chart draws these lines for the selected measurement: `p50`, `p75` and `p95`. Half of the page loads stayed at or below the first, three out of four at or below the second, and all but one in twenty at or below the third. The legend switches lines on and off. A stretch without samples is a gap in the line, not a zero.

**Needs attention.** The pages with the highest `p75`, slowest first. A page is listed once it has 3 samples of the selected measurement in the range.

**Devices and Country.** The same number by browser, by device type and by the country of the visitor, the rows with the most samples first.

Select a row in any of these lists to filter the screen by it. Filters for page, hostname, country, browser, operating system and device apply here. Other filters are ignored on this screen, because the reports do not tie a sample to a visit.

For a range with more than 200,000 samples of one measurement, some numbers are worked out from an even selection of them. A line under the chart says so when that happens. Sample counts are always exact.

## Why a page has no values yet

- **Web vitals are switched off.** The screen then says "Web Vitals are not collected yet".
- **The site still loads the light script.** The screen says "Waiting for the first sample" and stays that way. Check that the tag on your site matches the one under Settings, Installation.
- **Nobody has left a page yet.** A sample is sent when a visitor leaves, so the first numbers take a few visits.
- **The page has too few samples.** It joins "Needs attention" at 3 samples in the chosen range. Pick a longer range.
- **The measurement is INP.** Page loads without an interaction do not report it.
- **A filter is active** that leaves no samples over.

Alert rules watch conversion goals and funnels. They cannot watch a web vital.

**Next:** [The dashboard](/docs/dashboard), [Script options](/docs/script-options), [Plans, usage and limits](/docs/plans-and-usage)
