En résumé
Un site performant en 2026 obtient un score Lighthouse Performances ≥ 90 sur mobile et un TTFB inférieur à 200ms. Onyx (Next.js statique + CDN Vercel) atteint 93/100 sur mobile et 100/100 sur desktop en conditions réelles PageSpeed Insights — sans optimisation manuelle. Les trois leviers : génération statique, next/image (WebP automatique), et next/font (zéro layout shift).
La vitesse d'un site web est un facteur de classement Google depuis mai 2021. Un LCP (Largest Contentful Paint) supérieur à 2,5 secondes fait perdre des positions dans les SERP. Une page qui met plus de 3 secondes à charger perd 53 % de ses visiteurs mobiles avant même d'afficher son contenu (Google Research, 2024).
Ce guide couvre les fondamentaux techniques des performances web en 2026, les métriques qui comptent, et les optimisations concrètes qui permettent d'atteindre un score Lighthouse supérieur à 90 sur mobile — avec des données réelles issues de PageSpeed Insights.
Les Core Web Vitals en 2026 : les métriques qui comptent
Google mesure la qualité d'expérience utilisateur avec trois métriques principales, regroupées sous le terme Core Web Vitals.
LCP — Largest Contentful Paint Le LCP mesure le temps d'affichage du plus grand élément visible (image hero, titre H1, bloc de texte). Seuil "Good" : moins de 2,5 secondes. Seuil "Poor" : au-delà de 4 secondes.
INP — Interaction to Next Paint (remplace FID depuis mars 2024) L'INP mesure la réactivité de la page aux interactions utilisateur (clic, frappe clavier). Seuil "Good" : moins de 200ms. Seuil "Poor" : au-delà de 500ms.
CLS — Cumulative Layout Shift Le CLS mesure les décalages visuels inattendus (éléments qui sautent pendant le chargement). Seuil "Good" : moins de 0,1. Seuil "Poor" : au-delà de 0,25.
| Métrique | Good | Needs improvement | Poor |
|---|---|---|---|
| LCP | < 2,5s | 2,5s – 4s | > 4s |
| INP | < 200ms | 200ms – 500ms | > 500ms |
| CLS | < 0,1 | 0,1 – 0,25 | > 0,25 |
| TTFB | < 800ms | 800ms – 1 800ms | > 1 800ms |
| FCP | < 1,8s | 1,8s – 3s | > 3s |
Les scores réels d'Onyx sur PageSpeed Insights
Voici les résultats obtenus sur une instance Onyx déployée en production sur Vercel, mesurés par Google PageSpeed Insights en conditions réelles.
Mobile :

- Performances : 93/100
- Accessibilité : 95/100
- Bonnes pratiques : 96/100
- SEO : 100/100
Desktop :

- Performances : 100/100
- Accessibilité : 95/100
- Bonnes pratiques : 96/100
- SEO : 100/100
Ces scores sont obtenus sans optimisation manuelle — uniquement avec la configuration par défaut d'Onyx. Ils reflètent les bénéfices de la génération statique (SSG) associée au CDN mondial de Vercel.
Pourquoi la génération statique est le levier de performance n°1
La génération statique (Static Site Generation) consiste à pré-générer toutes les pages au moment du build, puis à les servir comme fichiers HTML depuis un CDN — sans exécution PHP, sans requête base de données, sans rendu serveur à la demande.
Les chiffres concrets :
- TTFB (Time to First Byte) sur WordPress avec cache : 300–800ms
- TTFB sur Next.js statique via Vercel CDN : 20–60ms
Cette différence de TTFB est directement visible dans le score LCP. Un TTFB de 20ms laisse 2 480ms pour charger et afficher le contenu principal — largement suffisant pour passer sous le seuil de 2,5s.
HTTP Archive (2025) confirme cette écart : la médiane du LCP mobile atteint 4,2 secondes pour les sites WordPress contre 1,8 seconde pour les sites Next.js statiques.
Comment next/image améliore le LCP automatiquement
Le composant next/image de Next.js résout les trois principales causes de LCP dégradé liées aux images.
Format automatique. next/image sert les images en WebP ou AVIF selon les capacités du navigateur. WebP pèse en moyenne 30 % de moins qu'un JPEG équivalent. AVIF jusqu'à 50 % de moins.
Lazy loading natif. Toutes les images hors viewport sont chargées en différé par défaut. Pour l'image hero (au-dessus de la ligne de flottaison), ajouter priority force le préchargement et améliore directement le LCP.
Dimensionnement responsive. L'attribut sizes indique au navigateur quelle taille de fichier télécharger selon la largeur de l'écran — évitant de servir une image 2400px à un mobile en 375px.
<Image
src="/images/hero.jpg"
alt="Description précise"
width={1200}
height={630}
priority
sizes="(max-width: 768px) 100vw, 1200px"
/>
Comment next/font élimine le CLS causé par les polices
Le CLS (Cumulative Layout Shift) est souvent causé par le chargement tardif des polices Google. La police système s'affiche d'abord, puis la police finale remplace — en décalant tout le texte de la page.
next/font résout ce problème en préchargeant la police dans le <head> et en calculant un size-adjust CSS automatique pour que la police de substitution ait exactement les mêmes dimensions. Le texte ne bouge pas.
import { DM_Sans } from "next/font/google";
const fontBody = DM_Sans({
subsets: ["latin"],
variable: "--font-body",
display: "swap",
});
Onyx utilise next/font par défaut pour les trois polices du design system : DM Serif Display, DM Sans, et JetBrains Mono.
Les 7 erreurs qui dégradent le score Lighthouse
1. Images sans dimensions explicites → CLS
Une <img> sans width et height force le navigateur à réserver de l'espace une fois l'image chargée. next/image rend ces attributs obligatoires.
2. Polices sans display: swap → FCP dégradé
Sans display: swap, le texte reste invisible jusqu'au chargement de la police. next/font applique display: swap automatiquement.
3. JavaScript non utilisé → LCP dégradé Chaque octet de JS bloque le rendu. Next.js applique le code splitting automatique — seul le JS nécessaire à la page est chargé.
4. Rendu côté client sans SSG → TTFB élevé Une SPA React pure (Create React App) rend la page côté client : le HTML initial est vide, le TTFB est bas mais le LCP est catastrophique.
5. Scripts tiers synchrones → FCP bloqué
Google Analytics, Intercom, ou tout script chargé en <head> sans async ou defer bloque l'affichage. Onyx charge les scripts analytics en mode différé.
6. CSS non critique en <head> → rendu bloqué
Tailwind CSS v4 génère uniquement le CSS utilisé — zéro CSS mort, zéro render blocking.
7. Images hero sans priority → LCP manqué
L'image la plus grande de la page doit être préchargée. Sans priority, Next.js la charge en lazy loading — ce qui fait rater le LCP.
Mesurer ses performances : les bons outils
PageSpeed Insights (pagespeed.web.dev) L'outil officiel Google. Combine des données de laboratoire (Lighthouse simulé) et des données réelles (Chrome User Experience Report). À utiliser pour valider les optimisations.
Google Search Console → Expérience de la page Affiche les Core Web Vitals en conditions réelles pour l'ensemble des pages indexées. C'est la source de vérité utilisée par l'algorithme Google.
Lighthouse dans Chrome DevTools Accessible depuis F12 → onglet Lighthouse. Mesure en conditions simulées — utile en développement mais pas représentatif de la production.
web-vitals (npm) Bibliothèque officielle Google pour mesurer les Core Web Vitals en JavaScript depuis les vrais navigateurs des utilisateurs.
npm install web-vitals
Checklist performances : atteindre Lighthouse 90+ sur mobile
- Génération statique (SSG) activée — pas de
getServerSidePropssur les pages statiques -
next/imageutilisé pour toutes les images — pas de balises<img>brutes -
priorityajouté sur l'image hero (au-dessus de la ligne de flottaison) -
next/fontutilisé pour toutes les polices Google — pas de<link>Google Fonts dans le<head> - Scripts tiers chargés en
asyncou différé après l'interactivité - Aucune dépendance JavaScript côté client inutile (
"use client"uniquement si nécessaire) - Images servies en WebP ou AVIF (automatique avec
next/image) -
sizesrenseigné sur chaquenext/imageresponsive - CSS généré par Tailwind CSS (zéro CSS mort)
- Déploiement sur CDN global (Vercel, Netlify, Cloudflare Pages)
Conclusion
Les performances web ne sont plus une option en 2026 — elles conditionnent le classement Google, le taux de rebond, et l'expérience utilisateur sur mobile.
L'architecture Next.js statique adresse structurellement les trois Core Web Vitals : next/image pour le LCP, next/font pour le CLS, et la génération statique pour le TTFB. Onyx obtient 93/100 sur mobile et 100/100 sur desktop sans aucune configuration manuelle.
Pour les détails sur les métriques spécifiques à Next.js, consultez notre guide Core Web Vitals avec Next.js. Pour le SEO technique associé aux performances, lisez Optimiser le SEO avec Onyx.
Si vous partez de zéro, démarrez avec Onyx — les performances sont incluses par défaut.


