Zenith’s notebook
EN
0%

Chapter 12 · Servers and speed

Website speed: Core Web Vitals explained

Go down

Chapter 12 · Servers and speed

Website speed: Core Web Vitals explained

A slow website loses customers before it even shows up. The three metrics Google uses to judge the visitor experience, and how to really improve them.

16 minutes of reading 5 drawn plates 4 challenges

In this chapter
  1. Why it matters
  2. The three metrics
  3. LCP: can I see it?
  4. INP: does it respond?
  5. CLS: does it stay still?
  6. Lab and real world
  7. The work plan
  8. Frequently asked questions
  9. Sources

01Three seconds in a parking lot: why speed matters

Someone is sitting in their car, in the parking lot in front of your shop, and wants to know if you are open. They open your website on their phone, with two bars of signal. The screen stays white. Then a huge image appears, then the text, then a cookie box that pushes everything down just as they tap «Opening hours»: they have tapped «Offers». They go back and open a competitor's listing. Three seconds, and you have lost a customer who was already at your door.

This is exactly the experience Google decided to measure with three numbers, the Core Web Vitals, the «vital signs» of a web page. They do not measure how beautiful a site is or how rich: they measure three precise moments in the experience of the person visiting it.

  • Can I see something useful? LCP measures it.
  • If I tap, does it respond? INP measures it.
  • Does it stay still, or does it slip out from under my finger? CLS measures it.

Google openly recommends having good Core Web Vitals and considers them part of the page experience its systems reward. But it is honest about the other side too: the search engine always tries to show the most relevant content, even when the experience is not perfect. In other words: speed does not replace good content, but with equal content it makes the difference, and above all it makes the difference with people, who are the ones who buy.

In the chapter on web infrastructure I explained TTFB, the time the server takes to start responding. Here we look at everything that happens after, inside the browser: that is where most of the three numbers are decided.

02The three metrics and their thresholds

Each metric has three bands: good, needs improvement and poor. Google publishes the thresholds in its developer guide, and they are the same for every site, from the neighborhood shop to the big portal.

LCP the main content GOOD needs improvement poor 2.5 s 4 s INP the reaction to a tap GOOD needs improvement poor 200 ms 500 ms CLS how much the page jumps GOOD needs improvement poor 0.1 0.25 Assessed at the 75th percentile of real visits, phones and computers separately. LCPthe main content GOOD 2.5 s4 s INPthe reaction to a tap GOOD 200 ms500 ms CLShow much the page jumps GOOD 0.10.25 needs improvement poor On 75% of real visits.
Plate 12.1 — The three Core Web Vitals thresholds. A page is «good» when at least three visits out of four fall in the gold band, on each of the three metrics.

Why 75%, and not the average

The average hides problems: ten lightning-fast visits from the office computer cover up three disastrous visits from a budget phone in the countryside. The 75th percentile is stricter and fairer: it says that three visitors out of four had an experience at least that good. To pass, it is not enough for the site to work well for you; it has to work well for almost everyone, including people with a phone that is a few years old and a patchy connection.

A retired metric

If you read guides from a few years ago you will find FID (First Input Delay) instead of INP. Since March 12, 2024 INP has replaced it as a Core Web Vital: FID only measured the delay of the first interaction, INP looks at responsiveness throughout the whole visit, and it is much stricter.

03LCP: when the content that matters appears

LCP (Largest Contentful Paint, the largest piece of content painted) measures when the largest element visible on opening appears on screen: usually the main image, or the largest block of text, such as the title with the opening paragraph. It is the moment when the visitor thinks «there, it has arrived».

For LCP, what counts are images, background images loaded from CSS, video posters and blocks of text. A vector drawing written directly into the page, on the other hand, is not a candidate. The time is counted from when the page starts loading, so LCP includes everything: waiting for the server, downloading the files, painting.

0 1 s 2 s 3 s 4 s server (TTFB) CSS and fonts 2 MB main image THRESHOLD 2.5 s LCP 3.0 s With the image at 150 KB, in the right format and announced early, the same page drops below the threshold. Example timings. server (TTFB) CSS and fonts 2 MB image THRESHOLD 2.5 s LCP 3.0 s 0 4 s With the image at 150 KB, in the right format and announced early, the page drops below the threshold. Example timings.
Plate 12.2 — Where LCP is lost. In this example the server responds quickly, but the main image is so heavy that it pushes the content past the threshold. The timings are illustrative.

The most frequent causes and the fixes

  • Images that are too heavy. A photo taken with a phone easily weighs a few megabytes; on a phone screen a few hundred kilobytes are enough. You resize it to its real display size, compress it, use modern formats such as WebP or AVIF, and offer different sizes for different screens.
  • The «lazy» main image. Deferred loading (loading="lazy") is great for images at the bottom of the page, but on the image at the top it delays LCP itself. That one must load right away, in fact it should be announced with high priority.
  • Blocking CSS and fonts. Until the browser has downloaded the stylesheets it paints nothing. Few files, small ones, and fonts loaded so that the text shows immediately with a fallback font.
  • A slow server. If TTFB already eats up a second, the rest has little margin: that is the part I cover in the chapter on infrastructure.
  • Content built by JavaScript. If the main text appears only after a script has downloaded and assembled it, LCP waits for the script. The important content must arrive already written in the page.

04INP: does the page respond when you tap it?

Have you ever tapped «Add to cart» and seen nothing happen, tapped it again, and ended up with two products? That half-feeling of «has it frozen?» has a name: INP (Interaction to Next Paint, from the interaction to the next paint).

INP observes all the clicks, taps and key presses during the visit, and measures how much time passes from each one to the moment the screen shows the reaction. The final value essentially represents one of the slowest interactions of the visit. Under 200 milliseconds the page feels instant; over 500 it feels broken.

Tap the button WAITING the browser is busy PROCESSING the click's code PAINT new screen Response it shows THIS IS INP inflated by heavy scripts Good up to 200 milliseconds: less than a long blink of an eye. Tap WAITING the browser is busy with other scripts PROCESSING the code that responds to the click PAINT the browser repaints the screen Response INP IS THE WHOLE STRETCH good up to 200 ms
Plate 12.3 — Anatomy of an interaction. The time that counts runs from the tap to the moment the screen changes; the part that most often inflates it is the waiting, when the browser is busy with scripts that have nothing to do with the click.

The enemy is called a «long task»

The browser has a single main thread to run JavaScript and paint the page. If a script occupies it for a long stretch (we speak of long tasks when they exceed 50 milliseconds), the user's tap waits in line. The usual culprits:

  • too many third-party scripts: chats, counters, social widgets, ads, each with its own weight;
  • page builders and dozens of plugins that load their code on every page, even where it is not needed. That is the topic of the chapter on the value of a professional developer;
  • code that does everything at once: calculations, animations and loads started on opening, instead of when they are needed;
  • huge pages, with thousands of elements to recalculate at every change.

The fixes follow: fewer scripts, loaded only where needed and after the content; tasks broken into small pieces that let the browser breathe; an immediate visual response to the tap (even just the button lighting up) before the heavy calculations.

Quiz

Which metric suffers?

For each situation choose the metric that gets worse: the explanation appears right away.

  1. The cover photo weighs 4 MB and arrives last.

    The largest image at the top is almost always the LCP element: if it arrives late, LCP goes up.

  2. You tap «Book» and for a second nothing happens.

    It is the time between the tap and the visible reaction: exactly what INP measures.

  3. A banner appears at the top and pushes down the text you were reading.

    An unexpected shift of the visible content makes CLS grow.

  4. The server takes two seconds to respond.

    TTFB is part of LCP: two seconds of waiting leave only half a second for everything else.

05CLS: the page that slips out from under your finger

CLS (Cumulative Layout Shift) measures how much the visible content moves without you having done anything. It is the most irritating flaw of the three, because it makes you make mistakes: you read a line and it slips away, you want to tap a button and you tap the one that has just moved into its place.

BEFORE HOURS Offers the finger is about to tap «Hours» a banner arrives AFTER late-arriving banner Offers HOURS the tap lands on the wrong button BEFORE HOURS Offers AFTER banner Offers HOURS The banner arrives late, the content moves down and the tap hits «Offers».
Plate 12.4 — The shift that causes mistakes. An element that arrives late without space already reserved pushes everything else down: the point is in the same place, but now there is a different button under the finger.

How it is calculated, in simple words

Each shift gets a score made of two factors multiplied together: how much of the screen is affected and how far the elements moved relative to the size of the screen. Google's guide gives this example: if the unstable elements take up 75% of the screen and move by a quarter, the score is 0.75 × 0.25 = 0.1875. On its own, already over the good threshold of 0.1.

Shifts that are close in time are added together into «bursts» (with less than one second between one and the next, for a maximum of five seconds), and the page's CLS is the worst burst. Two important details:

  • shifts that happen within half a second of a tap or key press of yours do not count: if you open a menu and the content moves, it is a reaction you expect;
  • animations made with transforms (moving or enlarging an element without changing the surrounding layout) do not produce shifts: they are the right way to animate.

The fixes, almost all free

  • Always give images a width and a height (or an aspect ratio in the CSS): the browser reserves the space even before downloading them.
  • Reserve the space for everything that arrives later: banners, embedded maps, videos, reviews loaded from other services.
  • Do not insert content above what the user is already looking at, unless they asked for it.
  • Load fonts with care, choosing fallback fonts of a similar size, so that switching from one to the other does not move the lines.

The words of the chapter

The little dictionary of speed

Tap a card to flip it.

06Lab and real world: two ways of measuring

«I ran the test and it gives me 98, so why does Google say the site is slow?» It is one of the questions I hear most often, and the answer is that you are looking at two different things.

Lab data

  • A simulated test, for example with Lighthouse: a device and a network chosen on paper.
  • Repeatable: useful for understanding the causes and checking a fix right away.
  • It does not see real taps, so it cannot measure INP as it is in reality.
  • The score from 0 to 100 is a summary of the lab, not a Core Web Vital.

Real data (field data)

  • Collected from real visitors: Chrome's CrUX report uses data from people who have chosen to share statistics, on computers and Android.
  • These are the ones that count for the Core Web Vitals thresholds.
  • Enough visits are needed: pages with few visits do not have data of their own.
  • You can see them in PageSpeed Insights and in the Search Console report.
Lab a simulated phone one test, always the same Real world thousands of real visits, phones, networks DECIDES The lab explains why; the real world says whether the thresholds are met. Lab a simulated phone, always the same Real world thousands of real visits The lab explains why; the real world decides the thresholds.
Plate 12.5 — The two measurements. A high lab score is a very good sign, but the Core Web Vitals verdict comes from real visits, with all your customers' phones and connections.

How to read PageSpeed Insights in three steps

  1. Look at the top part first, the real data: it tells you whether the page passes the Core Web Vitals assessment. If it says there is not enough data, the page has few visits and you look at the figure for the whole site.
  2. Choose the mobile tab: for a local business it is almost always the device of the majority, and the strictest.
  3. Use the lab for the causes: the diagnostics section lists images to reduce, blocking scripts and shifts, with the files responsible.

True or false?

The myths of speed

Decide for each statement: true or false?

  • A score of 100 in the lab guarantees passing the Core Web Vitals.

    The thresholds are assessed on data from real visits, which can be worse than the lab.

  • A fast site ranks first on Google even with poor content.

    Google always looks for the most relevant content; a good experience helps, it does not replace it.

  • Lazy loading on the main image can make LCP worse.

    It delays the very element that LCP measures: use it only on images further down.

  • FID is still one of the three Core Web Vitals.

    Since March 12, 2024 it has been replaced by INP.

  • Declaring the width and height of images reduces CLS.

    The browser reserves the space before downloading them, and the text does not jump.

07The work plan: where to start

Improving Core Web Vitals is not a contest of tricks. It is orderly work, which starts from what weighs most and measures every step.

1

Measure

Real data and lab, on mobile, for the pages that matter: home, services, contact, booking.

2

Images

Right sizes, modern formats, reserved space, the main image loaded right away.

3

Scripts

Remove the useless ones, defer the others until after the content, load them only where needed.

4

Server

Caching, compression, a TTFB under control: the floor everything else stands on.

5

Check again

Real data changes slowly: after a fix, look at it again in the following weeks.

SymptomMetricTypical causeFix
white screen for a long timeLCPslow server, blocking CSScaching, fewer files, lower TTFB
late cover photoLCPimage of several megabytes, loaded lateresize, WebP or AVIF, high priority
buttons that do not respondINPheavy scripts, external widgetsfewer scripts, broken-up tasks
menu slow to openINPcode that recalculates the whole pagemore targeted code, immediate visual response
text that jumps downCLSimages without dimensions, late bannerswidth and height, reserved space
lines that get widerCLSfont swap halfway through loadingfallback fonts of a similar size

For a local business, speed on mobile matters even more: people searching «near me» almost always do it on the move, and choose in a few seconds. That is the topic of the chapter on local SEO. And if the site also needs to become an app to keep on the phone, the Core Web Vitals are the foundation for building a PWA that opens like a real app.

Test yourself

Does your site pass the parking lot test?

Frequently asked questions

What are the good Core Web Vitals thresholds?

LCP within 2.5 seconds, INP within 200 milliseconds, CLS within 0.1, assessed at the 75th percentile of real visits, with phones and computers assessed separately.

Do Core Web Vitals affect ranking on Google?

Google considers them part of the page experience its systems reward and recommends having good ones. However, it specifies that it always shows the most relevant content, even if the experience is not perfect: speed helps, it does not replace content.

Why does the test give me a high score but the assessment is negative?

The score comes from a lab test, the assessment from real visitors. Slower phones, worse connections and real interactions can give worse results than the simulation.

What happened to FID?

Since March 12, 2024 it has been replaced by INP, which measures the responsiveness of all the interactions in the visit and not just the delay of the first one.

Where is the best place to start improving?

With the images, almost always: right sizes, modern formats and reserved space fix LCP and CLS together. Then the external scripts, which weigh on INP, and finally the server.

Do pages with few visits have real data?

Not always: the Chrome report only includes pages with enough visits. When data for the single page is missing, you look at the overall figure for the site and use the lab for the causes.

Sources

  1. web.dev (Google), «Web Vitals»: the three metrics, the thresholds and the 75th percentile.
  2. web.dev, «Largest Contentful Paint», «Interaction to Next Paint» and «Cumulative Layout Shift»: definitions, bands and how the score is calculated.
  3. web.dev, the announcement of March 12, 2024: INP replaces FID.
  4. Google Search Central, «Understanding Core Web Vitals and Google search results» and «Page experience».
  5. Chrome for Developers, CrUX report methodology: who is counted and which pages.
  6. web.dev, guides to optimizing LCP, INP and CLS.

Chapter updated in October 2026. Thresholds and definitions come from Google's official documentation; the timings in the plates are examples to show the proportions, not measurements of any particular site.

Shall we talk?

If what you have read touches your business, tell me where you are starting from: I will answer you myself, with a concrete plan and no obligation.

Message me on WhatsAppDiscover Zenith Develop