Hébergement WooCommerce : pourquoi une boutique ne se dimensionne pas comme un site vitrine
Un hébergement WooCommerce se dimensionne à partir de trois chiffres que vous connaissez déjà : le nombre de produits, déclinaisons comprises, les visites par jour et les commandes par jour. Un site vitrine WordPress sert à tous les mêmes pages, qu’un cache renvoie sans exécuter PHP. Une boutique WooCommerce fabrique à chaque visite des pages propres au client : panier, commande, compte, recherche, stocks. Ces pages passent par PHP et par la base de données à chaque appel, et ce sont elles qui fixent le besoin en ressources.
Ce guide donne une méthode, des paliers indicatifs et les réglages à contrôler avant d’acheter des ressources. Il ne reprend pas le paramétrage de la boutique, couvert par le guide pour configurer WooCommerce et sécuriser le parcours de paiement, ni la méthode de diagnostic d’un ralentissement, décrite dans le guide pour améliorer la performance d’une boutique et traiter les incidents.
Les sept postes qui consomment sur une boutique WooCommerce
- PHP : chaque page non mise en cache occupe un processus PHP-FPM pendant sa génération, souvent de 300 ms à plus d’une seconde.
- Base de données : attributs, variations, prix et stocks lus à chaque affichage ; commandes, sessions et tâches écrites en continu.
- Panier, commande et compte client : exclus du cache par construction, la part la plus coûteuse du trafic, et la plus rentable.
- Recherche et filtres : ils parcourent les tables de métadonnées, lentes au-delà de quelques milliers de produits.
- Extensions : chacune s’exécute à chaque page, qu’elle serve ou non à cette page.
- Tâches planifiées : WP-Cron et l’Action Scheduler de WooCommerce tournent sur les mêmes ressources que vos visiteurs.
- Images : chaque photo envoyée est déclinée en plusieurs tailles, une opération lourde en processeur et en écriture disque.
Ce que consomme réellement une boutique : PHP, base de données, cron et images
Le tableau relie chaque poste à ce qui le fait grossir et à la ressource qu’il sollicite ; la section sur les signes de saturation indique où le constater.
| Poste | Ce qui le fait grossir | Ressource sollicitée |
|---|---|---|
| Génération PHP | Pages non cachées par minute, nombre d’extensions, thème lourd, appels à des API externes | Processeur, mémoire, processus simultanés |
| Base de données | Produits variables (une ligne par attribut dans wp_postmeta), options chargées automatiquement, historique de commandes, table de l’Action Scheduler | Mémoire, entrées-sorties |
| Panier et commande | Part de visiteurs qui ajoutent au panier, campagnes qui envoient vers un produit | Processeur et processus simultanés aux heures de pointe |
| Recherche et filtres | Nombre de produits et d’attributs, filtres combinés | Processeur et entrées-sorties de la base |
| Tâches planifiées | Synchronisations ERP ou places de marché, e-mails, abonnements | Processeur et base, souvent en journée |
| Images | Imports massifs, régénération des miniatures, conversion WebP | Processeur, écriture disque, espace |
Deux points sont souvent oubliés. D’abord, la base de données grossit même sans nouveau produit : chaque commande, chaque session et chaque action planifiée y écrivent des lignes. Une boutique qui fait 30 commandes par jour depuis trois ans en compte plus de 30 000, à parcourir dès qu’un employé ouvre la liste des commandes. Le stockage des commandes dans des tables dédiées (HPOS, « High-Performance Order Storage »), activé par défaut pour les nouvelles boutiques depuis WooCommerce 8.2, réduit nettement ce coût ; une boutique ancienne doit vérifier qu’elle l’utilise.
Ensuite, les tâches de fond ne sont presque jamais comptées. Un connecteur qui synchronise les stocks toutes les cinq minutes consomme en pleine journée, sur le même compte que les clients qui commandent, et compte dans vos limites comme une visite.
Quel hébergement pour WooCommerce : les paliers selon le catalogue, les visites et les commandes
Il n’existe pas de chiffre universel : 500 produits variables pèsent plus que 5 000 produits simples, et une boutique qui vend par newsletter concentre son trafic en une heure. Les paliers ci-dessous sont des ordres de grandeur observés en général ; retenez le palier le plus élevé atteint par l’un des trois critères, puis ajustez après un mois de mesures.
| Profil | Produits (déclinaisons comprises) | Visites par jour | Commandes par jour | Ressources à viser | Formule NovaHoster adaptée |
|---|---|---|---|---|---|
| Lancement | Jusqu’à 300 | Jusqu’à 500 | Jusqu’à 10 | PHP 8 en FPM avec OPcache, 2 à 4 Go de mémoire, NVMe, cache de pages | Hébergement e-commerce : ressources garanties, Plesk, sauvegardes quotidiennes |
| Établie | 300 à 3 000 | 500 à 3 000 | 10 à 50 | Plus de processus PHP simultanés, 4 Go ou plus, cron serveur, HPOS activé | Formule e-commerce supérieure, ressources garanties plus larges |
| Croissance ou multicanal | 3 000 à 20 000 | 3 000 à 15 000 | 50 à 300 | 4 à 8 processeurs logiques, 8 à 16 Go, base de données réglée pour la boutique, cache objet Redis | Serveur VPS réservé à la boutique, avec infogérance serveur |
| Gros catalogue ou forte saisonnalité | Plus de 20 000 | Plus de 15 000, ou pics à dix fois le trafic habituel | Plus de 300 | 8 processeurs et plus, 32 Go et plus, base de données isolée, surveillance permanente | Serveur dédié avec infogérance |
Estimer la charge réelle : raisonner en pages dynamiques par seconde
Le dimensionnement se fait sur l’heure de pointe, pas sur la moyenne de la journée.
- Relevez les pages vues sur la meilleure heure du mois dans votre outil de statistiques.
- Estimez la part qui échappe au cache : panier, commande, compte, recherche, et toute page vue par un visiteur ayant un article au panier ; souvent entre un quart et la moitié.
- Mesurez trois fois le temps de génération de la page Panier :
curl -o /dev/null -s -w "%{time_starttransfer}\n" https://votre-boutique.fr/panier/. - Multipliez les pages dynamiques par seconde par ce temps : c’est le nombre moyen de processus PHP occupés. Prévoyez trois à cinq fois cette valeur pour les rafales.
Exemple : 3 000 pages vues sur l’heure de pointe, dont 40 % dynamiques, soit 0,33 page par seconde ; à 900 ms de génération, un processus PHP est occupé en moyenne, donc quatre à cinq à prévoir. Le même calcul montre pourquoi la boutique s’effondre quand une newsletter envoie 2 000 personnes en dix minutes sur une page produit.
Ce qu’un cache ne règle pas : panier, paiement et compte client
Un cache de pages enregistre le HTML d’une page et le renvoie aux visiteurs suivants sans exécuter PHP. Il est très efficace sur l’accueil, les catégories et les fiches produit pour un visiteur anonyme, et il améliore le TTFB et le LCP décrits dans le guide sur la vitesse de site et les Core Web Vitals côté hébergement. Mais il ne peut rien pour ce qui est propre à une personne.
WooCommerce dépose des cookies dès qu’un visiteur ajoute un article : woocommerce_items_in_cart, woocommerce_cart_hash et wp_woocommerce_session_…. Sa documentation sur les caches demande d’exclure les pages Panier, Commande et Mon compte, et la plupart des caches contournent aussi toute page demandée avec ces cookies. Un visiteur qui a un article au panier voit donc toutes ses pages générées par PHP, catégories comprises. Plus votre boutique convertit, plus la part non cachée augmente.
Ce qui reste dynamique quoi qu’il arrive
- Le panier, la commande, le compte client et la page de confirmation.
- Les requêtes
?wc-ajax=…émises par le thème pour rafraîchir le mini-panier, parfois à chaque page. - Les résultats de recherche, les filtres à combinaisons libres, les webhooks de paiement et toute page vue par un utilisateur connecté.
Dimensionnez donc votre hébergement WooCommerce sur ce trafic dynamique. Le cache allège la vitrine ; il ne remplace jamais les processus PHP et la base de données nécessaires au moment où vos clients paient. Un cache objet (Redis ou Memcached) aide davantage ici, mais il demande un service dédié, disponible en général sur un VPS ou un serveur dédié.
Signes de saturation et où les lire dans Plesk
Sur un hébergement mutualisé ou e-commerce NovaHoster, chaque compte est encadré par CloudLinux : les limites LVE fixent le processeur, la mémoire, les entrées-sorties et les processus disponibles. Le guide pour comprendre CloudLinux, LVE et CageFS explique le mécanisme. Dans Plesk, ouvrez Sites web & domaines, puis la rubrique d’utilisation des ressources de l’extension CloudLinux (le libellé varie selon la version) ; les journaux sont dans Journaux.
| Indicateur LVE | Ce qu’il mesure | Symptôme sur la boutique | Cause fréquente |
|---|---|---|---|
| CPU (SPEED) | Part de processeur consommée | Toutes les pages ralentissent ensemble aux heures de pointe | Trop de pages dynamiques, extensions lourdes, import en journée |
| Mémoire physique (PMEM) | Mémoire utilisée par vos processus | Erreurs « Allowed memory size exhausted », pages blanches | memory_limit élevé multiplié par trop de processus |
| Entrées-sorties (IO, IOPS) | Débit et opérations disque | Lenteur pendant sauvegardes et imports d’images | Régénération des miniatures, base volumineuse, journal de debug actif |
| Processus d’entrée (EP) | Requêtes web simultanées | Erreurs 503 ou 508 « Resource Limit Is Reached » pendant un pic | Rafale de trafic, requêtes wc-ajax trop fréquentes, robots |
| Processus (NPROC) | Processus totaux du compte | Tâches cron qui échouent, sauvegarde refusée | Tâches planifiées qui se chevauchent |
Distinguez une limite touchée ponctuellement, pendant une sauvegarde nocturne, d’une limite atteinte chaque jour aux mêmes heures : seule la seconde justifie un changement de palier. Les compteurs d’incidents (« faults ») le montrent mieux qu’une courbe.
PHP-FPM et back-office : les signes hors compteurs
- Le journal PHP-FPM contient
server reached pm.max_children setting: toutes les places PHP sont prises, les visiteurs voient des 502 ou 504. - La liste des commandes ou l’édition d’un produit variable met plus de cinq secondes : la base de données est le goulot, pas le processeur.
- Dans WooCommerce > État > Actions planifiées, les actions en retard se comptent par centaines et les e-mails de confirmation partent en retard : les tâches de fond ne suivent plus.
Réglages à vérifier sur un hébergement WooCommerce avant d’ajouter des ressources
Avant de changer de formule, contrôlez les réglages ci-dessous, dans Paramètres PHP du domaine sous Plesk ou dans wp-config.php, après une sauvegarde. Beaucoup de boutiques signalées comme sous-dimensionnées retrouvent de la marge avec ces seules corrections.
| Réglage | Valeur à viser | Pourquoi |
|---|---|---|
| Version de PHP | Branche 8.x maintenue, mode FPM | Plus rapide à chaque branche ; FPM garde des processus prêts |
| OPcache | opcache.enable = On, 128 Mo ou plus | Évite de recompiler des milliers de fichiers PHP à chaque page |
memory_limit et WP_MEMORY_LIMIT | 256M, 512M si imports ou extensions lourdes | Les prérequis serveur de WooCommerce demandent 256 Mo au moins ; WooCommerce > État doit afficher cette valeur |
upload_max_filesize et post_max_size | 64M, la seconde au moins égale à la première | Imports CSV, archives d’extensions, photos haute définition |
max_execution_time | 120 s, davantage le temps d’un import | Évite les imports coupés à mi-chemin |
| WP-Cron | Désactivé, remplacé par une tâche planifiée Plesk toutes les 5 minutes | WP-Cron dépend des visites : irrégulier à faible trafic, coûteux à fort trafic |
| Stockage des commandes | HPOS activé (WooCommerce > Réglages > Avancé > Fonctionnalités) | Les commandes quittent wp_posts et wp_postmeta pour des tables indexées |
Remplacer WP-Cron par un cron serveur dans Plesk
WordPress exécute ses tâches planifiées au passage d’un visiteur : à 3 h du matin, les e-mails attendent ; à 11 h un jour de soldes, chaque visiteur peut déclencher un lot de traitements. La documentation développeur de WordPress décrit la bascule.
- Ajoutez dans
wp-config.php, avant la ligne « That's all, stop editing » :define( 'DISABLE_WP_CRON', true ); define( 'WP_MEMORY_LIMIT', '256M' ); - Dans Plesk, Sites web & domaines > Tâches planifiées > Ajouter une tâche, choisissez Exécuter un script PHP, indiquez
httpdocs/wp-cron.phpet une exécution toutes les cinq minutes (*/5 * * * *). - Vérifiez dans WooCommerce > État > Actions planifiées que les actions en retard redescendent dans l’heure.
La constante WP_MEMORY_LIMIT fixe la limite que WordPress s’autorise, indépendamment de celle de PHP : si WooCommerce > État affiche 40 Mo alors que Plesk indique 256M, c’est elle qui manque.
WooCommerce lent malgré des ressources suffisantes : regarder du côté du site
Si les compteurs LVE restent loin des limites et que la boutique est quand même lente, ajouter des ressources ne changera rien : le temps se perd dans le code ou à l’extérieur du serveur. Les causes les plus fréquentes :
- Une extension qui interroge une API externe à chaque page (taux de change, avis, transporteur) et attend sa réponse.
- Un thème ou un constructeur de pages qui charge tous ses modules partout.
- Des options chargées automatiquement dans
wp_optionsqui dépassent plusieurs mégaoctets, lues à chaque requête. - Une table de l’Action Scheduler jamais purgée, ou la recherche native sur plus de 5 000 produits sans extension d’indexation.
La méthode de tri, extension par extension et page statique contre page dynamique, est dans le guide pour diagnostiquer une boutique e-commerce lente. L’hébergement n’est en cause que si un simple fichier texte posé à la racine du site répond lui aussi lentement.
Quand passer d’un hébergement e-commerce à un VPS ou à un serveur dédié avec infogérance
Le passage à un serveur réservé se décide sur des faits mesurés. Il est justifié quand :
- les limites LVE de processeur ou de processus d’entrée sont atteintes chaque jour ouvré, après application des réglages ci-dessus ;
- la boutique dépasse 50 commandes par jour en régime courant, ou 300 pendant les campagnes, et le back-office devient inutilisable ;
- vous avez besoin d’un service absent du mutualisé : cache objet Redis, moteur de recherche dédié, base de données réglée pour votre volume ;
- vos campagnes multiplient le trafic par dix en quelques minutes.
VPS ou serveur dédié : ce qui change concrètement
Sur un serveur VPS, la boutique dispose de son propre PHP-FPM, de sa propre instance MariaDB et de la mémoire pour un cache objet : c’est le palier d’une boutique en croissance. Les VPS NovaHoster sont hébergés en Roumanie, en Moldavie ou en Russie : si la localisation des données de vos clients dans l’Union européenne est une exigence, vérifiez ce point avant de commander. Le serveur dédié NovaHoster est, lui, hébergé en France (Gravelines, Roubaix ou Strasbourg) avec des ressources matérielles exclusives ; c’est le palier des gros catalogues et des boutiques dont une heure d’arrêt coûte plus que l’abonnement annuel. Le guide pour choisir entre mutualisé, VPS et serveur dédié compare les trois modèles, coûts complets compris.
Dans les deux cas, quelqu’un doit administrer le système : mises à jour de sécurité, surveillance, sauvegardes, intervention de nuit en cas d’incident. C’est le rôle de l’infogérance serveur, incluse chaque année avec un serveur dédié NovaHoster et proposée en option sur VPS. Sans elle, le gain de performance se paie en heures d’administration et en risque de sécurité.
Liste de contrôle avant une campagne : soldes, newsletter, Black Friday
Une campagne ne crée pas de nouveaux problèmes : elle révèle ceux que le trafic habituel masquait. Cette liste se parcourt en deux heures, deux semaines avant la date, puis la veille.
Deux semaines avant
- Relevez les compteurs LVE du dernier pic : si une limite a été touchée, traitez-la maintenant.
- Vérifiez la version de PHP, OPcache,
memory_limitet le cron serveur. - Activez HPOS, purgez les actions terminées de l’Action Scheduler, supprimez les extensions inactives.
- Mesurez le temps de réponse des pages Panier et Commande avec
curl, trois fois : ce sont vos références. - Passez une commande de test complète en mode test du prestataire, comme décrit dans le guide pour configurer WooCommerce.
- Estimez le trafic attendu (base e-mail multipliée par le taux d’ouverture habituel, concentré sur la première heure) et comparez-le au palier de votre formule.
La veille
- Confirmez qu’une sauvegarde complète et récente existe hors de l’hébergement, et que vous savez la restaurer.
- Gelez les mises à jour de WordPress, du thème et des extensions jusqu’au lendemain ; déplacez imports et synchronisations hors des heures de la campagne.
- Vérifiez que le cache de pages est actif sur l’accueil et les catégories, et exclu du panier et de la commande.
- Prévenez le support 7j/7 depuis l’Espace client avec le domaine, l’heure et le trafic attendu.
Pendant et après
- La première heure, surveillez les compteurs LVE et la page Commande dans une fenêtre privée, toutes les dix minutes. En cas de 503 ou 508 répétés, désactivez d’abord le rafraîchissement
wc-ajaxdu mini-panier si le thème le permet, puis les extensions non indispensables ; ne touchez pas au paiement. - Le lendemain, comparez la page Panier à vos références et notez le trafic réel : c’est la donnée qui dimensionnera la campagne suivante et, le cas échéant, le changement de palier.
Questions fréquentes
Quel hébergement choisir pour une boutique WooCommerce qui démarre ?
Pourquoi ma boutique WooCommerce est lente alors que les tests de vitesse sont bons ?
Combien de visites par jour supporte un hébergement WooCommerce mutualisé ?
Comment savoir si mon hébergement WooCommerce est saturé ?
Faut-il désactiver WP-Cron sur une boutique WooCommerce ?
Quelle mémoire PHP pour WooCommerce ?
Quand passer WooCommerce sur un VPS ou un serveur dédié ?
Un cache suffit-il pour accélérer une boutique WooCommerce ?
Guides liés
Pour aller plus loin sur le même sujet, et sur ce qui l’entoure :
Sources techniques
[1] WooCommerce — Server Requirements [2] WooCommerce — Configuring Caching Plugins [3] WordPress Developer Resources — Hooking WP-Cron Into the System Task Scheduler [4] WordPress Developer Resources — Editing wp-config.php [5] Plesk — Customer’s Guide : PHP Settings
Les options visibles et les formules dépendent de votre abonnement. Faites vérifier le contexte depuis l’Espace client, sans transmettre de mot de passe.
Demander une vérification