Не так давно я начал полномасштабную кампанию по SEO оптимизации своего ресурса. К SEO специалистам (того же Profit-Partner) я обращался уже давненько. Кроме всего прочего, первым делом они посоветовали мне избавиться от страниц-дублей. Это такие страницы, которые имеют разные адреса (URL), но идентичны по содержимому.
Почему дубли — это плохо?
Так как две или более страниц-дублей (с одинаковым содержанием) могут попасть в индекс, это может весьма неблагоприятно сказаться на ранжировании сайта в выдаче. Во-первых, поисковые системы не приветствуют дублирование контента внутри сайта. Во-вторых, страницы других сайтов в итоге могут ссылаться на разные URL одной страницы, и при этом передаваемый PageRank, например, будет рассредотачиваться между этими дублями, а не перепадать одной странице. В-третьих, из-за непоняток с весом страниц возникает путаница при установке быстрых ссылок сайта. И это еще не все минусы.
Примеры дублей
У CMS uCoz/uWeb, изначально рассчитанного на пользователей недалеких, примеров дублей огромное множество. Вот некоторые из них:
https://audiophilesoft.com/publ/
https://audiophilesoft.com/publ
https://audiophilesoft.com/forum/
https://audiophilesoft.com/forum
— и т. п. для различных модулей. Это является вопиющей ошибкой, т. к. строго говоря, /forum/ — это каталог (в котором обычно подхватывается файл index.*), а /forum — файл без расширения.
Для первой страницы архива новостей дубля даже три:
https://audiophilesoft.com/news/
https://audiophilesoft.com/news/1
https://audiophilesoft.com/news
Еще больше дублей для материалов:
https://audiophilesoft.com/publ/my/hq_pc_sound/11-1-0-24
https://audiophilesoft.com/publ/my/11-1-0-24
https://audiophilesoft.com/publ/11-1-0-24
https://audiophilesoft.com/publ/software/hq_pc_sound/4-1-0-24
— и т. д, в т. ч. в модулях новостей, программ и в блоге. Некоторые из этих дублей переадресовывают на правильный адрес (первый в списке), однако бывают исключения.
Как бороться?
В идеале следовало бы установить 301-ю переадресацию (Moved permanently), но наш замечательный движок таковое осуществить не позволяет. Потому единственным верным решением будет использование тега <link rel="canonical" href="правильный адрес"/>. Он работает для большинства поисковых систем и сообщает, что данная страница является дублем указанной, т. е. текущий адрес является неканоническим, индексировать его не надо, а весь ссылочный вес надо передавать по указанному адресу. На канонической странице такого тега быть не должно.
И тут начинаются танцы-пляски с синтаксисом движка, т. е. поиски способа проверки текущего адреса на каноничность и в случае необходимости подстановка тега со ссылкой на каноничную страницу. К счастью, я (отчасти сам, отчасти с помощью поддержки uWeb) уже исследовал все нюансы работы движка и нашел 100% рабочий код для подстановки нужного тега в нужные страницы. Вот код для различных шаблонов (вставлять внутри <head></head>):
Модули статей и файлов: страница материала и комментариев к нему
<?ifnot($REQUEST_URI$=$ENTRY_URL$)?><link rel="canonical" href="$HOME_PAGE_LINK$$ENTRY_URL$"/><?endif?>
В данном случае алгоритм следующий: если текущий URL (в данном случае переменная возвращает URL без адреса домена) не совпадает с адресом материала, прописать тег со ссылкой на полный адрес материала (включая домен).
Модули статей и файлов: главная страница каталога
<?if(strpos($REQUEST_URI$,"/publ/")= -1)?><link rel="canonical" href="$HOME_PAGE_LINK$/publ/" /><?endif?>
и
<?if(strpos($REQUEST_URI$,"/load/")= -1)?><link rel="canonical" href="$HOME_PAGE_LINK$/load/" /><?endif?>
Здесь проверяется вхождение в текущий адрес правильного адреса каталога. Если вхождений нет, прописывается тег с каноническим адресом.
Модули новостей и модуль блога: страница материала и комментариев к нему
<?if(strpos($ENTRY_URL$,$REQUEST_URI$)= -1)?><link rel="canonical" href="$ENTRY_URL$" /><?endif?>
Проверяется вхождение в текущий адрес правильного адреса материала. Если вхождений нет, прописывается тег с каноническим адресом.
Модуль новостей: страница архива материалов
<?if($CURRENT_PAGE$="1" && $REQUEST_URI$!='/news/')?><link rel="canonical" href="$HOME_PAGE_LINK$/news/" /><?endif?>
Если текущая страница — первая, а текущий URL не соответствует правильному адресу модуля, прописать тег с правильным адресом.
Модуль блога: главная страница дневника
<?if($CURRENT_PAGE$="1" && $REQUEST_URI$!='/blog/')?><link rel="canonical" href="$HOME_PAGE_LINK$/blog/" /><?endif?>
Если текущая страница — первая, а текущий URL не соответствует правильному адресу модуля, прописать тег с правильным адресом.
Модуль форума: общий вид страниц форума
<?if($URI_ID$='frMain' && strpos($REQUEST_URI$,"/forum/")= -1)?><link rel="canonical" href="$HOME_PAGE_LINK$/forum/" /><?endif?>
Если текущая страница — главная страница форума, и в текущий адрес отсутствует вхождение правильного адреса, прописать тег с правильным адресом.
Вот, собственно, и всё. Если вы правильно прописали код, в течение нескольких ближайших выдач из индекса Google, Яндекс и некоторых других поисковиков выпадут страницы-дубли.
Информация от спонсора
LIVETEX: звонки с сайта по технологии LiveTex. Используя звонок с сайта от Livetex, Вы можете организовать дозвон просто по нажатию кнопки на специальное приложение или на любой телефонный номер.
Модуль новостей: страница архива материалов<?if($CURRENT_PAGE$="1" && $REQUEST_URI$!='/news/')?><link rel="canonical" href="$HOME_PAGE_LINK$/news/" /><?endif?><?endif?>