WordPress spam de comentários: como proteger sites de clientes

Spam de comentários em WordPress não é apenas uma nuisance — tem impacto real em performance, SEO e reputação dos sites dos seus clientes. Comentários de spam consomem recursos do servidor, podem introduzir links maliciosos e sinalizam ao Google que o site tem conteúdo de baixa qualidade. Este guia cobre a estratégia completa de proteção, da configuração básica às técnicas avançadas.

Porque o spam de comentários é um problema técnico sério

Além do óbvio (comentários indesejados), o spam de comentários tem consequências técnicas:

  • Performance: cada comentário spam submetido gera carga no servidor — PHP, base de dados, potencialmente email. Sites com centenas de tentativas diárias de spam sentem o impacto.
  • SEO: comentários aprovados acidentalmente com links para sites maliciosos funcionam como outbound links para bad neighborhoods. O Google penaliza sites que linkam para conteúdo spam.
  • Base de dados: a tabela wp_comments pode crescer para dezenas de milhares de entradas com spam em moderação, aumentando o tamanho da base de dados e abrandando queries.
  • Segurança: alguns ataques usam o formulário de comentários como vetor — injeção de código via campos de comentário, ou uso dos comentários como canal de exfiltração.

Avaliar se os comentários são necessários

A primeira decisão — e muitas vezes a mais correta — é desativar comentários completamente. Para a maioria dos sites institucionais, portfolios e lojas WooCommerce, os comentários de blog não trazem valor. Se o cliente não lê nem responde aos comentários, não faz sentido tê-los ativos.

Desativar comentários globalmente

Em Settings → Discussion, desative "Allow people to submit comments on new posts". Para posts existentes, use WP-CLI:

wp post list --post_type=post --format=ids | xargs -I {} wp post update {} --comment_status=closed

Ou via SQL (mais rápido para grandes volumes):

UPDATE wp_posts SET comment_status = 'closed' WHERE post_type = 'post';

Desativar para posts antigos automaticamente

Settings → Discussion: ative "Automatically close comments on posts older than X days". Posts com mais de 30-60 dias raramente recebem comentários legítimos — mas são alvo preferido de spam bots que procuram páginas menos monitorizadas.

Akismet: a camada base obrigatória

Se os comentários estão ativos, o Akismet é a base incontornável. O serviço analisa cada comentário contra uma base de dados global de spam e classifica-o automaticamente. Graças ao volume de dados que processa, a taxa de deteção é elevada.

Configuração correcta do Akismet:

  1. Obtenha uma API key em akismet.com (gratuita para uso pessoal, pago para uso comercial — verifique os termos)
  2. Instale e ative o plugin Akismet Anti-Spam
  3. Configure a API key em Settings → Akismet Anti-Spam
  4. Ative "Silently discard the worst and most pervasive spam" para reduzir a carga na base de dados

Importante para agências: o Akismet gratuito não é licenciado para uso em sites comerciais. Para clientes com negócios, use um plano Akismet pago ou avalie alternativas (Antispam Bee, WPBruiser).

Antispam Bee: alternativa gratuita e compatível com GDPR

O Antispam Bee é uma alternativa popular ao Akismet, especialmente para contexto europeu onde a privacidade é crítica. Não envia dados para servidores externos — processa tudo localmente. Funcionalidades principais:

  • Deteção de spam por país (bloquear comentários de países sem audiência do cliente)
  • Verificação de spam via base de dados local
  • Bloquear comentários em posts muito antigos
  • Deteção de links em comentários de utilizadores novos
  • BBCode spam detection

Para sites de clientes portugueses sem audiência internacional, configurar o Antispam Bee para bloquear comentários de fora de Portugal e Espanha elimina a maioria do spam automaticamente.

reCAPTCHA e proteções no formulário

Google reCAPTCHA v3

O reCAPTCHA v3 avalia comportamento do utilizador sem mostrar desafios visuais. Integrar com o formulário de comentários WordPress requer um plugin (ex: WP reCaptcha Integration) ou código personalizado. É eficaz mas adiciona dependência de Google — considere o impacto em GDPR.

Honeypot fields

Um campo oculto no formulário (via CSS display:none) que utilizadores legítimos nunca preenchem, mas bots automatizados preenchem. Se o campo tem valor, o comentário é spam. É simples, não tem dependências externas e não afeta a experiência do utilizador:

// Adicionar ao functions.php ou plugin personalizado
add_action('comment_form', function() {
    echo '<input type="text" name="comment_trap" style="display:none" tabindex="-1" autocomplete="off">';
});

add_filter('preprocess_comment', function($comment) {
    if (!empty($_POST['comment_trap'])) {
        wp_die('Spam detetado.');
    }
    return $comment;
});

Moderação e configurações de Discussion

Independentemente das ferramentas anti-spam, configure corretamente as definições de Discussion em Settings → Discussion:

  • "Comment must be manually approved": ative sempre. Nunca permita aprovação automática de comentários de utilizadores sem comentários aprovados anteriores.
  • "Hold a comment in the queue if it contains X or more links": defina para 1 ou 2 links. A maioria do spam de SEO contém múltiplos links.
  • Comment Blacklist: adicione palavras frequentes em spam (casino, viagra, SEO services, backlinks, etc.). Comentários com estas palavras vão automaticamente para spam.
  • Require name and email: ative para aumentar a fricção para bots simples.

Limpar spam acumulado na base de dados

Sites que não tinham proteção adequada podem ter milhares de comentários spam acumulados. Limpar via WP-CLI:

# Ver quantos comentários spam existem
wp comment list --status=spam --format=count

# Apagar todos os comentários marcados como spam
wp comment delete $(wp comment list --status=spam --format=ids) --force

# Limpar comentários em moderação antigos (mais de 30 dias)
wp comment list --status=hold --format=ids | xargs wp comment delete --force

Após limpeza, optimize a tabela:

wp db optimize

Bloquear spam ao nível do servidor (antes do PHP)

A abordagem mais eficiente: bloquear pedidos ao wp-comments-post.php que não provêm de uma sessão legítima no site. Em Apache (.htaccess):

# Bloquear submissão direta de comentários (sem referer do próprio site)
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} /wp-comments-post\.php
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?seusite\.pt [NC]
RewriteRule . - [F,L]
</IfModule>

Esta regra bloqueia bots que submetem comentários diretamente sem primeiro carregar a página. Elimina grande parte do spam automatizado sem afetar utilizadores legítimos (que chegam ao formulário a partir do próprio site).

Integrar na checklist de segurança de novos projetos

Proteção anti-spam deve ser parte da configuração inicial de qualquer site WordPress, não uma correção reativa. Inclua na sua checklist técnica de novo projeto:

  1. Avaliar se comentários são necessários (e desativar se não for o caso)
  2. Se ativos: instalar Akismet ou Antispam Bee, configurar moderação obrigatória
  3. Configurar honeypot ou reCAPTCHA
  4. Adicionar regra de .htaccess para bloquear submissão direta
  5. Desativar comentários em posts com mais de 60 dias

Para proteção mais ampla do site, veja o guia de hardening de segurança WordPress e como configurar uma WAF em WordPress.

Quer que configuremos proteção completa nos sites dos seus clientes?

O nosso serviço de manutenção WordPress inclui configuração de segurança, proteção anti-spam e monitorização contínua.

Falar connosco