Привязка комментариев vk после изменения структуры адресов страниц

2015-07-16 12:12:00


Комментарии вконтакте со старых страниц

Бывают случаи, когда вебмастерам приходится менять движок сайта, а вместе с движком меняется и структура ссылок. Не все CMS позволяют сделать тонкий тюнинг, а использовать костыль не хочется. В таком случае  для того, чтобы не потерять позиции в поисковиках и предотвратить 404 ошибку при переходе по ссылкам старой структуры, вебмастера делают 301 редирект. Но как быть с комментариями vk (вконтакте), которые жёстко привязываются к url странице и не отображаются, если её адрес поменялся?

У меня возникла данная ситуация и я обратился в техническую поддержку vk, чтобы узнать о возможности редиректа комментариев. Я получил следующий развёрнутый ответ:

Вообще говоря, использование page_id — единственный верный способ перенести комментарии с одного домена на другой. page_id — это внутренний идентификатор страницы, который указывается последним параметром в VK.Widgets.Comments().

Без него мы можем предложить только своего рода костыль.

Надо добавить в код виджета на новой странице параметр pageUrl, в котором передать _старый_адрес страницы.

Например, если комментарии находились на странице site.ru/index.html, а нужно перенести их на site.ru/index1.html, порядок действий следующий: 1. Добавляем на страницу site.ru/index1.html код виджета. 3. Вставляем в этот код (в VK.Widgets.Comments) параметр pageUrl: "http://site.ru/index.html".

В итоге у Вас на странице site.ru/index1.html виджет будет отображаться так, как будто находится на site.ru/index.html.

Есть подводный камень, и он может быть критичен для Вас — если пользователь опубликует комментарий из такого виджета на своей странице, ссылка рядом с записью будет вести не на site.ru/index2.html, а на site.ru/index1.html (т.е. на тот адрес, который передан в pageUrl).

Если что-то непонятно, пожалуйста, уточняйте.

С уважением, Команда поддержки ВКонтакте

Однако побочный эффект, о котором предупреждает сотрудник технической поддержки vk. Нужно просто сделать Redirect 301 со старого url вида site.ru/index1.html на новый site.ru/index2.html.

 

Ниже представлен абстрактный файл шаблона http://site.ru/index2.html, с виджетом vk комментариев:


<!DOCTYPE html>
<html lang="ru">
<head>
<!-- ... -->
<script type="text/javascript" src="//vk.com/js/api/openapi.js?116"></script>
<script type="text/javascript">
	VK.init({apiId: 2998987, onlyWidgets: true});
</script>
<!-- ... -->
</head>
<body>
...
<div id="vk_comments"></div>
<script type="text/javascript">
VK.Widgets.Comments("vk_comments", {limit: 15, width: "665", attach: "*", pageUrl: "http://site.ru/index.html"});
</script>
...
</body>
</html>

Из кода видно, что комментарии мы берём со старого адреса http://site.ru/index.html. Но техподдержка vk предупреждает о том, что при репосте коммента его адрес будет вести на старую страницу сайта. Чтобы пользователи, пришедшие по такой ссылке не ловили 404 ошибку, сделаем 301 редирект:


<IfModule mod_rewrite.c>
RewriteEngine On
#...
Redirect 301 /index.html /index2.html
#...
</IfModule>

После всех изменений комментарии vk будут отображаться корректно. А что насчёт лайков? Но это уже другая история.