Анализ UTM меток
Популярные запросы: Open Graph, плагин Reading Time, тема Quebec, плагин Telegram, набор иконок Analogue
- 392 просмотра +1
- 18 июля, 2024
- Обновлено: 18 марта, 2025
- admin
- Время чтения: 6 минут
О том, что такое 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); } }Норм
Новый комментарий
Ошибка
Выполнено