Недавно обратился ко мне радостный клиент с вопросом, говорит, на сайте, который только-только запустился, начал появляться траффик от реферреров, только вот непонятно что за сайты такие, прошёл по ним, а там — El Zilcho.
Оказывается, это такой новый молодёжно-современный вид спама — «Referrer Spam».
Осторожно, под катом картинки, google analytics и немного быдлокода на php.

Такой вид спама актуален, конечно же, не только для гугловой аналитики, просто привожу её как пример. Итак, что это такое:



Все эти рефереры не настоящие, китайская подделка. Мешают статистике и дают ложную надежду честным людям.
Можно их забанить где-нибудь на сервере, в коде, фаерволе или в конфигах веб-сервера.
В nginx это делается очень просто, в документации есть: wiki.nginx.org/Referrer_Spam_Blocking
Остаётся дописать наших плохих рефереров и готово. Красиво, но скучно, мы лёгких путей не ищем, да и потом тяжело будет клиенту это самому менять.
GA позволяет фильтровать аналитику по различным параметрам, руками это можно сделать следующим образом:



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

Для начала надо зарегистрировать проект в консоли у гугла по адресу: console.developers.google.com/project.





Далее включаем Analytics API





Нам понадобится разрешение пользователя, потому идём в consent screen, выбираем имейл и пишем название. Важно чтобы этот шаг был сделан до генерирования ид и секрета. Далее генерируем Client ID:







Ну и наконец-то можно добраться до кода. Накопипастим кусков из демонстраций и манулалов, самое важное:

$details = new Google_Service_Analytics_FilterExpression();
$details->setField('CAMPAIGN_SOURCE');
$details->setMatchType('MATCHES');
$details->setExpressionValue('регекс с доменами, которые надо заигнорить');
$details->setCaseSensitive(false);

$filter->setExcludeDetails($details);

$analytics->management_filters->insert($accountId, $filter);

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

Всё, что нам остаётся сделать, это выбрать в каких представлениях будем фильтровать (я фильтрую везде, хоть некоторые и не рекомендуют). Для этого заходим в google analytics, выбираем аккаунт, Admin -> All filters -> Exclude Referrer Spam #… -> Apply Filter to Views -> выбираем необходимые вью, которые хотим отфильтровать и ждём, к сожалению фильтры сразу не применяются, но в будущем они появляться не будут.

Комментарии (23)


  1. exelens
    12.05.2015 16:54

    Спасибо, если дальше будете развивать отписывайтесь =)


  1. dmitryrublev
    12.05.2015 17:15

    Кстати, есть ещё один вид спама, который на уровне сервера нет смысла банить — реального захода на сайт вообще не делают.
    Спам идёт на уровне гуглового аналитикса. Злоумышленник генерирует случайные айдишники аналитики, и скриптом шлёт информацию о переходе на ваш с сайт, подставляя поддельный реферер. Можно почитать по этой теме, загуглив «Ghost spam». Проблеме уже около полугода.

    В большинстве случаев, всплывает «iLoveVitaly prOject», и связанные с ним сайты. К нему же относятся рефереры с поддельным поисковым запросом приблизительно такого вида: «vitaly rules google?*:.?.????(^?^)????.?.:*? ?_(?)/?(•?•?)(???)(???)(???)?(?_??)( ?° ?? ?°)?(?д?)??•??•?? ????(=^. .^=)oo»

    Не то, чтобы что-то грандиозное, но временами бесит — как один человек может засрать кучу статистики своими говносайтами.


    1. iliasm Автор
      12.05.2015 17:16

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


      1. sHinE
        12.05.2015 17:33
        +1

        С автором можно пообщаться тут


        1. dmitryrublev
          12.05.2015 19:50

          Мда, не удивлён. Спасибо за ссылку.


  1. waleks
    12.05.2015 17:56
    +3

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


    1. iliasm Автор
      12.05.2015 21:50

      Они похоже это и пытаются сделать, во view settings конкретного property есть такая вот галочка:

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


  1. Subudayj
    12.05.2015 18:41
    +1

    Проблема может быть решена полностью только на стороне Google, ничто не мешает спамерам менять рекламируемые домены хоть по 100 раз в день.
    Если хотите чуть-чуть усложнить жизнь реф-спамерам Google Analytics, то сделайте следующее:
    1) Модификация js-кода вызова GA, которая не влияет на функционал. Например, вместо идентификатора 'UA-1234567-1' можно написать 'UA-123' + '4567-1'. Если реф-спамеры парсят главные страницы веб-сайтов, то я на 99% уверен что они не смогут автоматически распарсить что-либо подобное
    2) Код GA можно получить простым перебором значений, поэтому можно попробовать добавить несколько Properties в GA, чтобы порядковый номер нужного Properties был больше 1 (например, 'UA-1234567-2'). Спамерам придется перебирать x2 (в самом простом варианте) раза больше значений для охвата всех возможных значений id GA


    1. barabanus
      13.05.2015 12:39
      +1

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


  1. bstnd
    12.05.2015 23:52
    +1

    А что дает спамерам такой трафик?


    1. iliasm Автор
      13.05.2015 09:50

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


    1. ozgg
      14.05.2015 15:01

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

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


  1. VDG
    13.05.2015 02:33
    +2

    | В nginx это делается очень просто

    Просто, но бестолку, потому что каждый день приходят новые боты с новыми рефами. Да, они не зайдут уже второй раз, но достаточно и одной пачки с одного рефа в 10 отказов, чтобы тот же Яндекс резко понизил молодой сайт в выдаче. Так случилось у меня. Автоматическая фильтрация ботов в Метрике работает плохо. Боты и этот м/чудак виталя заваливали статистику отказами. ПФ просели, трафик прекратился.

    После чего написал js-фильтр для любых ботов (которые выполняют js): github.com/T-igra/ItSALive Вот только с фильтром сейчас восстанавливается ПФ и возвращается трафик с поиска.


    1. iliasm Автор
      13.05.2015 10:02

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

      я вот не совсем понимаю ваш код, если спамоброузеры js выполняют, почему они не смогут выполнить этот код и загрузить метрику? ну, так же они конечно же могут подменить юзер-агент на «YandexBot» и проскочить проверку.

      а новые боты с новыми рефами — может быть, но это хотя бы что-то им стоит, ну хотя бы домены регистрировать, мелочь, конечно, но всё же не бесплатно


      1. VDG
        13.05.2015 21:41

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

        Могут подменить юзер-агент, но ни один пока это не делает и скорее всего не будет делать, так как его цель прикинуться человеком, чтобы метрика восприняла его как человека, а не как YandexBot-а и зафиксировала в статистике.

        В обсуждении Яндекса clubs.ya.ru/metrika/replies.xml?item_no=12395 вся горячка именно из-за убийства сайтов от проседания ПФ. И Яндекс уже полгода ничего не может поделать.


  1. danikp
    13.05.2015 10:13

    Для того чтобы засчитать хит в GA, как в общем то и в любой другой статистике, не обязательно посещать сайт, достаточно выполнить запрос к серверу учета статистики. Есть некоторые ограничения, но пытливый мозг их легко обойдет. Так что блокировка на уровне сервера — не панацея.

    В любом случае, в том же GA, есть более правильная опция «Referral Exclusion List», которая находится в настройках счетчика. Добавляем туда домен и он перестает учитываться как реферрер. Тоже надо делать руками, но возможно тоже есть API для автоматизации. Из опыта, после бана первого десятка спамеров, спам спадает в 0.

    Для чего такое делают? Продажа СЕО штучек новичкам (ибо кто еще будет на такое клевать) или прописывание своей реферальной куки в какой нибудь программе, например aliexperess, так как там принцип — кто первый, того и тапки. И видимо это выгодно, раз продолжают таким заниматься.


  1. TheVS
    14.05.2015 12:07
    +1

    Смотря в метрику уже обрадовался, что ко мне трафик с хабра пошёл, а тут такое. Злые вы :(


  1. McBernar
    14.05.2015 13:03

    Кстати, а откуда у меня в метрике трафик с этой статьи?
    Что-то я совсем не пони.


    1. paules
      14.05.2015 14:56

      у меня тоже кстати, кто то балуется и типа стебется по жесткому


      1. Vapaamies
        15.05.2015 15:15

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


    1. ozgg
      14.05.2015 15:06

      Там на три статьи ссылки идут. Эта, собственно, третья. Первая — на searchengines.guru (или как там оно зовётся) с темой автора поделки, вторая — обсуждение в Яндекс.метрике. Ну, просто как издевательство, что никто с этим ничего не может поделать.

      То есть на самом деле трафика-то и нет, просто подстановка реферера.


  1. silentboy
    15.05.2015 05:18

    Я заметил интересную особенность, что у меня данная беда только на русскоязычных проектах, а на англоязычных нет. Так ли это у всех?


    1. EminH
      15.05.2015 12:01

      у меня есть и на англо и франкоязычных