Дубли страниц пагинации в WordPress обычно всплывают не сразу: сайт уже индексируется, а в поиске начинают появляться лишние URL вида /page/2/, ?paged=2, варианты с параметрами фильтров или даже копии архивов без канонического адреса. На небольшом сайте это выглядит как шум, на большом — как реальная проблема с краулингом и распределением веса.
Ниже разберём не абстрактную теорию, а рабочий сценарий: как понять, что у вас именно дубли пагинации, где они берутся и что править в WordPress без лишних костылей.
Как понять, что проблема именно в дублях пагинации
Сначала стоит отделить нормальную пагинацию от дублей. Сам факт наличия страниц /page/2/ не ошибка: это обычные архивные страницы. Проблема начинается, когда один и тот же контент доступен по нескольким адресам или когда поисковик видит страницы пагинации как самостоятельные дубли без понятного канонического URL.
Типичные признаки
- в индексе есть и
/category/news/page/2/, и/category/news/?paged=2; - одна и та же страница открывается с разными параметрами сортировки, фильтра или UTM;
- в Search Console растёт число страниц, которые не несут уникального контента;
- в исходном коде у пагинации нет корректного
rel="canonical"; - архивы с пагинацией доступны и по ЧПУ, и через query string.
Что проверить в первую очередь
- откройте несколько страниц архива и сравните URL в адресной строке;
- посмотрите исходный код на наличие canonical;
- проверьте, не генерирует ли тема или плагин альтернативные ссылки на ту же страницу;
- если есть фильтры, убедитесь, что они не создают индексируемые копии без необходимости.
Откуда берутся дубли страниц пагинации
В WordPress дубли чаще всего появляются не из-за самой пагинации, а из-за сочетания шаблона, плагинов и правил индексации. Один и тот же архив может быть доступен через разные маршруты, а тема при этом не задаёт канонический адрес достаточно жёстко.
Частые источники дублей
- параллельная работа ЧПУ и параметра
pagedв query string; - фильтры по таксономиям или метаполям, которые создают отдельные URL;
- плагины кеша, которые кэшируют разные варианты одной и той же страницы как отдельные;
- SEO-плагины, которые не отключают индексацию служебных страниц;
- кастомные шаблоны архивов, где canonical не совпадает с фактическим адресом.
Если у вас уже есть отдельная статья про пагинацию, не пытайтесь лечить дубли заменой плагина пагинации. Обычно проблема не в нумерации страниц, а в том, как WordPress и тема формируют адреса и мета-теги.
Пошаговое решение: что править в WordPress
Ниже — последовательность, которая обычно даёт предсказуемый результат. Сначала приводим к одному виду адреса, потом закрываем служебные варианты от индексации, затем проверяем canonical и robots.
Шаг 1. Оставьте один основной формат URL
Если архив уже работает на ЧПУ, не дублируйте его через параметры. Ссылки вида ?paged=2 лучше не использовать в шаблонах и виджетах, если есть нормальная пагинация через /page/2/. Для пользовательских запросов в теме или плагине ориентируйтесь на paged, а не на собственные параметры, если нет веской причины делать иначе.
<?php
$paged = max( 1, get_query_var( 'paged' ) );
$query = new WP_Query( array(
'post_type' => 'post',
'posts_per_page' => 10,
'paged' => $paged,
) );
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
the_title( '<h2>', '</h2>' );
}
wp_reset_postdata();
}
?>Если в шаблоне используется query_posts(), это почти всегда плохой кандидат на доработку. Он ломает глобальный запрос и часто провоцирует путаницу с пагинацией и canonical.
Шаг 2. Проверьте canonical на страницах архива
Для страниц пагинации canonical должен указывать на саму текущую страницу, а не на первую страницу архива. Иначе поисковик может считать вторую и последующие страницы дублями первой.
Если тема или SEO-плагин не справляются, можно добавить свой canonical для архивов:
<?php
add_action( 'wp_head', function () {
if ( is_archive() || is_home() || is_search() ) {
$canonical = get_pagenum_link( max( 1, get_query_var( 'paged' ) ) );
echo '<link rel="canonical" href="' . esc_url( $canonical ) . '" />' . "\n";
}
}, 1 );Этот вариант не заменяет SEO-плагин, а помогает, когда тема выводит некорректный canonical или не выводит его на архивных страницах вообще.
Шаг 3. Закройте служебные параметры от индексации
Если у вас есть фильтры, сортировка или служебные параметры, которые не должны попадать в индекс, их лучше не оставлять как отдельные посадочные страницы без необходимости. Для таких URL обычно достаточно noindex,follow, если они нужны пользователям, но не должны ранжироваться.
Пример для страниц с параметрами фильтра:
<?php
add_action( 'wp_head', function () {
if ( isset( $_GET['filter'] ) || isset( $_GET['sort'] ) ) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
}, 1 );Важно: не ставьте noindex на все страницы пагинации подряд, если архив реально нужен для обхода и навигации. Обычно закрывают именно параметрические копии, а не нормальные страницы /page/2/.
Шаг 4. Уберите лишние варианты URL на уровне редиректов
Если сайт уже накопил дубли, одних мета-тегов мало. Нужны 301-редиректы с неканонических вариантов на основной адрес. Это особенно актуально для старых URL с query string.
Пример редиректа с ?paged=2 на ЧПУ-версию лучше делать аккуратно и только для понятных случаев:
<?php
add_action( 'template_redirect', function () {
if ( is_admin() ) {
return;
}
if ( isset( $_GET['paged'] ) ) {
$paged = absint( $_GET['paged'] );
if ( $paged > 1 ) {
$target = get_pagenum_link( $paged );
wp_safe_redirect( $target, 301 );
exit;
}
}
} );Перед внедрением такого кода проверьте, не используется ли параметр paged в другом месте сайта как часть логики фильтрации. Иначе можно случайно сломать рабочие страницы.
Сравнение подходов: плагин, код или настройка SEO
| Подход | Когда подходит | Минус |
|---|---|---|
| SEO-плагин | Нужно быстро настроить canonical и robots без правки темы | Не всегда решает дубли, созданные шаблоном или кастомным запросом |
| Код в теме или mu-plugin | Есть конкретный источник дублей и нужен точечный контроль | Требует проверки после обновлений темы |
| Редиректы на сервере | Уже есть накопленные неканонические URL в индексе | Можно ошибиться и задеть рабочие параметры |
Если сайт поддерживается регулярно, практичнее сочетать SEO-настройки и небольшой код в mu-plugin. Так решение не исчезнет при смене темы.
Проверка результата после внедрения
После правок не ограничивайтесь открытием главной страницы. Проверять нужно именно те URL, где раньше были дубли.
Что смотреть вручную
- откройте
/page/2/и убедитесь, что canonical указывает на этот же URL; - проверьте, что
?paged=2редиректит на канонический адрес; - посмотрите исходный код страниц с фильтрами: там должен быть
noindex,follow, если вы его добавляли; - сравните заголовки ответа сервера для канонического и неканонического URL.
Команда для быстрой проверки заголовков
curl -I https://example.com/category/news/page/2/В ответе важно увидеть корректный код ответа, отсутствие лишних цепочек редиректов и, если вы проверяете параметрический URL, ожидаемый 301 на основной адрес.
Частые ошибки и как их исправить
Ставят noindex на всю пагинацию
Это частая реакция на дубли, но не всегда правильная. Если закрыть все страницы пагинации без разбора, можно ухудшить обход архива и потерять нормальную навигацию. Сначала ищите именно параметрические и служебные копии.
Оставляют query string и ЧПУ одновременно
Если сайт отдаёт и /page/2/, и ?paged=2, поисковик будет выбирать сам, а не вы. Нужен один основной формат и редирект со второго.
Не сбрасывают глобальный запрос после кастомного WP_Query
Если в шаблоне после пользовательского запроса забыть wp_reset_postdata(), могут поехать хлебные крошки, canonical и другие элементы шаблона. Это не всегда видно сразу, но для SEO-страниц пагинации критично.
Редиректят всё подряд через template_redirect
Слишком общий редирект легко ломает фильтры, поиск и страницы с параметрами. Логика должна быть узкой: только конкретный неканонический вариант URL и только понятный сценарий.
Практические советы по безопасности и производительности
Если вы правите пагинацию кодом, не разбрасывайте логику по шаблонам. Лучше вынести её в отдельный mu-plugin или маленький функциональный плагин. Так проще отключить изменения, если что-то пошло не так после обновления темы.
- всегда экранируйте URL через
esc_url(); - проверяйте входящие параметры через
absint()иsanitize_text_field()по ситуации; - не добавляйте тяжёлые запросы в
wp_head; - не создавайте отдельные индексируемые страницы для каждого параметра фильтра без стратегии;
- после правок очистите кеш страницы и объектный кеш, если он используется.
Если на сайте уже много технических дублей, полезно сначала почистить лишние мета-теги, архивные копии и служебные страницы. В таких задачах часто помогает аккуратная настройка SEO и чистки сайта через Clearfy Pro, если он уже используется в проекте, но сам принцип остаётся тем же: сначала нормализовать URL, потом закрыть мусор от индекса.
Как понять, что всё сработало
Результат считается нормальным, если у канонических страниц пагинации остался один основной адрес, параметрические копии редиректятся или закрыты от индексации, а в Search Console постепенно уменьшается число лишних URL. Быстрого эффекта в индексе может не быть: поисковику нужно время на переобход, поэтому проверяйте не только отчёты, но и фактические заголовки, canonical и HTML исходной страницы.