Закрываем контент от роботов в IPS 4.2.2
Cкрываем блоки модулей и приложений в Invision Power Suite 4 от поисковых роботов
Занимаясь одним интересным проектом, который в качестве web-движка использует IPS 4.2.2, наткнулся на некоторую сложность, которая выражается в невозможности ограничить доступ поисковым роботам к тому или иному блоку с каким-либо виджетом или приложением.
Например миничат, который стоит на главной странице форума, генерирует кучу нерелевантного контента со всякими мусорными ссылками, который в итоге может сыграть злую шутку с вами. И аналогичных блоков, генерирующих ненужный контент с точки зрения SEO, довольно много, отсюда и возникла необходимость активно принимать меры.

Поисковые роботы в IPS 4.4.2 относятся к группе «Гости» и стороннего плагина, который бы смог организовать для поисковиков отдельную группу, которую можно жестко лимитировать в представляемом ей контенте нет.
Такой плагин был на третих версиях IPB (IPB 3.2.X — IPB 3.4.X ) и назывался (Pav32) Bot Group.
На помощь пришла старая добрая конструкция отбора посетителей по User-agent, которая работает и в IPS 4.2.2, но с некоторыми изменениями:
{{if isset( $_SERVER['HTTP_USER_AGENT']) && !preg_match('/bot|crawl|yandex|google|mail|bing|rambler|yahoo|xenu|w3c|validator/', strtolower($_SERVER['HTTP_USER_AGENT']) )}}
Вывод этого текста не будет доступен поисковым роботам.
{{endif}}
Правка файлов темы оформления
Предположим, что у тебя стоит IPS 4.2.2 и приложение чата (BIM42) Chatbox 2.0.0 для этой версии. Для того, чтобы скрыть его от поисковых роботов нужно проделать следующее:
Перейти в админку форума и зайти в раздел «Кастомизация»,

Напротив рабочей темы оформления нажми на значок < / >,

Затем тебя интересует вкладка «Шаблоны» и подменю «bimchatbox» —> «front» —> «chat» и файл с названием «main».

Справа, в появившемся окне ты увидишь код основного окна чата, которое выводится там где ты захочишь, в блоках виджетов. Первую строку нашего кода нужно разместить на первой строке в файле «main»:
{{if isset( $_SERVER['HTTP_USER_AGENT']) && !preg_match('/bot|crawl|yandex|google|mail|bing|rambler|yahoo|xenu|w3c|validator/', strtolower($_SERVER['HTTP_USER_AGENT']) )}}
и разместить закрывающий тег на последней строке файла:
{{endif}}
В итоге у тебя должно получиться примерно так:
{{if isset( $_SERVER['HTTP_USER_AGENT']) && !preg_match('/bot|crawl|yandex|google|mail|bing|rambler|yahoo|xenu|w3c|validator/', strtolower($_SERVER['HTTP_USER_AGENT']) )}}
{{$ann = \IPS\Application::load('bimchatbox')->announcement();}}
<div data-controller="bim.chatbox">
<h2 class="ipsType_sectionTitle ipsType_reset" id="elChatbox" >
<ul class="ipsPos_right ipsList_inline ipsList_noSpacing">
<li>
<a href="#" class="cbBtn" data-action="toggleSound" data-ipstooltip="" title='{lang="chatbox_togglesound"}'><i class="fa fa-volume-up"></i></a>
</li>
{{if \IPS\Application::load('bimchatbox')->can_Manage()}}
<li>
<a href="#" class="cbBtn" data-ipsDialog data-ipsDialog-url='{url="app=bimchatbox&module=chatbox&controller=chatbox&do=cbmanage"}' data-ipsDialog-size='narrow' data-ipstooltip="" title='{lang="chatbox_management"}'><i class="fa fa-wrench"></i></a>
</li>
{{endif}}
</ul>
<div>{lang="chatbox_title"}</div>
</h2>
<div id="elChatboxContent">
{{if $ann}}
<div class="cbAnn ipsClearfix">
{{if settings.chatbox_conf_anntab == 1}}
<a href="#" data-ipsDialog data-ipsDialog-url='{url="app=bimchatbox&module=chatbox&controller=chatbox&do=cbrules"}' data-ipsDialog-size='narrow'>
<i class="fa fa-bullhorn" aria-hidden="true"></i> {lang="chatbox_rules_link"}
</a>
{{else}}
{$ann|raw}
{{endif}}
</div>
{{endif}}
{{if settings.chatbox_conf_ordertop == 1}}
{template="chatform" app="bimchatbox" group="chat" params="$chat, $orientation"}
{{endif}}
<div id='chatboxWrap' {{if settings.chatbox_conf_height}}style='height: {setting="chatbox_conf_height"}px !important;'{{endif}}>
{{if settings.chatbox_conf_ordertop != 1}}
<div id='loadMore' data-action='loadMore' class='ipsAreaBackground_light ipsPad_half ipsType_center ipsCursor_pointer'>{lang="cb_loadmore"}</div>
{{endif}}
<ul id='chatcontent' class="ipsDataList ipsDataList_reducedSpacing ipsLoading">
</ul>
{{if settings.chatbox_conf_ordertop == 1}}
<div id='loadMore' data-action='loadMore' class='ipsAreaBackground_light ipsPad_half ipsType_center ipsCursor_pointer'>{lang="cb_loadmore"}</div>
{{endif}}
</div>
{{if settings.chatbox_conf_ordertop != 1}}
{template="chatform" app="bimchatbox" group="chat" params="$chat, $orientation"}
{{endif}}
</div>
{{endif}}
Для того, чтобы проверить работоспособность данного метода, тебе нужно дописать User-agent своего браузера в строку:
bot|crawl|yandex|google|mail|bing|rambler|yahoo|xenu|w3c|validator
Если ты используешь Chrome, Opera — дописывай в конец |chrome,
bot|crawl|yandex|google|mail|bing|rambler|yahoo|xenu|w3c|validator|chrome
если используешь Safari, то |safari, если Firefox — |firefox
bot|crawl|yandex|google|mail|bing|rambler|yahoo|xenu|w3c|validator|safari
bot|crawl|yandex|google|mail|bing|rambler|yahoo|xenu|w3c|validator|firefox
Сохрани файл и проверь работоспособность этого метода. Если ты всё сделал правильно, то ты не увидишь блока с чатом на главной странице там, где он раньше был.

После успешной проверки обязательно удали User-agent своего браузера из строки юзер-агентов в условии и сохрани файл.
Вывод
Закрываем контент от роботов в IPS 4.2.2
В качестве вывода могу сказать, что у нас получилось простое, тривиальное, но рабочее решение, которое можно отнести к разряду временного «костыля». Таким костылём можно закрыть любые блоки на форуме от роботов, двигаясь по аналогии.
Будем надеяться, что в скоре появятся новые плагины, которые позволят делать это прямо из админки в пару щелчков мыши и будут использовать продвинутую логику.
Если у тебя возникли вопросы, предложения, пожелания и/или замечания, то напиши их в комментарии ниже, я с радостью отвечу тебе! До связи!