wpcore.ru wordpress wpcore.ru

Как отключить пагинацию архивов WordPress без лишних дублей и 404

Пагинация архивов в WordPress сама по себе не проблема. Проблема начинается, когда в индексе появляются страницы вида /category/page/2/, /tag/page/3/ или архивы записей с десятками страниц, которые не несут самостоятельной ценности. В такой ситуации обычно пытаются «что-нибудь закрыть», а потом получают 404, сломанную навигацию или просадку по внутренней перелинковке.

Ниже — практический разбор: как понять, нужна ли вам пагинация архивов вообще, как отключить её безопасно и как проверить результат без гадания по логам.

Когда пагинацию архивов действительно стоит отключать

Отключать пагинацию имеет смысл не потому, что «так чище», а когда у архивов нет задачи быть самостоятельной посадочной страницей. Типичный пример — сайт с небольшим количеством материалов, где страницы 2, 3, 4 архивов пустые или почти пустые, а поисковик всё равно тратит на них краулинговый бюджет.

Ещё один сценарий — когда архивы категорий или тегов уже закрыты от индексации, но пагинированные URL продолжают появляться в обходной индексации через внутренние ссылки, sitemap или внешние ссылки. В этом случае нужно не просто поставить noindex, а привести поведение архива к предсказуемому виду.

Блок диагностики проблемы

Перед изменениями проверьте три вещи:

  • есть ли у архива реальный трафик на страницы 2+;
  • не ведут ли на пагинацию внутренние ссылки из меню, блоков или хлебных крошек;
  • не появляются ли в Search Console URL с параметрами и пагинацией как отдельные страницы.

Если у вас есть доступ к серверным логам, полезно посмотреть, как часто бот ходит на пагинированные URL. Если таких запросов много, а контент на страницах почти дублируется, это хороший кандидат на отключение.

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

Что именно отключать: пагинацию, индексацию или сам архив

Это разные задачи. Если смешать их в одну, легко сломать SEO и навигацию.

ПодходЧто делаетКогда подходитМинус
Оставить пагинацию, закрыть от индексацииСтраницы доступны пользователю, но не должны ранжироватьсяАрхив нужен для навигацииURL всё равно существуют и обходятся ботом
Отключить пагинацию и показывать весь списокВсе записи архива на одной страницеМало записей и нет риска перегрузить страницуМожет ударить по скорости и UX
Сделать редирект со страниц 2+Пагинированные URL ведут на первую страницу архиваАрхив не нужен как отдельная сущностьПользователь теряет доступ к старым страницам списка

На практике чаще всего нужен третий вариант для небольших сайтов и первый — для контентных проектов, где архивы полезны как навигация.

Пошаговое решение через код

Если задача — убрать пагинацию из конкретных архивов и не плодить мусорные URL, безопаснее всего сделать редирект со страниц 2+ на первую страницу архива. Это не ломает структуру сайта и не создаёт пустых страниц.

Вариант 1: редирект страниц 2+ на первую страницу архива

<?php
add_action('template_redirect', function () {
    if (is_admin() || wp_doing_ajax() || is_feed()) {
        return;
    }

    if (is_paged() && (is_category() || is_tag() || is_post_type_archive() || is_tax())) {
        wp_safe_redirect(get_pagenum_link(1), 301);
        exit;
    }
});

Этот код ставит 301-редирект для пагинированных архивов категорий, тегов, таксономий и архивов типов записей. Если вам нужно ограничить его только категориями, уберите лишние условия и оставьте is_category().

Важно: не используйте такой редирект на сайтах, где страницы архива 2+ реально нужны пользователям. Иначе вы просто спрячете контент, а не решите проблему.

Вариант 2: отключить пагинацию только для выбранных архивов

Если речь идёт о конкретной категории или таксономии, лучше не трогать весь сайт. Пример ниже отключает пагинацию только для категории с ярлыком news:

<?php
add_action('template_redirect', function () {
    if (is_admin() || wp_doing_ajax() || is_feed()) {
        return;
    }

    if (is_category('news') && is_paged()) {
        wp_safe_redirect(get_category_link(get_queried_object_id()), 301);
        exit;
    }
});

Для таксономий можно использовать is_tax('taxonomy_name', 'term-slug'). Для архивов записей — is_post_type_archive('post_type').

Вариант 3: убрать пагинацию только визуально

Иногда нужно не редиректить URL, а просто убрать ссылки «Следующая страница» и «Предыдущая страница» из шаблона. Это полезно, если архив всё ещё доступен по прямому адресу, но вы не хотите вести на него пользователей.

<?php
// В шаблоне архива
if (function_exists('the_posts_pagination')) {
    the_posts_pagination([
        'mid_size'  => 1,
        'prev_text' => '&larr; Назад',
        'next_text' => 'Вперёд &rarr;',
    ]);
}

Это не отключает пагинацию как URL-механику, но помогает, если задача — убрать лишние переходы для пользователя, а не переписывать логику индексации.

Если нужен именно один список без страниц 2+

Такой вариант уместен только для небольших архивов. Например, если в категории 12–20 записей и страница не раздувается до тяжёлой простыни. Тогда можно изменить posts_per_page для конкретного архива.

<?php
add_action('pre_get_posts', function (WP_Query $query) {
    if (is_admin() || ! $query->is_main_query()) {
        return;
    }

    if ($query->is_category('news')) {
        $query->set('posts_per_page', 50);
    }
});

Но здесь есть ограничение: если записей станет больше, страница начнёт грузиться медленнее, а пользователь будет дольше ждать рендер. Поэтому этот способ лучше считать компромиссом, а не универсальным решением.

Как проверить, что решение сработало

После внедрения проверьте не только URL в браузере, но и поведение ответа сервера.

  • Откройте страницу архива 2+ и убедитесь, что она отдаёт 301, если вы делали редирект.
  • Проверьте, что первая страница архива открывается без циклического редиректа.
  • Посмотрите исходный код: не должно остаться ссылок на несуществующие страницы пагинации.
  • В Search Console отправьте проверку URL и убедитесь, что бот видит нужный канонический адрес.
  • Если использовали кэш, очистите его на уровне плагина и сервера, иначе можно тестировать старую версию страницы.

Для быстрой проверки заголовков удобно использовать curl:

curl -I https://example.com/category/news/page/2/

В ответе должен быть либо 301 Moved Permanently на первую страницу архива, либо тот статус, который вы ожидаете по своей схеме.

Частые ошибки и как их исправить

Редирект сделан слишком широко

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

Появился цикл редиректов

Обычно это происходит, когда редирект ведёт на URL, который тоже попадает под то же условие. Проверьте, не срабатывает ли ваш код на первой странице архива. Для этого обязательно используйте is_paged().

Страница 2+ стала 404 вместо редиректа

Так бывает, если шаблон или плагин уже переписал правила ЧПУ, а ваш код не успевает отработать. В таком случае проверьте, не конфликтует ли решение с SEO-плагином, кэшем или кастомными rewrite rules.

Пагинация исчезла, но дубли остались в индексе

Это значит, что вы убрали ссылки, но не закрыли старые URL и не дождались переобхода. Нужно проверить каноникал, sitemap и внутренние ссылки на архивы. Иногда помогает временный 301-редирект со страниц 2+ на первую страницу архива.

Что учесть по безопасности и производительности

Любой код для functions.php лучше сначала тестировать в дочерней теме или через мини-плагин. Если тема обновится, вы не потеряете правки. Для production-сайта это не формальность, а способ не ловить сюрпризы после деплоя.

Если у вас уже есть тяжёлые архивы, не пытайтесь лечить всё редиректами. Иногда правильнее ограничить количество записей на странице, включить серверный кэш и убрать из шаблона лишние запросы к метаданным. Иначе вы просто перенесёте проблему с индексации на скорость.

Если нужен инструмент для технической чистки сайта и контроля дублей, можно посмотреть Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже с плагином полезно понимать, что именно он меняет в архивной логике, чтобы не закрыть лишнее.

Практический чек-лист перед публикацией изменений

  • Определили, какие архивы реально не должны иметь страницы 2+.
  • Проверили, не ведут ли на них внутренние ссылки.
  • Выбрали один сценарий: редирект, ограничение выдачи или только визуальное скрытие.
  • Протестировали код на staging-сайте.
  • Очистили кэш и проверили HTTP-статус через curl -I.
  • Убедились, что первая страница архива открывается без ошибок.
  • Проверили Search Console и канонические URL после переобхода.

Если после этого пагинация всё ещё индексируется, проблема обычно не в самом коде, а в том, что где-то остались прямые ссылки, старые URL в sitemap или конфликтующий SEO-настройки темы/плагина. В таком случае лучше идти от диагностики, а не добавлять ещё один слой редиректов.

×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше