98% трафика оказались ботами
Летом я доделал собственную систему аналитики и поставил её на свои проекты. Через несколько недель посмотрел на общую цифру и завис. Из 448 894 визитов живыми посетителями оказались около двух процентов.
Первые четыре минуты
Систему включили на интернет-магазине днём, и я сидел смотрел, как приходят первые данные. За четыре минуты в базу упало 133 визита. Из них 130 система пометила как ботов, причём 112 пришлись на один и тот же поисковый краулер, методично обходивший каталог.
Сначала я решил, что где-то ошибся в детекторе. Слишком уж красивое число. Проверил вручную несколько десятков записей: user-agent, адрес, поведение, скорость обхода. Ошибки не было, это действительно были роботы.
Что показала база через несколько недель
Почему обычные счётчики показывают другое
Стандартные системы статистики тоже фильтруют роботов, и делают это неплохо. Но фильтруют они в основном тех, кто честно представился: назвал себя краулером в user-agent или пришёл с известного диапазона адресов.
Проблема в остальных. Скрейперы, парсеры конкурентов, сервисы мониторинга цен и накрутчики представляются обычным браузером и приходят с обычных адресов, иногда с домашних. Формально они неотличимы от посетителя, и часть такого трафика оседает в отчётах как посещения.
На одном из проектов мы разбирали подозрительный всплеск и обнаружили ферму из 135 адресов одного облачного провайдера, которая ходила по каталогу с человеческими user-agent. В отчётах это выглядело как приток аудитории.
Признак, который работает
Перебирать user-agent и списки адресов — гонка, в которой всегда отстаёшь. Гораздо надёжнее оказался другой признак: выполнил ли посетитель JavaScript.
Большинство парсеров не запускают браузерный движок, потому что это дорого: им нужен HTML, а не отрисованная страница. Поэтому визит фиксируется на сервере, а отдельным сигналом подтверждается, что на странице реально отработал скрипт. Нет подтверждения — визит есть, человека нет.
Признак не идеальный. Серьёзный скрейпер на headless-браузере его пройдёт, а человек с отключённым JavaScript попадёт под подозрение. Но по соотношению усилий к результату он лучше всего остального, что я пробовал.
Что меняется, когда роботов отделили
Первое и самое неприятное: посещаемость падает. Цифра, которой привыкли гордиться, оказывается сильно меньше. Зато она наконец означает то, что написано.
Второе: начинает сходиться конверсия. Если в знаменателе были роботы, процент выглядел удручающе низким, и хозяин сайта годами думал, что у него плохо с продажами. После очистки часто выясняется, что с продажами нормально, плохо было с арифметикой.
Третье, и ради этого всё затевалось: становится видно, какая реклама реально приводит людей. Кампания, дающая много визитов и ноль заявок, нередко просто собирает роботов, и её надо не оптимизировать, а выключить.
Что с этим делать
Свою систему аналитики строить необязательно, для большинства задач хватает обычных счётчиков. Но полезно хотя бы раз посмотреть на трафик критически.
- Сравните данные счётчика с логами сервера. Разница между ними и есть та часть, о которой счётчик не знает.
- Посмотрите распределение по адресам. Если заметная доля визитов приходит из дата-центров, это не аудитория.
- Проверьте, что считается сеансом. Заход без единого события и с нулевым временем — обычно не человек.
- Сопоставьте всплески трафика с заявками. Рост посещений без роста обращений почти всегда означает роботов.
Числа в этой статье — из моей собственной системы, работающей на трёх проектах, включая сайт, который вы сейчас читаете. Как она устроена, я описал в отдельном кейсе.