500 000 contenus publiés en quinze ans d’existence, un thème bloc entièrement rebâti sur l’éditeur de site il y a deux ans, et des pages d’archive qui mettent plus de quatre secondes à se générer aux heures de pointe : voilà le point de départ de cet audit, mené sur un site de presse généraliste à fort trafic.
L’objectif n’était pas de réécrire le thème, mais d’identifier précisément où partait le temps de génération, à une échelle où chaque milliseconde gagnée se traduit en charge serveur réelle sur des dizaines de milliers de visiteurs simultanés.
Premier goulot : une Query Loop sur métadonnées non indexées
Le template archive-actualite.html affiche une Query Loop filtrée par une métadonnée personnalisée (meta_key stockant la rubrique éditoriale), utilisée en complément de la taxonomie standard pour des raisons historiques. Sur une table postmeta qui dépasse plusieurs millions de lignes à cette échelle, une requête filtrée sur une métadonnée non indexée spécifiquement se traduit par un scan de table conséquent à chaque appel.
Le profilage de la requête générée par WP_Query confirme le diagnostic : la clause meta_query ajoutée par le filtre pre_get_posts du thème provoque une jointure coûteuse, exécutée à chaque chargement de page d’archive, sans aucune mise en cache de résultat.
Deuxième goulot : un bloc de navigation reconstruit à chaque requête

Le bloc core/navigation utilisé dans header.html référence un menu de navigation stocké comme entité wp_navigation, correctement mis en cache par le cœur de WordPress dans la majorité des cas. Le profilage révèle ici qu’un filtre personnalisé, ajouté pour afficher un badge « nouveau » sur certaines rubriques du menu selon la date du dernier article publié, s’exécute à chaque rendu du bloc, sans aucune mise en cache de son résultat, alors même que ce badge ne change réellement que quelques fois par jour.
Troisième goulot : des patterns imbriqués sur plusieurs niveaux
La page d’accueil du site combine une douzaine de patterns imbriqués les uns dans les autres (bloc de mise en avant, colonnes de rubriques, encart abonnement), chacun déclenchant son propre lot de hooks render_block. À l’échelle d’une page d’accueil visitée plusieurs millions de fois par jour, la multiplication des hooks exécutés à chaque rendu de bloc représente une charge cumulée non négligeable, même quand chaque hook pris isolément reste rapide.
Les correctifs mis en œuvre
- Migration de la métadonnée de rubrique éditoriale vers la taxonomie native déjà en place, correctement indexée, avec un script de migration en arrière-plan exécuté via
wp-clisur l’ensemble des 500 000 contenus. - Mise en cache du résultat du filtre de badge de navigation, recalculé une seule fois toutes les quinze minutes via une tâche planifiée plutôt qu’à chaque requête.
- Fusion de plusieurs patterns de la page d’accueil en un nombre réduit de blocs de groupe, sans changer le rendu visuel, pour limiter le nombre de hooks déclenchés inutilement.
Résultats mesurés après correction
| Page | Avant | Après |
|---|---|---|
| Archive de rubrique | 4,1 s | 0,7 s |
| Page d’accueil | 1,9 s | 0,9 s |
Le temps de génération de la page d’archive de rubrique, la plus consultée du site après la page d’accueil, passe de 4,1 secondes à 0,7 seconde après la migration de la métadonnée vers la taxonomie native. La page d’accueil, moins affectée par le problème principal mais concernée par la multiplication des hooks, gagne également une seconde de génération moyenne.
Sur un site de cette taille, un profilage rapide vaut toujours mieux qu’une intuition d’optimisation : le goulot le plus coûteux n’était pas celui qu’on attendait au départ, mais une métadonnée héritée d’une ancienne architecture jamais nettoyée.
En résumé
À l’échelle de 500 000 contenus, les défauts d’architecture qui passent inaperçus sur un site plus modeste deviennent des goulots d’étranglement mesurables. Cet audit ne couvre volontairement ni la configuration du CDN d’images, gérée séparément par l’équipe infrastructure, ni les aspects liés à la monétisation publicitaire du site, hors périmètre de ce travail de profilage technique.