If you’re reading this, you’re likely tired of the conseils standard de performance WordPress. The usual routine—installing WP Rocket, adding an image optimizer plugin, and throwing in an asset manager—often leads to a paradox: vous installez des plugins pour accélérer votre site, mais les plugins eux-mêmes ajoutent du gonflement de base de données, des tâches cron en arrière-plan, et leurs propres charges CSS/JS.
The truth is, WordPress doesn’t need 15 performance plugins to load in under a second. True speed optimization happens at the metal layer—the server, the database, and the core code.
Dans ce guide, nous allons contourner entièrement l'écosystème des plugins. Nous allons optimiser WordPress en utilisant des configurations côté serveur, wp-config.php des ajustements, et des functions.php extraits de code.
1. Les fondations côté serveur (aucun PHP requis)
Avant de toucher une seule ligne de code WordPress, votre environnement serveur doit être fortement optimisé. Un serveur faible ne peut pas être corrigé par la mise en cache côté client.
Passer à PHP 8.1+
WordPress fonctionne sur PHP. Passer de PHP 7.4 à PHP 8.1 ou 8.2 peut entraîner une réduction de 20 à 30 % du temps d'exécution et une consommation de mémoire nettement inférieure. Action : Modifiez cela dans votre cPanel, Plesk, ou via CLI si vous gérez votre propre VPS.
Activer la compression au niveau du serveur (Brotli plutôt que Gzip)
Bien que Gzip soit standard, Brotli (développé par Google) offre des taux de compression environ 15 à 20 % meilleurs pour les fichiers texte (HTML, CSS, JS) pour le même coût CPU. Action (Nginx) : Assurez-vous que votre nginx.conf a Brotli activé :
brotli on;
brotli_comp_level 6;
brotli_types text/plain text/css application/javascript application/json image/svg+xml;
Implémenter le cache FastCGI (Nginx) ou le cache LiteSpeed
Au lieu d'utiliser un plugin de cache basé sur PHP (qui nécessite encore le chargement partiel de WordPress pour servir le cache), mettez en cache au niveau du serveur web. Le cache FastCGI de Nginx stocke le HTML généré dans la RAM ou sur le disque et le sert directement, contournant complètement PHP et MySQL pour les visiteurs anonymes.
2. Durcissement et allègement via wp-config.php
Le wp-config.php fichier est votre salle de contrôle. Par défaut, WordPress autorise certains comportements qui gonflent votre base de données au fil du temps.
Ajoutez ces extraits juste avant la /* That's all, stop editing! Happy publishing. */ ligne.
Limiter les révisions de publications
Par défaut, WordPress stocke un nombre infini de révisions de vos articles. Un article mis à jour 50 fois aura 50 copies dans votre wp_posts table de base de données, ralentissant considérablement les requêtes de base de données.
// Keep only the last 3 revisions
define( 'WP_POST_REVISIONS', 3 );
Optimiser l'intervalle de sauvegarde automatique
WordPress sauvegarde automatiquement toutes les 60 secondes. Si vous avez plusieurs éditeurs qui travaillent, cela martèle la base de données. Ralentissez-le.
// Change autosave from 60 seconds to 5 minutes
define( 'AUTOSAVE_INTERVAL', 300 );
Vider la corbeille plus rapidement
Les articles et commentaires supprimés restent dans la base de données pendant 30 jours. Réduisez ce délai pour garder la base de données allégée.
// Empty trash every 7 days
define( 'EMPTY_TRASH_DAYS', 7 );
3. The “Anti-Bloat” functions.php Extrait maître
Le noyau de WordPress injecte une grande quantité de scripts de support hérités, de liens de découverte et de styles en ligne dans votre <head> et <footer> par défaut.
To achieve maximum information gain over competitors, we won’t just tell you to “use a debloat plugin.” Here is the exact code to surgically remove the most common WordPress bloat.
Note: Add this to your Child Theme’s functions.php ou un mu-plugin drop-in.
/**
* The Ultimate WordPress Debloat Snippet
*/
add_action('init', function() {
// 1. Remove RSD, XMLRPC, and WLW links
remove_action('wp_head', 'rsd_link');
remove_action('wp_head', 'wlwmanifest_link');
add_filter('xmlrpc_enabled', '__return_false');
// 2. Remove WordPress version footprint (Security & Speed)
remove_action('wp_head', 'wp_generator');
// 3. Remove Shortlinks and REST API links from header
remove_action('wp_head', 'wp_shortlink_wp_head');
remove_action('wp_head', 'rest_output_link_wp_head');
// 4. Disable native Emojis (Saves 1 JS and 1 CSS HTTP Request)
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('wp_print_styles', 'print_emoji_styles');
remove_action('admin_print_scripts', 'print_emoji_detection_script');
remove_action('admin_print_styles', 'print_emoji_styles');
remove_filter('the_content_feed', 'wp_staticize_emoji');
remove_filter('comment_text_rss', 'wp_staticize_emoji');
remove_filter('wp_mail', 'wp_staticize_emoji_for_email');
// 5. Disable oEmbeds (If you don't embed external URLs automatically)
remove_action('wp_head', 'wp_oembed_add_discovery_links');
remove_action('wp_head', 'wp_oembed_add_host_js');
add_action('wp_footer', function() { wp_deregister_script('wp-embed'); });
});
/**
* 6. Remove Global Styles (WP 5.9+ Inline CSS Bloat)
*/
add_action('wp_enqueue_scripts', function() {
wp_dequeue_style('global-styles');
wp_dequeue_style('classic-theme-styles');
}, 100);
/**
* 7. Remove jQuery Migrate (If using modern themes/plugins)
*/
add_action('wp_default_scripts', function($scripts) {
if (!is_admin() && isset($scripts->registered['jquery'])) {
$script = $scripts->registered['jquery'];
if ($script->deps) {
$script->deps = array_diff($script->deps, ['jquery-migrate']);
}
}
});
/**
* 8. Throttle the Heartbeat API
* Prevents high CPU usage when leaving the WP Admin open
*/
add_filter('heartbeat_settings', function($settings) {
$settings['interval'] = 60; // Throttle to 60 seconds
return $settings;
});
Qu'avons-nous accompli ?
En ajoutant le code ci-dessus, vous avez instantanément éliminé jusqu'à 5 à 8 requêtes HTTP inutiles and removed dozens of lines of inline CSS/JS from every single page load—all without installing a single plugin.
4. Optimisation des médias (La manière difficile)
Les plugins comme Smush ou Imagify sont pratiques, mais ils exécutent le traitement d'images sur votre serveur PHP, consommant des ressources CPU.
Conversion manuelle en WebP/AVIF
Avant de télécharger une image sur WordPress, passez-la par un compresseur externe sans perte comme Squoosh.app (par Google) ou TinyPNG. Mieux encore, convertissez-les en .webp ou .avif formats localement avant de les télécharger.
Tirez parti du chargement différé natif
Depuis WordPress 5.5, le chargement différé natif est intégré. WordPress ajoute automatiquement loading="lazy" to your images. You don’t need a JavaScript-based lazy loading plugin. However, ensure your “above the fold” images (like your logo or hero image) DO NOT have this attribute, as it will delay the Largest Contentful Paint (LCP).
Vous pouvez supprimer le chargement différé pour la première image d'une page via functions.php:
add_filter( 'wp_get_attachment_image_attributes', function( $attr, $attachment, $size ) {
static $is_first_image = true;
if ( $is_first_image ) {
$attr['loading'] = 'eager'; // Force immediate load for LCP
$is_first_image = false;
}
return $attr;
}, 10, 3 );
5. Défragmentation de la base de données via phpMyAdmin
Optimization plugins usually feature a “Clean Database” button. You can do this natively at the database level.
- Connectez-vous à votre panneau d'hébergement et ouvrez phpMyAdmin.
- Sélectionnez votre base de données WordPress.
- Faites défiler jusqu'en bas, cochez Tout cocher.
- In the “With selected:” dropdown, choose Optimiser la table.
MySQL reconstruira les index de la table et récupérera l'espace inutilisé. Faites-le manuellement une fois par mois.
Le verdict
Optimizing WordPress without plugins isn’t just about saving money on premium subscriptions. It is a philosophy of réduire la dette technique. Every plugin you don’t install is a security vulnerability you don’t have to patch, a database table you don’t have to clean, and a PHP script your server doesn’t have to execute.
Déplacez la charge de travail vers le serveur (PHP 8.1+, Nginx FastCGI), imposez la discipline dans votre wp-config.php, et éliminez l'enflure du noyau en utilisant votre functions.php. Votre Time to First Byte (TTFB) et vos Core Web Vitals refléteront la différence.



