Архивы по датам в WordPress часто остаются включёнными «по умолчанию», хотя на реальном сайте они не дают пользы ни пользователям, ни поиску. Если у вас нет редакционного архива по месяцам или годам, такие страницы обычно только плодят дубли: списки записей повторяют категории, теги и главную ленту, а в индексе появляются URL вида /2024/08/ или /2023/.
Задача здесь не просто «спрятать» архивы, а аккуратно убрать их из индекса и не сломать навигацию, если где-то они ещё используются. Ниже — рабочие варианты: через код, через плагин и через проверку результата в Search Console и на самом сайте.
Когда архивы дат действительно мешают
Проблема обычно заметна на сайтах с небольшим количеством контента или с сильной категоризацией. Архив по месяцу открывается, но внутри почти всегда тот же набор материалов, что уже доступен в рубриках и на странице блога. Для поисковика это слабая страница, а для владельца сайта — лишний слой индексации и лишние обходы.
Есть и другой сценарий: архивы дат не нужны пользователям, но ссылки на них уже попали в sitemap, внутренние блоки или старые шаблоны темы. Тогда простое удаление шаблона без редиректов и проверки даёт 404 или цепочку странных переходов.
Диагностика проблемы перед изменениями
Сначала проверьте, действительно ли архивы дат открыты и индексируются. Это можно сделать без доступа к серверу:
- откройте URL вида
/2024/или/2024/08/в браузере; - посмотрите исходный код страницы на наличие
meta robots; - проверьте, есть ли такие адреса в XML-карте сайта;
- в Search Console найдите разделы с датами и посмотрите, не попадают ли они в индекс.
Если архивы уже отдают noindex, но продолжают появляться в отчётах, проблема может быть не в WordPress, а в старых ссылках, внешних упоминаниях или кеше поисковика. Тогда нужно не только закрыть страницы, но и убрать источник их повторного обнаружения.
Как отключить архивы дат: сравнение подходов
Есть три нормальных пути. Выбор зависит от того, нужен ли вам контроль на уровне темы, удобство через админку или быстрый точечный фикс.
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
Код в functions.php или мини-плагине | Нужен точный контроль без лишних зависимостей | Прозрачно, быстро, без лишнего UI | Нужно аккуратно обновлять тему или использовать mu-plugin |
| SEO-плагин с настройками архивов | Уже есть плагин для технической SEO-настройки | Удобно, меньше кода | Не всегда есть отдельная настройка именно для дат |
| Редирект на категории или главную | Архивы уже в индексе и их надо убрать из обхода | Снижает риск 404 и мусорных URL | Нужно не переборщить, чтобы не сломать полезные ссылки |
Если у вас кастомная тема или вы не хотите зависеть от обновлений, лучше вынести решение в маленький плагин или mu-plugin. Так вы не потеряете настройку при смене темы.
Пошаговое решение через код
Ниже вариант, который отключает архивы дат для обычных запросов и добавляет noindex для поисковиков. Это не выдуманный хук: используется стандартный фильтр wp_robots и проверка архивных запросов через is_date().
<?php
add_filter( 'wp_robots', function( array $robots ) {
if ( is_date() ) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
} );
add_action( 'template_redirect', function() {
if ( is_date() ) {
wp_safe_redirect( home_url( '/' ), 301 );
exit;
}
} );Этот вариант уместен, если архивы дат вам точно не нужны как посадочные страницы. Если же вы хотите оставить их доступными для пользователей, но убрать из индекса, уберите блок с редиректом и оставьте только wp_robots.
Для более аккуратной реализации лучше оформить это как маленький mu-plugin, чтобы код не зависел от темы:
<?php
/*
Plugin Name: Disable Date Archives
*/
add_filter( 'wp_robots', function( array $robots ) {
if ( is_date() ) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
} );Если нужен редирект не на главную
Иногда логичнее отправлять архивы дат на ближайшую рубрику или на страницу блога, а не на главную. Тогда редирект должен быть осмысленным: например, на страницу новостей или на общий архив записей. Не делайте массовый 301 на случайную категорию — это выглядит как мягкая ошибка, а не как нормальная миграция.
<?php
add_action( 'template_redirect', function() {
if ( is_date() ) {
$target = get_permalink( get_option( 'page_for_posts' ) );
if ( ! $target ) {
$target = home_url( '/' );
}
wp_safe_redirect( $target, 301 );
exit;
}
} );Как сделать это через плагин без кода
Если на сайте уже стоит SEO-плагин или плагин для технической чистки, проверьте, нет ли у него настроек архивов. В некоторых случаях проще отключить архивы дат в интерфейсе, чем поддерживать собственный код. Это особенно удобно для редакторов, которым нужен доступ к настройке без правки файлов.
Если в вашем наборе уже используется Clearfy Pro, проверьте разделы, связанные с архивами, дублями и технической чисткой. Но даже при наличии плагина всё равно нужно смотреть, что именно он делает: только ставит noindex или ещё и меняет шаблон ответа.
Что проверить после внедрения
После изменения не ограничивайтесь открытием страницы в браузере. Нужна короткая, но конкретная проверка:
- архивы дат открываются с нужным статусом:
200или301в зависимости от выбранной схемы; - в исходном коде есть
noindex, если вы оставляете страницу доступной; - старые URL не возвращают цепочку редиректов;
- архивы не попадают в sitemap, если ваш SEO-плагин умеет их исключать;
- в Search Console новые обходы идут на целевые страницы, а не на архивы дат.
Для быстрой проверки статуса удобно использовать curl:
curl -I https://example.com/2024/08/Если вы настроили редирект, в ответе должен быть 301 и заголовок Location с целевым URL. Если оставили страницу без редиректа, проверьте наличие noindex в HTML-ответе, а не только визуально в браузере.
Частые ошибки и как их исправить
Самая распространённая ошибка — закрыть архивы дат только в robots.txt. Это не решает проблему индексации, если URL уже известен поисковику или на него ведут внутренние ссылки. Для удаления из индекса нужен либо noindex, либо корректный редирект, либо отдача 404/410 в действительно удалённом сценарии.
Вторая ошибка — ставить 301 на главную для всех архивов без разбора. Если у вас есть полезные архивы по году для редакции или для старых материалов, такой редирект ломает смысл навигации. Сначала решите, нужен ли архив как страница для людей, и только потом выбирайте целевой URL.
Третья ошибка — менять шаблон темы, не проверив, не генерирует ли SEO-плагин собственный noindex или canonical. В итоге получается конфликт: один слой говорит поисковику одно, другой — другое. После внедрения всегда смотрите исходный код страницы и HTTP-ответ.
Типичные причины, почему архивы всё ещё в индексе
- страницы остались в XML-карте сайта;
- на них ведут старые внутренние ссылки из меню, виджетов или хлебных крошек;
- редирект настроен, но с ошибкой в конечном URL;
- страница отдаёт
noindex, но поисковик ещё не переобходил её; - кеш страницы или CDN показывает старую версию без изменений.
Безопасность и производительность
Если вы вносите код, не редактируйте functions.php на живом сайте без резервной копии. Ошибка в одном символе может положить фронтенд или админку. Для таких задач лучше использовать дочернюю тему или mu-plugin. Это особенно важно, если архивы отключаются на нескольких сайтах с похожей структурой.
С точки зрения производительности сам по себе фильтр wp_robots почти ничего не стоит. Более заметную нагрузку создают лишние обходы поисковиков и генерация бесполезных страниц. Поэтому после отключения архивов имеет смысл проверить внутренние ссылки и убрать их из шаблонов, если они больше не нужны.
Если вам нужно одновременно подчистить и другие технические дубли, имеет смысл смотреть на комплексную настройку SEO и технической чистки сайта. Но не смешивайте в один коммит всё подряд: сначала отключите архивы дат, потом отдельно проверьте sitemap, canonical и внутренние ссылки.
В итоге рабочая схема простая: определить, нужны ли архивы дат пользователям; выбрать либо noindex, либо редирект, либо полное отключение; затем проверить ответ сервера, исходный код и индексацию в Search Console. Именно эта последовательность обычно даёт предсказуемый результат без побочных эффектов.