Анализ источника посетителей с помощью Sourcebuster.js или откуда пользователь перешел на сайт

Столкнувшись на днях с библиотекой Sourcebuster.js, решил поведать готовое решение определения источника посещения.

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

1. Подключение на сайте:

В статье, на официальном сайте (ссылка на которую выше) приведена ссылка для скачивания готового минимизированного js файла. Лежит в директории /dist. С ним и будем работать. Так же там описана установка через npm, но так как это наглядное пособие, то его опустим.

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

<!DOCTYPE html>
<html>
    <head>
        ...
    </head>
    <body>
        ....
        
    <!-- sbjs аналитика -->
    <script src="sourcebuster.min.js"></script>
    <script>
      sbjs.init();
    </script>
    <!-- END sbjs аналитика -->

    </body>
</html>

Для проверки, работает ли добавленный скрипт, в консоли браузера следует набрать:

sbjs.get

Не должно возникать ошибки и должен быть выдан объект с информацией.

console_sbjs

Информация, которая хранится в sbjs.get.current потребуется нам для определения источника:

sbjs.get.current

2. Работа на серверной стороне:

Sourcebuster.js работает с cookie. Поэтому актуальная информация вступит в силу только после перезагрузки страницы или посещения пользователем любой другой ссылки на сайте (чтобы была перегрузка страницы и обновлена кука).

Работа с данными в куках проста.

<?php

/**
* Если нет $_COOKIE['analitic_sbjs'] то возвращаем это
*/
function getTempInfo() {
    $a = strtr($_COOKIE['sbjs_current'], ['|||' => '&']);
    parse_str($a, $b);
    if (!$b) {
        $b = [
            'typ' => 'organic',
            'src' => 'google',
            'mdm' => 'organic',
            'cmp' => '(none)',
            'cnt' => '(none)',
            'trm' => '(none)',
        ];
    }
    return (string) json_encode($b);
}

// Вытягиваем сохраненную информацию. Если ее нет, в analitic_sbjs, то дергаем getTempInfo()
$other = strip_tags(trim((string) $_COOKIE['analitic_sbjs']) ? : getTempInfo());

// json_decode, и приводим все в нижний регистр, для более легкого сравнения
$decode = $other ? json_decode($other, true) : [];
$decode['src'] = mb_strtolower($decode['src']);
$decode['mdm'] = mb_strtolower($decode['mdm']);

$source = 'Другие';
if ($decode['src'] == 'google' && $decode['mdm'] == 'cpc') {
    $source = 'Google Adwords';
} elseif ($decode['src'] == 'yandex' && $decode['mdm'] == 'cpc') {
    $source = 'Яндекс Директ';                
} elseif (mb_stripos($decode['src'], 'youtube') !== false) {
    $source = 'Youtube';                
} elseif (in_array($decode['src'], ['facebook', 'fb']) && in_array($decode['mdm'], ['cpc','ppc','cpa','cpm','cpv','cpp'])) {
    $source = 'Facebook реклама';                
} elseif ($decode['src'] == 'instagram' && in_array($decode['mdm'], ['cpc','ppc','cpa','cpm','cpv','cpp'])) {
    $source = 'Instagram реклама';                
} elseif (mb_stripos($decode['src'], 'google') !== false && $decode['mdm'] == 'organic') {
    $source = 'SEO Google';                
} elseif (mb_stripos($decode['src'], 'yandex') !== false && $decode['mdm'] == 'organic') {
    $source = 'SEO Yandex';                
} elseif ($decode['src'] == 'hotline' && $decode['mdm'] == 'cpc') {
    $source = 'hotline';                
} elseif ($decode['src'] == 'priceua' && $decode['mdm'] == 'cpc') {
    $source = 'Price';                
} elseif (mb_stripos($decode['src'], 'viber') !== false) {
    $source = 'Viber';                
} elseif ((mb_stripos($decode['src'], 'facebook') !== false || mb_stripos($decode['src'], 'fb') !== false) && !in_array($decode['mdm'], ['cpc','ppc','cpa','cpm','cpv','cpp'])) {
    $source = 'Facebook другое';                
} elseif ($decode['mdm'] == 'email') {
    $source = 'Email рассылка';                
} elseif ($decode['mdm'] == 'organic') {
    $source = 'SEO другое';                
} elseif ($decode['mdm'] == 'cpc') {
    $source = 'Реклама другое';                
} elseif ($decode['src'] == 'nadavi') {
    $source = 'Ek';                
} elseif ($decode['src'] == 'sendpulse') {
    $source = 'Send Pulse';                
} elseif (mb_stripos($decode['src'], 'yandex') !== false) {
    $source = 'Яндекс другое';                
} elseif ($decode['mdm'] == 'referral') {
    $source = 'Переходы с других сайтов';                
} elseif ($decode['src'] == '(direct)' && $decode['mdm'] == '(none)') {
    $source = 'Прямые заходы';                
} elseif ($decode['mdm'] == 'display') {
    $source = 'Медийная реклама';                
} else {
    $source = 'Другие';
}
var_dump($source); // Информация про источник.

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

Информация хранится в $_COOKIE['analitic_sbjs'] и в $_COOKIE['sbjs_current'] (но в специфическом формате). Функция getTempInfo() здесь как страховка, вдруг у юзера отключены куки или что-то пошло не так (мыло ли). В любом случае это приблизительная информация, так как основана на js и куках.

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

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

4165 2

Комментарии

Игорь, скорее всего так определяет сам sourcebuster. Я привел приблизительный скрипт по обработке на бэкенде этого всего, но можно переписать под себя согласно документации http://sbjs.rocks/#/usage.
Не могу разобраться почему скрипт определяет перехода из поиска Яндекса тип траффика как referral, а не organic. Изменить настройки скрипта не получается.
Только авторизованные пользователи могут оставлять комментарии Вход

Похожие статьи