
Core Web Vitals: Le Metriche che Determinano il tuo Ranking su Google
Il 53% degli utenti abbandona un sito web che impiega più di 3 secondi a caricare. Ma Google è andato oltre: dal 2021, i Core Web Vitals sono un fattore ufficiale di ranking SEO.
Il problema? Il 70% dei siti web fallisce in queste metriche di base, perdendo posizioni e conversioni ogni giorno.
In questa guida tecnica completa, padroneggerai ogni Core Web Vital, capirai come misurarli correttamente e applicherai ottimizzazioni che miglioreranno sia il tuo SEO che l’esperienza utente.
Perché i Core Web Vitals sono Critici per il tuo SEO
I Numeri che Cambiano Tutto
- +32% conversioni con LCP sotto i 2,5s
- -24% bounce rate ottimizzando CLS
- +15% ranking medio con buoni Core Web Vitals
- 2,5x più probabilità di apparire nei featured snippets
- 40% più tempo sulla pagina con FID ottimizzato
L’Impatto Reale sul tuo Business
CASO REALE - E-commerce:
Prima: LCP 4,2s, CLS 0,25, FID 180ms
Dopo: LCP 1,8s, CLS 0,05, FID 45ms
RISULTATI:
• +67% conversioni
• +23% posizioni medie
• +45% pagine per sessione
• -38% tasso di rimbalzo
• ROI ottimizzazione: 890%
I 3 Core Web Vitals: Guida Tecnica Completa
1. LCP (Largest Contentful Paint): Velocità di Caricamento Percepita
Cosa Misura Realmente l’LCP?
LCP misura quanto tempo impiega a caricare l’elemento più grande visibile nel viewport iniziale. Non è il caricamento completo della pagina, ma quando l’utente percepisce che la pagina è pronta.
ELEMENTI CHE CONTA L'LCP:
✅ Immagini <img>
✅ Elementi <image> dentro SVG
✅ Video (immagine poster)
✅ Elementi con background-image CSS
✅ Blocchi di testo
❌ NON CONTA:
❌ Elementi fuori dal viewport iniziale
❌ Immagini che richiedono interazione
❌ SVG inline senza <image>
Soglie LCP
🟢 BUONO: ≤ 2,5 secondi
🟡 NECESSITA MIGLIORAMENTI: 2,5s - 4,0s
🔴 SCADENTE: > 4,0 secondi
OBIETTIVO OTTIMALE: < 1,5 secondi
Ottimizzazione Tecnica dell’LCP
FASE 1: Identificare l’Elemento LCP
// Script per identificare elemento LCP
new PerformanceObserver((entryList) => {
for (const entry of entryList.getEntries()) {
console.log('LCP candidate:', entry.element, entry.startTime);
}
}).observe({type: 'largest-contentful-paint', buffered: true});
FASE 2: Ottimizzazioni per Tipo di Elemento
SE LCP È UN'IMMAGINE:
1. Ottimizzare formato (WebP/AVIF)
2. Implementare lazy loading corretto
3. Preload critico: <link rel="preload" as="image">
4. CDN + compressione
5. Immagini responsive con srcset
SE LCP È TESTO:
1. Ottimizzare font (preload, display: swap)
2. Minimizzare CSS critico
3. Eliminare render-blocking resources
4. CSS critico inline
5. Differire CSS non critico
FASE 3: Tecniche Avanzate
<!-- Preload di risorse critiche -->
<link rel="preload" as="image" href="/hero-image.webp" fetchpriority="high">
<link rel="preload" as="font" href="/fonts/main.woff2" type="font/woff2" crossorigin>
<!-- Ottimizzazione immagini critiche -->
<img src="/hero.webp"
fetchpriority="high"
decoding="async"
width="800"
height="600"
alt="Descrizione ottimizzata">
<!-- CSS critico inline -->
<style>
/* CSS critico per elemento LCP */
.hero { display: block; width: 100%; height: auto; }
</style>
2. FID (First Input Delay): Interattività Reale
Cosa Misura il FID?
FID misura il tempo da quando l’utente fa la sua prima interazione (click, tap, pressione tasto) fino a quando il browser può rispondere. È la metrica dell’interattività reale.
INTERAZIONI CHE CONTA IL FID:
✅ Click su link/pulsanti
✅ Tap su elementi tattili
✅ Pressione tasti su input
✅ Gestori eventi personalizzati
❌ NON CONTA:
❌ Scrolling
❌ Zooming
❌ Hover (senza click)
Soglie FID
🟢 BUONO: ≤ 100 millisecondi
🟡 NECESSITA MIGLIORAMENTI: 100ms - 300ms
🔴 SCADENTE: > 300 millisecondi
OBIETTIVO OTTIMALE: < 50ms
Ottimizzazione Tecnica del FID
FASE 1: Identificare Blocchi del Main Thread
// Misurare FID reale
new PerformanceObserver((entryList) => {
for (const entry of entryList.getEntries()) {
const FID = entry.processingStart - entry.startTime;
console.log('FID:', FID);
}
}).observe({type: 'first-input', buffered: true});
FASE 2: Ottimizzazione JavaScript
TECNICHE PRINCIPALI:
1. Code splitting per rotte
2. Lazy loading di componenti non critici
3. Web Workers per task pesanti
4. Debounce/throttle su event handlers
5. RequestIdleCallback per task non urgenti
OTTIMIZZAZIONE BUNDLING:
• Separare vendor chunks
• Import dinamici
• Tree shaking aggressivo
• Minificazione avanzata
• Compressione Gzip/Brotli
FASE 3: Implementazione Pratica
// Code splitting con import dinamici
const loadHeavyComponent = async () => {
const { HeavyComponent } = await import('./HeavyComponent');
return HeavyComponent;
};
// Web Worker per calcoli pesanti
const worker = new Worker('heavy-calculations.js');
worker.postMessage({data: heavyData});
// RequestIdleCallback per task non critici
requestIdleCallback(() => {
// Analytics, tracking, etc.
initializeNonCriticalFeatures();
});
// Event delegation per migliori performance
document.addEventListener('click', (e) => {
if (e.target.matches('.button')) {
// Gestire click efficacemente
}
});
3. CLS (Cumulative Layout Shift): Stabilità Visuale
Cosa Misura il CLS?
CLS misura la stabilità visuale della tua pagina. Quantifica quanto si muovono gli elementi visibili durante il caricamento, creando un’esperienza frustrante per l’utente.
CAUSE PRINCIPALI DEL CLS:
• Immagini senza dimensioni
• Annunci inseriti dinamicamente
• Font che cambiano durante il caricamento
• Contenuto dinamico senza placeholder
• Elementi CSS senza altezza definita
Soglie CLS
🟢 BUONO: ≤ 0,1
🟡 NECESSITA MIGLIORAMENTI: 0,1 - 0,25
🔴 SCADENTE: > 0,25
OBIETTIVO OTTIMALE: < 0,05
Calcolo Tecnico del CLS
// Formula CLS
CLS = Impact Fraction × Distance Fraction
// Monitoraggio in tempo reale
new PerformanceObserver((entryList) => {
for (const entry of entryList.getEntries()) {
if (!entry.hadRecentInput) {
console.log('Layout shift:', entry.value);
}
}
}).observe({type: 'layout-shift', buffered: true});
Ottimizzazione Tecnica del CLS
FASE 1: Elementi Multimediali
<!-- ❌ Causa CLS -->
<img src="image.jpg" alt="Descrizione">
<!-- ✅ Previene CLS -->
<img src="image.jpg"
alt="Descrizione"
width="800"
height="600"
style="aspect-ratio: 800/600;">
<!-- ✅ Con CSS moderno -->
<style>
.image-container {
aspect-ratio: 16/9;
background: #f0f0f0;
}
.image-container img {
width: 100%;
height: 100%;
object-fit: cover;
}
</style>
FASE 2: Contenuto Dinamico
/* Placeholder per annunci */
.ad-container {
min-height: 250px;
background: linear-gradient(90deg, #f0f0f0 25%, transparent 37%, #f0f0f0 63%);
background-size: 400% 100%;
animation: loading 1.5s ease-in-out infinite;
}
/* Skeleton screens */
.skeleton {
background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 37%, #f0f0f0 63%);
background-size: 400% 100%;
animation: skeleton-loading 1.5s ease-in-out infinite;
}
@keyframes skeleton-loading {
0% { background-position: 100% 0; }
100% { background-position: -100% 0; }
}
FASE 3: Ottimizzazione Font
/* Prevenire layout shifts con i font */
@font-face {
font-family: 'CustomFont';
src: url('custom-font.woff2') format('woff2');
font-display: fallback; /* o swap con attenzione */
}
body {
font-family: 'CustomFont', 'Arial', sans-serif;
/* Fallback simile nelle metriche */
}
/* Size-adjust per matching dei fallback */
@font-face {
font-family: 'CustomFont-fallback';
src: local('Arial');
size-adjust: 95%;
ascent-override: 95%;
descent-override: 25%;
line-gap-override: 0%;
}
Strumenti Professionali di Misurazione
1. Google PageSpeed Insights (PSI)
VANTAGGI:
• Dati utenti reali (CrUX)
• Dati di laboratorio (Lighthouse)
• Diagnostiche specifiche
• Suggerimenti di ottimizzazione
LIMITAZIONI:
• Solo URL pubbliche
• Snapshot nel tempo
• Nessun tracking continuo
Uso Professionale di PSI:
# API per automazione
curl "https://www.googleapis.com/pagespeed/insights/v5/runPagespeed?url=https://example.com&key=YOUR_API_KEY&category=performance"
# Parametri avanzati
&strategy=mobile # o desktop
&category=performance # o accessibility, seo, pwa
&locale=it # lingua del report
2. Chrome DevTools (Tab Performance)
WORKFLOW PROFESSIONALE:
1. Aprire DevTools → Performance
2. Configurare condizioni:
• CPU: 4x slowdown
• Network: Fast 3G
• Clear cache
3. Registrare interazione reale
4. Analizzare timeline:
• First Paint (FP)
• First Contentful Paint (FCP)
• Largest Contentful Paint (LCP)
• Layout shifts
3. Estensione Web Vitals
INSTALLAZIONE:
Chrome Web Store → "Web Vitals"
CARATTERISTICHE:
• Misurazione in tempo reale
• Overlay sulla pagina
• Storico delle metriche
• Confronto temporale
4. Search Console (Report Core Web Vitals)
VANTAGGI UNICI:
• Dati utenti reali
• Raggruppamento per tipo di pagina
• Tendenze temporali
• Problemi specifici per URL
INTERPRETAZIONE:
• URL scadenti: > 25% utenti esperienza scadente
• URL da migliorare: esperienza mista
• URL buone: > 75% utenti buona esperienza
Tecniche Avanzate di Ottimizzazione
1. Critical Path Optimization
<!-- CSS critico inline -->
<style>
/* Solo stili above-the-fold */
.header, .hero, .main-content { /* stili critici */ }
</style>
<!-- CSS non critico differito -->
<link rel="preload" href="/styles/non-critical.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="/styles/non-critical.css"></noscript>
2. Resource Hints Strategici
<!-- DNS prefetch per domini esterni -->
<link rel="dns-prefetch" href="//fonts.googleapis.com">
<link rel="dns-prefetch" href="//www.google-analytics.com">
<!-- Preconnect per risorse critiche -->
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<!-- Prefetch per navigazione futura -->
<link rel="prefetch" href="/next-page.html">
<!-- Preload per risorse critiche -->
<link rel="preload" href="/critical-image.webp" as="image">
<link rel="preload" href="/main.js" as="script">
3. Ottimizzazione Immagini Avanzata
<!-- Immagini responsive ottimizzate -->
<picture>
<source media="(min-width: 800px)"
srcset="/large.avif 1x, /large-2x.avif 2x"
type="image/avif">
<source media="(min-width: 800px)"
srcset="/large.webp 1x, /large-2x.webp 2x"
type="image/webp">
<source media="(min-width: 400px)"
srcset="/medium.avif 1x, /medium-2x.avif 2x"
type="image/avif">
<source media="(min-width: 400px)"
srcset="/medium.webp 1x, /medium-2x.webp 2x"
type="image/webp">
<img src="/medium.jpg"
alt="Descrizione ottimizzata"
width="800"
height="600"
loading="lazy"
decoding="async">
</picture>
4. Service Worker per Performance
// service-worker.js
const CACHE_NAME = 'v1';
const CRITICAL_RESOURCES = [
'/',
'/styles/critical.css',
'/js/main.js',
'/images/hero.webp'
];
// Precache risorse critiche
self.addEventListener('install', event => {
event.waitUntil(
caches.open(CACHE_NAME)
.then(cache => cache.addAll(CRITICAL_RESOURCES))
);
});
// Strategia Cache First per asset
self.addEventListener('fetch', event => {
if (event.request.destination === 'image') {
event.respondWith(
caches.match(event.request)
.then(response => response || fetch(event.request))
);
}
});
Errori Critici da Evitare
I 10 Errori Più Costosi
-
Misurare Solo in Laboratorio (-30% precisione)
❌ Usare solo Lighthouse ✅ Combinare lab data + field data (RUM)
-
Non Definire Dimensioni Immagini (+0,15 CLS)
❌ <img src="image.jpg" alt="desc"> ✅ <img src="image.jpg" width="800" height="600" alt="desc">
-
Caricare JavaScript Sincrono (+200ms FID)
❌ <script src="heavy.js"></script> ✅ <script src="heavy.js" defer></script>
-
Caricamento Font Non Ottimizzato (+0,2 CLS, +800ms LCP)
❌ @import url('https://fonts.googleapis.com/css?family=Font'); ✅ <link rel="preconnect" href="https://fonts.gstatic.com"> <link rel="preload" href="font.woff2" as="font" crossorigin>
-
Script di Terze Parti Senza Controllo (+500ms FID)
❌ Caricare tutti gli script in <head> ✅ Lazy load, async e defer strategici
-
CSS Render-Blocking (+1s LCP)
❌ <link rel="stylesheet" href="all-styles.css"> ✅ CSS critico inline + preload resto
-
Immagini Non Ottimizzate (+2s LCP)
❌ JPEG 2MB senza compressione ✅ WebP/AVIF + compressione + responsive
-
Non Usare CDN (+40% LCP)
❌ Servire asset dall'origine ✅ CDN globale + HTTP/2 + Brotli
-
Annunci Senza Placeholder (+0,25 CLS)
❌ Inserimento dinamico senza riservare spazio ✅ Container fissi + lazy loading
-
Non Monitorare Continuamente (-50% ottimizzazione)
❌ Ottimizzare una volta e dimenticare ✅ RUM + alert + ottimizzazione continua
Roadmap di Implementazione
Settimana 1: Diagnosi e Setup
GIORNO 1-2: AUDIT COMPLETO
□ PageSpeed Insights (mobile + desktop)
□ Analisi Chrome DevTools
□ Revisione Search Console
□ Identificare elementi LCP
GIORNO 3-4: SETUP MONITORAGGIO
□ Installazione estensione Web Vitals
□ Implementazione RUM
□ Definizione budget performance
□ Documentazione metriche baseline
GIORNO 5-7: PIANIFICAZIONE
□ Prioritizzare ottimizzazioni per impatto
□ Risorse necessarie
□ Timeline realistica
□ Definizione metriche di successo
Settimana 2-3: Quick Wins
OTTIMIZZAZIONI RAPIDE:
□ Dimensioni immagini aggiunte
□ JavaScript defer/async
□ CSS critico inline
□ Implementazione preload font
□ Compressione immagini a WebP
VALIDAZIONE:
□ Test in staging
□ Confronto prima/dopo
□ Test multi-dispositivo
□ Misurazione impatto performance
Settimana 4-6: Ottimizzazioni Avanzate
TECNICHE AVANZATE:
□ Implementazione code splitting
□ Cache service worker
□ Ottimizzazione avanzata immagini
□ Ottimizzazione script di terze parti
□ Implementazione CDN
MONITORAGGIO:
□ Revisioni performance settimanali
□ Correlazione esperienza utente
□ Impatto metriche business
□ Ottimizzazione continua
Conclusione: Core Web Vitals come Vantaggio Competitivo
I Core Web Vitals non sono solo metriche tecniche astratte. Sono indicatori diretti dell’esperienza che offri ai tuoi utenti e, pertanto, fattori determinanti del tuo successo online.
La realtà del mercato:
- Il 90% dei siti web ignora queste metriche
- Google le usa sempre più per il ranking
- Gli utenti premiano la velocità con le conversioni
- L’ottimizzazione tecnica ha un ROI misurabile
Il tuo vantaggio competitivo sta nel:
- Misurare correttamente (lab + field data)
- Ottimizzare sistematicamente (tecnico + UX)
- Monitorare continuamente (RUM + alert)
- Iterare basandosi sui dati (A/B testing + metriche)
La differenza tra un sito web veloce e uno lento non è solo tecnica. È la differenza tra un business che cresce e uno che stagna nell’era dell’attenzione limitata.
Il tuo prossimo passo? Implementa la diagnosi della Settimana 1 oggi stesso. Misura, ottimizza, misura di nuovo. I Core Web Vitals ottimizzati sono il tuo biglietto d’ingresso nel top 10% dei siti web che Google e gli utenti premiano davvero.
Ricorda: I Core Web Vitals sono metriche evolutive. Google li aggiorna e li affina costantemente, quindi la tua ottimizzazione deve essere un processo continuo, non un’attività una tantum. Concentrati prima sul raggiungere punteggi “Buoni” in tutte e tre le metriche prima di perseguire la perfezione in una sola. Il maggior impatto deriva dall’ottimizzazione bilanciata di LCP, FID e CLS insieme, non dall’ottimizzare una metrica a spese delle altre.