Контроль дублированного контента в WordPress

К счастью, есть несколько способов и технологий, чтобы побороть дубли контента:

  • тег meta nofollow
  • тег meta noindex
  • атрибут nofollow
  • директивы robots
  • тег canonical
  • использование цитат

Разберемся с каждым по отдельности.

Теги meta noindex и nofollow

Эти теги принадлежат к секции <head> и размещаются соответственно в header.php

<meta name="googlebot" content="index,archive,follow" />

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

Понятно, что большинство блогеров хочет, чтобы их статьи попадали в индекс, но при этом не возникало дублей, поэтому для страниц архивов оптимальной будет такая конфигурация

<meta name="googlebot" content="noindex,noarchive,follow" />

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

И, конечно, мы можем сообщить поисковику, что данная страница не должна индексироваться и не нужно следовать по любым ссылкам с этой страницы

<meta name="googlebot" content="noindex,noarchive,nofollow" />

Учитывая эти теги, мы можем лучшим способом настроить борьбу с дублированным контентом автоматически. Для этого внесем условия в header.php, в соответствии с которыми страницы будут разрешены либо запрещены к индексации, и данные правила применительно ко всем поисковым роботам.

<?php if(is_home() && (!$paged || $paged == 1) || is_single()) { ?>
<meta name="robots"  content="index,archive,follow,noodp" />
<?php } else { ?>
<meta name="robots" content="noindex,noarchive,follow,noodp" />
<?php } ?>

К индексации разрешены: главная страница, единичная страница записи и только первые страницы многостраничных страниц (тавтология, но, надеюсь, поняли), речь идет для случаев, когда на главной странице выводится определенное количество записей и есть возможность перейти на следующие страницы с остальными. Все остальные — запрещены к индексации, но разрешено следовать по ссылкам с них: архивы, теги, результаты поиска по сайту и т.д..

А если мы хотим запретить индексировать один отдельно взятый пост? Есть много плагинов для этой цели, но все делается своими руками гораздо проще. Добавляем в секцию <head> файла шаблона темы header.php

<?php if ($post->ID == 77) { echo '<meta name="robots" content="noindex,noarchive">'; }

Где 77 — ID выбранной записи.

Конечно, нет ничего плохого в том, чтобы индексировались дополнительные страницы сайта, плохо — если они содержат полностью не уникальный контент (с точки зрения вашего сайта). Но если на этих страницах формируются свои собственные фрагменты текста из цитат записей, то их можно индексировать, для этого немного поменяем условие

<?php if(is_home() && (!$paged || $paged == 1) || is_category() || is_tag() || is_single()) { ?>.......

По своему усмотрению и исходя из концепции сайта можно добавлять или убирать из индексирования следующие страницы

  • is_home()
  • is_page()
  • is_admin()
  • is_author()
  • is_date()
  • is_search()
  • is_404()
  • is_paged()
  • is_category()
  • is_tag()
  • is_date()

Полный перечень и описание тегов можно найти тут

Также дубли возникают на страницах записей с большим количеством комментариев, где они разбиваются на подстраницы. Эти дубли можно запретить к индексированию путем указания канонической страницы. Укажем в functions.php

function noDuplicateContentforComments() {
global $cpage, $post;
if($cpage > 1) {
echo "n".'<link rel="canonical" href="'.get_permalink($post->ID).'" />'."n";
}}
add_action('wp_head', 'noDuplicateContentforComments');

Этот код генерирует и добавляет в секцию <head> ссылку на каноническую страницу. Поисковик видит это и индексирует только ее, а все остальные дубли, которые на нее ссылаются — нет.

Атрибут Nofollow

Еще одна возможность запретить индексировать ненужный контент — использовать спорный атрибут ссылок нофолоу.

<a href="https://domain.tld/path/target/" rel="nofollow">Эта ссылка запрещена для перехода ботам</a>

По ссылкам, содержащим nofollow атрибут, поисковый бот не должен переходить (хотя все равно делает это). И целевая страница точно будет проиндексирована, если на нее есть другая незакрытая ссылка (с вашего или чужого сайта).

Можно рассмотреть в качестве примера страницу автора, на которой размещаются все те же посты блога. Индексировать страницу автора смысла нет никакого, поэтому все ссылки на эту страницу в шаблоне стоит пометить атрибутом нофолоу.

<a href="https://domain.tld/author/author-name/" rel="nofollow">Автор записи</a>

Но, как выше говорилось, это не 100% метод запрета индексирования подобных страниц, поэтому для максимального эффекта нужно комбинировать несколько способов — запретить индексирование в мета тегах head, проставить тег нофолоу на ссылки на эту страницу, а также запретить индексирование в директивах robots

Директивы robots.txt

Директивы robots — еще один эффективный и часто недооцененный способ для борьбы с дублированным контентом. Файл robots.txt находится в корневой директории сайта и доступен по адресу https://domain.tld/robots.txt При размещении в любых других местах или с другим названием он работать не будет.

Суть его в том, чтобы сообщать поисковым роботам, что можно и что нельзя делать на сайте. Большинство белых роботов, таких как google и yandex, принимают их во внимание, а различные спам боты и парсеры — игнорируют.

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

Кроме этого, если посещение страницы запрещено для бота, это не означает, что поисковый бот ее не посетит, вероятно из любопытства — что же там ему запретили. И иногда появляется в индексе — правда с отображением только одного лишь урл страницы без отображения контента в снипете.

Давайте разберем пример оптимальной конфигурации директив роботс для предотвращения индексирования ненужных страниц. Для этого нужно освежить в памяти структуру файлов и папок вордпресс.

Этими двумя строками мы запрещаем индексировать любой урл, начинающийся с wp- и любой урл, содержащий .php на конце. Таким образом все папки и системные файлы не должны индексироваться

Disallow: /wp-*
Disallow: *.php

Далее, мы не хотим чтобы поисковики индексировали следующие страницы:

https://domain.tld/feed/ — главный фид сайта
https://domain.tld/comments/feed/ — фид комментариев
https://domain.tld/other/feeds/ — фид страниц
https://domain.tld/post/trackback/ — трекбек страниц
https://domain.tld/2008/08/08/ — архив по дате
https://domain.tld/2008/08/ — архив по месяцам
https://domain.tld/2008/ — архив по году

Это мы можем исключить вот таким простым способом

Disallow: */feed*
Disallow: */trackback*
Disallow: /20*

Если соединить все вместе, то получится такое содержимое robots.txt

Disallow: /wp-*
Disallow: *.php
Disallow: */feed*
Disallow: */trackback*
Disallow: /20*

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

Disallow: */mint/*
Allow: */mint/pepper/orderedlist/

Таким образом поисковый робот последовательно перебирая правила, будет выполнять последнее подходящее по условию.

Мощный инструмент создания и проверки правил robots находится в панели вебмастера гугл, а также в панели вебмастера яндекс.

Созданные правила стоит проверять на корректность, дабы не натворить делов и не запретить индексировать что-либо нужное.

Последним штрихом будет добавление директивы, объясняющей, что правила должны быть применены всеми поисковыми роботами

User-agent: *

Если же мы хотим создать определенный набор только для одного из поисковиков, то мы указываем его

User-agent: Googlebot

И завершающим штрихом будет включение в роботс ссылки на карту сайта сайтмап, содержащую ссылки на все страницы вашего сайта и помогающую его правильно индексировать

Sitemap: https://domain.tld/sitemap.xml

Для автоматической генерации этого файла можно воспользоваться плагином Google XML Sitemaps. Этот файл отлично воспринимается также и яндексом, поэтому его следует обязательно создавать для каждого сайта.

В итоге правильный robots.txt будет выглядеть, примерно, так

User-agent: *
Disallow: /wp-*
Disallow: *.php
Disallow: */feed*
Disallow: */trackback*
Disallow: /20*
Sitemap: https://domain.tld/sitemap.xml

Это полностью работоспособный код, пригодный для большинства сайтов. Но помните, что принимать его во внимание будут лишь основные поисковые боты.

Но стоит обратить еще внимание вот на что — грамотная организация постоянных ссылок записей. Если процитировать кодекс вордпресс, то вспомним.

Из соображений производительности, плохой идеей будет начинать структуру урла с категории, тега, автора или названия записи

Смысл в том, что это текстовые поля, и использование их в начале урла требует некоторое время от движка, чтобы различать адреса записей и адреса страниц. А ведь даже возможна ситуация, когда и запись, и страница будет иметь одинаковый слаг и урл. Поэтому, чтобы компенсировать время на такие запросы к базе данных, вордпресс хранит там же другую вспомогательную информацию, разрастающуюся по мере увеличения количества записей.

Поэтому гораздо лучше будет начинать урл записи с числового поля, такого как год записи или ее ID. Поэтому если на небольших и редко посещаемых сайтах на это можно не обращать внимание, то, планируя создание большого сайта, сразу стоит задуматься о хорошей структуре URL.

И вместо вариантов

/%postname%/
/%postname%/%post_id%/
/%category%/%postname%

лучше использовать варианты

/%post_id%/%postname%/
/%year%/%category%/%postname%/

Но в этом случае стоит быть внимательным при настройке роботса, т.к. директива типа Disallow: /20* может исключить из индексирования все записи, начинающиеся с номера года.

Канонические мета теги

В 2009 году основные поисковые машины — гугл, бинг, яху проанонсировали поддержку канонических мета тегов. Эти теги созданы для того, чтобы сказать поисковикам, какой урл считать актуальным, оригинальным и главным, чтобы отделить его от дублей и клонов страниц.

Например, если у вас сайт на движке интернет-магазина, то у вас для одного и того же продукта могут быть подобные адреса

  • https://domain.tld/product.php?item=leopard-skin-snuggy
  • https://domain.tld/product.php?item=leopard-skin-snuggy&category=designer-snuggy
  • https://domain.tld/product.php?item=leopard-skin-snuggy&trackingid=123&sessionid=456789
  • https://domain.tld/product.php?item=leopard-skin-snuggy&referrer=chucknorris&id=snuggling-badass

Размещая на каждой из этих страниц в секции <head> мета тег

<link rel="canonical" href="https://domain.tld/product.php?item=leopard-skin-snuggy" />

мы явно говорим, где у нас дублированный контент, а где оригинальный.

В вордпрессе канонический тег выполняет ту же самую функцию, указывая, какую страницу следует индексировать.

Есть отличный SEO плагин, который в том числе позволяет настроить канонические адреса страниц, чтобы заблокировать попадание в индекс страниц типа

https://yoast.com/twitter-analytics/utm_source=twitter&utm_medium=twitter

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

Использование цитат записей

Другой эффективной техникой предотвращения дублирования контента является использование цитат вместо полного содержания записей для всех страниц архивов, тегов и т.п. Таким образом они не будут идентичными копиями одиночной записи.

Чтобы заменить вывод полного содержимого записи в шаблоне необходимо сделать следующую правку

<?php the_content(); ?> =заменить на=> <?php the_excerpt(); ?>

Много сайтов используют эту технику, их хорошо видно по ссылкам и кнопкам с надписями «Подробнее» и «Читать далее». Вместе с каноническими тегами это в сумме дает отличный результат.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Scroll Up