Комментарии в WordPress: настройка и защита от спама
За 20–30 минут закрываем форму комментариев от ботов: разбираем настройки раздела «Обсуждение», ставим антиспам-плагин, выключаем pingback и чистим то, что уже успело накопиться в базе.

К концу этого руководства у вас будет форма комментариев, которая принимает людей и отсеивает ботов: включённая премодерация для новых авторов, антиспам-плагин, отключённые pingback-уведомления и закрытые обсуждения на старых записях. На всё уходит 20–30 минут, если сайт уже работает. Инструкция написана для WordPress 6.x, часть названий опций изменилась в версии 5.5 — об этом скажу отдельно.
Что нужно иметь до начала
- доступ в админку с ролью администратор: раздел «Настройки → Обсуждение» редактору не виден;
- WordPress 6.0 или новее. На 5.x всё описанное тоже есть, но имена некоторых опций другие;
- рабочая отправка почты с сайта, если хотите получать уведомления о комментариях на модерации. Если письма с сайта не уходят, премодерация превратится в очередь, о которой вы не узнаете;
- свежая резервная копия базы данных — перед массовым удалением спама это не формальность;
- по желанию: доступ к консоли сервера и установленный WP-CLI 2.x, чтобы не щёлкать по чекбоксам. Без него всё делается мышкой.
Шаг за шагом
- Откройте «Настройки → Обсуждение». Это единственная страница, где собраны почти все нужные переключатели. Проверка: вверху страницы вы видите блок «Настройки по умолчанию для статьи» с тремя чекбоксами.
- Снимите галочку «Разрешить оповещения с других блогов (уведомления и обратные ссылки) на новые статьи». Pingback-и — отдельный канал спама, который почти никому не нужен. Проверка: после сохранения в редакторе новой записи на панели «Обсуждение» останется только пункт про комментарии.
- Включите «Автор комментария должен указать имя и email». Это не защита от ботов, но отсекает самые ленивые скрипты и даёт вам хоть какие-то данные для блокировки. Проверка: отправьте комментарий с пустым полем имени — форма вернёт ошибку «Заполните обязательные поля».
- Настройте модерацию. Включите «Автор комментария должен иметь ранее одобренный комментарий» и оставьте «Комментарий должен быть одобрен вручную» выключенным. Такая пара даёт разумный баланс: первый комментарий человека уходит на проверку, дальше он публикуется сразу. Если комментариев мало и вы готовы читать каждый — включайте и ручное одобрение. Проверка: отправьте комментарий с нового email, он должен попасть в «Комментарии → Ожидают проверки».
- Поставьте «Задержать комментарий в очереди, если он содержит более 2 ссылок». Ссылки — главная цель спамера, порог в 1–2 ссылки отсекает основную массу. Проверка: комментарий с тремя URL уходит на модерацию, а не публикуется.
- Закройте обсуждения на старых записях. Галочка «Автоматически закрывать обсуждение статей старше…» и значение 30–90 дней. Боты массово бьют по архивам: там их не видит ни один живой читатель. Проверка: откройте запись старше указанного срока — формы комментария на ней больше нет.
- Заполните «Запрещённые ключевые слова». Поле внизу страницы (в версиях до 5.5 оно называлось «Чёрный список»). Комментарии с этими словами в тексте, имени, email, URL или IP уходят в корзину. Важно: WordPress ищет подстроки, поэтому слово
assзаблокирует и «classic». Начинайте с десятка-двух конкретных слов, а не с готового списка на 500 строк из интернета. - Установите антиспам-плагин. «Плагины → Добавить новый», поиск по слову Akismet (он от Automattic, идёт в комплекте с WordPress и требует получения ключа на akismet.com) или Antispam Bee, который работает без внешнего сервиса и ключей. Проверка: в меню «Комментарии» появляется вкладка или счётчик «Спам», и через день-два там начнут оседать первые отловленные сообщения.
- Разберитесь с уже существующими записями. Настройки из шага 2 влияют только на новые публикации. Для старых: «Записи → Все записи», выделите нужные, «Действия → Изменить», в появившейся панели поле «Комментарии» → «Не разрешать». Проверка: на выбранных записях форма исчезла.
- Почистите накопленный спам. «Комментарии → Спам → Очистить спам». Если там десятки тысяч записей, браузер может отвалиться по таймауту — тогда удаляйте через WP-CLI (команда ниже) или порциями по 20–100 штук.
Премодерация не борется со спамом. Она переносит его из публичной части сайта в вашу почту и в таблицу wp_comments. Фильтровать нужно до того, как комментарий туда попадёт — этим и занимается антиспам-плагин.
Что куда вписать
Таблица для тех, кто хочет пройти настройки быстро и не перечитывать описания. Левая колонка — подпись в админке, правая — имя опции в базе, если будете делать то же через WP-CLI.
| Настройка в «Обсуждении» | Значение | Опция в базе (WP 5.5+) |
|---|---|---|
| Оповещения с других блогов (pingback) | выключить | default_ping_status |
| Пытаться оповестить блоги, упомянутые в статье | выключить | default_pingback_flag |
| Автор должен указать имя и email | включить | require_name_email |
| Только зарегистрированные пользователи | выключить (для открытого блога) | comment_registration |
| Комментарий одобряется вручную | по вкусу | comment_moderation |
| Нужен ранее одобренный комментарий | включить | comment_previously_approved |
| Задержать при числе ссылок больше | 2 | comment_max_links |
| Закрывать обсуждение статей старше | 30–90 дней | close_comments_for_old_posts, close_comments_days_old |
| Запрещённые ключевые слова | свой список | disallowed_keys |
Два имени поменялись в WordPress 5.5: comment_whitelist стала comment_previously_approved, а blacklist_keys — disallowed_keys. Если нашли в чужом гайде старые названия, он написан до 5.5.
То же самое через WP-CLI
Проверено на WP-CLI 2.x и WordPress 6.x. Запускать из корня сайта:
# базовая настройка комментариев
wp option update require_name_email 1
wp option update comment_previously_approved 1
wp option update comment_max_links 2
wp option update close_comments_for_old_posts 1
wp option update close_comments_days_old 60
# отключаем pingback и обратные ссылки для новых записей
wp option update default_ping_status closed
wp option update default_pingback_flag 0
# сколько спама накопилось
wp comment list --status=spam --format=count
# удаляем его целиком, минуя корзину
wp comment delete $(wp comment list --status=spam --format=ids) --force
Последняя команда завершится ошибкой, если спама нет: подставлять в wp comment delete пустой список нечего. Сначала смотрите --format=count.
Pingback — автоматическое уведомление, которое один сайт отправляет другому, когда ставит на него ссылку. У принимающей стороны оно выглядит как комментарий. Механизм появился в эпоху блогосферы, сейчас его основные пользователи — спамеры и сканеры, которые через него прощупывают XML-RPC.
Если не получилось
- Формы комментариев нет вообще, хотя всё разрешено. В блочной теме (Twenty Twenty-Four и подобные) комментарии выводятся блоком «Комментарии» в шаблоне. Откройте «Внешний вид → Редактор → Шаблоны → Запись» и проверьте, что блок на месте. Настройки «Обсуждения» на отсутствующий блок никак не влияют.
- «Извините, комментарии к этой записи закрыты». Сработал автозакрытие по возрасту записи (шаг 6) или в самой записи на панели «Обсуждение» снята галочка. Настройка конкретной записи всегда сильнее общей.
- Спам продолжает идти после установки Akismet. Плагин активирован, но ключ не введён — на экране плагинов в этом случае висит баннер с просьбой подключить аккаунт. Без ключа он не фильтрует ничего.
- Комментарии пропадают молча. Проверьте «Запрещённые ключевые слова»: короткая подстрока вроде
ruилиassвыкашивает половину обычных сообщений. Удалите слова короче 4–5 символов. - Нагрузка на сервер не упала. Боты бьются в
wp-comments-post.phpиxmlrpc.phpнапрямую, и каждый такой запрос поднимает PHP, минуя страничный кеш. Плагин отсеет спам, но запрос уже обработан. Если в логах доступа тысячи POST в час — ограничивать нужно на уровне веб-сервера или CDN, а не в WordPress.
Что делать дальше
Через неделю зайдите в «Комментарии → Спам» и посмотрите, что там лежит. Если видите нормальные сообщения — порог по ссылкам или список запрещённых слов слишком жёсткий. Если спам долетает до «Ожидают проверки» — добавьте капчу (Cloudflare Turnstile и hCaptcha имеют бесплатные тарифы и официальные плагины) или honeypot-плагин, который прячет в форме поле-ловушку для ботов.
Дальше стоит посмотреть на две вещи. Первая — журнал доступа веб-сервера: сколько POST-запросов в минуту приходит на wp-comments-post.php и xmlrpc.php. Это ваш реальный показатель давления, а не счётчик в админке. Вторая — размер таблиц wp_comments и wp_commentmeta: после чистки спама место в MySQL само не освобождается, таблицы нужно оптимизировать отдельно. Настройка подписки на ответы и вложенных ветвей — отдельная тема, здесь мы разобрали только приём комментариев и фильтрацию.
Помощник по курсовой и диплому: Большая работа поэтапно: от плана до защиты
Спросить за 25 ₽Источники: WordPress Documentation: Discussion Settings, WP-CLI: wp option
Частые вопросы
У меня WordPress 5.4, инструкция подойдёт?
Настроил всё, а спам всё равно проходит. Что ещё сделать?
Включил автозакрытие старых обсуждений, а комментарии нужны на нескольких архивных страницах. Как быть?
Что сильнее грузит сервер: сам спам или плагин, который его фильтрует?
Можно просто отключить комментарии везде и не возиться?
Удалил 50 000 спам-комментариев, а база не уменьшилась. Это нормально?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.