Если у архива записей, рубрик или меток страницы пагинации внезапно стали отдавать 404, проблема обычно не в одном месте. Чаще всего ломается связка из правил перезаписи, настроек чтения, кэша или кода темы, который вмешался в запросы архива. В результате первая страница открывается нормально, а /page/2/, /page/3/ и дальше уже не существуют для WordPress.
Ниже — практический разбор: как быстро диагностировать источник ошибки, что именно править и как проверить, что пагинация снова работает без побочных эффектов.
Когда это действительно проблема пагинации, а не обычный 404
Сначала важно не перепутать сломанный архив с удалённой страницей или неверным URL. У пагинации есть характерный сценарий: главная страница архива открывается, а переход на следующую страницу даёт 404 только на части архивов или только после изменения темы/плагина.
Типичные симптомы
- страница рубрики открывается, но
/category/news/page/2/возвращает 404; - в админке записи и рубрики на месте, но в браузере вторая страница архива пустая;
- ошибка появилась после установки SEO-плагина, фильтрации контента или правки
pre_get_posts; - после смены постоянных ссылок проблема то исчезает, то возвращается;
- кэш отдаёт старую версию первой страницы, а пагинация уже не совпадает с реальными правилами.
Что проверить в первую очередь
- открывается ли
/page/2/у обычного архива записей; - ломается ли только один тип архива: рубрики, метки, авторы, таксономии;
- есть ли на сайте плагин кэширования или CDN;
- не меняли ли вы
query_posts()или глобальный основной запрос в теме; - не отключали ли вы пагинацию через фильтры в SEO-плагине или в шаблоне.
Диагностика: где именно ломается запрос
Самый полезный путь — понять, WordPress вообще строит правильный запрос или проблема возникает уже на уровне шаблона и кэша. Для этого не нужно гадать по симптомам: достаточно проверить несколько точек.
1. Сбросить правила перезаписи
Если проблема появилась после изменения структуры ссылок, добавления CPT или правки functions.php, начните с обновления правил перезаписи. Это не лечит все случаи, но часто убирает ложные 404 после изменений маршрутизации.
// Временно можно сделать через админку: Настройки → Постоянные ссылки → Сохранить без изменений.
// Если нужен программный сброс после активации темы или плагина:
register_activation_hook(__FILE__, function () {
flush_rewrite_rules();
});Важно: не вызывайте flush_rewrite_rules() на каждом запросе. Это тяжёлая операция и в продакшене только создаст лишнюю нагрузку.
2. Проверить, не ломает ли тему основной запрос
Частая ошибка — в шаблоне архива или в functions.php меняют запрос через pre_get_posts, но забывают учесть пагинацию. В итоге posts_per_page меняется, а параметр paged игнорируется или сбрасывается.
add_action('pre_get_posts', function (WP_Query $query) {
if (is_admin() || ! $query->is_main_query()) {
return;
}
if ($query->is_category()) {
$query->set('posts_per_page', 12);
// Не трогаем paged вручную, WordPress подставит его сам.
}
});Если в таком коде есть $query->set('paged', 1) или похожая логика, пагинация сломается почти гарантированно.
3. Посмотреть, не вмешивается ли кэш
Иногда 404 виден только у части пользователей или только на второй странице после очистки кэша. Это признак того, что кэшируетcя не тот вариант URL, либо правила кэша не учитывают пагинацию архива. Для проверки очистите:
- плагин кэша;
- серверный кэш, если он есть;
- CDN;
- браузерный кэш.
После этого откройте архив в режиме инкогнито и проверьте прямой URL второй страницы.
Пошаговое решение: что исправлять в зависимости от причины
Универсального патча нет, поэтому удобнее идти по сценариям. Ниже — рабочая последовательность, которая покрывает большинство реальных случаев.
Сценарий 1. Сломались правила перезаписи после изменений в структуре сайта
Если 404 появились сразу после переноса сайта, смены темы или добавления таксономии, сначала обновите постоянные ссылки в админке. Если это не помогло, проверьте, не создаёт ли плагин или тема конфликтующие rewrite rules.
Для кастомного типа записи убедитесь, что он зарегистрирован с поддержкой архивов и без конфликтующего rewrite:
add_action('init', function () {
register_post_type('news', [
'label' => 'Новости',
'public' => true,
'has_archive' => true,
'rewrite' => [
'slug' => 'news',
'with_front' => false,
],
'supports' => ['title', 'editor', 'thumbnail'],
]);
});Если архив CPT открывается, а пагинация нет, проверьте шаблон архива и фильтры, которые меняют запрос.
Сценарий 2. В теме неправильно выведена пагинация
Иногда проблема не в запросе, а в шаблоне. Если используется query_posts(), это почти всегда плохой знак: функция перезаписывает глобальный запрос и часто ломает пагинацию. Лучше использовать WP_Query или основной цикл WordPress.
Корректный вариант для кастомного цикла выглядит так:
$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>');
}
echo paginate_links([
'total' => $query->max_num_pages,
'current' => $paged,
]);
wp_reset_postdata();
}Если 'paged' => $paged отсутствует, вторая и последующие страницы будут вести себя непредсказуемо.
Сценарий 3. Пагинацию ломает фильтр pre_get_posts
Это очень частая причина на сайтах с кастомной сортировкой, выводом последних материалов на главной и отдельными архивами для рубрик. Ошибка возникает, когда разработчик меняет параметры запроса, но не ограничивает условие только нужным архивом.
Проверяйте, что код не затрагивает лишние страницы и не отключает основную пагинацию:
add_action('pre_get_posts', function (WP_Query $query) {
if (is_admin() || ! $query->is_main_query()) {
return;
}
if ($query->is_home()) {
$query->set('posts_per_page', 8);
}
});Если вы фильтруете рубрики, используйте точное условие $query->is_category() или $query->is_tax('taxonomy_name'). Не вешайте изменения на все фронтенд-запросы сразу.
Сценарий 4. 404 появляется только на части архивов
Тогда стоит проверить, не конфликтуют ли slug'и рубрик, меток и страниц. Например, если у страницы и рубрики одинаковый URL-слуг, WordPress может начать отдавать не тот объект или ломать маршрут пагинации. Это особенно заметно на сайтах, где много ручной структуры URL.
Что делать:
- проверить уникальность slug у страниц, рубрик, меток и CPT;
- убрать одинаковые базовые префиксы, если они пересекаются;
- после правок снова сохранить постоянные ссылки;
- очистить кэш и проверить архивы заново.
Как проверить, что решение сработало
Проверка должна быть не только визуальной. Если открыть вторую страницу архива и увидеть список записей, этого ещё недостаточно: важно убедиться, что WordPress отдаёт правильный HTTP-статус и не подменяет запрос.
Минимальный чек-лист проверки
- архив открывается на первой странице;
/page/2/и/page/3/возвращают 200, а не 404;- вторая страница содержит другие записи, а не дубли первой;
- в адресной строке URL соответствует реальной пагинации;
- после очистки кэша поведение не меняется;
- в логах сервера нет повторяющихся 404 на архивных страницах.
Быстрая проверка через WP-CLI
Если у вас есть доступ к WP-CLI, можно быстро проверить, не сломаны ли rewrite rules после изменений. Это не заменяет ручную проверку URL, но помогает понять, что проблема не в базе перезаписи.
wp rewrite flush --hardИспользуйте эту команду только осознанно: она пересобирает правила и может быть полезна после миграции или изменения структуры ссылок. Если после неё всё равно 404, причина почти наверняка в теме, фильтрах или конфликте URL.
Сравнение подходов: плагин, код или ручная правка
Если сайт поддерживает не один архив, а несколько типов контента, лучше заранее выбрать подход, который не будет ломаться после обновлений.
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| Ручная правка темы | Нужно исправить один конкретный архив | Быстро, без лишних зависимостей | Легко потерять правки при обновлении темы |
| Код в дочерней теме или мини-плагине | Есть кастомные запросы и фильтры | Проще контролировать логику пагинации | Нужна дисциплина в тестировании |
| Плагин для чистки и SEO-настроек | Нужно убрать лишние дубли и конфликты мета/архивов | Меньше ручного кода | Не решает ошибки в шаблоне, если там сломан запрос |
Если проблема связана не только с пагинацией, но и с дублями, мета-тегами и лишними техническими страницами, удобно сначала навести порядок в SEO-слое. В таких случаях иногда помогает Clearfy Pro, но он не заменяет исправление кода темы, если основной запрос уже сломан.
Частые ошибки и как их исправить
Используют query_posts() вместо нормального цикла
Это одна из самых частых причин поломанной пагинации. query_posts() перезаписывает глобальный запрос и часто приводит к тому, что WordPress теряет текущую страницу архива. Исправление простое: переходите на WP_Query или работайте с основным циклом.
Забывают передать paged в кастомный запрос
Без этого параметра WordPress не понимает, какую страницу архива нужно показать. Внешне кажется, что пагинация есть, но все ссылки ведут либо на первую страницу, либо в 404.
Сбрасывают paged в фильтрах
Иногда разработчик пытается «починить» запрос и вручную ставит paged = 1. Это ломает навигацию по архиву и может быть заметно только на второй или третьей странице. Не трогайте paged, если нет очень конкретной причины.
Не очищают кэш после правок
После изменения rewrite rules или шаблонов старый кэш может продолжать отдавать 404. Особенно это заметно на сайтах с серверным кэшем и CDN. После любых правок в маршрутизации очищайте все уровни кэширования.
Путают 404 с noindex
Это разные проблемы. Если страница открывается, но не индексируется, нужно смотреть мета robots и canonical. Если же URL реально отдаёт 404, проблема в маршрутизации, запросе или шаблоне. Не лечите одно как другое.
Что сделать для стабильности и производительности
Когда пагинация уже работает, стоит убрать причины, из-за которых ошибка может вернуться после следующего обновления темы или плагина.
- вынесите кастомные фильтры запросов в дочернюю тему или мини-плагин;
- не используйте
query_posts()в шаблонах; - проверяйте совместимость кэша с архивами и страницами пагинации;
- не создавайте одинаковые slug для страниц и архивов;
- после изменения структуры ссылок всегда проверяйте хотя бы две страницы архива;
- если правите SEO-слой, отдельно тестируйте HTTP-статус и canonical.
Если на сайте много технических настроек и вы регулярно чистите дубли, имеет смысл держать такие изменения в одном месте, а не размазывать по шаблонам. Это упрощает поиск причины, когда очередной архив внезапно начинает отдавать 404.
Практический ориентир простой: если первая страница архива открывается, а вторая нет, сначала проверяйте rewrite rules и основной запрос; если ломается только один тип архива, ищите конфликт slug или фильтр в теме; если поведение плавающее, смотрите кэш. Такой порядок экономит время лучше, чем попытка «починить» всё сразу.