Буквально пару дней назад в процессе работы над блогом выяснилась одна весьма интересная вещь. Раздумывая, как бы вообще убрать с блога WordPress ссылки с replytocom и предотвратить появление страниц-дублей в поиске, я нашла идеальное для себя решение без необходимости отключать древовидные комментарии. Дальше постараюсь все разложить по полочкам и подробнее рассказать обо всем.
О том, что такое дубли страниц и какое их влияние на продвижение сайта или блога вам расскажут сеошники, я не компетентна в этом вопросе. Меня куда больше интересует техническая сторона вопроса. Давайте обо всем по порядку.
Откуда появляются дубли с replytocom
Если в настройках WordPress включены древовидные комментарии, то после текста сообщения мы можем видеть ссылку Ответить примерно с таким адресом:
Содержимое этой страницы не будет отличаться от страницы с адресом http://blog.com/adressposta.html
. На картинке кроме основного адреса видим два выделенных блока — параметр запроса и якорь. Последний — дает возможность сразу после загрузки страницы перейти к форме комментирования.
Параметр запроса — наш replytocom со значением 74. Для каждой ссылки указывается уникальное число — идентификатор комментария. Если на странице записи будет 20 комментариев, то автоматически сгенерируется 20 разных ссылок. По каждой перейдет робот и проиндексирует как отдельную страницу блога, которую потом и пометит как дубль.
к оглавлению ↑Способы борьбы с replytocom
В блогах веб-мастеров можно встретить несколько советов по поводу избавления от таких страниц-дублей.
В Google все просто — в вебмастере есть настройка Параметры URL в разделе Сканирование — там можно указать, чтобы робот не сканировал страницы с параметром ‘replytocom’ в запросе.
В Яндексе такой возможности нету и нужно закрывать страницы от индексации и/или делать перенаправление в .htaccess, чтобы и вовсе не показывать эту страницу роботу.
- Закрыть от индексации страницы с replytocom можно, добавив в robots.txt строчку:
Disallow: /*?replytocom
Отредактировано 08.07.2014
Добавление URL в robots.txt только ограничивает доступ к странице, но поисковиком она все-равно учитывается. Вместо этого в случае с replytocom нужно:
1. В robots.txt не добавлять никаких ограничений;
2. Настроить канонические ссылки с помощью любого SEO-плагина. - Перенаправление в .htaccess настраивается добавлением двух строк в начало файла:
RewriteCond %{QUERY_STRING} (replytocom=) RewriteRule ^(.*) $1? [R=301,L]
До недавнего времени я закрывала эти страницы в robots.txt и настраивала перенаправление в некоторых случаях.
к оглавлению ↑Зачем нужна ссылка с replytocom?
Если в браузере пользователя включен JavaScript, то номер родительского комментария запишется скриптом в специальное скрытое поле и будет передан вместе с вашим именем, почтой и сообщением. А вот если JavaScript отключен, на помощь приходит ссылка с параметром replytocom
. Тогда уже она и передает номера родительского комментария через строку запроса.
Выходит, ссылка с параметром replytocom нужна когда в браузере отключен JavaScript. Вот как все это работает:
- Нажимаем на ссылку Ответить
- Если JavaScript включен, то срабатывает скрипт — он записывает номер родительского комментария в скрытое поле, перемещает форму комментирования прямо под родительский комментарий и запрещает перейти по ссылке (перезагрузка не происходит как при обычном клике на ссылку — это заслуга скрипта).
- Если JavaScript отключен, то происходит обычный переход по ссылке
http://blog.com/adressposta.html?replytocom=74#respond
, где параметрreplytocom=74
сообщает номер родительского комментария, а якорь#respond
прокручивает страницу к форме комментирования.
replytocom
, то в пункте 3 мы попадем на страницу http://blog.com/adressposta.html#respond
— к форме комментирования страница прокрутится, но номер родительского комментария вордпресу мы так и не сообщим.Отсюда вопрос: зачем тогда вообще эта проблемная ссылка с replytocom
нам нужна?
Если настроено перенаправление и отключен JavaScript, предпочтительнее поставить просто якорь на форму комментирования. Да, пользователь без JavaScript не сможет дать ответ на комментарий, а только оставить новый. Но мы не будем перезагружать ему страницу, а просто прокрутим ее к форме комментирования.
к оглавлению ↑Как убрать ссылку с replytocom
Чтобы вместо ссылки с параметром вывести просто якорь на форму комментирования, я воспользовалась фильтром для функции comment_reply_link
. В качестве параметра WordPress передает пользовательской функции HTML-код ссылки. Регулярным выражением нахожу в строке кода атрибут href с ссылкой и заменяю ее на якорь. Вот моя функция:
add_filter('comment_reply_link','avd_custom_comment_reply_link');
function avd_custom_comment_reply_link( $link ) {
$link = preg_replace( '~href=([\'"]{1})([^\'"]+)#([^\'"]*)([\'"]{1})~i', 'href=$1#$3$4', $link, 1 );
return $link;
}
Учитывая, что по-умолчанию в WordPress блок с формой комментирования имеет якорь respond
, третью строку можно и вовсе так записать:
$link = preg_replace( '~href=[\'"]+([^\'"]+)[\'"]+~i', 'href="#respond"', $link, 1 );
А если в вашей теме блок с формой выводится не через стандартную функцию и называется по-другому, то после символа #
нужно вставить значение атрибута id
вашего блока с формой или самой формы.
Этот код вставляем в function.php
нашей темы и проверяем адрес ссылок Ответить в комментариях. С JavaScript они будут работать как и прежде, без него — просто «перескакивать» на форму комментирования.
ВАЖНО! Такой подход избавит от дублей с replytocom
для новых страниц. А вот с теми, которые уже попали в индекс нужно бороться.
Теперь никаких replytocom!
Думаю, для SEO-оптимизации своих шаблонов дальше я буду использовать именно такой подход в борьбе с replytocom в WordPress. Потеря в функционале совсем мизерная (а как вы считаете?), а искоренение дублей в зародыше — огромный плюс. Метод сейчас настроен на нашем блоге, ждем индекса новых статей с комментариями. Но редирект все-таки пришлось настроить, первые статьи проиндексировались с replytocom
🙁 .
Альтернативное и радикальное решение — подключение к блогу системы комментирования Disqus или Cackle Комментарии, но это уже отдельная история.
Александра,так я не совсем понял,добавление строчки в файл robots не помогает?
Игорь, добавление в robots.txt закроет от индексации эти страницы — т.е. они будут и в вебмастере покажутся как исключенные. Я же задалась целью исключить появление этих ссылок, чтобы не приходилось затем их закрывать или перенаправлять. Этот способ особенно хорошо для новенького блога.
Спасибо,сейчас попробую сделать как вы обьяснили!
Александра, «подводных камней» указанного кода не обнаружилось за время использования? )
И еще вопрос: Вы написали, что третью строку кода можно заменить упрощенной записью вида
"$link = preg_replace( '~href=[\'"]+([^\'"]+)[\'"]+~i', 'href="#respond"', $link, 1 );"
. Можно смело её использовать или всё-таки надежней будет первый вариант?Сергей, за это время никаких подводных камней не обнаружила — все отлично работает. Если у вас в файле темы есть вызов функции
comment_form()
, то да — можно смело пользоваться упрощенной записью.Кстати, недавно ознакомилась с популярным плагином WordPress SEO by Yoast — там используется подобный подход, но якорь ставится не на форму комментирования, а на сам комментарий.
Александра, после вставки кода вроде как все работает — механизм комментирования не изменился, replytocom не появляется. А в каком файле смотреть есть ли вызов функции comment_form()? Или если все работает то и смотреть нет смысла?
А в чем разница когда якорь ставится не на форму комментирования, а на сам комментарий? Как это проявляется при комментировании?
Забыла указать название, смотрите в файле comments.php. Если работает — смысла смотреть нет.
Если якорь стоит на форму комментирования, то будет переход к форме. А если на комментарий — то к началу комментария.
Можно даже попробовать — якорь на форму комментирования и на этот комментарий (как сделано в плагине). Так будут вести себя ссылки Ответить, если отключен JavaScript.
Ну по большому счету большой же разницы нет? Человек все равно ведь может отвечать на любой комментарий, верно?
Александра, большое спасибо за код! Только у Вас нашел решение проблемы replytocom, хотя перелопатил десятки, если не сотни статей )
Сергей, при включенном JS абсолютно никакой разницы в работе. Была рада помочь 🙂
Как по мне, то более чем достаточно, все объяснить в robots.txt, а также если есть плагин SEO by Yoast, поставить галочку избавиться от replytocom. У меня с помощью данного метода, все страницы типа
ghost-image.html#comment-29
иghost-image.html#respond
, в гугле находит —ghost-image.html
Евгений, именно благодаря плагину все у Вас и работает. Потому как он тоже убирает ссылку и оставляет только якорь.
В robots.txt нужно закрывать доступ к файлам, а ограничение доступа к URL как раз и приводит к появлению дублей.
Дак вот я и говорю, что этого будет достаточно, как бы плагин очень хорош.
Согласна, и много в нем плюшек полезных. Я до недавнего времени пользовалась плагином All In One SEO, пока не наткнулась на толковый обзор WP SEO by Yoast. Сейчас на одном проекте уже удачно сменила, пробую и привыкаю.
А этот вариант как раз для тех проектов, где все еще All In One SEO висит. Многие к нему просто привыкли и лень менять )))
Александра, не только потому что лень ) Почитайте в интернет — о Yoast очень много негативных отзывов. Часто глючит, конфликтует и пр. All In One SEO гораздо в меньшей степени страдает от этого.
Сергей, натыкалась тоже на отзывы о проблемах. Но все-же рискнула поставить на один проект, вроде пока все ок. Надо видимо пристальнее за ним приглядывать, спасибо за предупреждение.
Александра, я подписана на ваш блог, но у меня нет кода. Не могли бы вы отправить на burzevao@gmail.com. Хочу установить ваш плагин для карты сайта=)
Можно спросить, у меня проблема, Google заносит в дубли изображения такого типа
мой блог/ссылка на страницу/название картинки
Как от этого избавиться?
У меня установлен плагин плагин Attachment Pages Redirect и в .htaccess настроен 301 редирект. RewriteRule (.+)/attachment /$1 [R=301,L]
RewriteCond %{QUERY_STRING} ^attachment_id= [NC]
А толку нет. Хотя сначала Google все картинки выкинул, а вот неделю назад опять всё забрал в дополнительный индекс .
Плагин SEO у меня как и у вас WordPress SEO Йоаст
Спасибо.
Олия, отправила Вам код.
Плагин SEO здесь не имеет значения. Я использую All In One SEO, а указанный Вами WordPress SEO by Yoast в качестве эксперимента только на одном проекте.
По поводу дублей — Вам лучше дополнительно проконсультироваться с Владимиром. Рекомендую проверить не закрыты ли страницы attachment в robots.txt. Также, уберите все ссылки из статей на эти страницы вложения. И попробуйте сделать перенаправление без .htaccess — создайте в шаблоне файл attachment.php и разместите там это код (или отредактируйте, если файл уже есть):
Александра, спасибо, что быстро ответили. В robots.txt у меня страницы attachment не закрыты. С кодом попробую. Спасибо. Если не поможет, обращусь к Владимиру.
Здравствуйте. Спасибо Вам за данную статью. Очень полезной оказалась. Я решил свою проблему.
1)У вас стоит Перенаправление в .htaccess :
У меня же код чуточку другой:
Вопрос: Стоит ли менять на ваш или оставить все как есть??)
2) И еще стоят редиректы на ( feed, comment-page, trackback, comments, attachment) оставить их, или лучше убрать? заранее спасибо! п.с.(htaccess брал у А. Борисова)
Виталий, если перенаправление работает и выполняет свои функции, то можно оставить любой вариант.
Александра, спасибо за способ борьбы с реплитукомами! Попробовала у себя на новом шаблоне (дизайн блога поменяла 🙂 ) поставила его, вроде работает, но древовидные комменты перестали работать, перекидывает тупо в низ к форме комментирования. Думала, в браузере отключен джава, но на вашем-то блоге срабатывает скрипт. Может, я не в то место ставлю код? Я его в конце перед закрывающимся тегом /> влепила.
Елена, замечательный новый дизайн — вкусно-шоколадный, не удержаться от комплиментов!
С комментариями проблема не в коде. У Вас похоже скрипт стандартный от WordPress не подключается. Попробуйте в functions.php (или лучше в спец. плагин FunctionsPHP) добавить вот такие строчки:
Спасибо!!! Очень приятно, что дизайн понравился! 😉 А код почти такой же в functions у меня есть, только без фигурных скобок и надписей false, null, true. Попробовала подставить этот (почистила. естественно кеш на всякий случай), но результат такой же, по прежнему перекидывает вниз. Чего же этим комментариям не хватает…
Елена, странно. Где-то этот код все-таки теряется у Вас. Попробуйте добавить вот этот скрипт в футер:
Вот этот файл должен подключаться на внутренних страницах:
Александра, Вы волшебница!!! Просто огромнейшее спасибо за решение!!! Вставка дополнительного скрипта в футер помогла, теперь древовидность работает. Я, честно говоря, не особо знаю, где проверить подключение файла comment-reply.min.js (или в футере мы это и подключили? 🙂 ) . Ну, в общем, работает — и круто!
Да, в футере мы вставили код из этого файла. Файл у Вас не подключен, это видно в коде сайта (если поискать через Ctrl+F фразу comment-reply.min.js).
Здравствуйте! воспользовался вашим решением но после установки
древовидные комментарии не работают Это так должно быть!? тогда смысл установки данного кода?
Алексей, все должно работать как и прежде, именно на работу комментариев (древовидных или обычных) код совершенно не влияет.
Попробуйте убрать код и проверить работу комментариев. Если проблема появляется после установки кода, дайте адрес Вашего сайта — так будет проще понять в чем именно причина
Когда код убираю древовидные комментарии работают
Алексей, комментарий в спам попал, только сегодня увидела. А как именно проявляется неработспособность? Комментарии выводятся в один уровень или при нажатии на ссылку Ответить ничего не происходит?
воспользовался другим решением С вашим кодом не работала ссылка при нажатии
Возможно, проблема была в скрипте comment-reply.js
Доброго времени суток! после обновления БД просмотрела есть ли изменения и убрались ли все ссылки с replytocom, но все ссылки так и остались в исключенных и по прежнему классифицируются как неканоническими. Я вставила код и в файл .htaccess и внесены соответствующие изменения в плагин functionsphp.php
Или я что-то неправильно поняла , и ссылки такого вот типа
blagie-namereniya-ili-sumatoshnyj-den.html?replytocom=265
все равно останутся даже после всех изменений? хотя я так поняла, что они вообще должны «исчезнуть»…
Лора, сообщение в спам почему-то улетело, только сейчас заметила.
Если верно все настроить, то при переходе на ссылку blagie-namereniya-ili-sumatoshnyj-den.html?replytocom=265 должно перенаправлять на вот такой адрес blagie-namereniya-ili-sumatoshnyj-den.html
После последнего обхода роботом Яндекса моего сайта вдруг обнаружилось, что в структуру сайта попали все статьи с большим количеством комментариев… Все настроено так, как Вы и описали, но почему-то редирект не срабатывает. Страницы-дубли не индексируются, но робот их все равно обходит.. Не подскажите, что делать?
Лора,
и яндекс и гугл их обходят, но добавляют в исключенные со статусом «запрещены к индексации». Это нормально и нет ничего страшного, плохо когда они в выдачу попадаю