wplog.ru wordpress wplog.ru

Как найти и убрать дублирующиеся ссылки пагинации в WordPress

Дубли пагинации в WordPress обычно всплывают не там, где их ждут: в архивах категорий, тегов, авторов, на страницах поиска и в результатах фильтрации. Внешне сайт работает нормально, но поисковик видит несколько URL с одинаковым или почти одинаковым контентом. Это не всегда критическая ошибка, но для SEO и индексации лишние варианты лучше убрать или хотя бы жёстко нормализовать.

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

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

Типичный сценарий: у категории есть страницы /category/news/, /category/news/page/2/, /category/news/page/3/. Это нормально. Проблема начинается, когда один и тот же набор записей доступен по нескольким адресам:

  • /category/news/page/2/ и /category/news/?paged=2;
  • /page/2/ и ?paged=2 на главной или в архиве;
  • страницы пагинации с параметрами сортировки, фильтра или поиска;
  • архивы с дублирующимся canonical, который указывает не на текущую страницу, а на первую страницу серии.

Если у вас включены SEO-плагины, кэш, фильтры или кастомные шаблоны, дубли часто появляются не из-за ядра WordPress, а из-за темы или дополнительной логики в pre_get_posts, paginate_links() и генерации canonical.

Диагностика: где именно рождается дубль

Сначала нужно понять, это проблема ссылок, canonical или индексации. Проверять лучше в таком порядке.

1. Посмотреть исходный HTML

Откройте проблемную страницу и проверьте:

  • есть ли в <head> несколько тегов rel="canonical";
  • не указывает ли canonical на первую страницу вместо текущей;
  • не выводятся ли в пагинации ссылки с параметрами, хотя должны быть ЧПУ-адреса;
  • не дублируется ли блок пагинации в шаблоне.

Если canonical уже сломан, поисковик может игнорировать часть ваших настроек noindex.

2. Проверить URL-паттерны

Сравните адреса, которые реально открываются у одной и той же страницы. Часто проблема в том, что сайт отдаёт контент и на ЧПУ-адрес, и на URL с параметром paged. Для пользователя это почти незаметно, а для индексации — два разных URL.

3. Посмотреть, что отдаёт WordPress в запросе

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

Что делать: рабочие варианты исправления

Универсального решения нет. Обычно хватает одного из трёх подходов: нормализовать ссылки, поставить правильный canonical или закрыть от индексации технические варианты URL.

Вариант 1. Привести пагинацию к одному формату

Если у вас в шаблоне вручную собрана пагинация, используйте стандартные функции WordPress. Для архивов и списков записей безопаснее опираться на paginate_links(), а не собирать адреса строкой.

<?php
$big = 999999999;

echo paginate_links([
    'base'      => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
    'format'    => '?paged=%#%',
    'current'   => max(1, get_query_var('paged')),
    'total'     => $wp_query->max_num_pages,
    'prev_text' => '« Назад',
    'next_text' => 'Вперёд »',
]);
?>

Этот вариант не решает SEO-дубли сам по себе, но убирает технический хаос, когда часть ссылок строится как /page/2/, а часть как ?paged=2.

Вариант 2. Исправить canonical для пагинированных архивов

Если SEO-плагин или тема ставит canonical на первую страницу архива, это нужно поправить. В WordPress можно отфильтровать canonical и оставить текущую страницу пагинации как каноническую.

<?php
add_filter('get_canonical_url', function ($canonical, $post) {
    if (is_admin() || ! is_singular()) {
        return $canonical;
    }

    return $canonical;
}, 10, 2);

add_filter('wpseo_canonical', function ($canonical) {
    if (is_paged()) {
        return get_pagenum_link(get_query_var('paged'));
    }

    return $canonical;
});

Второй фрагмент относится к Yoast SEO, если он установлен. Если у вас другой SEO-плагин, ищите его фильтр canonical в документации, а не пытайтесь править HTML через буферизацию страницы.

Вариант 3. Закрыть технические варианты URL от индексации

Если дубли возникают из-за параметров сортировки, фильтров или поиска, лучше не пытаться индексировать такие страницы. Для них обычно достаточно noindex,follow и нормального canonical на основную версию.

Пример для поисковых и параметрических страниц:

<?php
add_action('wp_head', function () {
    if (is_search() || ! empty($_GET['paged']) || ! empty($_GET['sort']) || ! empty($_GET['filter'])) {
        echo '<meta name="robots" content="noindex,follow" />' . "\n";
    }
}, 1);

Это не замена SEO-плагину, а точечная страховка для технических URL. Если у вас уже есть генерация robots meta в плагине, не выводите второй тег без проверки — получите конфликт.

Когда лучше использовать плагин, а когда код

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

ПодходКогда подходитМинус
Код в теме или mu-pluginОдин-два проблемных архива, кастомная пагинацияНужно тестировать после обновлений темы
SEO-плагинНужно управлять canonical и robots без правки шаблоновНе всегда покрывает нестандартные URL
Комбинированный вариантЕсть и технические параметры, и ошибки в canonicalЛегко сделать конфликт настроек

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

Пошаговое решение без лишнего риска

  1. Соберите список проблемных URL: основная страница архива, вторая и третья страницы, варианты с параметрами.
  2. Проверьте canonical на каждой из них.
  3. Уберите ручную генерацию ссылок пагинации, если она есть.
  4. Закройте от индексации URL с параметрами, которые не несут уникального контента.
  5. После правок очистите кэш страницы и объектный кэш, если он используется.
  6. Переобойдите страницу в браузере и проверьте исходный HTML.

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

Проверка должна быть не на глаз, а по конкретным признакам.

  • На странице пагинации в исходном коде есть один canonical, и он указывает на текущий URL.
  • Ссылки пагинации ведут в один формат, без смешивания ?paged= и /page/2/.
  • Технические URL с параметрами отдают noindex,follow, если это было задумано.
  • В Search Console после переобхода уменьшается число страниц с пометками о дублирующемся, выбранном Google canonical или альтернативном canonical.

Для быстрой проверки можно открыть страницу в режиме просмотра исходника и найти canonical и robots. Если у вас есть доступ к серверу, полезно ещё проверить заголовки ответа через curl -I, но для meta robots этого недостаточно — он находится в HTML.

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

Два canonical на одной странице

Обычно это конфликт темы и SEO-плагина. Оставьте только один источник генерации canonical. Если плагин уже управляет тегом, уберите ручной вывод из header.php или из подключаемого кода.

Canonical указывает на первую страницу архива

Такое часто делают шаблоны, которые считают пагинацию «неважной». Для SEO это спорное решение: поисковик может проигнорировать вторую и третью страницы. Если страницы реально нужны, canonical должен быть на саму страницу пагинации.

Пагинация строится с параметром, а не с ЧПУ

Причина обычно в неправильной базе для paginate_links() или в кастомном запросе. Проверьте, что используется текущий permalink-формат сайта, а не собранный вручную URL.

Закрыли всё через noindex

Это частая перегибка. Не стоит ставить noindex на все страницы пагинации подряд, если они нужны для обхода каталога или архива. Сначала уберите именно технические дубли, а не полезные страницы.

Что ещё стоит проверить для производительности и безопасности

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

Полезно:

  • не индексировать страницы поиска и сортировки без необходимости;
  • не плодить параметры в URL, если они не меняют контент существенно;
  • не выводить пагинацию через JavaScript без серверной версии ссылок;
  • после правок очистить page cache и, если есть, object cache;
  • не править canonical через несколько плагинов одновременно.

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

×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее