Changer le thème

Taux de cache Cloudflare bloqué à 30 % ? 3 règles pour viser 90 %

Easton editorial illustration: guided setup bench

Le taux de cache Cloudflare de mon blog tournait autour de 30 %. Images, CSS en cache — mais le HTML repassait toujours par l’origine, serveur saturé. Par défaut Cloudflare ne met pas le HTML en cache ; les Page Rules sont dépréciées.

Après Cache Rules et Edge TTL : hits ~30 % → ~90 %, TTFB ~500 ms → ~100 ms, charge origine −90 %. Cet article explique pourquoi le HTML n’est pas mis en cache, comment configurer les règles et comment vérifier.

Pourquoi Cloudflare ne met pas le HTML en cache par défaut ?

Comportement de cache par défaut

Par défaut, Cloudflare ne met en cache que les statiques — images (JPG, PNG, GIF), CSS, JS. Le HTML ? Non, pas par défaut.

Trois critères principaux :

  1. En-tête Cache-Control : private, no-store, no-cache ou max-age=0 → pas de cache
  2. Code de réponse : certains codes seulement (200, 301, 404, etc.)
  3. Méthode : GET en cache ; pas POST, PUT, etc.

Le HTML est souvent traité comme dynamique (données utilisateur). Avec connexion, noms et infos perso ne doivent pas être servis par le CDN à d’autres visiteurs.

La vraie raison : la sécurité

J’ai vu sur un forum : cache site entier activé sans réfléchir — wp-login.php mis en cache avec identifiants. N’importe qui pouvait entrer dans l’admin WordPress. Flippant.

Si le site est surtout statique :

  • Blog statique (Next.js, Gatsby, etc.)
  • Site vitrine ou doc peu mis à jour
  • Pages produit purement affichage

… le cache HTML booste les perfs — à condition d’exclure admin, login, etc.

Quel gain pour le HTML ?

Sur Medium : TTFB 500 ms → 100–160 ms, charge −90 %. Avant : chaque visiteur = origine + BDD + rendu. Après : CDN sert le HTML ; l’origine reste au repos. Plus de trafic, plus visible.

Page Rules dépréciées : passer aux Cache Rules

Fin des Page Rules

Page Rules permettait Cache Everything pour le HTML. Elles sont deprecated.

Chronologie :

  • Juillet 2024 : nouveaux comptes gratuits sans Page Rules
  • 2025 : migration automatique vers le nouveau système
  • Nouvelles configs : Cache Rules uniquement

Page Rules : vieilles, peu flexibles, 3 règles max en gratuit.

Cache Rules

Ère Page Rules : choisir manuellement Cache Everything

Ère Cache Rules : Eligible for cache active l’équivalent

J’ai cherché Cache Everything longtemps — renommé.

Matching plus souple : chemin URI, extension, hostname, regex, conditions combinées.

Migration

  1. Migration auto en 2025 (possible de migrer avant)
  2. Disable Security / Disable Performance : non migrés
  3. Eligible for cache ≈ Cache Everything, implémentation un peu différente

Passez à Cache Rules maintenant — plus clair et plus puissant.

Cache Rules en pratique : 3 règles pour tout le site

Préparation

Console Cloudflare → domaine → CachingCache RulesCreate rule.

Règle 1 : bypass admin (priorité max)

Pourquoi en premier ? Sécurité : admin et login jamais en cache.

  1. Rule name : Bypass Admin Pages
  2. When incoming requests match :
    • Custom filter expression
    • Field : URI Path
    • Operator : contains
    • Value : /wp-admin
  3. Or : /wp-login.php, /admin/, /api/auth/
  4. Then : Bypass cache
  5. Priorité : 1

Deploy. Liste WordPress type :

/wp-admin
/wp-login.php
/wp-json
/cart
/checkout
/my-account

Adaptez à votre site.

Règle 2 : statiques (priorité moyenne)

Optionnel (Cloudflare cache déjà les statiques) mais TTL plus précis.

  1. Rule name : Cache Static Assets
  2. When : File extension, is in : jpg png gif css js woff woff2 ttf svg ico
  3. Then : Eligible for cache ; Edge TTL : Use cache-control header if present, use default Cloudflare caching behavior if not
  4. Priorité : 2

Règle 3 : tout le reste (priorité basse)

Cache du HTML et du reste.

  1. Rule name : Cache Everything Else
  2. When : All incoming requests (ou expression custom)
  3. Then : Eligible for cache ; Edge TTL : Ignore cache-control header and use this TTL7 days
  4. Priorité : 3

Pourquoi 1 semaine ? Compromis blog/doc. Gratuit : TTL min 2 h ; Pro 1 h.

Ordre d’exécution

Priorité 1 → 2 → 3 : admin bypass, statiques TTL adapté, reste en cache 1 semaine.

Checklist

  • Règle 1 priorité la plus haute (nombre le plus petit)
  • Tous les chemins admin exclus
  • TTL règle 3 selon fréquence de mise à jour
  • Toutes les règles Deploy

Edge TTL : éviter les pièges

Trois modes

Mode 1 : Use cache-control header if present, bypass cache if not — strict ; sans Cache-Control à l’origine = pas de cache.

Mode 2 (souvent recommandé hors HTML forcé) : Use cache-control header if present, use default Cloudflare caching behavior if not — équilibré.

Mode 3 : Ignore cache-control header and use this TTL — force le TTL. Recommandé pour le HTML si no-cache ou absence de Cache-Control.

Durée du TTL

Type de contenuTTL conseilléRaison
Statiques (images, CSS, JS)1 moisPeu de changements
HTML article blog1 semaineBon compromis
HTML page produit1–3 joursPrix/stock
HTML accueil1 jourMises à jour fréquentes
APIPas de cache ou 5 minFraîcheur des données

Gratuit : minimum 2 h.

Erreurs fréquentes

Oublier l’exclusion admin — admin WordPress en cache, pages obsolètes → règle Bypass en priorité 1.

TTL trop long — titre modifié, visiteurs voient l’ancien → TTL selon rythme de publication.

Confondre Edge TTL et Browser TTL — Edge = nœuds CDN ; Browser = navigateur visiteur. Régler Browser TTL (Respect origin ou ~1 jour).

Purge Cache

Caching → Purge Cache : Purge Everything ou Custom Purge. Plugin Cloudflare sur WordPress pour purge à la publication.

Vérification et optimisation

Méthode 1 : DevTools

F12 → Network → page d’accueil → document HTML → Headers.

cf-cache-status : HIT, MISS, DYNAMIC, BYPASS, EXPIRED.

age : durée en cache sur le CDN (secondes).

cache-control : stratégie origine (Cloudflare peut l’ignorer en mode 3).

Méthode 2 : curl

curl -I https://your-website.com
curl -svo /dev/null https://your-website.com 2>&1 | grep -i "cf-cache"

Méthode 3 : Analytics

Analytics → Caching → Cache Hit Ratio. Cible > 80 %.

Astuces avancées

  • Préchauffer après publication
  • URLs uniformes (/page vs /page/ vs ?)
  • Query strings : Query String Sort ou Transform Rules

Dépannage

DYNAMIC permanent : Cache-Control bloquant ou règle non matchée → vérifier Cache Rules, mode 3 pour HTML.

Hits 50–60 % : paramètres URL, headers origine, délai de remplissage CDN → Analytics par type de requête.

Ancien contenu après mise à jour : TTL long ou cache navigateur → Purge ou plugin.

Synthèse

  1. Pourquoi pas de HTML par défaut : sécurité, contenu dynamique
  2. Page Rules → Cache Rules : Eligible for cache = ancien Cache Everything
  3. 3 règles : bypass admin (1), statiques (2), reste HTML 1 semaine (3)
  4. Edge TTL mode 3 pour HTML si besoin
  5. Vérifier : cf-cache-status, Analytics > 80 %

Chez moi : 30 % → 90 % hits, TTFB ~500 ms → ~100 ms, charge −90 %.

À faire :

  1. Regarder le Cache Hit Ratio actuel dans Analytics
  2. Configurer les 3 Cache Rules (admin en bypass d’abord !)
  3. Recontrôler après 1–2 jours

Vérifiez : bypass admin, priorités, mode Edge TTL. WordPress : plugin Cloudflare officiel recommandé.

Questions ou retours d’expérience : partagez en commentaires !

Configurer les Cache Rules Cloudflare pour monter le taux de cache

De la compréhension du HTML non mis en cache par défaut aux 3 Cache Rules, pour passer d’environ 30 % à 90 % de hits

Estimated time: PT1H

  1. 1

    Step 1: Comprendre le cache par défaut et pourquoi le HTML n’est pas mis en cache

    Par défaut Cloudflare met en cache surtout JPG, PNG, GIF, CSS, JS — pas le HTML.
  2. 2

    Step 2: HTML = contenu souvent dynamique ; avec login, pas de cache CDN pour les données perso. Sites statiques (Next.js, Gatsby, vitrine, doc)

    cache HTML utile si exclusions correctes.
  3. 3

    Step 3: Passer de Page Rules aux Cache Rules

    Page Rules dépréciées :
  4. 4

    Step 4: • Juillet 2024

    plus pour nouveaux comptes gratuits
  5. 5

    Step 5: • 2025

    migration automatique
  6. 6

    Step 6: • Nouvelles configs

    Cache Rules
  7. 7

    Step 7: Atouts

    matching flexible (URI, extension, hostname, regex).
  8. 8

    Step 8: Configurer la règle 1 : bypass admin (priorité max)

    Sécurité : admin et login jamais en cache.
  9. 9

    Step 9: Rule name

    Bypass Admin Pages
  10. 10

    Step 10: When

    Custom filter expression, URI Path contains /wp-admin
  11. 11

    Step 11: Or

    /wp-login.php, /admin/, /api/auth/
  12. 12

    Step 12: Then

    Bypass cache
  13. 13

    Step 13: Liste WordPress type

    /wp-admin, /wp-login.php, /wp-json, /cart, /checkout, /my-account — à adapter.
  14. 14

    Step 14: Configurer la règle 2 : statiques (priorité moyenne)

    Optionnel mais TTL plus précis.
  15. 15

    Step 15: File extension is in

    jpg png gif css js woff woff2 ttf svg ico
  16. 16

    Step 16: Configurer la règle 3 : tout le reste (priorité basse)

    Cache HTML et reste.
  17. 17

    Step 17: 1 semaine

    bon pour blog/doc. Gratuit TTL min 2 h. Ordre - 1 → 2 → 3.
  18. 18

    Step 18: Vérifier et optimiser

    DevTools : Network → HTML → cf-cache-status (HIT/MISS/DYNAMIC/BYPASS/EXPIRED). 1re MISS, 2e HIT souvent.
  19. 19

    Step 19: Analytics

    Cache Hit Ratio — cible > 80 %.
  20. 20

    Step 20: Astuces

    préchauffer, URLs uniformes, Transform Rules pour query strings.

FAQ

Pourquoi Cloudflare ne met pas le HTML en cache par défaut ? Quel gain en le mettant en cache ?
Raison par défaut :
Le HTML est souvent vu comme du contenu dynamique, pouvant contenir des infos utilisateur — donc pas mis en cache. C'est cohérent : avec connexion, le HTML peut afficher nom d'utilisateur, données perso ; le CDN ne doit pas les servir à d'autres visiteurs.

Exemple forum : quelqu'un a activé le cache site entier ; wp-login.php a été mis en cache avec identifiants. Conséquence : n'importe quel visiteur pouvait accéder à l'admin WordPress via la page en cache.

Gains observés :
Sur Medium, après cache HTML : TTFB 500 ms → 100–160 ms, charge serveur −90 %. Avant, chaque visiteur tirait le HTML à l'origine (requête, BDD, rendu). Maintenant le CDN sert le HTML en cache ; l'origine ne bouge plus. Plus le trafic est fort, plus l'écart est visible.

Mon cas : hits 30 % → 90 %, TTFB ~500 ms → ~100 ms, charge −90 %.
Différence entre Page Rules et Cache Rules ? Comment migrer ?
Page Rules dépréciées :
• Depuis juillet 2024, les nouveaux comptes gratuits n'y ont plus accès
• En 2025, Cloudflare migre automatiquement les Page Rules existantes
• Toute nouvelle config passe par Cache Rules

Pourquoi ? Page Rules vieillissantes, peu flexibles, 3 règles max en gratuit — insuffisant pour des stratégies complexes.

Atouts Cache Rules :
• Plus puissantes
• Critères flexibles (chemin URI, extension, hostname, regex, combinaisons)

Différence majeure :
• Page Rules : il fallait choisir manuellement Cache Everything
• Cache Rules : Eligible for cache active l'équivalent de Cache Everything

J'ai cherché Cache Everything au début — l'option a été renommée.

Migration :
• Cloudflare migre en 2025 (automatique)
• Disable Security et Disable Performance ne migrent pas
• Eligible for cache ≈ Cache Everything, logique légèrement différente

Conseil : passer à Cache Rules maintenant.
Comment configurer 3 Cache Rules pour le cache site ? Ordre d'exécution ?
Règle 1 (priorité max) — bypass admin :
• Nom : Bypass Admin Pages
• When : Custom filter expression
• Field URI Path, Operator contains, Value /wp-admin
• Ajouter /wp-login.php, /admin/, /api/auth/, etc.
• Then : Bypass cache
• Priorité 1

Règle 2 — statiques :
• Nom : Cache Static Assets
• When : File extension, is in : jpg png gif css js woff woff2 ttf svg ico
• Then : Eligible for cache
• Edge TTL : Use cache-control header if present, use default Cloudflare caching behavior if not
• Priorité 2

Règle 3 — tout le reste :
• Nom : Cache Everything Else
• When : All incoming requests
• Then : Eligible for cache
• Edge TTL : Ignore cache-control header and use this TTL — 7 days
• Priorité 3

Ordre : priorité croissante (1 puis 2 puis 3). Admin jamais en cache, statiques avec TTL adapté, HTML forcé 1 semaine.
Les 3 modes Edge TTL : différences et choix ?
Mode 1 : Use cache-control header if present, bypass cache if not
• S'il y a Cache-Control, on suit ; sinon pas de cache
• Pour origine déjà bien configurée
• Trop strict si l'origine n'envoie rien

Mode 2 : Use cache-control header if present, use default Cloudflare caching behavior if not
• Cache-Control respecté, sinon règles Cloudflare par défaut
• Bon compromis pour la plupart des sites

Mode 3 : Ignore cache-control header and use this TTL
• Force le TTL choisi
• Sites statiques ou stratégie maîtrisée
• Recommandé pour le HTML (souvent sans Cache-Control ou no-cache)

TTL indicatif :
• Statiques : ~1 mois
• Articles blog HTML : ~1 semaine
• Pages produit : 1–3 jours
• Accueil : ~1 jour
• API : pas de cache ou 5 min

Gratuit : TTL minimum 2 h.
Comment vérifier que le cache fonctionne ? Améliorer le taux de hits ?
DevTools navigateur :
1. Chrome, F12, onglet Network
2. Ouvrir la page d'accueil
3. Cliquer le document HTML, onglet Headers

cf-cache-status :
• HIT : servi depuis le CDN
• MISS : origine cette fois, puis mis en cache
• DYNAMIC : non mis en cache
• BYPASS : bypass (souvent admin)
• EXPIRED : expiré, re-fetch origine

1re visite souvent MISS, 2e HIT. DYNAMIC/BYPASS permanent = config à revoir.

curl -I https://your-website.com — chercher cf-cache-status.

Analytics Cloudflare : Caching → Cache Hit Ratio. Avant 30 %, lendemain ~85 %, puis ~90 %.

Cibles : hits > 80 %, bande passante en baisse, requêtes CDN en hausse / origine en baisse.

Astuces : préchauffer le cache après publication, URLs uniformes, retirer les query strings inutiles (Transform Rules).
Contenu mis à jour après mise en cache ? Purge manuelle ?
Purge manuelle :
1. Console Cloudflare → Caching
2. Purge Cache
3. Purge Everything ou Custom Purge (URLs précises)

Je préfère Custom Purge. Purge Everything = pic de requêtes vers l'origine.

Astuce WordPress : plugin Cloudflare pour purge auto à la publication.

TTL trop long : titre d'article modifié, visiteurs voient l'ancien — penser au cache.

Solutions : TTL selon fréquence de mise à jour, purge après publication, plugins d'automatisation.

Edge TTL vs Browser TTL :
• Edge TTL : durée sur les nœuds CDN Cloudflare
• Browser TTL : durée dans le navigateur du visiteur

Sans Browser TTL, le navigateur redemande souvent au CDN. Régler Respect origin ou ~1 jour pour Browser TTL.

7 min de lecture · Publié le: 1 déc. 2025 · Mis à jour le: 27 juil. 2026

Commentaires

Connectez-vous avec GitHub pour laisser un commentaire

Easton BlogEaston Blog