Spam nei commenti WordPress: fermarlo senza uccidere la community

Lo spam nei commenti non è solo fastidio — è un problema SEO (link spam penalizzano) e di risorse (migliaia di commenti gonfiano il database). Come fermarlo con Akismet, reCAPTCHA, e moderazione, senza rendere impossibile commentare per gli utenti reali.
Lo spam nei commenti è uno dei problemi più vecchi di WordPress — e uno dei più sottovalutati. Non è solo fastidio estetico: è un problema SEO e di risorse. I link spam nei commenti sono link uscenti verso siti malevoli, e Google li registra come segnale negativo. Mille commenti spam nel database gonfiano la tabella wp_comments e wp_commentmeta, rallentando le query. E se lo spam contiene contenuti illeciti o malevoli, è una responsabilità legale del proprietario del sito. Non è un problema da ignorare — è un problema da gestire.
Il primo errore è disabilitare del tutto i commenti. È la soluzione più facile e più sbagliata: i commenti sono un segnale di freschezza e engagement che Google apprezza, e su un blog o un magazine sono parte dell'esperienza. La soluzione giusta è filtrare lo spam senza bloccare gli utenti reali — e questo richiede più di un singolo strumento.
Akismet: il primo livello (non basta da solo)
Akismet è il plugin antispam di Automattic, gratuito per siti personali e a pagamento per commerciali. Funziona con un database cloud di pattern spam: quando un commento arriva, Akismet lo confronta con milioni di commenti spam noti e lo filtra. È efficace — filtra il 90% dello spam automatico — ma ha due limiti. Primo: non ferma lo spam manuale (commenti scritti da umani, non da bot). Secondo: ha falsi positivi — commenti legittimi che finiscono nello spam. Va attivato, ma non è sufficiente da solo.
// Configura Akismet per essere più aggressivo sui commenti con link
add_filter( 'akismet_comment_form_privacy_notice', '__return_false' );
// Personalizza la soglia di spam: commenti con più di 2 link
// sono quasi sempre spam
add_filter( 'pre_comment_approved', function( $approved, $commentdata ) {
// Conta i link nel contenuto del commento
$link_count = substr_count( $commentdata['comment_content'], 'http' );
if ( $link_count > 2 ) {
// Più di 2 link: metti in approvazione manuale
return 'hold';
}
// Verifica l'IP del commentatore contro una blacklist semplice
$ip = $commentdata['comment_author_IP'] ?? '';
$blocked_ranges = array(
'185.0.0.0/8', // range noto per spam
'193.0.0.0/8', // range noto per spam
);
foreach ( $blocked_ranges as $range ) {
if ( ip_in_range( $ip, $range ) ) {
return 'spam';
}
}
return $approved;
}, 10, 2 );reCAPTCHA: il secondo livello (con cautela)
Il reCAPTCHA di Google è il secondo livello di difesa. Il problema è che il reCAPTCHA v2 (il 'non sono un robot' con le immagini) è invasivo e penalizza l'accessibilità — gli screen reader non lo gestiscono bene, e gli utenti con disabilità visive non possono completarlo. Il reCAPTCHA v3 è invisibile (non richiede interazione) ma assegna un punteggio di rischio che tu decidi come usare.
Per WordPress, il modo più pulito è il reCAPTCHA v3 sul form dei commenti, con una soglia di rischio configurabile:
// Aggiungi reCAPTCHA v3 al form dei commenti
add_action( 'comment_form', function() {
$site_key = get_option( 'recaptcha_site_key' );
if ( ! $site_key ) return;
?>
<script src="https://www.google.com/recaptcha/api.js?render=<?php echo esc_attr( $site_key ); ?>"></script>
<script>
grecaptcha.ready(function() {
grecaptcha.execute('<?php echo esc_attr( $site_key ); ?>', {action: 'comment'}).then(function(token) {
var input = document.createElement('input');
input.type = 'hidden';
input.name = 'g-recaptcha-response';
input.value = token;
document.getElementById('commentform').appendChild(input);
});
});
</script>
<?php
} );
// Verifica il token reCAPTCHA lato server
add_filter( 'preprocess_comment', function( $commentdata ) {
$token = $_POST['g-recaptcha-response'] ?? '';
if ( empty( $token ) ) {
wp_die( 'Verifica reCAPTCHA fallita. Riprova.' );
}
$secret = get_option( 'recaptcha_secret_key' );
$response = wp_remote_post( 'https://www.google.com/recaptcha/api/siteverify', array(
'body' => array(
'secret' => $secret,
'response' => $token,
),
) );
$result = json_decode( wp_remote_retrieve_body( $response ), true );
if ( ! $result['success'] || $result['score'] < 0.5 ) {
// Score basso: metti in approvazione manuale, non bloccare
$commentdata['comment_approved'] = 0;
}
return $commentdata;
} );La moderazione: il terzo livello (umano)
Nessun filtro automatico è perfetto. L'ultimo livello è la moderazione umana — e WordPress ha gli strumenti per renderla efficiente. Imposta le opzioni di moderazione in Impostazioni → Discussione:
// Configura le opzioni di moderazione commenti
// (in wp-config.php o functions.php del tema child)
// Metti in approvazione manuale i commenti con link
add_filter( 'option_comment_max_links', function() {
return 2; // più di 2 link = approvazione manuale
} );
// Chiudi automaticamente i commenti sui post più vecchi di 90 giorni
add_filter( 'option_close_comments_for_old_posts', '__return_true' );
add_filter( 'option_close_comments_days_old', function() {
return 90;
} );
// Parole chiave che mettono automaticamente in spam
add_filter( 'option_disallowed_keys', function() {
return "casino\ngambling\nviagra\ncialis\nloans\nmortgage\nweight loss\nSEO service\nbacklink";
} );Lo spam nei commenti è una battaglia di logoramento — non si vince una volta per tutte, si gestisce nel tempo. La combinazione di Akismet (automatico), reCAPTCHA v3 (punteggio), e moderazione umana (decisione finale) è il setup che vediamo funzionare meglio. Disabilitare i commenti è l'ultima spiaggia, non la prima — e quasi mai è necessaria se i tre livelli sono configurati bene.
Verifica la sicurezza del tuo WordPress prima che diventi un'emergenza.
Un audit di sicurezza individua le falle, i plugin vulnerabili e le configurazioni deboli prima che qualcuno le sfrutti.
Articoli correlati

Autenticazione a due fattori su WordPress: perché il 2FA è l'unico vero upgrade di sicurezza
Leggi
Two-factor authentication WordPress: perché la password non basta più
Leggi
