L'essentiel
- Mesurez d'abord : temps de réponse du serveur (TTFB) et temps d'affichage dans le navigateur sont deux problèmes différents.
- Les causes les plus fréquentes : cache de pages inefficace, indexation mal configurée, tâches cron bloquées, robots trop nombreux, extensions coûteuses.
- Un serveur saturé ne prouve pas qu'il est trop petit : il peut aussi travailler pour rien.
- Toutes les commandes de ce guide sont en lecture seule.
Commencer par mesurer
« Le site est lent » recouvre des réalités très différentes. Avant toute action, notez précisément :
- Quelles pages : accueil, catégorie, fiche produit, recherche, panier, tunnel de commande, back-office.
- Quel temps : le temps de réponse du serveur (TTFB, le délai avant le premier octet) ou le temps d'affichage complet dans le navigateur.
- Quand : en permanence, aux heures de pointe, pendant les imports, la nuit lors des tâches planifiées.
- Pour qui : visiteur anonyme, client connecté, panier rempli, administrateur.
Si le TTFB est bon mais la page s'affiche lentement, le problème est côté navigateur : JavaScript, CSS, images, scripts tiers. Si le TTFB est mauvais, le problème est côté serveur ou application. Les outils de développement du navigateur et PageSpeed Insights suffisent pour faire cette première distinction.
Symptômes, causes possibles et premiers contrôles
| Symptôme | Causes possibles | Premiers contrôles |
|---|---|---|
| TTFB élevé sur presque toutes les pages | Cache de pages désactivé ou contourné, mode développeur en production, trop peu de processus PHP-FPM | Mode de déploiement, statut des caches, en-têtes de réponse, réglages PHP-FPM |
| Lenteur sur certaines catégories ou la recherche | Navigation à filtres très sollicitée, gros catalogue, moteur de recherche mal dimensionné, robots qui explorent les filtres | Journaux d'accès (URL avec paramètres), santé d'OpenSearch |
| Processeur ou mémoire au maximum | Robots, tâches cron qui se chevauchent, réindexations complètes répétées, requêtes SQL lentes | Journaux d'accès par user-agent, historique cron, journal des requêtes lentes |
| Erreurs 502 ou 504 | PHP-FPM saturé, délais d'attente trop courts entre Varnish, serveur web et PHP, scripts trop longs | Journaux du serveur web et de PHP-FPM, var/log/exception.log |
| Cache peu efficace | Blocs déclarés non cachables, paramètres d'URL qui multiplient les variantes, cookies mal gérés | Taux de succès du cache, recherche des blocs cacheable="false" |
| Index souvent invalides | Index en mode « à l'enregistrement » sur un gros catalogue, imports massifs, extensions qui invalident les index | Statut et mode des indexeurs |
| Commandes ou e-mails en retard | Cron arrêté ou bloqué, consommateurs de files de messages qui ne tournent pas | Table cron_schedule, liste des consommateurs, crontab du serveur |
| Back-office poussif | Grilles très volumineuses, extensions d'administration lourdes, base de données non optimisée | Pages concernées, journal des requêtes lentes |
| TTFB correct mais affichage lent | JavaScript et CSS lourds (thème Luma), images non optimisées, scripts tiers (chat, publicité, mesure) | PageSpeed Insights, onglet Réseau du navigateur, inventaire des scripts tiers |
Les causes listées sont des pistes fréquentes, pas un diagnostic : plusieurs peuvent se cumuler.
Commandes de diagnostic sans risque
Ces commandes, à lancer depuis la racine de Magento avec l'utilisateur du site, ne modifient rien :
bin/magento deploy:mode:show # doit indiquer "production"
bin/magento cache:status # tous les caches doivent être actifs (1)
bin/magento indexer:status # index valides ou en attente
bin/magento indexer:show-mode # "Update by Schedule" conseillé sur un gros catalogue
bin/magento queue:consumers:list # consommateurs de files de messages déclarés
Côté services, toujours en lecture seule :
curl -s 'http://localhost:9200/_cluster/health?pretty' # santé d'OpenSearch
varnishstat -1 -f MAIN.cache_hit -f MAIN.cache_miss # succès et échecs du cache Varnish
curl -sI https://www.votre-boutique.fr/ | grep -iE 'age|x-cache|cache-control'
Et pour les tâches planifiées, une requête SQL de lecture :
SELECT job_code, status, COUNT(*) AS nb, MAX(scheduled_at) AS dernier
FROM cron_schedule GROUP BY job_code, status ORDER BY nb DESC LIMIT 30;
Vider tous les caches, lancer une réindexation complète ou redémarrer des services aux heures de vente peut aggraver la situation. Ces actions se planifient, idéalement après un test en préproduction.
Le cache, premier suspect
Magento sert ses pages beaucoup plus vite quand elles viennent du cache de pages complètes. En production, Adobe recommande Varnish pour ce rôle ; Redis ou Valkey servent au cache applicatif et aux sessions. Un taux de succès faible a souvent une cause précise : un bloc de mise en page déclaré cacheable="false" rend toute la page non cachable, et des paramètres d'URL de campagne mal gérés multiplient les variantes d'une même page.
Le choix entre Redis et Valkey, comme les versions de chaque service, dépend de votre version de Magento : vérifiez la compatibilité dans notre tableau des versions.
Indexation, cron et files de messages
Magento recalcule en arrière-plan des index (prix, stocks, catégories, recherche). Sur un catalogue important, le mode « Update by Schedule » évite de recalculer à chaque enregistrement. Ce mode repose sur le cron : si le cron ne tourne plus, les index restent en retard, les e-mails ne partent pas et les tâches s'accumulent. Les files de messages, enfin, traitent certaines opérations de façon asynchrone grâce à des consommateurs qui doivent être lancés et surveillés.
Le trafic des robots
Une part importante des requêtes vient souvent de robots : moteurs de recherche, outils SEO, robots des assistants IA, aspirateurs de sites. Les pages à filtres de la navigation par couches sont leurs cibles favorites, car chaque combinaison de filtres crée une nouvelle URL. Avant d'agrandir le serveur, mesurez cette part dans les journaux d'accès. Notre guide Robots d'IA : autoriser, bloquer, mesurer détaille les règles à appliquer.
L'affichage dans le navigateur
Avec le thème historique Luma, le navigateur charge beaucoup de JavaScript avant d'afficher la page. Optimiser les images, réduire les scripts tiers et différer ce qui n'est pas indispensable donnent déjà des résultats. Pour aller plus loin, le thème Hyvä remplace la pile JavaScript de Luma par une approche beaucoup plus légère, au prix d'une adaptation du thème et des extensions.
Mesurer avant et après
Chaque action doit être jugée sur des mesures comparables : mêmes pages, mêmes conditions, même période de la journée. Notez le TTFB et l'affichage avant l'intervention, appliquez un seul changement à la fois, puis mesurez de nouveau. C'est la seule façon de savoir ce qui a réellement fonctionné.
Questions fréquentes
Ajouter de la mémoire au serveur suffit-il ?
Rarement à lui seul. Si la charge vient d'un cache inefficace, de robots ou de tâches en boucle, un serveur plus gros repousse le problème sans le régler. Mesurez d'abord ce qui consomme les ressources.
Varnish est-il obligatoire ?
Non, Magento dispose d'un cache de pages intégré, mais Adobe recommande Varnish en production pour les performances. Sur une boutique avec du trafic, la différence est généralement nette.
Passer à Hyvä règle-t-il la lenteur ?
Hyvä améliore l'affichage dans le navigateur. Il ne corrige pas un serveur lent, un cache mal configuré ou une base de données saturée. Les deux chantiers se complètent. Voir le thème Hyvä.
Notre audit Magento examine le code, la configuration, le serveur et l'affichage, puis priorise les corrections.