Как отфильтровывать и удалять спам-комментарии в WordPress по IP и User-Agent

Спам-комментарии — одна из главных проблем для владельцев сайтов на WordPress. Они не только засоряют базу данных, но и могут повлиять на SEO и репутацию ресурса. В этой статье разберём, как эффективно отфильтровывать и автоматически удалять спам-комментарии по IP-адресам и User-Agent, используя собственные функции и готовые плагины.

Почему важно фильтровать спам по IP и User-Agent

Многие спам-боты используют одинаковые IP-адреса или характерные строки User-Agent, что позволяет отлавливать их с помощью фильтров. Эта методика позволяет:

  • Уменьшить нагрузку на сервер, блокируя спам ещё на этапе отправки комментария.
  • Снизить количество мусорных записей в базе данных.
  • Повысить качество комментариев и улучшить поведенческие факторы сайта.
Фильтрация по IP особенно эффективна против повторяющихся спамеров, а User-Agent помогает заблокировать автоматизированные боты.

Основные методы фильтрации спам-комментариев в WordPress

1. Использование штатных возможностей WordPress

WordPress позволяет в админке указать список заблокированных IP-адресов и User-Agent. Для этого перейдите в Настройки > Обсуждение и в поле Чёрный список комментариев добавьте IP или части User-Agent. Однако этот метод требует ручного обновления и не масштабируется при большом количестве спама.

2. Использование готовых плагинов

Рассмотрим несколько популярных плагинов для фильтрации и удаления спама по IP и User-Agent:

  • WPSpamShield Anti-Spam — комплексное решение, которое блокирует спам без капчи и сложных настроек. Есть возможность вести чёрные списки IP и User-Agent.
  • Antispam Bee — бесплатный плагин, умеет фильтровать комментарии по IP, User-Agent, языку и другим параметрам.
  • Clearfy Pro с модулем антиспама — позволяет настраивать фильтрацию по IP и User-Agent напрямую из админки, а также автоматически удалять спам.

Все эти плагины можно найти на WPSHOP.RU с удобной покупкой и поддержкой.

Как написать собственный фильтр спам-комментариев по IP и User-Agent

Если нужно гибко управлять фильтрацией, лучше написать свой код. Ниже пример функции для файла functions.php вашей темы или плагина, которая блокирует комментарии с определённых IP и User-Agent.

function wpclass_filter_spam_comments( $approved , $commentdata ) {
    $blocked_ips = [
        '123.45.67.89', // пример IP
        '111.222.333.444'
    ];
    $blocked_agents = [
        'SpamBot',
        'BadUserAgent',
    ];
    $comment_ip = $commentdata['comment_author_IP'];
    $user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';

    // Проверяем IP
    if ( in_array( $comment_ip, $blocked_ips ) ) {
        return 'spam'; // помечаем как спам
    }
    // Проверяем User-Agent
    foreach ( $blocked_agents as $agent ) {
        if ( stripos( $user_agent, $agent ) !== false ) {
            return 'spam';
        }
    }
    return $approved;
}
add_filter( 'pre_comment_approved', 'wpclass_filter_spam_comments', 10, 2 );

В этом коде мы создаём два массива — заблокированные IP и User-Agent. Функция проверяет входящий комментарий, и если IP или User-Agent совпадает с чёрным списком, комментарий автоматически помечается как спам.

Расширение фильтра: блокировка по диапазону IP

Иногда спам приходит с целых подсетей. Для блокировки диапазона можно использовать функцию проверки по маске:

function wpclass_ip_in_range($ip, $range) {
    if ( strpos($range, '/') == false ) {
        return $ip === $range;
    } else {
        list($range, $netmask) = explode('/', $range, 2);
        $ip_net = ip2long($ip) & ~((1 << (32 - $netmask)) - 1);
        $range_net = ip2long($range) & ~((1 << (32 - $netmask)) - 1);
        return $ip_net == $range_net;
    }
}

Её можно интегрировать в основной фильтр, чтобы блокировать не только конкретные IP, но и целые подсети.

Автоматическое удаление старого спама по IP и User-Agent из базы

Если база комментариев уже засорена спамом, можно автоматизировать удаление. Пример кода для удаления всех спам-комментариев с указанным IP или User-Agent:

function wpclass_delete_spam_comments_by_ip_agent() {
    global $wpdb;
    $blocked_ips = ['123.45.67.89', '111.222.333.444'];
    $blocked_agents = ['SpamBot', 'BadUserAgent'];
    
    foreach ($blocked_ips as $ip) {
        $wpdb->query( $wpdb->prepare(
            "DELETE FROM {$wpdb->comments} WHERE comment_approved = 'spam' AND comment_author_IP = %s",
            $ip
        ) );
    }
    foreach ($blocked_agents as $agent) {
        $wpdb->query( $wpdb->prepare(
            "DELETE FROM {$wpdb->comments} WHERE comment_approved = 'spam' AND comment_agent LIKE %s",
            "%" . $wpdb->esc_like($agent) . "%"
        ) );
    }
}
// Запускать вручную или через WPClass Cron
// wpclass_delete_spam_comments_by_ip_agent();

Для регулярного запуска этой функции можно использовать планировщик задач WPClass Cron, о котором мы писали в нашем руководстве.

Рекомендации по работе с фильтрами и плагинами

При использовании фильтров и плагинов для блокировки спама по IP и User-Agent учитывайте:

  • Регулярно обновляйте списки заблокированных IP и User-Agent, добавляя новые данные из логов и аналитики.
  • Не блокируйте слишком широко — это может привести к ошибочному удалению легитимных комментариев.
  • Используйте плагины с хорошей репутацией и поддержкой, чтобы избежать конфликтов и уязвимостей.
  • Периодически очищайте базу от старого спама, чтобы не засорять её и не замедлять работу сайта.

Заключение

Фильтрация спам-комментариев по IP и User-Agent — эффективный способ защитить сайт от мусора и снизить нагрузку на сервер. Используйте комбинацию штатных возможностей, надёжных плагинов и собственных функций для максимального результата. Внедрение таких решений позволит поддерживать чистоту комментариев и улучшить качество взаимодействия с посетителями.

Запрет автоматического удаления постов в WordPress: практические решения
14.02.2026
Как удалить неиспользуемые атрибуты и метаданные из WooCommerce
25.04.2026
Как удалить редиректы после изменения структуры URL в WordPress
05.12.2025
Как запретить регистрацию пользователей в WooCommerce
28.02.2026
Автоматическое удаление заказов WooCommerce по статусу «неоплачено» и интеграция с кассой (ККМ)
25.05.2026