Добро пожаловать на сайт SEDBY

Анализ UTM меток

  • 107 просмотров
  • 18 июля, 2024
  • Обновлено: 18 июля, 2024
  • admin
  • Время чтения: 4 минуты
Анализ UTM меток в переходах по рекламным ссылкам

О том, что такое 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():

  1. Название записи в таблице cot_hits.
  2. Инкремент (по умолчанию 1).
  3. Если 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()

останется прежней. 

Нескучной разработки!

Аватар
  • 2. Andrew
  • 13.08.2024 03:26

что бы не дать забить себе БД ненужныими строками лучше наверное как то так

$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);
  }
}

Аватар
  • 1. Никита
  • 18.07.2024 16:01

Норм

Новый комментарий

Имя:
Для редактирования комментария осталось 10 минут
Блок пользователя
Регистрация на нашем сайте позволит вам общаться на форумах и получить доступ к другому полезному функционалу
Вы вошли как Гость