Дубли в WordPress не всегда выглядят как одинаковые страницы с разными URL. Часто проблема прячется в canonical, пагинации архивов, параметрах сортировки и страницах, которые отдают один и тот же контент под разными адресами. В результате поисковик видит несколько вариантов одной сущности и начинает выбирать не тот URL, который нужен вам.
Ниже разберём, как быстро найти источник дублей, что править в коде и как проверить, что после изменений сайт не потерял нужные страницы из индекса.
Когда проблема действительно в canonical и пагинации
Сначала стоит убедиться, что речь не о банальном дублировании контента в записях. Для этой статьи важны именно технические дубли: одинаковые или почти одинаковые страницы, которые отличаются URL, но показывают один и тот же набор материалов.
Типичные симптомы
- в Search Console появляются дубли с пометкой про выбранный Google canonical;
- в индексе есть и первая страница архива, и её пагинация, хотя вы этого не планировали;
- одна и та же категория доступна через несколько URL с параметрами;
- в исходном коде у страниц стоят разные canonical, чем вы ожидаете;
- страницы фильтров или сортировки начинают конкурировать с основным архивом.
Что проверить в первую очередь
- исходный код страницы: тег
<link rel="canonical">; - robots meta: не закрывает ли он нужные страницы случайно;
- архивы таксономий и их пагинацию;
- URL с параметрами
?orderby=,?paged=,?amp, если они есть; - настройки SEO-плагина, если он переопределяет canonical.
Диагностика: где именно рождается дубль
Удобнее всего начать с пары реальных URL. Откройте основную страницу архива и её пагинацию, затем сравните исходный код. Если canonical указывает на саму страницу пагинации, а не на основную страницу архива, это уже источник путаницы. Если canonical у всех страниц ведёт на первую страницу, это тоже не всегда правильно: для пагинации поисковику нужен доступ к каждой странице списка, а не принудительное склеивание всего в один URL.
Проверить canonical можно и через командную строку, если есть доступ к серверу:
curl -s https://example.com/category/news/page/2/ | grep -i canonicalЕсли на странице есть несколько canonical или они подставляются плагином и темой одновременно, нужно оставить только один источник правды.
Пошаговое решение
1. Уберите конфликтующие canonical из темы и плагинов
WordPress сам выводит canonical через ядро. Многие SEO-плагины делают то же самое, а тема иногда добавляет свой вариант. В итоге в HTML оказывается несколько одинаковых или противоречивых тегов. Если вы пишете код в теме, не дублируйте то, что уже делает ядро или SEO-плагин.
Если нужно явно задать canonical для архивов, делайте это через фильтр wpseo_canonical только в случае Yoast SEO или через собственную логику, если SEO-плагина нет. Для базового WordPress безопаснее не трогать canonical без необходимости.
2. Настройте canonical для пагинации архивов
Для архивов логика обычно такая: первая страница архива должна иметь canonical на саму себя, а страницы пагинации — на свой собственный URL, а не на первую страницу. Иначе поисковик может считать вторую и третью страницы дублями первой.
Если тема или плагин ломают canonical, можно добавить корректировку через wp_head. Ниже пример для архивов категорий и меток:
add_action('wp_head', function () {
if (is_category() || is_tag() || is_tax()) {
global $wp_query;
$paged = max(1, (int) get_query_var('paged'));
if ($paged > 1) {
$url = get_pagenum_link($paged);
echo '<link rel="canonical" href="' . esc_url($url) . '" />' . "\n";
}
}
}, 1);Этот код не должен использоваться вместе с другим кодом, который выводит canonical для тех же страниц. Смысл в том, чтобы убрать конфликт, а не добавить ещё один тег.
3. Закройте от индексации служебные URL с параметрами
Если дубли создаются параметрами сортировки, фильтра или поиска, canonical не всегда решает проблему. Для служебных URL лучше либо не пускать их в индекс, либо отдавать один канонический вариант.
Например, если у вас есть сортировка вида ?orderby=price и она не нужна в поиске, можно добавить noindex для таких страниц:
add_action('wp_head', function () {
if (!empty($_GET['orderby'])) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
});Это не заменяет canonical, но помогает убрать мусорные URL из индекса. Если у вас уже стоит SEO-плагин, проверьте, не делает ли он то же самое автоматически.
4. Проверьте архивы автора, дат и вложений
Часто дубли появляются не в категориях, а в служебных архивах. Архивы автора и даты могут повторять контент рубрик, а страницы вложений иногда дублируют записи или изображения без пользы для поиска. Если такие страницы не нужны, их лучше закрыть или перенаправить на основной контент.
Для вложений обычно безопаснее редиректить на родительскую запись или сам файл, если это действительно медиа-страница без ценности. Для архивов автора и дат решение зависит от структуры сайта: иногда их стоит оставить, иногда закрыть от индексации.
Сравнение подходов: плагин, код или ручная настройка
| Подход | Когда подходит | Минус |
|---|---|---|
| SEO-плагин | Если нужен быстрый контроль canonical и robots без правки темы | Может конфликтовать с темой или другим SEO-плагином |
| Код в теме или mu-plugin | Если проблема точечная и нужна предсказуемая логика | Нужно аккуратно тестировать после обновлений |
| Ручная настройка в админке | Если дубли создаёт одна конкретная таксономия или архив | Не решает системные конфликты в шаблонах |
Проверка результата после внедрения
После правок не ограничивайтесь просмотром страницы в браузере. Нужно проверить именно HTML и индексацию.
- Откройте страницу и убедитесь, что canonical один.
- Проверьте пагинацию: у
/page/2/должен быть свой canonical. - Посмотрите исходный код на наличие
noindexу служебных URL. - В Search Console отправьте на повторную проверку проблемные страницы.
- Через несколько дней сравните, исчезли ли дубли в отчётах по страницам.
Если есть доступ к серверу, можно быстро проверить заголовки и HTML так:
curl -I https://example.com/category/news/page/2/
curl -s https://example.com/category/news/page/2/ | grep -iE 'canonical|robots'Частые ошибки и как их исправить
Canonical ведёт на главную страницу архива для всех страниц пагинации
Так делать не стоит, если вы хотите, чтобы в индексе были отдельные страницы списка. Исправление: canonical должен совпадать с текущим URL пагинации.
SEO-плагин и тема выводят canonical одновременно
Оставьте один источник. Обычно проще отключить лишний вывод в теме и доверить canonical SEO-плагину или ядру WordPress.
Служебные URL закрыты noindex, но продолжают плодить дубли
Это значит, что поисковик всё ещё видит их как альтернативные версии. Добавьте canonical на основной URL или уберите генерацию этих адресов на уровне шаблона.
Пагинация закрыта от индексации целиком
Иногда это делают слишком агрессивно. В результате поисковик хуже понимает структуру архива. Если страницы списка важны, не закрывайте их без причины.
Практические советы по безопасности и производительности
Если вы правите canonical и robots кодом, не вставляйте изменения прямо в файл темы без контроля версий. Лучше использовать дочернюю тему или небольшой mu-plugin. Так обновление темы не сотрёт исправление.
Перед изменениями сделайте резервную копию и проверьте правки на staging-копии. Особенно это важно, если сайт уже получает трафик из поиска: ошибка в canonical может быстро переориентировать индексацию не туда.
Если дубли создаются из-за тяжёлых архивов, имеет смысл дополнительно сократить количество лишних шаблонов, отключить ненужные архивы и проверить, не генерирует ли тема отдельные страницы для медиа, авторов и дат без реальной пользы. В проектах, где нужен более широкий контроль над дублями и технической чисткой, обычно помогает связка ручных правок и плагина для SEO-оптимизации, например Clearfy Pro: https://wpshop.ru/plugins/clearfy.
Если после внедрения правок дубли не исчезают, не добавляйте новые правила вслепую. Сначала найдите конкретный шаблон или плагин, который генерирует лишний URL, и только потом меняйте логику. В WordPress это почти всегда быстрее и безопаснее, чем пытаться лечить симптом на уровне индексации.