Core Web Vitals explained with GIFs
Tags: webperf, seo, corewebvitals
Published: 2021-07-21 05:39:05

---
canonical_url: https://wicki.io/posts/2021-07-core-web-vitals/
---

With Google's June 2021 update Core Web Vitals (CWV) will become a factor in SEO ranking.
It measures the quality of a site by these three metrics: **LCP**, **FID** and **CLS**.

If you pass all of them them, Google will reward you with more visibility.

![core-web-vitals-green-urls](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x0n8uj2ns89l4eserilx.png) 

You can check how well you do on these metrics via several ways:
- [Pagespeed Insights](https://developers.google.com/speed/pagespeed/insights/)
- [Search Console](https://search.google.com/)
- [WebDev Measure](https://web.dev/measure/)
- Chrome DevTools & Lighthouse
- [Web Vitals Chrome Extension](https://chrome.google.com/webstore/detail/web-vitals/ahfhijdlegdabablpippeagghigmibma?hl=en)
- [Custom event tracking with Google Analytics](https://github.com/GoogleChrome/web-vitals#send-the-results-to-google-analytics)

---

## Largest Contentful Paint (LCP)

> LCP marks the point in the page load timeline when the page's main content has likely loaded.
> 
> —[web.dev](https://web.dev/lcp/)

![LCP-techcrunch](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rx9b94x6rjqwp7fqzvqw.gif)

The faster you make the biggest content on the above-the-fold appear, the better your metric will be. 

If you can preload the biggest image already, e.g. with `<link rel="preload" href="...">` or make the content appear without rendering it with your Javascript Framework, you'll win big.

Causes of LCP:
- Slow server response times
- Render-blocking Javascript and CSS
- Slow resource load times
- Client-side rendering

---

## First Input Delay (FID)

> FID measures the time from when a user first interacts with a page to the time when the browser is actually able to begin processing event handlers in response to that interaction.

> —[web.dev](https://web.dev/fid/)

![FID-imdb](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dkkc6vaeukynwebrf0xu.gif)

Javascript is synchronous and single-threaded. If a user interaction happens while the thread is busy, the user has to wait. If you have too many libraries that load at runtime, worse even if you don't need them right away, this can increase the FID.

It's similar to [TTI (Time to Interactive)](https://web.dev/tti/) that you might have heard of already. However FID will only start to be measured from the user interaction. Whereas TTI will be measured from the very start of loading the site.

Causes of FID:
- too much javascript code to execute right away, especially 3rd party
- ad networks can push lots of unneeded Javascript
- not using code-splitting (e.g. with [webpack](https://webpack.js.org/guides/code-splitting/), [Rollup](https://rollupjs.org/guide/en/#code-splitting), [Parcel](https://parceljs.org/code_splitting.html))

---

## Cumulative Layout Shift (CLS)

> CLS is a measure of the largest burst of layout shift scores for every unexpected layout shift that occurs during the entire lifespan of a page.
> 
> —[web.dev](https://web.dev/cls/)

![CLS-giphy](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3spmoid4hduxk995c9p7.gif)

Layout shifts only happen when an element higher up is making other elements move. If the element is changing and there is nothing after it, it doesn't count as a layout shift—as well as DOM changes that were caused by a user interaction with a grace period (500ms).

Note: Mobile viewports and 3G devices will cause much more CLS. Make sure to throttle your connection while optimising your page for these metrics.

Causes of CLS:
- images without size attributes
- requests finish later that will inject content above existing content
- lazy loaded components

---

Simon Wicki is a Freelance Developer in Berlin. Worked on Web and Mobile apps at JustWatch. Fluent in Vue, Angular, React and Ionic. Passionate about Frontend, tech, web perf & non-fiction books.

👉 [Join me on Twitter to follow my latest updates.](https://twitter.com/zwacky)