Comment repérer et corriger un TTFB lent (Time to First Byte)

Où vérifier votre TTFB, comment le décomposer par partie et par visiteur, et par quel fix commencer.

  • Bon ≤ 0,8 s
  • À améliorer ≤ 1,8 s
  • Mauvais > 1,8 s
Arjen Karel
Mis à jour le · 11 min de lecture
Partager

Repérer un TTFB lent en résumé

Vérifiez le Time to First Byte (TTFB), le temps d'attente du premier octet HTML d'une page, dans les field data de PageSpeed Insights : le résultat est bon à 0,8 seconde ou moins au 75e percentile. Décomposez-le ensuite dans les données réelles par partie et par visiteur. Sur la plupart des sites, la part la plus importante est la request : le serveur qui génère des pages hors cache.

Comment repérer et corriger un TTFB lent ?

Commencez par les field data : confirmez que le TTFB est lent et sur quel appareil, identifiez la plus lente de ses cinq parties ainsi que les visiteurs et les pages qui ralentissent, puis regardez côté serveur. Corrigez ce que ce diagnostic met en évidence.

Ces cinq parties sont waiting, cache, DNS, connection et request, et le guide Time to First Byte détaille ce que chacune recouvre.

Étape Où regarder Ce que cela indique
1. Vérifier PageSpeed Insights Si les vrais visiteurs subissent un TTFB lent
2. Tester un chargement Chrome DevTools Les cinq parties, l'en-tête de cache, Server-Timing
3. Mesurer chaque visite Real-user monitoring (RUM) Le TTFB de chaque chargement de page, par visiteur
4. Décomposer RUM : répartition et segments Quelle partie est la plus lente, et pour qui
5. Corriger et vérifier Cache, CDN, serveur Si le site est devenu plus rapide pour vos visiteurs

Comment vérifier et tester votre TTFB ?

Vérifiez gratuitement votre TTFB dans PageSpeed Insights : il indique le TTFB constaté par vos visiteurs sur Chrome au cours des 28 derniers jours, sous « Autres métriques notables », pour l'URL et pour le site entier, sur l'onglet mobile et desktop. « La première étape de la guérison consiste à admettre qu'on a un problème. » Search Console ne proposant aucun rapport TTFB, ces field data sont le seul endroit pour savoir si vous en avez un.

Le rapport Core Web Vitals issu de l'historique CrUX, gratuit, affiche ce TTFB sur 28 jours sous forme d'un point par semaine sur les 25 dernières semaines, pour tout domaine ou URL avec suffisamment de visiteurs sur Chrome. Un site qui en a trop peu n'aura de field data dans aucun des deux outils : testez alors un chargement dans Chrome et mesurez chaque visite avec le RUM.

Graphique du TTFB sur mobile d'une grande boutique en ligne selon CrUX, 75e percentile par semaine du 23 mai au 7 novembre 2026 : il reste entre la ligne « bon » à 0,8 seconde et la ligne « médiocre » à 1,8 seconde durant les 25 semaines, passant de 0,90 à 1,28 seconde pour finir à 1,22 seconde.

CrUX, TTFB sur mobile par semaine pour une grande boutique en ligne : au-dessus de la ligne des 0,8 s chaque semaine.

Un outil de test ou de vérification du TTFB en ligne envoie une seule requête depuis son propre serveur : un chargement unique, dont la valeur dépend de l'emplacement de ce serveur, de la présence de la page en cache et de la prise en compte des redirections. PageSpeed Insights fournit le 75e percentile de 28 jours de visites réelles. curl envoie cette même requête depuis votre propre machine :

curl -s -o /dev/null -w "%{time_starttransfer}\n" https://www.example.com/

Le résultat correspond au TTFB de cette requête en secondes ; ajoutez -L pour suivre les redirections. Utilisez un outil de test ou curl pour comparer la même URL en cache et hors cache, ou avant et après un changement.

Le TTFB n'est pas un Core Web Vital, mais un TTFB lent peut faire échouer l'évaluation des Core Web Vitals via le Largest Contentful Paint (LCP), car l'attente du HTML constitue la première étape de chaque LCP.

Où Chrome affiche-t-il le TTFB d'un chargement de page ?

Dans Chrome DevTools, l'onglet Timing du panneau Network décompose le chargement du document HTML en plusieurs étapes ; le TTFB de ce chargement s'étend jusqu'à la fin de « Waiting for server response ». L'onglet Headers indique si la page provient d'un cache (cf-cache-status: HIT sur Cloudflare, en-tête x-cache chez de nombreux hébergeurs).

  1. Ouvrez la page dans une fenêtre de navigation privée (déconnecté, panier vide), ouvrez le panneau Network dans DevTools et rechargez.
  2. Cliquez sur le document HTML, la première ligne de type document. Une redirection préalable s'affiche sur sa propre ligne.
  3. Dans Headers, repérez l'en-tête de cache. HIT signifie que le cache a répondu ; MISS ou BYPASS signifie que ce cache a transmis la requête à votre serveur.
  4. Chargez la même URL avec ?gclid= et une valeur encore jamais utilisée, à l'image d'un clic Google Ads. Un statut MISS et une attente plus longue indiquent que les visiteurs issus des annonces contournent le cache.

Un MISS au niveau du CDN avec un temps d'attente tout aussi court signifie qu'un second cache situé derrière a répondu, généralement le cache de page de votre serveur. Sur Cloudflare, la valeur DYNAMIC sur le HTML signifie que Cloudflare transmet chaque requête de page à votre serveur : il ne met le HTML en cache que si une Cache Rule le lui demande, ou via Automatic Platform Optimization, son extension pour WordPress.

Collé dans la console, cet extrait mesure le TTFB et ses cinq parties via l'API Navigation Timing, selon la formule de la bibliothèque web-vitals de Google, afin que la somme des parties corresponde exactement au TTFB :

new PerformanceObserver((list) => {
  const [nav] = list.getEntries();
  const at = (t) => Math.max(t - (nav.activationStart || 0), 0);
  const ttfb = at(nav.responseStart);
  const waiting = at(nav.workerStart || nav.fetchStart);
  const cache = at(nav.domainLookupStart) - waiting;
  const dns = at(nav.connectStart) - at(nav.domainLookupStart);
  const connection = at(nav.connectEnd) - at(nav.connectStart);
  const request = ttfb - at(nav.connectEnd);
  console.table({ ttfb, waiting, cache, dns, connection, request });
}).observe({ type: 'navigation', buffered: true });

Le guide Time to First Byte fournit la version avec bibliothèque à intégrer dans votre propre code.

Server-Timing est un en-tête de réponse dans lequel le serveur transmet ses propres temps d'exécution pour ce même chargement, à raison d'une entrée par étape :

Server-Timing: wp;dur=27.8;desc="WordPress and query", tpl;dur=27.1;desc="Template"

DevTools liste ces entrées sous Server Timing dans ce même onglet Timing, sous « Waiting for server response », la partie du TTFB que traite le guide Request duration ; cette page fournit le code permettant d'envoyer l'en-tête depuis PHP et Node.

Chrome DevTools, panneau Network, onglet Timing de la requête HTML sur une installation locale de test WordPress : Waiting for server response 58,98 ms, et sous Server Timing wp (WordPress and query) 27,80 ms et tpl (Template) 27,10 ms.

Un chargement d'une page WordPress sur une installation locale de test : les deux entrées Server-Timing s'inscrivent dans les 59 ms passées par le navigateur à attendre le serveur.

Pourquoi faut-il des données réelles pour identifier un TTFB lent ?

PageSpeed Insights fournit un seul TTFB par type d'appareil pour 28 jours de visites, sans préciser quels visiteurs ou quelle partie causent la lenteur. DevTools et les outils de test chargent l'URL finale depuis un point géographique unique, alors que les vrais visiteurs arrivent via des redirections, depuis des pays éloignés, connectés ou avec des paramètres de tracking. Le Real-user monitoring (RUM) enregistre le TTFB de chaque chargement de page avec l'ensemble de ces détails.

J'ai développé CoreDash exactement pour cela : obtenir le TTFB de chaque chargement de page, décomposé par partie et par visiteur. Ajoutez son script à vos pages ou installez son plugin WordPress. Trois segments, correspondant aux informations visiteurs selon lesquelles CoreDash découpe les données, restent vides tant que votre site ne les envoie pas :

  • Logged in status : attribuez la valeur 1 ou 0 à window.__CWVLI avant le script CoreDash, ou activez « Tag login status » dans le plugin WordPress.
  • Page label : window.__CWVL attribue un libellé à la page (comme son template), afin que les pages produit, la recherche et le checkout disposent chacune de leur propre TTFB.
  • Release : enregistrez chaque déploiement dans CoreDash depuis votre CI.

Que noter avant de modifier quoi que ce soit ?

Notez la date, le TTFB au 75e percentile sur mobile et sur desktop, ses cinq parties, ainsi que le TTFB de vos principaux groupes de pages et segments de visiteurs. Après une modification, comparez le même nombre de jours avant et après, afin que les jours de semaine et le week-end figurent dans les deux périodes. Le rapport Core Web Vitals conserve pour vous la courbe hebdomadaire CrUX.

Le TTFB est-il lent pour tout le monde ou pour certains visiteurs ?

Segmentez d'abord par partie, puis par visiteur. Quand tous les groupes sont lents, l'une des cinq parties est trop longue pour l'ensemble d'entre eux. À l'inverse, si un seul groupe est bien plus lent que les autres, il contourne le cache de page ou emprunte un chemin plus long vers la page.

Lent pour tout le monde : quelle est la plus longue des cinq parties ?

Un temps de request excessif est la cause la plus fréquente d'un TTFB lent : le serveur met trop de temps à générer la page, et cette partie comprend également un aller-retour sur le réseau. Sur 82 des 86 sites CoreDash ayant enregistré au moins 1 000 chargements de page sur mobile au cours des 28 jours précédant le 9 novembre 2026, la request représentait la plus grande part du TTFB au 75e percentile.

Dans CoreDash, ouvrez le TTFB sur mobile et regardez Phase breakdown.

CoreDash Phase breakdown du Time To First Byte sur mobile pour acme-pagespeed.com : Waiting + Redirect 41 ms, Worker & Cache 4 ms, DNS 6 ms et Connection 88 ms tous bons, Request 742 ms classé À améliorer ; la page quitte la zone Bon durant la Request.

CoreDash, TTFB sur mobile décomposé en cinq parties sur acme-pagespeed.com : repérez la barre la plus longue, ici Request.

Partie la plus lente Que vérifier ensuite
Request L'en-tête de cache en étant déconnecté et avec un nouveau ?gclid= ; pages en cache versus hors cache ; Server-Timing
Waiting Le segment Redirect Count et les URL d'arrivée des visiteurs
Connection Le segment Country et la présence d'un CDN qui répond au plus près de ces visiteurs
DNS Votre fournisseur DNS
Cache Un service worker qui démarre lentement

Lent pour certains visiteurs : quel groupe, et qu'est-ce que cela signifie ?

Comparez le TTFB de chaque groupe de visiteurs avec le reste du trafic. Un groupe nettement plus lent contourne généralement le cache de page, passe par une redirection ou provient d'un pays éloigné. La mise en cache est souvent désactivée ou ignorée pour les utilisateurs connectés, les pages de panier, les requêtes contenant des paramètres Google Ads, les résultats de recherche et le checkout.

Sur les sites mesurés avec CoreDash, les chargements sur mobile passés par une redirection affichaient un TTFB d'environ 1 seconde au 75e percentile sur les 28 jours précédant le 10 novembre 2026, contre 0,63 seconde sans redirection. Sur 23 des 27 sites enregistrant suffisamment de chargements dans les deux groupes, le TTFB était plus élevé avec la redirection. Les chargements en session connectée et ceux comportant un paramètre de tracking étaient également plus lents sur la plupart des sites.

Dans CoreDash, le tableau de la page TTFB regroupe les données par segment ci-dessous ; cliquer sur une valeur filtre toute la page, répartition comprise.

Tableau CoreDash du Time To First Byte par Redirect Count sur mobile pour acme-pagespeed.com : 0 redirection 612 ms bon (18 420 sessions), 1 redirection 1,04 s à améliorer (1 236 sessions), 2 redirections 1,21 s à améliorer (57 sessions).

CoreDash, TTFB regroupé par Redirect Count sur acme-pagespeed.com : comparez le p75 de chaque groupe avec la ligne sans redirection.

Segment Ce qu'indique un groupe lent Première correction
Logged in status, Cart Status La page est générée pour chaque visiteur Un cache d'objets, l'étape lente dans Server-Timing
Query String Chaque nouvelle valeur de gclid rate le cache Supprimer les paramètres de tracking
Redirect Count Vos liens pointent vers d'anciennes URL Pointer vers l'URL finale
Country Le HTML vient de loin Mettre le HTML en cache sur un CDN
Top level Pathname, Page label Un template, comme la recherche, est lent Activer Server-Timing sur ce template
Repeat Visitor Nouveau : première connexion Un CDN au plus près de vos visiteurs
Release Le TTFB a augmenté après un déploiement Vérifier ce qui a changé : cache, requêtes, plugins

Facebook ajoute un nouveau fbclid à chaque clic sur un lien sortant, publicités incluses : chaque visiteur provenant de Facebook risque donc de rater le cache. Ce sont les coupables habituels ; chaque site ayant aussi ses spécificités, comparez également vos page labels.

Comment corriger ce que vous avez trouvé ?

Réduisez la plus importante des cinq parties du TTFB pour les visiteurs qui la subissent. Commencez par faire en sorte que chaque page qui peut être mise en cache provienne du cache pour tous les visiteurs : déconnectés, avec un paramètre de tracking ou après une redirection. Éliminez ensuite les redirections et mettez le HTML en cache sur un CDN, puis accélérez le serveur pour les pages qui ne peuvent pas être mises en cache.

  • WordPress : un cache de page dans WP Rocket, LiteSpeed Cache ou chez votre hébergeur, ou avec le plugin de ce site, WP Core Web Vitals, qui sert la page en cache avant le chargement de WordPress. Testez-le en étant déconnecté et vérifiez qu'il ignore les paramètres de tracking : WP Rocket ignore par défaut gclid, fbclid et les paramètres utm_, LiteSpeed Cache propose le réglage Drop Query String, et un CDN a besoin de sa propre règle. Pour les pages WooCommerce et les utilisateurs connectés, utilisez un cache d'objets comme Redis, souvent activable en un clic chez votre hébergeur ; Query Monitor liste les requêtes lentes et le plugin dont elles proviennent.
  • Shopify : le serveur, son cache et le CDN sont du ressort de Shopify. Les redirections, les applications et le code Liquid de votre thème sont de votre responsabilité : Shopify Theme Inspector pour Chrome montre quelle partie du thème est lente à s'exécuter sur le serveur ; transmettez cette partie à la personne qui gère votre thème.
  • Votre propre serveur ou un hébergeur : demandez la mise en cache du HTML sur le CDN, l'exclusion des paramètres de tracking de la clé de cache, la suppression de la redirection, ainsi que l'activation de Server-Timing (les mesures propres au serveur par étape) sur le template lent.

Le guide Time to First Byte détaille le correctif par cause, avec le code.

Les 103 Early Hints, que Shopify envoie et que Cloudflare prend en charge, réduisent le TTFB mesuré : Chrome considère le code 103 comme le premier octet, alors que le HTML n'arrive pas plus vite pour autant. De même, un plugin de cache peut être activé alors que la majorité des visiteurs le contourne : un cookie présent sur chaque réponse, pour une session ou un test A/B, exclut souvent la page du cache. L'en-tête de cache le montre : BYPASS ou MISS, même en étant déconnecté.

La correction du TTFB a-t-elle fonctionné ?

Vérifiez d'abord le cache, puis les field data. L'en-tête de réponse doit afficher un cache hit en étant déconnecté et avec une nouvelle valeur ?gclid= ; le RUM indique le nouveau TTFB par groupe de visiteurs dès le lendemain ; PageSpeed Insights et le rapport Core Web Vitals évoluent sur les quatre semaines suivantes.

Comparez les mêmes groupes que ceux notés avant la modification. Sur la courbe hebdomadaire CrUX, une correction — ou un déploiement qui a dégradé les choses — se traduit par une évolution sur environ quatre semaines ; vérifiez ce qui est passé en production la semaine où le changement commence.

Parfois, le groupe ralenti pointe vers un élément auquel vous n'avez pas accès : un cache chez l'hébergeur, une API attendue par la page, une règle CDN configurée il y a des années. Lors d'une Core Web Vitals power hour, nous prenons votre groupe de visiteurs le plus lent, analysons l'un de ses chargements de page à travers les en-têtes de réponse et les timings du serveur, puis convenons des modifications à apporter et de qui s'en charge.

About the author

Arjen Karel is a web performance consultant and the creator of CoreDash, a Real User Monitoring platform that tracks Core Web Vitals data across hundreds of sites. He also built the Core Web Vitals Visualizer Chrome extension. He has helped clients achieve passing Core Web Vitals scores on over 925,000 mobile URLs.

Arjen Karel

Besoin d'un site plus rapide ?

Je suis Arjen et je répare des sites lents depuis 17 ans. Si vous rencontrez des problèmes que vous ne pouvez pas résoudre vous-même, envoyez-moi votre URL et parlons-en.

Envoyez-moi votre URL
Arjen Karel
Arjen Karel, Consultant en performance web depuis 2009

Pourquoi notre fix ne fonctionne pas ?

Parfois le CDN sert encore l'ancien HTML, ou le fix a été appliqué sur le template desktop alors que le mobile en utilise un autre. Envoyez-moi votre URL et le problème, et je vous réponds avec quelques créneaux. J'analyse d'abord vos field data, puis nous passons une heure sur votre site, et sous 24 heures vous avez mes notes par écrit. 350 € HT.

Envoyez-moi votre URL

Pas de développeur pour réaliser le fix ? Je fais le travail moi-même, sur une copie de votre site.

Arjen KarelTTFB encore rouge sur mobile ?Envoyez-moi votre URL