Guide de diagnostic

Pourquoi ma boutique Magento est lente

Une boutique Magento lente a rarement une seule cause. Avant d'ajouter de la mémoire ou de changer de serveur, il faut savoir où le temps se perd : dans le serveur, l'application, la base de données, le cache ou le navigateur. Voici comment le découvrir sans rien casser.

Mis à jour le Temps de lecture : 9 minMagento 2.4

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

Diagnostic d'une boutique Magento 2 lente
SymptômeCauses possiblesPremiers contrôles
TTFB élevé sur presque toutes les pagesCache de pages désactivé ou contourné, mode développeur en production, trop peu de processus PHP-FPMMode de déploiement, statut des caches, en-têtes de réponse, réglages PHP-FPM
Lenteur sur certaines catégories ou la rechercheNavigation à filtres très sollicitée, gros catalogue, moteur de recherche mal dimensionné, robots qui explorent les filtresJournaux d'accès (URL avec paramètres), santé d'OpenSearch
Processeur ou mémoire au maximumRobots, tâches cron qui se chevauchent, réindexations complètes répétées, requêtes SQL lentesJournaux d'accès par user-agent, historique cron, journal des requêtes lentes
Erreurs 502 ou 504PHP-FPM saturé, délais d'attente trop courts entre Varnish, serveur web et PHP, scripts trop longsJournaux du serveur web et de PHP-FPM, var/log/exception.log
Cache peu efficaceBlocs déclarés non cachables, paramètres d'URL qui multiplient les variantes, cookies mal gérésTaux de succès du cache, recherche des blocs cacheable="false"
Index souvent invalidesIndex en mode « à l'enregistrement » sur un gros catalogue, imports massifs, extensions qui invalident les indexStatut et mode des indexeurs
Commandes ou e-mails en retardCron arrêté ou bloqué, consommateurs de files de messages qui ne tournent pasTable cron_schedule, liste des consommateurs, crontab du serveur
Back-office poussifGrilles très volumineuses, extensions d'administration lourdes, base de données non optimiséePages concernées, journal des requêtes lentes
TTFB correct mais affichage lentJavaScript 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;
À éviter en production

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ä.

Besoin d'un diagnostic complet ?

Notre audit Magento examine le code, la configuration, le serveur et l'affichage, puis priorise les corrections.