Если сайт не использует RSS-агрегацию, а в логах регулярно всплывают запросы к /feed/, /comments/feed/ и похожим адресам, ленты можно отключить аккуратно: не редиректом на главную, а нормальным 404 или 410. Это полезно для чистки индекса, снижения мусорного трафика и устранения дублей, которые иногда остаются после старых шаблонов, плагинов и импортов.
Ниже — рабочая схема без выдуманных хуков: сначала разберём, какие feed-адреса реально открыты, затем отключим их кодом, проверим ответы сервера и разберём типичные ошибки.
Когда отключение RSS действительно нужно
Не стоит рубить ленты только потому, что они «не нужны». Сначала проверьте сценарий:
- сайт не публикует контент через RSS в сторонние сервисы;
- в Search Console или логах сервера видны обращения к feed-URL;
- в теме или плагинах нет подписок на комментарии и записи через RSS;
- нужно убрать технические дубли, но сохранить обычные страницы и архивы.
Если ленты используются для email-рассылки, агрегатора или внутренней интеграции, отключать их полностью не стоит. В таком случае лучше закрыть только часть feed-адресов или оставить основной RSS, а комментарии и атом-ленты убрать отдельно.
Диагностика: какие feed-адреса открыты сейчас
У WordPress есть несколько типовых вариантов. На практике чаще всего встречаются:
/feed/— общий RSS ленты записей;/comments/feed/— лента комментариев;/category/slug/feed/— feed рубрики;/tag/slug/feed/— feed метки;/author/name/feed/— feed автора.
Проверить можно через браузер, curl или любой HTTP-клиент:
curl -I https://example.com/feed/
curl -I https://example.com/comments/feed/
Если сервер отвечает 200 и отдает XML, лента активна. Если видите 301 на главную, это не лучший вариант: поисковик и боты получают неочевидный сигнал, а пользователи — бесполезный редирект вместо явного закрытия.
Как отключить RSS в WordPress кодом
Самый предсказуемый способ — перехватить feed-запросы и отправить корректный статус. Для этого не нужно править ядро. Достаточно добавить код в functions.php дочерней темы или в небольшой mu-plugin.
Вариант 1: возвращать 404 для всех feed-URL
Подходит, если RSS не нужен вообще. Код ниже отключает основные feed-форматы и отдаёт 404 с завершением запроса:
add_action('template_redirect', function () {
if (is_feed()) {
global $wp_query;
$wp_query->set_404();
status_header(404);
nocache_headers();
include get_query_template('404');
exit;
}
});
Этот вариант простой и понятный, но у него есть нюанс: если тема перегружена или шаблон 404.php тяжелый, лишний рендер всё равно будет происходить. Для небольших сайтов это обычно не проблема.
Вариант 2: отдавать 410 Gone для окончательного удаления
Если вы хотите явно показать, что feed больше не существует и не планируется, используйте 410. Для поисковиков это более жёсткий сигнал, чем 404:
add_action('template_redirect', function () {
if (is_feed()) {
status_header(410);
nocache_headers();
echo 'Feed отключён';
exit;
}
});
Такой подход уместен, когда ленты были отключены осознанно и навсегда. Если сомневаетесь, начните с 404.
Как отключить только комментарии или архивные feed
Иногда нужен не полный отказ от RSS, а точечная чистка. Например, основная лента записей остаётся, а комментарии и feed архивов — нет. Тогда можно проверять конкретные типы запросов:
add_action('template_redirect', function () {
if (is_comment_feed()) {
status_header(404);
nocache_headers();
include get_query_template('404');
exit;
}
if (is_feed() && is_category()) {
status_header(404);
nocache_headers();
include get_query_template('404');
exit;
}
});
Здесь важно не смешивать логику: is_feed() ловит все feed-запросы, а is_comment_feed() — только комментарии. Если вы отключаете архивные ленты, убедитесь, что это не ломает старые ссылки из рассылок или внешних сервисов.
Сравнение подходов: плагин, код, редирект
| Подход | Плюсы | Минусы | Когда брать |
|---|---|---|---|
| Код в теме / mu-plugin | Контроль статуса, без лишних зависимостей | Нужно аккуратно тестировать | Когда нужен точный результат |
| SEO-плагин с настройками индексации | Удобно для комплексной чистки | Не всегда умеет именно feed-логика | Если уже используется для технической SEO-настройки |
| Редирект на главную | Быстро сделать | Плохой сигнал для ботов, путаница для пользователей | Лучше не использовать |
Если у вас уже стоит технический SEO-плагин, например Clearfy Pro, проверьте, нет ли в нём готовой опции для отключения RSS и других технических дублей. Но если нужна точная логика ответа сервера, код обычно надёжнее. Ссылка на продукт: Clearfy Pro.
Проверка результата после внедрения
После добавления кода обязательно проверьте не только страницу в браузере, но и HTTP-статус. Иначе можно случайно оставить 200 с текстом ошибки или редирект вместо закрытия.
- Откройте
/feed/в браузере в режиме инкогнито. - Проверьте заголовки через
curl -I. - Убедитесь, что нет кешированного
200от CDN или плагина кеша. - Проверьте
/comments/feed/, feed рубрик и меток. - Посмотрите логи сервера на повторные обращения ботов.
Ожидаемый результат для варианта с 404 выглядит так:
HTTP/2 404
content-type: text/html; charset=UTF-8
Если вы выбрали 410, должен быть именно он. Не полагайтесь на визуальную проверку страницы: иногда тема показывает шаблон 404, но серверный статус остаётся 200.
Частые ошибки и как их исправить
Редирект на главную вместо 404
Это самая частая ошибка. Она возникает, когда отключение feed делают через wp_redirect(home_url()) или похожую логику. Для технической чистки это плохой вариант: боты получают неочевидный ответ, а пользователи — нерелевантную страницу.
Код вставили в родительскую тему
После обновления темы изменения пропадают. Для таких правок лучше использовать дочернюю тему или mu-plugin в wp-content/mu-plugins/. Тогда отключение feed не слетит при апдейте.
Кеш продолжает отдавать старый XML
Если на сайте есть page cache, CDN или серверный кеш, старый feed может продолжать открываться даже после правки. Сначала очистите кеш, потом повторите проверку curl -I. Если используется объектный кеш, он обычно не влияет на сам HTTP-ответ, но кеш страницы — влияет.
Отключили все ленты, хотя одна была нужна
Такое бывает, когда используют слишком общий is_feed() без дополнительных условий. Перед внедрением проверьте, какие именно feed-URL реально используются сайтом и внешними сервисами.
Практические советы по безопасности и производительности
Отключение RSS само по себе не ускорит сайт радикально, но уберёт лишние точки входа и уменьшит шум в логах. Чтобы не получить побочные эффекты:
- не правьте
feed-rss2.phpв ядре или теме вручную; - не маскируйте отключение под
200 OK; - если нужен только один feed, отключайте остальные точечно;
- после изменений обновите sitemap и проверьте, не ссылается ли на feed какой-нибудь старый плагин;
- если используете CDN, сбросьте кеш именно для feed-URL.
Для сайтов с активной технической чисткой полезно держать такие правки в отдельном mu-plugin: это проще сопровождать, чем искать код в functions.php через полгода.
Если нужна более широкая чистка дублей и технических URL, имеет смысл смотреть не только на RSS, но и на архивы автора, вложения, служебные страницы и параметры сортировки. Но это уже отдельная задача, и решать её лучше по одному типу URL за раз.