Анализ UTM меток
Популярные запросы: тема Omnis, плагин Pagelist, Cotonti 0.9.24.2, ЧПУ, Font Face
- 118 просмотров
- 18 июля, 2024
- Обновлено: 18 июля, 2024
- admin
- Время чтения: 4 минуты
О том, что такое UTM-метки и для чего они предназначены, мы уже рассказывали здесь. Сегодня мы говорим о способах реализации фиксирования и анализа переходов по адресам с UTM-метками. Конечно, ситуаций, при которых вам это может понадобиться, немало. Решений гораздо меньше – всего три:
- использовать систему аналитики (Google Analytics или Яндекс Метрику),
- импортировать данные системы аналитики в админку сайта,
- реализовать сбор статистики средствами движка.
Все три способа одинаково хороши. Естественно, внешний сервис аналитики даст более точные данные. Но и мы сможем сделать все сами и не хуже.
Постановка задачи
Универсального решения у нас не получится априори, поэтому озвучим конкретную задачу:
Нам необходимо зафиксировать и проанализировать внутренние переходы по рекламным ссылкам, размещенным на различных страницах нашего сайта.
Предположим, что у нас есть некая страница с акционными товарами, а ссылки на нее ведут из:
- баннера в шапке сайта,
- рекламного поста в блоге,
- баннера в каталоге товаров.
Соответственно, имеем три ссылки:
https://mysite.tpl/?utm_source=internal&utm_media=header_banner&utm_campaign=2407_discounts https://mysite.tpl/?utm_source=internal&utm_media=blog_post&utm_campaign=2407_discounts https://mysite.tpl/?utm_source=internal&utm_media=catalog_banner&utm_campaign=2407_discounts
Реализуем сбор и анализ UTM меток
Теперь нам надо “словить” переходы по ним. Допустим, посадочная страница с акциями представляет собой обычную страницу в разделе. В таком случае, используем хук page.tags
. А функция cot_import()
позволит нам определить наличие UTM-метки в адресе перехода:
<?php /* ==================== [BEGIN_COT_EXT] Hooks=page.tags [END_COT_EXT] ==================== */ defined('COT_CODE') or die('Wrong URL'); $utm['source'] = Cot::$db->prep(cot_import('utm_source', 'G', 'TXT'));
Итак, в элемент source массива $utm
мы импортировали значение GET-параметра utm_source. Поскольку нам нужен только переход по метке, добавим проверку. При ее прохождении дополним массив остальными данными:
<?php /* ==================== [BEGIN_COT_EXT] Hooks=page.tags [END_COT_EXT] ==================== */ defined('COT_CODE') or die('Wrong URL'); $utm['source'] = Cot::$db->prep(cot_import('utm_source', 'G', 'TXT')); if ($utm['source'] == 'internal') { $utm['media'] = Cot::$db->prep(cot_import('utm_media', 'G', 'TXT')); $utm['campaign'] = Cot::$db->prep(cot_import('utm_campaign', 'G', 'TXT')); };
Следующий момент – это фиксирование перехода. Реализуем его с помощью плагина hits. Он собирает в свою таблицу cot_hits всю статистику по умолчанию. Мы поступим аналогично: функцией cot_stat_inc()
зафиксируем источник перехода:
<?php /* ==================== [BEGIN_COT_EXT] Hooks=page.tags [END_COT_EXT] ==================== */ defined('COT_CODE') or die('Wrong URL'); $utm['source'] = Cot::$db->prep(cot_import('utm_source', 'G', 'TXT')); if ($utm['source'] == 'internal') { $utm['media'] = Cot::$db->prep(cot_import('utm_media', 'G', 'TXT')); $utm['campaign'] = Cot::$db->prep(cot_import('utm_campaign', 'G', 'TXT')); cot_stat_inc($utm['campaign'] . '_' . $utm['media'], 1, true); };
Соответствующая запись появится в таблице cot_hits. Обратите внимание на параметры функции cot_stat_inc()
:
- Название записи в таблице cot_hits.
- Инкремент (по умолчанию 1).
- Если true, то запись будет создана при ее отсутствии.
И еще два нюанса, которые вам могут понадобиться.
Подключение функции cot_stat_inc()
В нашем примере посадочной является обычная страница модуля page. В данной локации файл функций плагина hits подключается по умолчанию. Если вам понадобится другая локация (главная страница, раздел или плагин), необходимо подключить данную функцию с помощью директивы include_once
:
<?php /* ==================== [BEGIN_COT_EXT] Hooks=page.tags [END_COT_EXT] ==================== */ defined('COT_CODE') or die('Wrong URL'); $utm['source'] = Cot::$db->prep(cot_import('utm_source', 'G', 'TXT')); if ($utm['source'] == 'internal') { $utm['media'] = Cot::$db->prep(cot_import('utm_media', 'G', 'TXT')); $utm['campaign'] = Cot::$db->prep(cot_import('utm_campaign', 'G', 'TXT')); include_once cot_incfile('hits', 'plug'); cot_stat_inc($utm['campaign'] . '_' . $utm['media'], 1, true); };
Собственно, эту строку можно добавить в любом случае: подключение файла функции плагина hits все равно будет выполнено однократно.
Фильтр кликов по посетителям
Если вам необходимо ограничить переход выполнившим его пользователем, можно использовать cookies:
<?php /* ==================== [BEGIN_COT_EXT] Hooks=page.tags [END_COT_EXT] ==================== */ defined('COT_CODE') or die('Wrong URL'); $utm['source'] = Cot::$db->prep(cot_import('utm_source', 'G', 'TXT')); if ($utm['source'] == 'internal') { $utm['media'] = Cot::$db->prep(cot_import('utm_media', 'G', 'TXT')); $utm['campaign'] = Cot::$db->prep(cot_import('utm_campaign', 'G', 'TXT')); if (!isset($_COOKIE['already_clicked'])) { setcookie('already_clicked', $utm['media'], $sys['now'] + 864000); include_once cot_incfile('hits', 'plug'); cot_stat_inc($utm['campaign'] . '_' . $utm['media'], 1, true); } };
Теперь если пользователь уже перешел по данной метке, повторные переходы засчитываться не будут. Убедитесь, что срок жизни вашей куки достаточен чтобы охватить срок проведения акции.
Если посетитель очистит куки в браузере, он снова станет уникальным. C'est la vie.
Вывод данных в админке
Поскольку ни вам, ни вашему клиенту не интересно анализировать данные по переходам из phpmyadmin, выведем их с помощью функции cot_stat_get()
в отдельном блоке на главной странице админки:
<div class="block"> <h2>{PHP.R.icon-stats}Статистика по акции</h2> <div class="wrapper"> <table class="table table-striped mb-1"> <tbody> <tr class="odd"> <td> Баннер в шапке </td> <td class="text-end"> {PHP|cot_stat_get('2407_discounts_header_banner')} </td> </tr> <tr class="even"> <td> Пост в блоге </td> <td class="text-end"> {PHP|cot_stat_get('2407_discounts_blog_post')} </td> </tr> <tr class="odd"> <td> Баннер в каталоге товаров </td> <td class="text-end"> {PHP|cot_stat_get('2407_discounts_catalog_banner')} </td> </tr> </tbody> </table> </div> </div>
Я использовал разметку и стили темы Yukon, но вывод несложно адаптировать под коробочную или вашу собственную тему.
Заключение
Как видим, средствами Cotonti Siena анализ URL’а в общем и UTM меток в частности выполняется очень просто. В зависимости от конкретной задачи, ваш плагин может усложниться, но принципиальная схема
cot_import() -> cot_stat_inc() -> cot_stat_get()
останется прежней.
Нескучной разработки!
что бы не дать забить себе БД ненужныими строками лучше наверное как то так
$utm_source = array('facebook', 'insta');
$utm['source'] = Cot::$db->prep(cot_import('utm_source', 'G', 'TXT'));
if (in_array($utm['source'], $utm_source)) {
$utm['media'] = Cot::$db->prep(cot_import('utm_media', 'G', 'TXT'));
$utm['campaign'] = Cot::$db->prep(cot_import('utm_campaign', 'G', 'TXT'));
if (!empty($utm['media']) && !empty($utm['campaign'])) {
cot_stat_inc($utm['media'] . '_' . $utm['campaign'], 1, true);
}
}
Норм
Новый комментарий