Le spam commentaires WordPress se stoppe en combinant trois actions : fermer les commentaires inutiles, ralentir les robots avec un champ honeypot et filtrer les messages avant leur enregistrement. Commencez par sauvegarder la base, activez la modération pour les nouveaux auteurs, puis ajoutez un filtre ciblé dans functions.php. Cette méthode réduit immédiatement les faux commentaires sans supprimer les vrais échanges.

Le spam n’est pas seulement une nuisance visuelle. Les messages peuvent contenir des liens vers des sites malveillants, remplir la base de données, déclencher des notifications et dégrader les performances de l’administration. Voici une méthode progressive, adaptée aux petits sites WordPress qui veulent agir avec ou sans extension.

Spam commentaires WordPress : comprendre le problème

Le spam commentaires WordPress désigne les commentaires automatisés ou frauduleux publiés sur des articles, des pages ou des produits. Les robots recherchent des formulaires accessibles, envoient des milliers de requêtes et tentent de faire passer un lien commercial ou malveillant pour un message légitime. Un commentaire marqué en attente reste moins dangereux qu’un commentaire publié, mais il consomme tout de même de l’espace et du temps de modération.

Les attaques suivent souvent un schéma simple. Un robot repère la route de commentaire, remplit le nom, l’adresse et le texte, puis répète l’opération depuis plusieurs adresses IP. Certains robots ralentissent leur cadence pour imiter un humain. D’autres réutilisent des listes de sites WordPress déjà identifiés. Le nombre de messages reçus ne mesure donc pas seulement la popularité du site, il révèle aussi son exposition.

Flux typique d’un spam :
1. Découverte d’un formulaire de commentaire
2. Envoi automatisé du nom, du courriel et du lien
3. Contournement des champs visibles
4. Mise en attente ou publication
5. Répétition depuis une autre adresse IP

Avant de modifier quoi que ce soit, exportez la base de données et notez les réglages actuels. Sur un site actif, évitez de supprimer en masse les commentaires sans examiner les faux positifs. La bonne protection est graduelle : elle bloque les signaux manifestement frauduleux et laisse une possibilité de revue pour les cas ambigus.

Fermer les commentaires sur les contenus qui n’en ont pas besoin

La première question est éditoriale : avez-vous besoin d’un commentaire sur chaque contenu ? Une page de contact, une politique de confidentialité ou un ancien article peut rester utile sans accepter de nouveaux messages. Dans WordPress, désactivez les commentaires pour les prochains articles dans les réglages de discussion, puis fermez les commentaires des contenus anciens qui attirent le plus de robots.

Cette mesure ne supprime pas les commentaires existants. Elle empêche seulement la création de nouveaux messages lorsque le formulaire est fermé. C’est important pour préserver l’historique et éviter une suppression irréversible. Pour une opération ponctuelle, utilisez l’édition rapide ou une requête contrôlée dans l’administration. Vérifiez ensuite le résultat sur la page publique.

// Fermer les commentaires sur les articles publiés depuis plus de 180 jours.
add_filter('comments_open', function ($open, $post_id) {
    $post = get_post($post_id);
    if (!$post || $post->post_type !== 'post') {
        return $open;
    }
    $age = time() - get_post_time('U', true, $post);
    return $age > 180 * DAY_IN_SECONDS ? false : $open;
}, 10, 2);

Ce code est un exemple à adapter. Si certains articles anciens doivent rester ouverts, utilisez une liste blanche basée sur leurs identifiants ou une catégorie. Testez d’abord sur un environnement de préproduction. Pour une gestion sans extension, notre guide sur la désactivation des commentaires WordPress sans plugin détaille les réglages complémentaires.

Activer la modération et les réglages natifs de WordPress

Les réglages natifs forment une barrière simple, souvent sous utilisée. Dans les réglages de discussion, demandez qu’un auteur ait déjà reçu un commentaire approuvé avant publication, imposez la modération lorsqu’un message contient plusieurs liens et ajoutez des mots fréquents dans la liste des commentaires indésirables. Ces règles ne sont pas un bouclier complet, mais elles déplacent une grande partie du bruit hors de la publication immédiate.

Évitez de bloquer un mot isolé trop courant. Un terme comme « offre », « site » ou « gratuit » peut apparaître dans un vrai commentaire. Préférez des expressions distinctives, des domaines récurrents ou des suites de caractères repérées dans vos journaux. Revoyez la liste après quelques jours et retirez les règles qui créent trop de faux positifs.

Réglages recommandés :
• Les commentaires doivent être approuvés manuellement au premier passage
• Modérer un commentaire qui contient au moins deux liens
• Ne pas publier automatiquement les nouveaux auteurs
• Mettre en indésirable les motifs observés dans les journaux
• Garder une période de fermeture pour les anciens articles

La modération ne doit pas devenir une boîte aux lettres oubliée. Consultez régulièrement les commentaires en attente, approuvez les messages légitimes et supprimez les indésirables. Un commentaire en attente conserve des données personnelles, donc appliquez aussi une durée de conservation cohérente avec votre politique de confidentialité.

Ajouter un honeypot sans gêner les visiteurs

Un honeypot est un champ invisible pour les visiteurs mais visible dans le HTML du formulaire. Un robot qui remplit automatiquement tous les champs le complète, ce qui permet de rejeter la requête. Le champ ne doit pas être caché avec un attribut qui le rend incohérent pour les technologies d’assistance. Utilisez une classe visuellement masquée accessible, puis refusez uniquement les soumissions qui contiennent une valeur dans ce champ.

add_action('comment_form_after_fields', function () {
    echo '<p class="comment-hp" aria-hidden="true">';
    echo '<label for="website_url">Laisser ce champ vide</label>';
    echo '<input type="text" id="website_url" name="website_url" value="" tabindex="-1" autocomplete="off">';
    echo '</p>';
});

add_filter('preprocess_comment', function ($commentdata) {
    if (!empty($_POST['website_url'])) {
        wp_die('Votre commentaire n’a pas pu être envoyé.', 'Commentaire refusé', ['response' => 400]);
    }
    return $commentdata;
});

Le honeypot bloque les robots basiques, pas les systèmes capables d’exécuter un navigateur ou de comprendre le formulaire. Il faut donc le considérer comme un signal parmi d’autres. Ajoutez une validation côté serveur et ne faites jamais confiance à une valeur envoyée par le navigateur. Le filtre preprocess_comment intervient avant l’insertion, ce qui évite de laisser le message indésirable dans la base.

Filtrer le spam avant l’enregistrement en base

Un filtre efficace examine plusieurs propriétés sans se limiter à l’adresse IP : présence d’un lien, longueur du message, fréquence d’envoi, nom incohérent, courriel jetable et répétition du même contenu. Le filtre doit rester parcimonieux. Bloquer tous les messages contenant une URL pénalise les lecteurs qui citent une documentation utile.

add_filter('preprocess_comment', function ($data) {
    $text = wp_strip_all_tags($data['comment_content'] ?? '');
    $links = preg_match_all('~https?://~i', $text);
    $name = trim((string) ($data['comment_author'] ?? ''));

    if ($links >= 4 || mb_strlen($text) < 8 || mb_strlen($name) < 2) {
        wp_die('Votre commentaire est en attente de vérification.', 'Modération', ['response' => 202]);
    }
    return $data;
});

Le code ci dessus illustre la logique, mais le statut HTTP 202 n’est pas toujours traité de la même façon par les hébergeurs et les navigateurs. En production, préférez une mise en attente via les fonctions WordPress ou une extension de sécurité éprouvée si votre trafic est important. Ne répondez pas avec un message qui révèle précisément la règle déclenchée, car cela aide les robots à l’ajuster.

Pour limiter les répétitions, calculez éventuellement une empreinte du texte normalisé et conservez la date de dernière soumission dans un transient. Ne stockez pas plus de données que nécessaire. Si vous bloquez une IP, prévoyez une expiration courte, car les réseaux mobiles et les connexions partagées peuvent regrouper plusieurs visiteurs légitimes.

Choisir une extension anti spam sans créer un nouveau risque

Une extension anti spam peut comparer les commentaires à des bases de réputation, détecter des comportements automatisés et réduire fortement la modération manuelle. Elle est utile lorsque le site reçoit de nombreux messages ou lorsque l’équipe ne veut pas maintenir du code. Choisissez un outil maintenu, documenté et compatible avec votre version de WordPress.

Examinez avant installation les données transmises à un service externe, la localisation du traitement, la conservation des adresses IP et la possibilité de récupérer les décisions. Une extension qui bloque bien mais envoie chaque commentaire à un tiers peut soulever une question de conformité. Lisez aussi les permissions demandées et le comportement en cas d’indisponibilité du service.

Grille de décision :
Petit site, peu de messages : réglages natifs + honeypot
Site éditorial actif : modération + extension réputée
Fort volume : extension + limitation de débit + journaux
Données sensibles : privilégier un traitement documenté et local
Toujours : sauvegarde, test de faux positifs et plan de retrait

Ne multipliez pas les extensions qui filtrent la même requête. Deux systèmes peuvent se contredire, ralentir le formulaire ou rendre le diagnostic impossible. Commencez avec une seule couche observable, mesurez les résultats, puis ajoutez une protection seulement si une faiblesse précise est confirmée.

Ralentir les robots avec le serveur et le cache

Lorsque le volume devient important, le problème n’est plus seulement le contenu des messages. Chaque requête consomme du PHP, une connexion à la base et parfois une notification. Une limitation de débit au niveau du serveur ou du pare feu réduit la charge avant l’exécution de WordPress. Configurez la règle avec prudence et excluez les besoins légitimes de votre site.

# Exemple indicatif, à adapter à votre hébergeur
<IfModule mod_evasive20.c>
    DOSPageCount 10
    DOSPageInterval 1
    DOSSiteCount 30
    DOSSiteInterval 1
</IfModule>

Les directives disponibles dépendent du serveur. N’ajoutez pas une configuration Apache sur un hébergement Nginx en espérant qu’elle fonctionne. Vérifiez les journaux, testez avec un compte non connecté et conservez une sauvegarde du fichier. Un mauvais réglage peut bloquer tout le site ou masquer un incident réel.

Le cache de page ne doit pas mettre en cache un formulaire avec un nonce expiré. Si vous utilisez un cache serveur, vérifiez que l’envoi de commentaire atteint bien WordPress et que les erreurs ne sont pas réécrites en page statique. Pour les problèmes généraux de performances, consultez notre guide sur le back office WordPress lent.

Surveiller les faux positifs et mesurer le résultat

Une protection sans mesure peut donner une fausse impression de sécurité. Suivez le nombre de commentaires reçus, mis en attente, marqués indésirables et approuvés. Comparez la période avant et après chaque changement. Si les messages légitimes disparaissent, baissez la sévérité d’une règle au lieu d’empiler une nouvelle extension.

SELECT comment_approved, COUNT(*) AS total
FROM wp_comments
WHERE comment_date_gmt >= '2026-07-01'
GROUP BY comment_approved
ORDER BY total DESC;

Le préfixe de table n’est pas toujours wp_, adaptez la requête et faites une sauvegarde avant toute opération. Les valeurs courantes indiquent approuvé, en attente ou indésirable, mais les extensions peuvent utiliser leur propre métadonnée. N’exécutez pas de suppression massive sur la seule base d’un mot clé.

Examinez aussi les journaux de serveur et les erreurs PHP. Une série de requêtes vers le même formulaire depuis des chemins différents peut signaler un robot distribué. À l’inverse, une hausse de faux positifs après l’activation d’un honeypot peut venir d’un thème ou d’un outil d’accessibilité qui remplit le champ. La vérification réelle compte plus que le nombre de blocages affiché par une extension.

Plan d’action en 30 minutes

Commencez par sauvegarder la base et identifier les articles qui reçoivent des messages. Fermez les commentaires anciens qui n’ont plus de valeur, activez la modération des nouveaux auteurs et ajoutez une règle uniquement pour les motifs observés. Ensuite, installez un honeypot testé sur mobile et avec un lecteur d’écran. Enfin, contrôlez les journaux et mesurez le volume pendant une semaine.

Checklist de remise en ordre :
□ Sauvegarde vérifiée et restauration possible
□ Commentaires anciens fermés quand c’est pertinent
□ Nouveaux auteurs soumis à modération
□ Honeypot validé sans bloquer un vrai visiteur
□ Règles de mots indésirables documentées
□ Journaux consultés après 24 heures
□ Faux positifs revus après 7 jours

Cette séquence évite la réaction excessive. Le but n’est pas de rendre le formulaire impossible à utiliser, mais de faire monter le coût pour les robots tout en gardant un chemin clair pour les lecteurs. Si le spam continue malgré ces mesures, examinez la limitation de débit et la réputation des IP avec votre hébergeur.

Sources

FAQ : spam commentaires WordPress

Comment supprimer définitivement le spam commentaires WordPress ?

Pour supprimer durablement le spam commentaires WordPress, combinez fermeture des contenus inutiles, modération des nouveaux auteurs, honeypot et limitation de débit. Une extension anti spam peut compléter ces protections si le volume est élevé, mais aucune méthode ne garantit zéro faux positif. Mesurez les commentaires légitimes avant de durcir une règle.

Peut-on bloquer le spam WordPress sans plugin ?

Oui, il est possible de réduire le spam WordPress sans plugin avec les réglages natifs, le filtre preprocess_comment, un honeypot et une règle serveur adaptée. Cette approche convient à un petit site, à condition de sauvegarder le code et de tester le formulaire après chaque modification.

Faut-il désactiver tous les commentaires WordPress ?

Non, il n’est pas nécessaire de désactiver tous les commentaires WordPress. Fermez seulement les contenus anciens, les pages qui n’ont pas besoin de discussion ou les sections qui reçoivent exclusivement du spam. Conservez les commentaires là où ils apportent une vraie valeur aux lecteurs.

Le honeypot bloque-t-il tous les robots ?

Non, un honeypot bloque surtout les robots qui remplissent automatiquement tous les champs. Un robot capable de comprendre la structure du formulaire peut l’éviter. Associez donc le honeypot à la modération, à une limitation de fréquence et à une analyse des signaux de spam.

Comment éviter de bloquer les vrais commentaires ?

Pour éviter de bloquer les vrais commentaires, ne basez pas votre décision sur un seul mot ou une seule adresse IP. Utilisez une mise en attente pour les cas ambigus, testez avec plusieurs navigateurs et examinez régulièrement les faux positifs. Les règles doivent être réversibles et documentées.

G
WP Admin Lab

Architecte web full-stack. WordPress, performance, data et sécurité. Notes de terrain, tests reproductibles et retours d'expérience.