Cache, CDN ou headless améliorent le LCP et l’INP d’une page web quand ils traitent le vrai goulot. À côté du goulot, ils n’apportent rien, ou dégradent. Décidez sur les données terrain au 75e centile, une cascade réseau, les clés de cache, le JavaScript livré et le coût total. Sur une page qui reçoit du trafic Google Ads, l’étiquette de l’architecture ne vous dit rien de sa vitesse.
Passer en headless, et la page devient rapide : voilà l’idée reçue. Le nom d’une architecture ne fait pas la vitesse. Le mode de rendu, le code livré et le cache la font. L’architecture n’est qu’un chantier de la performance technique d’une page de destination. Une page lente augmente le risque d’abandon, mais la lenteur seule ne prouve pas que votre budget Google Ads y perd. Isolez d’abord le message, l’offre, les erreurs, l’appareil et la qualité du trafic : par les données ou par un test. On diagnostique avant de refondre.
La vitesse compte dans l’expérience de votre page de destination. Elle cohabite avec l’enjeu SEO d’une URL indexable, mais l’objectif technique tient en une ligne : ramener la mesure terrain dans la plage visée sans abîmer les conversions, l’accessibilité ou la sécurité.
Le LCP ne mesure pas seulement l’arrivée du document. Sa décomposition officielle distingue le temps avant le premier octet, le délai avant chargement de la ressource LCP, sa durée de transfert et le délai avant rendu. Une réponse servie depuis un cache ou depuis la « périphérie » (un point de présence proche du visiteur) raccourcit les deux premières parties, si c’est bien le document qui traîne. Elle n’efface pas une image découverte tard, une feuille de style bloquante ou un rendu retardé. Les Core Web Vitals replacent ce signal parmi les autres.
L’INP ne se résume pas à « du JavaScript lent ». Une tâche longue retarde l’entrée. Gestionnaires d’événements, calculs, iframes ou requêtes chargent le traitement. Un DOM volumineux, la mise en page et la peinture allongent l’affichage. L’appareil du visiteur et les ressources appelées après l’interaction pèsent aussi. Une migration allège le navigateur, ou lui ajoute des scripts et de l’hydratation (le JavaScript qui rend la page interactive une fois affichée).
Quand un formulaire répond mal, tracez l’interaction avant de prescrire : réduire l’INP d’un formulaire se joue sur la phase qui domine. Changer de plateforme vient en conclusion, jamais en réflexe.
Le TTFB, ou délai avant le premier octet, va du début de la navigation à la réception du premier octet du document. Il additionne entre autres les redirections, la connexion et la négociation TLS, la distance réseau, un éventuel intermédiaire et le travail de l’origine (votre serveur). Il pèse sur le LCP, sans en être forcément la partie dominante.
| Sous-partie du LCP | La question à poser | Où agir |
|---|---|---|
| TTFB | Le document met-il du temps à arriver ? | Redirections et connexion, travail de l’origine, cache, routage |
| Délai avant chargement | La ressource LCP est-elle repérée et prioritaire dès le HTML ? | HTML initial, priorité de chargement, CSS, préchargement ciblé |
| Durée de chargement | Le fichier est-il trop lourd, ou le transfert trop lent ? | Format, dimensions, compression, distribution |
| Délai de rendu | L’élément est arrivé : pourquoi attend-il pour s’afficher ? | CSS, polices, JavaScript, rendu et visibilité |
Un test lancé sur un cache chaud ne dit rien du visiteur qui tombe sur un cache vide. À l’inverse, une forte part de réponses servies depuis le cache masque un hébergement d’origine lent. Je compare donc trois cas : réponse en cache, absence en cache, contournement contrôlé. Puis je regarde le temps de traitement de l’origine. Le langage du serveur ou la base de données ne promettent aucune plage de gain.
Le repère web.dev de 0,8 seconde ou moins au 75e centile sert au diagnostic. Le TTFB n’est pas un Core Web Vital, et un TTFB au-dessus de ce repère n’empêche pas forcément un bon LCP. Le travail consiste à traiter la sous-partie qui bloque vraiment le rendu. Un seuil n’est pas un ordre de travaux.
Un score PageSpeed isolé ne dit donc pas si la faute vient de l’hébergement ou du code. Un audit de performance web pose une hypothèse, mesure avant et après à conditions égales, puis met le gain en face du coût et du risque.
Il n’y a pas d’échelle universelle où le moins cher rapporte toujours le plus. Une image LCP en chargement différé, un rendu côté client, une origine saturée ou une mauvaise clé de cache appellent chacun un ordre différent. Le tri suit la trace.
| Couche | Ce qu’elle évite | Ce qu’il faut contrôler |
|---|---|---|
| Le navigateur du visiteur (cache privé) | Retélécharger une ressource déjà reçue | Cache-Control, version du fichier, revalidation par ETag ou Last-Modified |
| Origine, proxy ou page entière | Refaire un rendu ou un appel applicatif | Clé, expiration, dépendances et purge. Comparer en cache, absent et contourné |
| Objet ou fragment applicatif | Refaire un calcul ou une lecture en base | Portée de l’objet, identité du client, invalidation et cohérence des transactions |
| Cache partagé d’un CDN | Le trajet jusqu’à l’origine et sa charge | Admissibilité, clé, cookies et Vary. Durée en périphérie, purge et régions |
Un ETag ne supprime pas forcément la requête : il permet une revalidation conditionnelle, le navigateur demande « ça a changé ? » et reçoit un simple « non ». Pour des fichiers versionnés dont l’URL change à chaque contenu, un cache long avec immutable tient la route. Pour un HTML non personnalisé qui doit rester frais, la revalidation est un meilleur pari qu’une durée fixée au doigt mouillé.
Un cache partagé ne doit jamais recevoir une réponse personnelle ou sensible. La sémantique HTTP de Cache-Control réserve private aux caches privés et no-store aux réponses à ne pas stocker du tout. Tant que la politique n’a pas été revue, excluez sessions, jetons, réponses après connexion et données propres à un client. Les requêtes non idempotentes aussi (celles qui modifient quelque chose). Vérifiez qu’aucune règle maison du CDN ou du proxy ne contourne ces directives. Puis faites tester automatiquement qu’un compte, un locataire ou une variante ne reçoit jamais la réponse d’un autre.
Un CDN, ou réseau de diffusion de contenu, garde des copies de votre site sur des points de présence proches du visiteur, avec des routes optimisées. Réponse en cache : l’origine ne travaille pas. Réponse absente ou non admissible : le trajet continue jusqu’à votre serveur. Le résultat dépend de la géographie, de la part de réponses en cache, des clés, des connexions et des règles. Un proxy mal réglé fait l’inverse : il ajoute une étape.
Ne choisissez pas un CDN sur la promesse d’un plan gratuit. Sur la vitesse : couverture utile, cache du HTML, règles sur les cookies et les requêtes, TLS jusqu’à votre hébergement. Pour l’exploitation : purge par URL ou par tag, journaux, protection, transformation des images et fonctions en périphérie. Puis le contrat : support, engagement de service, tarif et retour arrière. Un exemple : la documentation Cloudflare consultée le 25 juillet 2026 indique qu’HTML et JSON ne sont pas mis en cache par défaut. Activer le DNS ne suffit donc pas à accélérer le document. Une règle de cache personnalisée change ce comportement et s’audite à part.
Certains fournisseurs compressent, transforment les images, minifient ou exécutent du code en périphérie. Ces options aident quand le goulot est là, mais elles ne remplacent pas la mesure du HTML, des images et des scripts tiers réellement livrés. Surveillez la part de réponses servies depuis le cache, leur âge et le TTFB. Puis les erreurs, le volume renvoyé à l’origine et les écarts entre régions.
La durée de vie d’une copie dépend de votre rythme de publication, de la possibilité de versionner l’URL et de la fraîcheur que vous acceptez. Les fichiers dont le nom porte une empreinte supportent un cache long. Le HTML, les API et les réponses variables demandent une règle à part. Avec stale-while-revalidate (servir l’ancienne copie pendant le rafraîchissement), écrivez noir sur blanc combien de temps une ancienne réponse reste acceptable.
Purger le serveur et le CDN ne vide pas forcément le navigateur, un service worker ou un intermédiaire. Après publication, vérifiez la version et les en-têtes depuis plusieurs régions. Cherchez ensuite les copies périmées parmi les fichiers versionnés. Une purge globale remet tout le cache à froid et l’origine risque d’encaisser le choc : préchauffez seulement les pages utiles, sous contrôle.
Pour un test A/B, la variante, ou l’affectation qui suit le visiteur, entre dans la clé de cache. Sinon, le cache est contourné. Cookie, en-tête Vary ou affectation en périphérie doivent servir la même variante au même visiteur, sans mélanger les groupes. Un test est faussé quand la mauvaise variante est servie. Une durée de vie sur la réponse ne le fausse pas en soi. Déployez et chauffez les deux branches de la même façon avant de mesurer.
Dans une architecture headless, le CMS est découplé de la partie visible du site et livre son contenu par une API. L’interface se construit alors sur le serveur, à la génération du site ou dans le navigateur, parfois en périphérie ou en mélange de tout ça. Ce découplage change les contrats, les outils et les responsabilités. Il ne garantit ni la vitesse, ni le SEO, ni le confort de publication.
La vitesse dépend du moment où les données sont récupérées et du HTML livré. Puis du cache, de l’hydratation et du JavaScript côté client, du DOM, des scripts tiers et du chemin jusqu’à l’origine. Ces coûts se contrôlent sur chaque mode de rendu. Une page pré-rendue s’affiche vite et expédie quand même trop de code d’interactivité, si personne ne le surveille. Un rendu serveur répond au besoin de données fraîches ou personnalisées, et, selon l’outil, se diffuse en flux continu ou en périphérie.
| Mode de rendu | Ce qu’il apporte | Ce qu’il faut mesurer |
|---|---|---|
| SSG, génération statique | HTML fabriqué avant la visite, servi sans calcul à l’origine | Temps de génération, fraîcheur, invalidation et hydratation côté client |
| SSR, rendu côté serveur | Données fraîches, personnalisation, diffusion en flux ou en périphérie | Travail à chaque requête, dépendances, cache sélectif et panne de l’origine |
| ISR, régénération incrémentale | Version statique rafraîchie à intervalle ou à la demande | Réponse périmée pendant la revalidation, comportement propre à l’outil |
| CSR, rendu côté client | Interactions d’application, données chargées dans le navigateur | Poids du JavaScript, écran initial, appels réseau, DOM et INP |
| Hybride, flux continu ou périphérie | Mode choisi route par route ou bloc par bloc, affichage progressif | Observation plus complexe, frontières de cache et cohérence des données |
| Site monolithique bien mis en cache | Moins de contrats à maintenir, HTML réutilisable | Extensions, origine, publication et personnalisation propres au CMS |
Le pré-rendu statique n’appartient pas au headless : un générateur statique produit le même document sans CMS découplé. À l’inverse, un projet découplé bâti surtout en rendu client charge davantage le navigateur. Comparez une implémentation précise, pas deux étiquettes.
Un devis initial ne suffit pas. Je chiffre le coût réel en quatre postes. Le socle : développement, hébergement, maintenance et fonctionnalités métier. Le contenu : modèle de contenu, API, couche de présentation, formulaires et prévisualisation. La conformité : redirections, suivi, consentement, accessibilité et SEO. L’exploitation : sécurité, caches et purge, journaux et alertes. Sans oublier sauvegardes, retour arrière, environnements et astreinte.
Comparez aussi le quotidien de ceux qui publient : fonctions du CMS, rôles et validation, publication programmée et localisation, aperçu et autonomie. Avant la bascule, faites tester la gestion des médias et des droits, la prévisualisation et la publication, puis la recette SEO des routes et des métadonnées. Le contrat doit nommer qui maintient l’interface et les connecteurs. Un monolithe demande parfois du développement, et un système découplé offre parfois une excellente interface. La différence se mesure sur le processus de votre équipe, et l’opposition « clics faciles » contre « développeur obligatoire » ne vous apprend rien.
Une page plus rapide ne vend pas mécaniquement plus. Fixez la métrique principale et une période qui couvre un cycle de vente. Segmentez par appareil et par source. Isolez autant que possible ce qui a bougé en même temps : contenu, offre, trafic Google Ads. Pour une refonte complète, combinez données avant et après, déploiement progressif et un groupe témoin resté sur l’ancienne version quand c’est possible.
Partez de la métrique terrain qui décroche, puis ouvrez sa décomposition. Le prix de la solution se discute après avoir localisé le problème. Jamais avant.
| Ce que la mesure montre | Ce qu’on essaie | Quand on s’arrête |
|---|---|---|
| Origine lente ou beaucoup de réponses hors cache | Alléger le travail de l’origine, cache de page entière ou d’objet, puis CDN si la géographie le justifie | LCP terrain dans la cible, origine observable, aucune fuite ni contenu périmé |
| Page surtout statique | Export statique ou SSG, avec ou sans CMS découplé | Publication, formulaires, suivi et fraîcheur restent sous contrôle |
| Données fraîches ou personnelles | SSR ou hybride, cache sélectif, réponses marquées privées | Sécurité, TTFB, disponibilité et coût d’exploitation tenables |
| Contenu multi-canal et API déjà nécessaires | Prototype headless sur un chemin représentatif | Gain produit et technique supérieur au coût total et au risque de migration |
| INP dominé par le navigateur | Réduire tâches longues, JavaScript, DOM et rendu | Interaction terrain dans la cible, sans rien casser |
Sur une page alimentée par Google Ads, chaque visiteur a été payé. Ce prix justifie une mesure exigeante, pas une architecture plus prestigieuse. Déployez la plus petite modification qui traite la sous-partie dominante. Regardez le terrain après une fenêtre assez longue. Élargissez seulement ensuite.
On cherche ce qui freine les demandes pour corriger la bonne chose, avant toute refonte.
Réserver un appel