Коварные дубли wordpress — replytocom

Коварные дубли wordpress — replytocom

Здравствуйте, сегодня на: «Progress-project», мы с вами будим избавляться от достаточно серьёзной проблемы блога, как дубли страниц: «replytocom», wordpress создаёт данные дубли сразу после активации в админ панели, древовидных комментариев.

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

И именно после этого клика, создаётся дубль «replytocom». Если быть точнее, то к каждому ответному комментарию, wordpress автоматически присваивает персональную ссылку с приставкой «replytocom» на конце:

abrek-ad-abra.ru/kovarnye-dubli-wordpress-replytocom/replytocom=4621#respond

Отношение поисковых систем к дублям: «replytocom»

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

Google, без промедления отправляет такие страницы блога в дополнительный свой «сопливый» индекс: «Supplemental Index».

Только представьте, сколько на вашем блоге может быть ответов на комментарии и ровно столько же будит и дублей страниц «replytocom». А сколько ссылок вместе стем, может про дублироваться на сторонние ресурсы, начиная от линков расположенных, как в самой статье, так и в теле комментария, плюс ко всему, исходящие ссылки в именах комментаторов. Думаю, всем понятно, что к ничему хорошему это не приведёт.

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

Возможные варианты борьбы с дублями replytocom

Одно время считалось, что от дублей страниц replytocom, способна защитить запрещающая директива прописанная в файле robots.txt, но увы практика показывает, что подобный вариант способен спасти блог от данных дублей, только в случае с Яндексом с Гуглом же, данный способ не пройдёт.

Далее у нас идёт вариант с использованием какого либо, спец-плагина на подобии: «WordPress Thread Comment», что на мой взгляд тоже не выход.

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

Следующий способ 301 редирект, перенаправление прописанное в файле блога под названием: «.htaccess», следующего вида:

RewriteCond %{QUERY_STRING} replytocom=
RewriteRule ^(.*)$ /$1? [R=301,L]

Способ реально работает, но опять же несёт за собой нагрузку на сервер, конечно уже и не такую большую, как плагин но всё же.

Избавляем wordpress от дублей страниц replytocom раз и навсегда

Теперь давайте я поделюсь с вами своим способом борьбы с replytocom. Вернее вариантом, который используется на abrek-ad-abra.ru.

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

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

И для этого нам понадобится специальный скрипт:

var addComment = {
moveForm : function(commId, parentId, respondId, postId) {
var t = this, div, comm = t.I(commId), respond = t.I(respondId), cancel = t.I('cancel-comment-reply-link'), parent = t.I('comment_parent'), post = t.I('comment_post_ID');

if ( ! comm || ! respond || ! cancel || ! parent )
return;

t.respondId = respondId;
postId = postId || false;

if ( ! t.I('wp-temp-form-div') ) {
div = document.createElement('div');
div.id = 'wp-temp-form-div';
div.style.display = 'none';
respond.parentNode.insertBefore(div, respond);
}

comm.parentNode.insertBefore(respond, comm.nextSibling);
if ( post && postId )
post.value = postId;
parent.value = parentId;
cancel.style.display = '';

cancel.onclick = function() {
var t = addComment, temp = t.I('wp-temp-form-div'), respond = t.I(t.respondId);

if ( ! temp || ! respond )
return;

t.I('comment_parent').value = '0';
temp.parentNode.insertBefore(respond, temp);
temp.parentNode.removeChild(temp);
this.style.display = 'none';
this.onclick = null;
return false;
};

try { t.I('comment').focus(); }
catch(e) {}

return false;
},

I : function(e) {
return document.getElementById(e);
}
};

Кстати, если кто то не в курсе, данный скрипт уже имеется в вашем CMS по адресу:

wp-includes/js/comment-reply.js.

И чтобы его активировать, достаточно прописать в файл темы: funcions.php, следующее:

function enqueue_comment_reply() {
 if( is_singular() )
 wp_enqueue_script('comment-reply');
}
add_action( 'wp_enqueue_scripts', 'enqueue_comment_reply' );

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

Отдельно подключить его к теме можно прописав в header.php, до закрывающегося </head>, вот такую строку:

<?php if (is_singular() AND comments_open() AND (get_option('thread_comments') == 1)) wp_enqueue_script('comment-reply'); ?>

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

Чтобы напрочь убрать данную ссылку, нам понадобится файл CMS: «comment-template.php», находится он в папке: «wp-includes», код отвечающий за её формирование и вывод, выглядит вот так:

$link = "<a class='comment-reply-link' href='" . esc_url( add_query_arg( 'replytocom', $comment->comment_ID ) ) . "#" . $respond_id . "' onclick='return addComment.moveForm(\"$add_below-$comment->comment_ID\", \"$comment->comment_ID\", \"$respond_id\", \"$post->ID\")'>$reply_text</a>";

Из этого кода, нам необходимо вырезать следующий кусок:

href='" . esc_url( add_query_arg( 'replytocom', $comment->comment_ID ) ) . "#" . $respond_id . "'

Главный недостаток здесь в том, что так, как мы вносим изменения непосредственно в файл самого CMS, то после каждого его обновления, всё придётся повторять заново, чтобы этого избежать, открываем файл темы: «functions.php» где в самом его верху после <?php, вставляем:

function progress_replycom_remove( $progress_remove ) {
$cut = "!<a(.*?)href='(.*?)'(.*?)>(.*?)</a>!si";
$insert = "<span class='comment-reply-link' \\3>\\4</span>";
return preg_replace($cut, $insert, $progress_remove);
}
add_filter( 'comment_reply_link', 'progress_replycom_remove' );

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

Всё, что нам осталось это придать нашей изменившейся ссылке ответа, более естественный вид, прописав в файл темы: «style.css» следующие стили, для ссылки:

.comment-reply-link {
color:#5151FF; /*цвет новой ссылки*/
text-decoration:none; /*отменяем подчеркивание*/
cursor:pointer; /*курсор при наведении*/
}

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

Желаю вам всего доброго, подписывайтесь на обновления, будим и дальше продолжать рассматривать решение различных проблем связанных с созданием и продвижением сайта или блога на WordPress.

Вам также может понравиться

Кнопки вверх и вниз для WordPress

Кнопки вверх и вниз для WordPress

Как вставить скрипт в wordpress

Как вставить скрипт в wordpress

Как защитить WordPress от автоматических регистраций спам-ботов

Как защитить WordPress от автоматических регистраций спам-ботов

Как убрать теги: #more, #comments, #respond на конце URL

Как убрать теги: #more, #comments, #respond на конце URL