Вебмастеру

Что такое отказы в Яндекс Метрике, и как бороться с ботами и нулевыми заходами

Отказ в Яндекс Метрике – это просмотр страницы меньше 15 секунд и возвращение пользователя в поиск. В метрике показатель не должен превышать 20%, но каждый вебмастер пытается снизить показатель до минимальных значений.

Отказы считаются одним из важных показателей ранжирования. Если процент большой, поисковая система считает, что сайт не нравится пользователям, а значит, некачественный, и как следствие понижение позиций в выдаче. А значит, меньше посетителей, читателей и клиентов из поиска.

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

Моя история борьбы с отказами выбиваемыми ботами

Стоило моим сайтам выйти на посещаемость более 40 уников в сутки, как прилетало счастье со стороны нулевых отказов, сделанных не пользователями, а ботами.

Через неделю после перезапуска этого сайта я зашел на вебвизор, чтобы посмотреть, как идут дела. Картина была просто удручающая, суммарно отказы завалили за красную линию в 20%. Спустя 2 месяца работы над сайтом — просто опускаются руки. Примерно пятая часть заходов — по 0 сек. Яндекс учитывает эти заходы как отказы, и соответственно понижает его в выдаче.

Отказ в Яндекс метрике защита от ботов, нулевые заходы

Отказы зафиксированы как одиночные с разных IP, так и по несколько хитов с одних и тех же направлений.

Несколько недель упорного труда просто накрывается медным тазом. И так, далее я расскажу, как мне удалось вернуть отказы в норму и значительно сократить — нулевые заходы.

Как отсечь ботов в «Яндекс метрике»

Вначале я обратился в службу Яндекса. Что-то типа: «Эй, парни, вы тут ботов считаете, как посетителей и лепите отказы». На что мне ответили, что я могу самостоятельно отсечь их в Метрике.

По совету специалиста из службы поддержки я перешел в отчет «Роботы» по пути Отчеты — Стандартные отчёты — Мониторинг — Роботы. Внизу страницы находится подраздел называющийся «Фильтрация роботов». В нем три пункта:

  1. Учитывать визиты всех роботов.
  2. Фильтровать роботов по строгим правилам.
  3. Фильтровать роботов только по строгим правилам и поведению.

У меня стояла отметка на первом пункте. Она ставится по умолчанию на всех счетчиках Яндекс. Метрики. Я поставил на третью, и нужно признать, часть нулевых отказов ушла. Но только часть.

Фильтрация роботов по User-Agent

Следующим пунктом стала фильтрация ботов по User-Agent. Прежде всего, я установил в файл .htaccess фильтр, который отбрасывал ботов, нежелательных парсеров, грабберов контента по User-Agent.

SetEnvIfNoCase User-Agent "^Black Hole" bad_bot
SetEnvIfNoCase User-Agent "^Titan" bad_bot
SetEnvIfNoCase User-Agent "^WebStripper" bad_bot
SetEnvIfNoCase User-Agent "^ExtractorPro" bad_bot
SetEnvIfNoCase User-Agent "^CopyRightCheck" bad_bot
SetEnvIfNoCase User-Agent "^Crescent" bad_bot
SetEnvIfNoCase User-Agent "^Wget" bad_bot
SetEnvIfNoCase User-Agent "^SiteSnagger" bad_bot
SetEnvIfNoCase User-Agent "^ProWebWalker" bad_bot
SetEnvIfNoCase User-Agent "^CheeseBot" bad_bot
SetEnvIfNoCase User-Agent "^Teleport" bad_bot
SetEnvIfNoCase User-Agent "^TeleportPro" bad_bot
SetEnvIfNoCase User-Agent "^NetMechanic" bad_bot
SetEnvIfNoCase User-Agent "^CherryPicker" bad_bot
SetEnvIfNoCase User-Agent "^EmailCollector" bad_bot
SetEnvIfNoCase User-Agent "^EmailSiphon" bad_bot
SetEnvIfNoCase User-Agent "^WebBandit" bad_bot
SetEnvIfNoCase User-Agent "^EmailWolf" bad_bot
SetEnvIfNoCase User-Agent "^MIIxpc" bad_bot
SetEnvIfNoCase User-Agent "^Telesoft" bad_bot
SetEnvIfNoCase User-Agent "^Website Quester" bad_bot
SetEnvIfNoCase User-Agent "^WebZip" bad_bot
SetEnvIfNoCase User-Agent "^moget/2.1" bad_bot
SetEnvIfNoCase User-Agent "^WebZip/4.0" bad_bot
SetEnvIfNoCase User-Agent "^WebSauger" bad_bot
SetEnvIfNoCase User-Agent "^WebCopier" bad_bot
SetEnvIfNoCase User-Agent "^NetAnts" bad_bot
SetEnvIfNoCase User-Agent "^Mister PiX" bad_bot
SetEnvIfNoCase User-Agent "^WebAuto" bad_bot
SetEnvIfNoCase User-Agent "^TheNomad" bad_bot
SetEnvIfNoCase User-Agent "^WWW-Collector-E" bad_bot
SetEnvIfNoCase User-Agent "^spanner" bad_bot
SetEnvIfNoCase User-Agent "^InfoNaviRobot" bad_bot
SetEnvIfNoCase User-Agent "^Harvest/1.5" bad_bot
SetEnvIfNoCase User-Agent "^Bullseye/1.0" bad_bot
SetEnvIfNoCase User-Agent "^Mozilla/4.0 (compatible; BullsEye; Windows 95)" bad_bot
SetEnvIfNoCase User-Agent "^Crescent Internet ToolPak HTTP OLE Control v.1.0" bad_bot
SetEnvIfNoCase User-Agent "^CherryPickerSE/1.0" bad_bot
SetEnvIfNoCase User-Agent "^RMA" bad_bot
SetEnvIfNoCase User-Agent "^libWeb/clsHTTP" bad_bot
SetEnvIfNoCase User-Agent "^asterias" bad_bot
SetEnvIfNoCase User-Agent "^httplib" bad_bot
SetEnvIfNoCase User-Agent "^turingos" bad_bot
SetEnvIfNoCase User-Agent "^CherryPicker /1.0" bad_bot
SetEnvIfNoCase User-Agent "^WebBandit/3.50" bad_bot
SetEnvIfNoCase User-Agent "^NICErsPRO" bad_bot
SetEnvIfNoCase User-Agent "^Microsoft URL Control - 5.01.4511" bad_bot
SetEnvIfNoCase User-Agent "^DittoSpyder" bad_bot
SetEnvIfNoCase User-Agent "^Foobot" bad_bot
SetEnvIfNoCase User-Agent "^WebmasterWorldForumBot" bad_bot
SetEnvIfNoCase User-Agent "^SpankBot" bad_bot
SetEnvIfNoCase User-Agent "^BotALot" bad_bot
SetEnvIfNoCase User-Agent "^lwp-trivial/1.34" bad_bot
SetEnvIfNoCase User-Agent "^lwp-trivial" bad_bot
SetEnvIfNoCase User-Agent "^Wget/1.6" bad_bot
SetEnvIfNoCase User-Agent "^BunnySlippers" bad_bot
SetEnvIfNoCase User-Agent "^humanlinks" bad_bot
SetEnvIfNoCase User-Agent "^LinkextractorPro" bad_bot
SetEnvIfNoCase User-Agent "^Offline Explorer" bad_bot
SetEnvIfNoCase User-Agent "^Mata Hari" bad_bot
SetEnvIfNoCase User-Agent "^LexiBot" bad_bot
SetEnvIfNoCase User-Agent "^Web Image Collector" bad_bot
SetEnvIfNoCase User-Agent "^The Intraformant" bad_bot
SetEnvIfNoCase User-Agent "^True_Robot/1.0" bad_bot
SetEnvIfNoCase User-Agent "^True_Robot" bad_bot
SetEnvIfNoCase User-Agent "^Microsoft URL Control - 6.00.8169" bad_bot
SetEnvIfNoCase User-Agent "^URLy Warning" bad_bot
SetEnvIfNoCase User-Agent "^Wget/1.5.3" bad_bot
SetEnvIfNoCase User-Agent "^LinkWalker" bad_bot
SetEnvIfNoCase User-Agent "^cosmos" bad_bot
SetEnvIfNoCase User-Agent "^moget" bad_bot
SetEnvIfNoCase User-Agent "^hloader" bad_bot
SetEnvIfNoCase User-Agent "^BlowFish/1.0" bad_bot
SetEnvIfNoCase User-Agent "^JennyBot" bad_bot
SetEnvIfNoCase User-Agent "^MIIxpc/4.2" bad_bot
SetEnvIfNoCase User-Agent "^BuiltBotTough" bad_bot
SetEnvIfNoCase User-Agent "^ProPowerBot/2.14" bad_bot
SetEnvIfNoCase User-Agent "^BackDoorBot/1.0" bad_bot
SetEnvIfNoCase User-Agent "^toCrawl/UrlDispatcher" bad_bot
SetEnvIfNoCase User-Agent "^WebEnhancer" bad_bot
SetEnvIfNoCase User-Agent "^TightTwatBot" bad_bot
SetEnvIfNoCase User-Agent "^suzuran" bad_bot
SetEnvIfNoCase User-Agent "^VCI WebViewer VCI WebViewer Win32" bad_bot
SetEnvIfNoCase User-Agent "^VCI" bad_bot
SetEnvIfNoCase User-Agent "^Xenu's Link Sleuth 1.1c" bad_bot
SetEnvIfNoCase User-Agent "^Xenu's" bad_bot
SetEnvIfNoCase User-Agent "^Zeus" bad_bot
SetEnvIfNoCase User-Agent "^RepoMonkey Bait & Tackle/v1.01" bad_bot
SetEnvIfNoCase User-Agent "^RepoMonkey" bad_bot
SetEnvIfNoCase User-Agent "^Zeus 32297 Webster Pro V2.9 Win32" bad_bot
SetEnvIfNoCase User-Agent "^Webster Pro" bad_bot
SetEnvIfNoCase User-Agent "^EroCrawler" bad_bot
SetEnvIfNoCase User-Agent "^LinkScan/8.1a Unix" bad_bot
SetEnvIfNoCase User-Agent "^Keyword Density/0.9" bad_bot
SetEnvIfNoCase User-Agent "^Szukacz/1.4" bad_bot
SetEnvIfNoCase User-Agent "^QueryN Metasearch" bad_bot
SetEnvIfNoCase User-Agent "^Openfind data gathere" bad_bot
SetEnvIfNoCase User-Agent "^Openfind" bad_bot
SetEnvIfNoCase User-Agent "^Kenjin Spider" bad_bot
SetEnvIfNoCase User-Agent "^Cegbfeieh" bad_bot
<Limit GET POST HEAD>
Order Allow,Deny
Allow from all
Deny from env=bad_bot
</Limit>

Буквально спустя 3-4 часа поток нулевых заходов, которые выбивают отказ в поисковой системе, снизился вдвое! А что делать с остальными? Можно конечно побанить их через .htaccess добавив в файл следующие строки:

# BLACK LIST
order allow,deny
allow from all
# далее прописать IP с которых идут отказы
deny from 37.142.162.181
deny from 37.142.152.101

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

Модификации Яндекс счетчика для отображения IP адресов

Для начала необходимо создать php файл, например ip.php в котором будет размещена функция, возвращающая IP посетителя, далее предлагаю исходный код функции:

<?php
function getClientIP() {
if ($_SERVER['HTTP_X_FORWARDED_FOR'] != '')
    {
	$client_ip = (!empty($_SERVER['REMOTE_ADDR'])) ? $_SERVER['REMOTE_ADDR'] : ((!empty($_ENV['REMOTE_ADDR'])) ? $_ENV['REMOTE_ADDR'] : "unknown");
	$entries = split('[, ]', $_SERVER['HTTP_X_FORWARDED_FOR']);
	reset($entries);
	while (list(, $entry) = each($entries)) {
	    $entry = trim($entry);
	    if (preg_match("/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/", $entry, $ip_list)) {
            $private_ip = array('/^0\./','/^127\.0\.0\.1/','/^192\.168\..*/','/^172\.((1[6-9])|(2[0-9])|(3[0-1]))\..*/','/^10\..*/');
            $found_ip = preg_replace($private_ip, $client_ip, $ip_list[1]);
            if ($client_ip != $found_ip) {
		    $client_ip = $found_ip;
		    break;
		}
	    }
	}
    }
    else
	{
	    $client_ip = (!empty($_SERVER['REMOTE_ADDR'])) ? $_SERVER['REMOTE_ADDR'] : ((!empty($_ENV['REMOTE_ADDR'])) ? $_ENV['REMOTE_ADDR'] : "unknown");
	}
    return $client_ip;
}
?>

Теперь остаётся только модифицировать код счетчика Яндекса, чтобы он отображал IP в отдельную колонку. В моем случае код счетчика размещён в отдельном файле metrika.php, который просто инклудится в файле header.php директивой include.

<?php include("metrika.php");?>

ВНИМАНИЕ!
Файлы ip.php и metrika.php (в котором будет находится код счетчика Яндекс) необходимо создать в корневом каталоге сайта, или рядом с файлом header.php, в противном случае придется указывать путь в директиве include. В WordPress это будет ./wp-content/themes/название_темы/

Это очень удобно, разместил код в одном файле, а потом с помощью вставки прописал его там, где нужно и все. Далее я покажу что должно быть в файле metrika.php для того, чтобы все работало. Первым делом вставляем php код, который будет определять IP посетителя и присваивать его значение переменной $ip, в строке $ip=getClientIP().

<?php
    include("ip.php"); // указать путь к файлу, который определяет IP посетителя
    $ip=getClientIP(); // вызываем функцию
?>

Далее, код самого Яндекс счетчика

Внимание, недавно код счетчика изменился, поэтому статья исправлена с учетом этих изменений

Ниже показано, как выглядит код счетчика изначально, с учетом того, что были убраны лишние пробелы, комментирующий блок в начале строки <!– Yandex.Metrika counter –>, в конце строки <!– /Yandex.Metrika counter –>, изжившая себя временем бесполезная конструкция – <script type=”text/javascript”> заменена на <script> и идентификатор счетчика заменен на XXXXX, поскольку он у каждого свой.

<script>(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})(window,document,"script","https://mc.yandex.ru/metrika/tag.js","ym");ym(XXXXX,"init",{id:XXXXX,clickmap:true,trackLinks:true,accurateTrackBounce:true,webvisor:true});</script><noscript><div><img src="https://mc.yandex.ru/watch/47543962" style="position:absolute;left:-9999px" alt=""></div></noscript>

Код счетчика Яндекс отличается только идентификатором и дополнительными опциями, если они включены. Например, если у вас включен вебвизор, то в строке
{id:XXXXX,clickmap:true,trackLinks:true,accurateTrackBounce:true,webvisor:true} появляется webvisor:true

Теперь модифицируем счетчик так, чтобы он мог отображать IP посетителя, ниже показан завершенный пример файла metrika.php, то есть то, как он должен выглядеть.

<?php include("ip.php");$ip=getClientIP();?>
<script>var yaParams={ip_adress:"<?php echo $ip;?>"};(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})(window,document,"script","https://mc.yandex.ru/metrika/tag.js","ym");ym(XXXXX,"init",{id:XXXXX,params:window.yaParams,clickmap:true,trackLinks:true,accurateTrackBounce:true,webvisor:true});</script><noscript><div><img src="https://mc.yandex.ru/watch/47543962" style="position:absolute;left:-9999px" alt=""></div></noscript>

Будьте внимательны, полученное значение IP вначале строки

<?php include("ip.php");$ip=getClientIP();?>

Необходимо создать параметр

Было:

<script>(function(m,e,t,r,i,k,a)

Стало:

<script>var yaParams={ip_adress:”<?php echo $ip;?>”};(function(m,e,t,r,i,k,a)

И передать его функции:

Было:

id:11111,clickmap:true,trackLinks:true

Стало:

id:11111,params:window.yaParams,clickmap:true,trackLinks:true

Остаётся только подключить счетчик в хедере header.php и настроить отображение столбцов в Яндекс вебмастере. Для этого в вебвизоре нажимаем «Настроить столбцы»

Отказ в Яндекс метрике защита от ботов, нулевые заходы

В левой части открывшегося окошка устанавливаем галочку напротив строчки «Параметры визитов».

Отказ в Яндекс метрике защита от ботов, нулевые заходы

А в левой хватаем мышкой появившейся блок и переносим в начало, как показано на рисунке. Это для того, чтобы отображение IP адресов шло сразу за колонкой «Время на сайте»

Отказ в Яндекс метрике защита от ботов, нулевые заходы

Вот в принципе и все, теперь можно адресно побанить всех посетителей с нулевым заходом. Причем операцию можно проводить раз в два дня, и со временем количество отказов с нулевым временем на сайте значительно снизится.

Отказ в Яндекс метрике защита от ботов, нулевые заходы

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

Отказ в Яндекс метрике защита от ботов, нулевые заходы

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

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
Back to top button