Что такое «рекламный контейнер» (Tag Сontainer)?

23 Май 2013 в 02:06

Интернет-маркетинг активно растет и вместе с ним появляется все больше и больше различных онлайн-сервисов для учета и анализа аудитории рекламодателя, поэтому уже сложно встретить сайт рекламодателя, на котором не нашлось бы 3-5 JS-кодов (трекеров) того или иного сервиса для рекламодателей.  Некоторые из этих JS-трекеров требуют установки на все страницы, но большинство данных трекеров требуют установки только на конкретные страницы сайта и дополнительно требуют выполнение тех или иных условий. А в редких случаях такие трекеры могут конфликтовать, поэтому нужно правильно управлять работой этих трекеров на своем сайте.

Рекламный контейнер (Tag Сontainer) – технология управления трекерами в рамках сайта рекламодателя. Опытные рекламодатели знают данную технологию как «Tag Management».

Для чего нужен рекламный контейнер (Tag Сontainer)?

Рекламный контейнер (Tag Сontainer) решает две важнейших задачи:

  • Скорость работы сайта.
  • Правильная логика работы всех трекеров.

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

Правильная логика работы трекеров более сложная задача, так как она делится на две составляющий: технологии и бизнес.

«Технологические конфликты»

Два трекера выполняющих одну и ту же работу могут “конфликтовать” из-за одинаковых переменных в коде трекера, но данная ситуация бывает очень редко. так как все сервисы стараются использовать уникальные названия переменных.

«Бизнес конфликты»

Наиболее часто “конфликты” возникают между трекерами CPA-систем, так как потенциальный клиент может перейти несколько раз с разных сайтов и если эти сайты размещают CPA-рекламу одного рекламодателя, но в разных CPA-системах, то трекеры CPA-систем могут учесть выполнение целевого действия в свою пользу. В результате этого рекламодатель может переплатить за выполнение целевого действия в 2 и более раза.

Рекламный контейнер (Tag Сontainer) как раз и решает задачу по правильному учету целевых действий между двумя и более CPA системами и вызовет трекер последней системы, т.е. с которой был последний переход.

Как работать с рекламным контейнером (Tag Сontainer)?

  1. Определите четкое название параметра, который вы будете использовать для управления контейнером. Например: from
  2. Определите четкие названия рекламных каналов для которых вы будете использовать контейнер. Например: from=mixmarket; from=yandex
  3. Добавьте в CMS код для управления контейнером (посмотреть пример на PHP) и интегрируйте в этот код все необходимые трекеры.
    Прим.: Наиболее оптимальным вариантом является управление контейнером на стороне сервера, чтобы не выдавать лишние JS-коды на странице.
    Управление контейнером через JS-код не позволит ускорить работу сайта, но данный вариант позволит правильно работать с трекерами и может быть реализован через шаблон сайта.
  4. Добавьте ко всем рекламным ссылкам название параметра и канала для правильного учета трафика. Например: http://mixmarket.biz/partnreg/all/?from=blog

Пример кода

Загрузить пример кода на PHP и JS

Пример PHP-кода

< ?php
// Конфигурация
$mmFromCheckerCfg = array(
'paramName' => 'from', // название параметра для отслеживания
'expiresDays' => 30, // Срок жизни куки в днях
);

// Перехватка меток / обработчик параметров (код должен выполняться до передачи данных в браузер)
$from_val = isset($_REQUEST[$mmFromCheckerCfg['paramName']])?$_REQUEST[$mmFromCheckerCfg['paramName']]:'';
if ($from_val) {
$domain = implode('.',array_slice(explode('.',$_SERVER['HTTP_HOST']),-2));
setcookie("mmFromCheckerVal", $from_val, time()+3600*24*$mmFromCheckerCfg['expiresDays'], '/', '.'.$domain);
$_COOKIE["mmFromCheckerVal"] = $from_val;
}
?>
<html>

<head>
<title>Миксмаркет - Рекламный контейнер (Tag Сontainer) </title>
</head>
<body>
< ?php

// проверка и выплевывание кода
if (isset($_COOKIE["mmFromCheckerVal"]) and $_COOKIE["mmFromCheckerVal"]=='mixmarket'){
// тут выдаем код трекера
echo "<h1>Hello world (Mixmarket)";
} elseif (isset($_COOKIE["mmFromCheckerVal"]) and $_COOKIE["mmFromCheckerVal"]=='yandex') {
//
echo "<h1>Hello world (Yandex)</h1>";
}
?>
</body>
</html>

<html>
<head>
<title>Миксмаркет - Рекламный контейнер (Tag Сontainer) </title>
<script type="text/javascript">
// Вспомогательные функции. Размещаются в теге <head>
function setCookie(name, value, days) {
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
var expires = "; expires=" + date.toGMTString();
}
else var expires = "";
var domainParts = window.location.host.split('.');
var domain = domainParts.pop();
domain = domainParts.pop()+'.'+domain;
document.cookie = name + "=" + value + expires + ";path=/;domain=." + domain;
}
function getCookie(c_name) {
if (document.cookie.length > 0) {
c_start = document.cookie.indexOf(c_name + "=");
if (c_start != -1) {
c_start = c_start + c_name.length + 1;
c_end = document.cookie.indexOf(";", c_start);
if (c_end == -1) {
c_end = document.cookie.length;
}
return unescape(document.cookie.substring(c_start, c_end));
}
}
return "";
}
function getParameterByName(name)
{
name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
var regexS = "[\\?&amp;amp;]" + name + "=([^&amp;amp;#]*)";
var regex = new RegExp(regexS);
var results = regex.exec(window.location.search);
if(results == null)
return "";
else
return decodeURIComponent(results[1].replace(/\+/g, " "));
}
// Конфигурация
var mmFromCheckerCfg = {
paramName : 'from', // Название параметра для отслеживания
expiresDays : 30, // Срок жизни куки в днях
};

// Перехватчик меток / обработчик параметров

if (mmFromCheckerCfg.paramVal = getParameterByName(mmFromCheckerCfg.paramName)){
setCookie('mmFromCheckerVal',mmFromCheckerCfg.paramVal,mmFromCheckerCfg.expiresDays);
}
</head></script>
</head>
<body>
<script type="text/javascript">
// "Обертка" для трекера.
if (getCookie('mmFromCheckerVal')=='mixmarket'){
// Вызов первого трекера, но если ранее трафик пришел с from=mixmarket
document.write('<h1>Hello world (Mixmarket)</h1>');
} else if (getCookie('mmFromCheckerVal')=='yandex'){
// Вызов первого трекера, но если ранее трафик пришел с from=yandex
document.write('<h1>Hello world (Yandex)</h1>');
}
</script>
</body>
</html>
Михаил Гаркунов
ex-Директор по развитию Партнерской сети Миксмаркет
Комментарии: 3
  1. Александр Поляков:

    Михаил, спасибо за статью. Вы советуете (или приводите в пример для разметки трафика использовать переменную from). Можно ли использовать utm_source или это нежелательно?

    • Александр, можно использовать utm_source, но нельзя его использовать через стандартные методы Google. Проблема в том, что utm-метки обрабатываются через JS-трекер и многие антирекламные фильтры блокируют выполнение данного JS-кода. И если на сайте большая аудитория «айтишников», то ошибка может составить до 50%.

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

  2. Иван:

    А зачем дублируется функциональность в js? Одного php не достаточно?

Оставить комментарий