Salta al contenuto principale
Sistemi Attivi
WP Planet — WordPress Cloud & Managed Services
Torna al MagazineSicurezza

Spam nei commenti WordPress: fermarlo senza uccidere la community

30 Ott 2026 — 12:45 8 min di lettura
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.

wp-config.php
// 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 );
Nota: La funzione ip_in_range non è nativa di WordPress — devi implementarla o usare una libreria. In alternativa, usa un plugin come Anti-Spam Bee che ha il filtro per IP e per paese. Non bloccare interi paesi (la Russia, la Cina) — blocchi utenti legittimi insieme agli spammer.

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:

wp-config.php
// 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;
} );
Nota: Il punteggio di reCAPTCHA v3 va da 0 (molto probabilmente bot) a 1 (molto probabilmente umano). Non bloccare sotto una soglia — metti in approvazione manuale. Bloccare i commenti con score basso rischia di bloccare utenti legittimi con VPN o connessioni lente. Una soglia di 0.5 è un buon compromesso.

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:

wp-config.php
// 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";
} );
Nota: Chiudere i commenti sui post vecchi (90 giorni) riduce drasticamente lo spam — i bot targetizzano i post con PageRank, che sono quasi sempre i post più vecchi. Le parole chiave bloccate vanno aggiornate periodicamente — gli spammer cambiano termini. Non esagerare: troppe parole chiave creano falsi positivi.

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.

Audit di sicurezza

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.

Audit di sicurezza
Condividi