# Cumulative Layout Shift (CLS)

Category: [Performance & Core Web Vitals](https://seo-geo-glossary.com/en/glossary/category/performance-core-web-vitals/) › [Core Web Vitals & metrics](https://seo-geo-glossary.com/en/glossary/category/performance-core-web-vitals/core-web-vitals-metrics/) · Also known as: CLS

**Cumulative Layout Shift (CLS)** is a Core Web Vitals metric for visual stability. web.dev defines it as the largest burst of layout shift scores for every unexpected layout shift during the lifecycle of a page. It has no unit: the score is a number, and lower is better.

## How is the score calculated?

Each layout shift gets a score that multiplies two values:

**layout shift score = impact fraction × distance fraction**

The impact fraction is the share of the viewport affected by the moving elements. The distance fraction is the greatest distance an element moved, relative to the viewport's larger dimension. CLS takes the highest total from any "session window," a burst of shifts with less than 1 second between shifts and at most 5 seconds in total.

## What are the thresholds?

| Rating | CLS |
|---|---|
| Good | up to 0.1 |
| Needs improvement | 0.1 to 0.25 |
| Poor | above 0.25 |

The measure is the 75th percentile of page loads, mobile and desktop separately.

## Which shifts count?

Shifts the user does not expect. A shift within 500 milliseconds after a click, tap or key press is treated as expected and does not count.

## What causes layout shifts?

- Images without `width` and `height` or an `aspect-ratio`.
- Ads, embeds and iframes without reserved space.
- Web fonts that replace a fallback font and reflow the text.
- Content injected above existing content.
- Animations on properties such as `top` or `left` where `transform` would avoid layout changes.

## Example

A product page loads text first. A banner image without dimensions arrives half a second later and pushes the headline and button down by 120 pixels. Setting `width` and `height` on the image reserves the space, so nothing moves.

```html
<img src="banner.jpg" width="1200" height="400" alt="Banner">
```

## Common mistakes

- **Lazy-loaded content without reserved space.** Content that appears after the initial load, for example while scrolling, pushes the rest of the page when no space is set aside.
- **Measuring only in the lab.** web.dev notes that lab tools measure shifts during page load and can underreport real values. Field data shows what users experience.

## At a glance

- **Measures:** largest burst of layout shift scores for unexpected shifts during the whole page lifecycle
- **Data source:** Field (CrUX, PageSpeed Insights, Search Console) and lab (Lighthouse, Chrome DevTools)
- **“Good” threshold:** 0.1 or less
- **Assessment:** 75th percentile of page loads, mobile and desktop separately
- **Core Web Vital:** Yes, one of the three Core Web Vitals
- **Docs:** [web.dev: Cumulative Layout Shift](https://web.dev/articles/cls)

Last checked: October 8, 2026

## Thresholds

- **CLS** (Cumulative Layout Shift): good ≤ 0.1, needs improvement ≤ 0.25, poor > 0.25 ([Source](https://web.dev/articles/cls))

Assessed at the 75th percentile of page loads, mobile and desktop separately.

## Web Vitals metrics compared

| Metric | Measures | Core Web Vital? | Field or lab | “Good” per web.dev |
|---|---|---|---|---|
| LCP (Largest Contentful Paint) | Render time of the largest image, text block or video visible in the viewport, from the start of navigation | yes (loading) | field and lab | 2.5 s or less |
| INP (Interaction to Next Paint) | Latency of interactions across the whole visit until the next paint; one value that all (or nearly all) interactions fall below | yes (interactivity), since 2024-03-12 | field; in the lab only with simulated interactions, Lighthouse does not measure INP | 200 ms or less |
| CLS (Cumulative Layout Shift) | Largest burst of unexpected layout shifts during the entire lifecycle of the page | yes (visual stability) | field and lab | 0.1 or less |
| TTFB (Time to First Byte) | Time from the start of navigation until the first byte of the response arrives | no (helps diagnose LCP) | field and lab | 0.8 s or less |
| FCP (First Contentful Paint) | Time from the start of navigation until any part of the page's content is rendered | no (helps diagnose LCP) | field and lab | 1.8 s or less |
| TBT (Total Blocking Time) | Total time after FCP during which the main thread was blocked long enough to prevent input responsiveness | no (lab proxy for INP) | lab; web.dev does not recommend field measurement | less than 200 ms on average mobile hardware |
| Speed Index | How quickly content is visually displayed during page load (from a video of the load) | no | lab (Lighthouse) | Threshold according to Lighthouse: mobile up to 3.4 s “fast” (web.dev gives no value) |
| FID (First Input Delay), historical | Time from the first interaction until the browser can begin processing event handlers | until 2024-03-12, replaced by INP | field only | 100 ms or less |

Sources: [web.dev: Web Vitals](https://web.dev/articles/vitals); [web.dev: Largest Contentful Paint (LCP)](https://web.dev/articles/lcp); [web.dev: Interaction to Next Paint (INP)](https://web.dev/articles/inp); [web.dev: Cumulative Layout Shift (CLS)](https://web.dev/articles/cls); [web.dev: Time to First Byte (TTFB)](https://web.dev/articles/ttfb); [web.dev: First Contentful Paint (FCP)](https://web.dev/articles/fcp); [web.dev: Total Blocking Time (TBT)](https://web.dev/articles/tbt); [web.dev: First Input Delay (FID)](https://web.dev/articles/fid); [web.dev Blog: Interaction to Next Paint is officially a Core Web Vital (2024-03-12)](https://web.dev/blog/inp-cwv-launch); [Chrome for Developers: Lighthouse – Speed Index](https://developer.chrome.com/docs/lighthouse/performance/speed-index). Last checked: October 8, 2026

## Related terms

- [Core Web Vitals](https://seo-geo-glossary.com/en/glossary/core-web-vitals/index.md)
- [Largest Contentful Paint (LCP)](https://seo-geo-glossary.com/en/glossary/largest-contentful-paint/index.md)
- [Interaction to Next Paint (INP)](https://seo-geo-glossary.com/en/glossary/interaction-to-next-paint/index.md)
- [Web font loading](https://seo-geo-glossary.com/en/glossary/web-font-loading/index.md)
- [Lazy loading](https://seo-geo-glossary.com/en/glossary/lazy-loading/index.md)

## Sources

- [Cumulative Layout Shift (CLS) – web.dev](https://web.dev/articles/cls)
- [Optimize Cumulative Layout Shift – web.dev](https://web.dev/articles/optimize-cls)
- [Core Web Vitals and Google Search results – Google Search Central](https://developers.google.com/search/docs/appearance/core-web-vitals)

---

Last updated: October 8, 2026
URL: https://seo-geo-glossary.com/en/glossary/cumulative-layout-shift/
