wpkeys.ru wordpress WPKeys.ru

Как исправить 404 на страницах пагинации архивов WordPress

Если у категорий, тегов или архивов записей в WordPress первая страница открывается нормально, а /page/2/ и дальше отдают 404, проблема обычно не в контенте, а в правилах ЧПУ, конфликте с темой, плагином или в неверной настройке пагинации. Это типичный технический сбой: сайт живой, записи есть, но архивы ломаются именно на переходе между страницами.

Ниже — рабочий порядок проверки и исправления. Он подходит для обычных архивов WordPress, а не для WooCommerce или кастомных решений с отдельной логикой.

Как выглядит проблема на практике

Чаще всего симптом один из следующих:

  • страница архива открывается, но ссылка на вторую страницу ведёт на 404;
  • в адресной строке есть /page/2/, но WordPress показывает не архив, а страницу ошибки;
  • после переноса сайта или смены темы пагинация сломалась сразу в нескольких разделах;
  • на локальной копии всё работает, а на продакшене — нет;
  • 404 появляется только у архивов, а одиночные записи и страницы открываются нормально.

Диагностика: что проверить до правки кода

Сначала нужно понять, где именно ломается маршрут. В WordPress пагинация архивов зависит от правил перезаписи, структуры постоянных ссылок и того, как тема выводит ссылки на страницы архива. Если менять всё подряд, можно только замаскировать причину.

Проверьте постоянные ссылки

Откройте Настройки → Постоянные ссылки и убедитесь, что структура не сброшена в режим по умолчанию после миграции или обновления. Иногда достаточно просто сохранить настройки заново, чтобы WordPress пересобрал правила rewrite.

Если после сохранения проблема исчезает, значит, дело было в устаревших правилах. Это самый простой и безопасный сценарий.

Проверьте конфликт с темой или плагином

Если архивы ломаются только на одной теме, посмотрите, не переопределяет ли она шаблоны архива и пагинации. Для проверки временно переключитесь на стандартную тему WordPress и отключите плагины, которые вмешиваются в ЧПУ, SEO или фильтрацию архивов.

Особенно внимательно смотрите на плагины, которые:

  • меняют структуру URL;
  • скрывают архивы;
  • добавляют фильтры в архивные страницы;
  • работают с редиректами и canonical.

Проверьте, не сломан ли шаблон пагинации

В теме может быть собственный вывод архивов через WP_Query. Если разработчик не передал правильный параметр paged, вторая и последующие страницы будут вести себя некорректно. Это уже не проблема rewrite, а ошибка в коде шаблона.

Пошаговое решение

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

1. Сбросьте правила перезаписи

Самый безопасный первый шаг — пересохранить структуру постоянных ссылок. WordPress заново запишет rewrite rules, и если проблема была в устаревшем наборе правил, пагинация заработает сразу.

// Можно выполнить вручную в админке через сохранение настроек постоянных ссылок.
// Программно flush_rewrite_rules() используют только после регистрации CPT/таксономий,
// а не на каждом запросе.
register_activation_hook(__FILE__, function () {
    flush_rewrite_rules();
});

register_deactivation_hook(__FILE__, function () {
    flush_rewrite_rules();
});

Важно: flush_rewrite_rules() нельзя вызывать на каждом хите. Это тяжёлая операция, и в продакшене она создаст лишнюю нагрузку.

2. Проверьте вывод пагинации в шаблоне

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

<?php
$paged = max(1, get_query_var('paged'));

$query = new WP_Query([
    'post_type'      => 'post',
    'posts_per_page' => 10,
    'paged'          => $paged,
]);

if ($query->have_posts()) :
    while ($query->have_posts()) : $query->the_post();
        the_title('<h2>', '</h2>');
    endwhile;

    echo paginate_links([
        'total'   => $query->max_num_pages,
        'current' => $paged,
    ]);

    wp_reset_postdata();
endif;

Если в шаблоне используется query_posts(), это почти всегда плохой знак. Такой подход ломает глобальный запрос и часто приводит к странной пагинации. Лучше заменить его на отдельный WP_Query или работать с основным циклом WordPress.

3. Убедитесь, что архив не перехватывает редирект

Иногда 404 появляется не из-за самого архива, а из-за редиректа, который уводит /page/2/ на несуществующий адрес. Такое бывает после установки SEO-плагинов, плагинов редиректов или при ручной правке .htaccess.

Проверьте, нет ли правил, которые:

  • срезают хвост /page/2/;
  • перенаправляют архив на канонический URL без пагинации;
  • конфликтуют с правилами сервера Nginx или Apache.

4. Если это кастомная таксономия, проверьте её регистрацию

Для пользовательских таксономий и типов записей пагинация архивов зависит от аргументов rewrite. Если там ошибка, WordPress может не собрать правильный маршрут.

register_post_type('news', [
    'public'       => true,
    'has_archive'  => true,
    'rewrite'      => [
        'slug'       => 'news',
        'with_front' => false,
    ],
    'supports'     => ['title', 'editor', 'thumbnail'],
]);

Если архив у CPT есть, а /page/2/ даёт 404, проверьте, не конфликтует ли slug с уже существующей страницей, рубрикой или другим типом контента.

Когда проблема в теме, а не в WordPress

Если после сброса правил и проверки шаблона ошибка остаётся, ищите её в теме. Частая ситуация: архив выводится не через стандартный шаблон archive.php, а через кастомный файл с ручной выборкой постов. В таком коде легко забыть про paged или неправильно собрать ссылку на следующую страницу.

Ещё один частый случай — тема подменяет основной запрос через pre_get_posts, но не ограничивает область применения. Тогда пагинация ломается не в одном архиве, а сразу в нескольких.

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

    if ($query->is_category() || $query->is_tag() || $query->is_archive()) {
        $query->set('posts_per_page', 12);
    }
});

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

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

После правок не ограничивайтесь открытием одной страницы. Проверьте несколько сценариев:

  • откройте первую страницу архива и вторую страницу подряд;
  • проверьте категории, теги и архивы дат, если они используются;
  • посмотрите исходный код страницы и убедитесь, что ссылки пагинации ведут на корректные URL;
  • проверьте, что сервер отдаёт 200 OK, а не 301/302 в цепочке редиректов;
  • если есть кеш, очистите его и повторите тест в режиме инкогнито.

Удобно проверить ответ через curl:

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

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

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

ОшибкаПочему возникаетЧто делать
404 только на /page/2/Не передан paged в кастомный запросИспользовать get_query_var('paged') и передавать его в WP_Query
Проблема появилась после переноса сайтаСтарые rewrite rules или конфликт slugПересохранить постоянные ссылки, проверить совпадения slug
Архив ломается только в одной темеКастомный шаблон архива или неправильный pre_get_postsСравнить с базовой темой и убрать лишние модификации запроса
После установки SEO-плагина начались редиректыПлагин меняет canonical или правила URLПроверить настройки редиректов и исключить конфликтующие правила

Что делать, если нужен более чистый технический стек

Если на сайте уже накопились дубли, мусорные архивы, лишние редиректы и тяжёлые настройки SEO-плагинов, иногда удобнее не чинить всё вручную по одному месту, а использовать инструмент, который помогает управлять техническими настройками централизованно. Например, Clearfy Pro от WPShop уместен там, где нужно убрать часть дублей, отключить лишнее и навести порядок в базовой технической конфигурации. Ссылка: Clearfy Pro.

Но даже в этом случае сначала стоит проверить причину 404. Плагин не заменяет диагностику rewrite rules, шаблонов и кастомных запросов.

Практические советы по безопасности и производительности

Когда проблема решена, не оставляйте сайт в режиме постоянных экспериментов. Любая правка .htaccess, шаблонов и функций темы должна идти через резервную копию и тестовую копию сайта.

  • не вызывайте flush_rewrite_rules() на каждом запросе;
  • не используйте query_posts() в новых шаблонах;
  • проверяйте пагинацию после обновления темы и SEO-плагинов;
  • если есть кеш страниц, очищайте его после изменения rewrite или шаблонов;
  • не правьте правила редиректов вслепую, если на сайте уже есть Nginx/Apache конфигурация.

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

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

×
-15%
на премиум-тему
Reboot

Создай сайт мечты
на WordPress!

Купить со скидкой »