Проблема с дублями пагинации в WordPress обычно всплывает не в теории, а в Search Console: в индекс попадают страницы вида /page/2/, /page/3/, иногда еще и параметры сортировки или фильтра. На небольшом сайте это может быть незаметно, но на блоге, новостнике или каталоге архивы быстро разрастаются, а поисковик начинает тратить обход на страницы, которые не дают новой ценности.
Важно не путать две задачи: закрыть дубли и не сломать доступность контента. Если просто поставить noindex на все страницы пагинации без проверки canonical, хлебных крошек и внутренних ссылок, можно получить хаос в индексации. Ниже — рабочая схема, которую можно применить к архивам записей, рубрикам и таксономиям.
Когда проблема действительно есть
Сначала стоит убедиться, что вы боретесь именно с дублями, а не с нормальной пагинацией. Страницы архива /category/news/page/2/ сами по себе не ошибка. Ошибка начинается, когда:
- в индекс попадают страницы пагинации с почти одинаковым набором заголовков и метаописаний;
- поисковик показывает в выдаче не первую страницу архива, а вторую или третью;
- в отчете по страницам много URL с параметрами, которые дублируют основной архив;
- внутренние ссылки ведут на разные варианты одного и того же списка записей.
Что проверить в первую очередь
- открывается ли у страниц пагинации корректный
<link rel="canonical">; - не генерирует ли тема одинаковый
<title>для всех страниц архива; - нет ли плагина, который добавляет
noindexна все архивы без разбора; - не создают ли фильтры и сортировки дополнительные URL с тем же контентом.
Если у вас уже есть плагин для SEO, сначала посмотрите его настройки. Часто проблема решается там, а не в коде. Но если нужен точечный контроль, лучше сделать это через тему или мини-плагин, чтобы не зависеть от лишней логики.
Что именно закрывать: пагинацию, параметры или оба варианта
Не все дубли одинаковы. Пагинация архива — это один сценарий. URL с параметрами вроде ?sort=popular или ?filter=... — другой. Если закрыть все подряд, можно случайно убрать из индекса полезные посадочные страницы. Поэтому сначала разделите источники дублей.
| Вариант | Когда подходит | Минус |
|---|---|---|
noindex,follow для страниц пагинации | Архивы с большим числом страниц, где важна только первая | Страницы остаются доступны, но не должны ранжироваться |
| canonical на первую страницу архива | Когда вторые страницы почти не несут самостоятельной ценности | Нужно аккуратно проверить поведение темы и SEO-плагина |
| robots.txt | Для грубого отсечения технических параметров | Легко переусердствовать и закрыть полезные URL |
На практике для WordPress чаще всего достаточно noindex,follow для страниц пагинации архивов и отдельной обработки параметров, если они реально создают дубли.
Пошаговое решение через код
Если у вас нет готовой настройки в SEO-плагине или вы хотите контролировать поведение точечно, можно добавить логику в functions.php дочерней темы или в небольшой mu-plugin. Ниже пример, который ставит noindex,follow только на страницы пагинации архивов, рубрик, меток и таксономий.
<?php
add_filter('wp_robots', function (array $robots) {
if (is_paged() && (is_home() || is_archive() || is_search())) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
});Этот вариант использует стандартный фильтр wp_robots, который есть в современных версиях WordPress. Он безопаснее, чем вручную печатать мета-тег в шаблоне, потому что не ломает совместимость с другими плагинами, которые тоже работают с robots.
Если нужно закрыть только архивы записей и таксономий, но оставить поиск открытым для индексации, сузьте условие:
<?php
add_filter('wp_robots', function (array $robots) {
if (is_paged() && (is_home() || is_archive())) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
});Когда нужен canonical на первую страницу
Если тема или SEO-плагин не выставляет canonical корректно, можно добавить его вручную. Но делать это стоит только после проверки текущего HTML. Слишком агрессивный canonical на первую страницу иногда мешает поисковику понимать структуру архива.
<?php
add_action('wp_head', function () {
if (is_paged() && (is_home() || is_archive())) {
$canonical = get_pagenum_link(1);
echo '<link rel="canonical" href="' . esc_url($canonical) . '" />' . "\n";
}
}, 1);Этот прием имеет смысл только если вы точно понимаете, что canonical от темы или SEO-плагина неверный. Иначе вы рискуете создать две версии canonical на странице.
Диагностика после внедрения
Проверять нужно не только исходный HTML, но и то, как страница отдается сервером и как ее видит поисковый робот. После правки откройте несколько URL:
- основной архив, например
/blog/; - страницу пагинации
/blog/page/2/; - архив рубрики
/category/news/page/3/; - страницу поиска, если она у вас индексируется.
Дальше проверьте:
- есть ли в исходнике
meta robotsили заголовокX-Robots-Tagс нужным значением; - не дублируется ли canonical;
- не исчезли ли ссылки на следующую и предыдущую страницы архива;
- не изменился ли статус ответа на
200 OK.
Удобно смотреть это через DevTools, curl или инструменты проверки URL в Search Console. Пример запроса:
curl -I https://example.com/blog/page/2/Если вы используете SEO-плагин, сравните результат до и после. Иногда плагин уже ставит нужный robots, а ваш код добавляет второй слой. В таком случае лучше оставить один источник правды.
Частые ошибки и как их исправить
Ставят noindex на все архивы подряд
Это самая частая ошибка. В результате из индекса исчезают рубрики, теги и страницы авторов, которые могли приносить трафик. Исправление простое: ограничьте условие только пагинацией или только теми архивами, которые реально дублируют контент.
Закрывают пагинацию в robots.txt
Так делать можно только если вы понимаете последствия. Disallow не дает поисковику нормально увидеть директивы на странице, а значит canonical и noindex могут не сработать так, как вы ожидаете. Для большинства сайтов безопаснее использовать noindex,follow, а не блокировку в robots.
Оставляют одинаковые title и description
Даже если страницы закрыты от индексации, одинаковые мета-теги мешают диагностике и путают админов. Для пагинации лучше явно добавлять номер страницы в title, если она остается доступной пользователю.
Добавляют canonical на первую страницу без проверки SEO-плагина
Если canonical уже есть, второй тег создаст конфликт. Поисковик может проигнорировать оба варианта или выбрать не тот URL. Перед правкой всегда смотрите исходный код страницы.
Чек-лист перед публикацией изменений
- Проверил, какие именно URL создают дубли.
- Убедился, что пагинация не закрывает полезные страницы.
- Проверил текущий canonical и robots в исходном коде.
- Добавил
noindex,followтолько туда, где это нужно. - Открыл несколько URL вручную и убедился, что они отдаются с
200. - Сравнил поведение с SEO-плагином, чтобы не было двойной логики.
Практика по безопасности и производительности
Если вы вносите правки через код, не редактируйте родительскую тему напрямую. Используйте дочернюю тему или mu-plugin, иначе обновление затрет изменения. Для сайтов с несколькими редакторами лучше вынести логику в отдельный мини-плагин: так проще отключать и тестировать.
Если у вас много технических дублей не только в пагинации, но и в метках, архиве дат, вложениях и служебных страницах, имеет смысл сначала навести порядок в общей SEO-логике. В таких случаях иногда удобнее использовать специализированный инструмент вроде Clearfy Pro, но только как средство управления настройками, а не как замену проверке исходного HTML и индексации.
Еще один практический момент: не добавляйте тяжелую логику в wp_head без необходимости. Для robots и canonical достаточно простых условий и стандартных фильтров WordPress. Чем меньше лишнего кода на каждой странице, тем меньше риск конфликтов с темой и плагинами.
Если после изменений в Search Console страницы пагинации продолжают индексироваться, не спешите добавлять новые запреты. Сначала проверьте, не осталось ли на них внутренних ссылок с параметрами, не генерирует ли карта сайта лишние URL и не переопределяет ли SEO-плагин ваши настройки. В WordPress такие конфликты чаще всего решаются не «еще одним плагином», а удалением дублирующей логики.