Core Web Vitals: guida completa 2026

LCP, INP e CLS — tre metriche di Google che incidono direttamente sul posizionamento. Come misurarle, diagnosticarle e migliorarle una per una.

I Core Web Vitals (CWV) sono l'insieme di metriche di Google che misura l'esperienza reale degli utenti: velocità di caricamento, reattività dell'interfaccia e stabilità visiva. Da maggio 2021 fanno parte di Page Experience ed entrano nel posizionamento.

Tutte e tre le metriche vengono valutate per URL — punteggi ottimi sulla homepage non aiutano le pagine prodotto. Google attinge i dati dal Chrome UX Report (utenti reali), non da simulazioni di laboratorio.

Le tre metriche Core Web Vitals e le loro soglie verdi. Una pagina è considerata buona quando il 75% degli utenti reali cade nella zona verde.
Google valuta i CWV alla soglia p75 — il 75° percentile. Una pagina è «buona» quando il 75% degli utenti reali sperimenta la metrica in zona verde. Strumenti di lab come Lighthouse mostrano un dispositivo mediano — utili per la diagnosi, non per il giudizio finale.

Cosa sono i Core Web Vitals

≤ 2,5 s

LCP — buono

Elemento più grande renderizzato

≤ 200 ms

INP — buono

Interfaccia ha risposto all'input

≤ 0,1

CLS — buono

Spostamento di layout minimo

75%

Soglia di valutazione

Quota di utenti in zona verde

Storia: da FID a INP

Google ha introdotto i Core Web Vitals nel 2020 con tre metriche: LCP, FID (First Input Delay) e CLS. Il FID misurava il ritardo del primo tocco — utile, ma copriva solo una frazione dell'interattività della pagina.

Maggio 2020Annuncio dei Core Web Vitals

Google introduce tre metriche: LCP, FID, CLS. Gli strumenti iniziano a supportare i nuovi segnali.

Giugno 2021Page Experience Update

I CWV entrano ufficialmente nell'algoritmo di posizionamento. Il rollout si completa ad agosto 2021.

Marzo 2024FID → INP

Interaction to Next Paint sostituisce First Input Delay. L'INP copre tutte le interazioni della sessione, non solo la prima.

2025–2026INP sul campo

I siti con JS pesante (SPA, e-commerce, filtri) sentono la pressione dell'INP. L'ottimizzazione dei Long Task diventa una priorità.

LCP — Largest Contentful Paint

L'LCP registra il momento in cui il più grande blocco di contenuto visibile della pagina viene dipinto completamente. In genere è un'immagine hero, la copertina di un articolo o un grande titolo H1.

Valore LCPGiudizioAzione
≤ 2,5 sBuonoMantieni, monitora in GSC
2,5 – 4,0 sDa migliorareOttimizza le immagini, riduci il TTFB
> 4,0 sScadentePriorità critica, fai subito audit

Cause comuni di un LCP lento

  • TTFB lento (server, CDN, niente cache) — rappresenta fino al 40% del tempo LCP
  • Immagine hero non prioritizzata: manca fetchpriority="high"
  • Immagine hero non in preload (<link rel="preload">)
  • CSS/JS render-blocking che ritardano il primo paint
  • Immagini troppo grandi: niente WebP/AVIF, niente srcset
  • Elemento LCP dietro rendering JS (React SSR non completato al momento dell'LCP)
Esempio di prioritarizzazione della risorsa LCP:
html
<!-- Prioritise the LCP image -->
<link rel="preload" as="image" href="/hero.webp" fetchpriority="high" />

<img
  src="/hero.webp"
  alt="Hero"
  fetchpriority="high"
  loading="eager"
  decoding="async"
  width="1280"
  height="720"
/>
Non usare loading="lazy" sulle immagini hero — il browser ne rinvierebbe il caricamento e l'LCP aumenterebbe. Usa lazy solo per le immagini sotto la piega.

INP — Interaction to Next Paint

L'INP misura il ritardo fra qualsiasi interazione dell'utente (clic, tasto, tocco) e il successivo paint visivo della pagina. A differenza del FID, l'INP traccia tutte le interazioni della sessione e usa il caso peggiore (con ripulitura degli outlier).

Anatomia dell'INP

INP = input delay + processing time + presentation delay

Input delay (attesa in coda)fino a 50 ms
Processing time (handler JS)fino a 100 ms
Presentation delay (render + paint)fino a 50 ms

Cosa rompe l'INP

  • I Long Task oltre 50 ms bloccano il main thread — il browser non riesce a gestire l'input
  • Event handler pesanti: setState sincrono in React, aggiornamenti DOM massicci
  • Nessun scheduler.yield() o setTimeout(0) per spezzare i task lunghi
  • Script di terze parti (chat, ads, analytics) occupano il main thread
  • Animazioni guidate da JS invece di transform/opacity CSS
Esempio di spezzettamento di un Long Task via scheduler:
javascript
// Breaking up a Long Task with scheduler.yield()
async function processLargeList(items) {
  for (let i = 0; i < items.length; i++) {
    processItem(items[i]);
    // Yield to the main thread every 50 items
    if (i % 50 === 0) {
      await scheduler.yield();
    }
  }
}
scheduler.yield() è un'alternativa moderna a setTimeout(0). Il browser restituisce il controllo, processa l'input dell'utente, poi riprende il task. Supportato da Chrome 115+; per gli altri usa un polyfill con setTimeout.

CLS — Cumulative Layout Shift

Il CLS è una metrica senza unità che descrive lo spostamento totale inatteso degli elementi della pagina. Formula: frazione di impatto × frazione di distanza. Lo spostamento di un pulsante premuto non conta — solo gli elementi che si spostano senza azione dell'utente.

Valore CLSGiudizioCausa tipica
≤ 0,1BuonoSpazio riservato per tutti gli elementi
0,1 – 0,25Da migliorareFont senza font-display: swap, banner
> 0,25ScadenteImmagini senza dimensioni, inserti dinamici

Fonti comuni di CLS

  • Immagini senza attributi width e height — il browser non conosce la dimensione prima del caricamento
  • Web font senza font-display: optional o swap — il FOUT sposta il testo
  • Banner iniettati dinamicamente, avvisi cookie in cima alla pagina
  • Animazioni CSS che modificano top/left/margin invece di transform
  • Pubblicità senza spazio riservato (min-height sul container)
Esempio di riserva di spazio per prevenire il CLS:
css
/* Reserve space for an ad slot */
.ad-container {
  min-height: 250px;
  width: 100%;
}

/* Animation without CLS: transform and opacity only */
.card:hover {
  transform: translateY(-4px);
  /* Wrong: margin-top: -4px — this shifts layout */
}

Impatto sul posizionamento

Google ha confermato: i CWV sono uno dei segnali di Page Experience che partecipa al posizionamento. Ma sono un tiebreaker, non il fattore primario. Una pagina con contenuti ottimi e CWV scadenti batte una pagina con CWV ottimi e contenuti deboli.

Effetto reale dei CWV: i siti in zona verde hanno frequenze di rimbalzo più basse e compaiono nel report Page Experience di Google Search Console. Test rapido: se un concorrente con contenuti simili ti supera, controlla i suoi CWV in PageSpeed Insights.

Conta di più l'effetto indiretto: le pagine veloci riducono la frequenza di rimbalzo, aumentano profondità di sessione e conversione. Il business case dei CWV è più forte del case SEO. Amazon ha scoperto: +100 ms di LCP = −1% di ricavi.

Come misurare i CWV

Esistono due tipi di dati: dati di laboratorio (simulazione — Lighthouse, WebPageTest) e dati da campo (utenti reali — CrUX, GSC). Google posiziona in base ai dati da campo. Il lab serve per la diagnosi.

TipoStrumentoCosa mostraCaso d'uso
CampoGoogle Search ConsoleCWV per tutti gli URL del sito (p75)Prioritizzare le pagine problematiche
CampoCrUX Dashboard (Looker)Trend su finestra di 28 giorniSeguire i progressi nel tempo
LabPageSpeed InsightsLCP/INP/CLS + raccomandazioniDiagnosticare un URL specifico
LabLighthouse (DevTools)Waterfall dettagliato, traceAnalisi approfondita delle cause
LabWebPageTestRegistrazione video, filmstripConfronto prima/dopo
PageSpeed Insights mostra entrambi i tipi di dati in una pagina: i dati da campo (CrUX) in alto, quelli di lab (Lighthouse) sotto. Usa i dati da campo per valutare lo stato, quelli di lab per trovare le cause.

Strumenti di diagnosi

StrumentoGratisLCPINP
Google Search ConsoleSì✓✓
PageSpeed InsightsSì✓✓
Chrome DevToolsSì✓✓
Lighthouse CISì✓✓
WebPageTestSì (limiti)✓✓
SpeedCurveA pagamento✓✓
Sentry (web-vitals SDK)Freemium✓✓
CLS e dati da campo per gli stessi strumenti:
StrumentoCLSDati da campo
Google Search Console✓✓
PageSpeed Insights✓✓ (CrUX)
Chrome DevTools✓—
Lighthouse CI✓—
WebPageTest✓—
SpeedCurve✓✓
Sentry (web-vitals SDK)✓✓
Per il monitoraggio in produzione, aggiungi la libreria JS web-vitals di Google — raccoglie i CWV reali e li invia alla tua piattaforma analytics (GA4, Sentry, DataDog).
javascript
// web-vitals v4 — collect real CWV
import { onLCP, onINP, onCLS } from 'web-vitals';

function sendToAnalytics({ name, value, id }) {
  // Send to GA4
  gtag('event', name, {
    value: Math.round(name === 'CLS' ? value * 1000 : value),
    metric_id: id,
    metric_delta: value,
  });
}

onLCP(sendToAnalytics);
onINP(sendToAnalytics);
onCLS(sendToAnalytics);

Checklist di ottimizzazione

I valori soglia dei Core Web Vitals di Google per LCP, INP e CLS.

LCP

  • Aggiungi fetchpriority="high" e rimuovi loading="lazy" dall'immagine hero
  • Aggiungi <link rel="preload" as="image"> per l'hero in <head>
  • Converti le immagini in WebP o AVIF, configura srcset
  • Riduci il TTFB a ≤ 800 ms: CDN, cache, Edge SSR
  • Rimuovi gli script render-blocking da <head> (async/defer/module)
  • Imposta Cache-Control: max-age=31536000 per gli asset statici

INP

  • Profilai Long Task in Chrome DevTools → Performance → Main Thread
  • Spezza i task oltre 50 ms con scheduler.yield() o setTimeout(0)
  • Debounca gli handler di input / scroll (16–100 ms)
  • Ottimizza React: useMemo, useCallback, React.memo, virtualizzazione delle liste
  • Sposta gli script di terze parti nei Web Worker o caricali dopo l'LCP
  • Animazioni CSS solo via transform e opacity

CLS

  • Imposta width e height su tutti gli elementi <img> — il browser riserva lo spazio
  • Usa aspect-ratio per i container con dimensioni sconosciute
  • Configura font-display: optional per i font critici
  • Riserva min-height per gli slot pubblicitari e i contenuti dinamici
  • Metti gli avvisi (cookie, banner) in fondo, non in cima alla pagina
  • Controlla il FOUT: i font senza fallback spostano il testo al caricamento
Ordine di priorità: inizia dall'LCP — è il più spesso rosso e pesa di più in Page Experience. Quando l'LCP è verde, passa all'INP (critico per le SPA e le pagine interattive), poi al CLS.
Cosa sono i Core Web Vitals e perché contano per la SEO?
I Core Web Vitals sono tre metriche di Google — LCP, INP e CLS — che misurano velocità di caricamento, interattività e stabilità visiva. Da maggio 2021 fanno parte del segnale Page Experience e incidono direttamente sul posizionamento: punteggi scadenti sopprimono le posizioni, punteggi buoni danno un piccolo boost a parità di condizioni.
Come controllo i Core Web Vitals del mio sito?
Usa Google Search Console (report Core Web Vitals), PageSpeed Insights (dati CrUX reali + dati di lab), la scheda Performance di Chrome DevTools o Lighthouse. Per il monitoraggio continuo integra la libreria web-vitals.js e invia i dati a GA4.
L'LCP supera i 4 secondi — quanto è urgente correggerlo?
Molto urgente. Sop i 4 s si cade in «Scadente» e Google declassa la pagina. Inizia con la diagnosi: il colpevole è di solito un'immagine hero non ottimizzata, un TTFB lento del server o script render-blocking. Portare l'LCP sotto 2,5 s produce in genere guadagni di posizionamento misurabili entro 2–4 settimane dalla nuova scansione.
Le soglie dei Core Web Vitals sono uguali per mobile e desktop?
Le soglie sono uguali (LCP ≤ 2,5 s, INP ≤ 200 ms, CLS ≤ 0,1) ma i punteggi vengono misurati separatamente. Il mobile quasi sempre rende peggio per CPU e reti più lente. GSC mostra entrambi i segmenti — da priorità al mobile.
Cosa conta di più per l'e-commerce: LCP o CLS?
L'LCP è più critico per le conversioni: un elemento principale lento su una pagina prodotto o landing riduce direttamente le vendite (circa −1% di conversione per ogni +0,1 s di LCP secondo i dati Google). Il CLS è più critico per la UX: un pulsante Acqua che si sposta sotto il cursore è una fonte diretta di abbandoni. Lavora su entrambi in parallelo.

Check it with SpiderHead

Free and local: run the audit on your own machine.

Try it