Варианты JS-кодов для сайта рекламодателя: сквозной, по сайтзонам, кнопки, фреймы, формы, e-commerce.

1. Цели размещения JS-кодов AdRiver на сайте рекламодателя

Сбор информации о совершении посетителями сайта «целевых действий», таких как посещение определенных разделов сайта, или действий в интерфейсе, с целью дальнейшей оценки эффективности рекламных затрат путем сопоставления информации о контактах с рекламой и действиях на сайте.

Сбор обезличенных списков посетителей сайта рекламодателя, не являющихся персональными данными с точки зрения 152-ФЗ, с целью дальнейшего анализа их состава с помощью ПО Контрагента в ходе планирования рекламных активностей рекламодателя, а также с целью повторной коммуникации с этими посетителями на ресурсах сети Интернет.

Присвоение уникальных ID посетителям сайта для дальнейшей реализации заявленных выше целей.

Способы размещения JS-кодов AdRiver на сайте рекламодателя

  • код для присвоения уникальных ID посетителям: в виде скрипта
  • код для сбора информации о целевых действиях: в виде пикселя

Список сетевых адресов (UR/ IP) системы AdRiver, на которые отправляются ответы кодов  размещенных на сайте рекламодателя

  • ad.adriver.ru
  • content.adriver.ru

2. Варианты JS-кодов AdRiver на сайте рекламодателя

2.1 Код для установки на все страницы сайта рекламодателя (сквозной)

Код можно получить в интерфейсе.

Пример кода

<script type="text/javascript">
  !function(e,n){function  o(e,n,o){n=n||"&",o=o||"=";var d=[];for(var r in  e)e.hasOwnProperty(r)&&d.push(r+o+encodeURIComponent(e[r]));return  d.join(n)}function d(e,n){var o=e.cookie.match("(^|;)  ?"+n+"=([^;]*)(;|$)");return o?decodeURIComponent(o[2]):null}var  r,t,i,c,u;r=e,t=n,i=document.domain,c={tail256:document.referrer||"unknown"},void  0!==(u=function(e){var n={};if(e){var o=e.split("&");for(var d in  o)if(o.hasOwnProperty(d)){var r=o[d].split("=");void 0!==r[0]&&void  0!==r[1]&&(n[r[0]]=decodeURIComponent(r[1]))}}return  n}(window.location.search.substring(1))).adrclid&&(r.fsid=u.adrclid),null!==d(document,"adrcid")&&(r.cid=d(document,"adrcid")),t&&t.id&&null!==d(document,t.id)&&(r.suid=i+"_"+encodeURIComponent(d(document,t.id))),t&&t.gid1?r.gid1=t.gid1:null!==d(document,"_ga")&&(r.gid1=encodeURIComponent(d(document,"_ga"))),t&&t.yid1?r.yid1=t.yid1:null!==d(document,"_ym_uid")&&(r.yid1=encodeURIComponent(d(document,"_ym_uid"))),r.loc=encodeURIComponent(window.location.href),r.custom&&(r.custom=o(r.custom,";")),function(e,n){!function(e){if(e=e.split("![rnd]").join(~~(1e6*Math.random())),document.createElement&&document.body){var  n=document.createElement("img");n.style.position="absolute",n.style.display="none",n.style.width=n.style.height="0px",n.setAttribute("referrerpolicy","no-referrer-when-downgrade"),n.src=e,document.body.appendChild(n)}else{var  o=new  Image;o.setAttribute("referrerpolicy","no-referrer-when-downgrade"),o.src=e}}("https://ad.adriver.ru/cgi-bin/rle.cgi?"+e+"&rnd=![rnd]"+(n?"&"+n:""))}(o(r),o(c))}
  ({ sid: 111111, bt: 62},{ id: "", gid1: "", yid1:  "" });
  </script> 

2.2 Код для тематических зон сайта (сайтзон)

Как разделить сайт на сайтзоны инструкция здесь.

Код можно получить в интерфейсе (аналогично сквозному коду), только выбрав сайтзону, для которой он нужен.

<!--  AdRiver code START.  Type:JS-counter Site: test SZ: index   -->
  <script type="text/javascript">
  !function(e,t){function  r(e,t,r){t=t||"&",r=r||"=";var o=[];for(var n in  e)e.hasOwnProperty(n)&&o.push(n+r+encodeURIComponent(e[n]));return  o.join(t)}function o(e){var t={};if(e){var r=e.split("&");for(var  o in r)if(r.hasOwnProperty(o)){var n=r[o].split("=");void  0!==n[0]&&void  0!==n[1]&&(t[n[0]]=decodeURIComponent(n[1]))}}return t}function  n(e){return(/^\/\//.test(e)?"https:":"")+e}function  i(e,t){var r=e.cookie.match("(^|;)  ?"+t+"=([^;]*)(;|$)");return r?decodeURIComponent(r[2]):null}var  d,a=document;"undefined"==typeof  AdriverCounter&&(AdriverCounter=((d=function(e,t,r){var  o=document.domain;if(!(this instanceof AdriverCounter))return  d.items[e];d.urlParams=d.getUrlParameters(window.location.search.substring(1)),void  0!==d.urlParams.adrclid&&(t.fsid=d.urlParams.adrclid),null!==d.getCookie(document,"adrcid")&&(t.cid=d.getCookie(document,"adrcid")),r&&r.id&&null!==d.getCookie(document,r.id)&&(t.suid=o+"_"+encodeURIComponent(d.getCookie(document,r.id))),r&&r.gid1?t.gid1=r.gid1:null!==d.getCookie(document,"_ga")&&(t.gid1=encodeURIComponent(d.getCookie(document,"_ga"))),r&&r.yid1?t.yid1=r.yid1:null!==d.getCookie(document,"_ym_uid")&&(t.yid1=encodeURIComponent(d.getCookie(document,"_ym_uid"))),t.loc=encodeURIComponent(window.location.href),e=d.items.length||1,d.items[e]=this,t.ph=e,t.custom&&(t.custom=d.toQueryString(t.custom,";")),d.request(d.toQueryString(t))}).httplize=n,d.loadScript=function(e){try{var  t=a.getElementsByTagName("head")[0],r=a.createElement("script");r.setAttribute("type","text/javascript"),r.setAttribute("referrerpolicy","no-referrer-when-downgrade"),r.setAttribute("charset","windows-1251"),r.setAttribute("src",e.split("![rnd]").join(Math.round(1e6*Math.random()))),r.onreadystatechange=function(){/loaded|complete/.test(this.readyState)&&(r.onload=null,t.removeChild(r))},r.onload=function(){t.removeChild(r)},t.insertBefore(r,t.firstChild)}catch(e){}},d.toQueryString=r,d.request=function(e){var  t=d.toQueryString(d.defaults);d.loadScript(d.redirectHost+"/cgi-bin/erle.cgi?"+e+"&rnd=![rnd]"+(t?"&"+t:""))},d.getUrlParameters=o,d.getCookie=i,d.items=[],d.defaults={tail256:document.referrer||"unknown"},d.redirectHost="https://ad.adriver.ru",d.urlParams={},d)),new  AdriverCounter(0,e,t)}
  ({sid:55916, bt:62,  sz:'index'},{id:"",gid1:"",yid1:""});
  </script>
<!--  AdRiver  code END  -->

2.3 Код для учета отдельных событий – нажатий на кнопки, нажатий на отдельные элементы

Пример кода и описание см. в статье.

2.4. Код для закрытых областей сайта (фреймов) рекламодателя

Данный тип кода применяется для страниц, где есть фреймы, в которые нельзя ставить JS-код, но при этом необходимо посчитать определенные действия для них (например, отправку сообщений).
Этот код умеет отправлять js-counter двумя видами – js запросом или img запросом.
Устанавливать этот код нужно вместе со всеми остальными кодами.
Вызывать postMessage нужно в момент, когда в этом фрейме произошло событие, которое требуется посчитать через систему AdRiver.

Пример отправки сообщения из фрейма, где нельзя ставить js
let message  = {
  "adriver":"IMGCounter",
  "parameters": {sid:12345, bt:62,  ad:12345, pid:12345, bid:12345, bn:12345,  "custom":{"1":123,"55":"hello"}},
  "cookies":  {id:"",gid1:"",yid1:""}
  };
  window.parent.postMessage(JSON.stringify(message), '*');
Параметры
  • adriver – "IMGCounter" / "JSCounter" – вид каунтера, который нужно вызвать
  • parameters – набор стандартных параметров, скопированных из интерфейса при получении кода вызова
  • cookies – набор параметров для кук (не обязательно)
Пример кода
function  AdriverCounterListener(e){function t(e,t){function  n(e,t,n){t=t||"&",n=n||"=";var r=[];for(var o in  e)e.hasOwnProperty(o)&&r.push(o+n+encodeURIComponent(e[o]));return  r.join(t)}function r(e){var t={};if(e){var n=e.split("&");for(var  r in n)if(n.hasOwnProperty(r)){var o=n[r].split("=");void  0!==o[0]&&void  0!==o[1]&&(t[o[0]]=decodeURIComponent(o[1]))}}return t}function  o(e){return(/^\/\//.test(e)?"https:":"")+e}function  i(e,t){var n=e.cookie.match("(^|;)  ?"+t+"=([^;]*)(;|$)");return n?decodeURIComponent(n[2]):null}var  d,a=document;"undefined"==typeof  AdriverCounter&&(AdriverCounter=(d=function(e,t,n){var  r=document.domain;if(!(this instanceof AdriverCounter))return  d.items[e];d.urlParams=d.getUrlParameters(window.location.search.substring(1)),void  0!==d.urlParams.adrclid&&(t.fsid=d.urlParams.adrclid),null!==d.getCookie(document,"adrcid")&&(t.cid=d.getCookie(document,"adrcid")),n&&n.id&&null!==d.getCookie(document,n.id)&&(t.suid=r+"_"+encodeURIComponent(d.getCookie(document,n.id))),n&&n.gid1?t.gid1=n.gid1:null!==d.getCookie(document,"_ga")&&(t.gid1=encodeURIComponent(d.getCookie(document,"_ga"))),n&&n.yid1?t.yid1=n.yid1:null!==d.getCookie(document,"_ym_uid")&&(t.yid1=encodeURIComponent(d.getCookie(document,"_ym_uid"))),t.loc=encodeURIComponent(window.location.href),e=d.items.length||1,d.items[e]=this,t.ph=e,t.custom&&(t.custom=d.toQueryString(t.custom,";")),d.request(d.toQueryString(t))},d.httplize=o,d.loadScript=function(e){try{var  t=a.getElementsByTagName("head")[0],n=a.createElement("script");n.setAttribute("type","text/javascript"),n.setAttribute("referrerpolicy","no-referrer-when-downgrade"),n.setAttribute("charset","windows-1251"),n.setAttribute("src",e.split("![rnd]").join(Math.round(1e6*Math.random()))),n.onreadystatechange=function(){/loaded|complete/.test(this.readyState)&&(n.onload=null,t.removeChild(n))},n.onload=function(){t.removeChild(n)},t.insertBefore(n,t.firstChild)}catch(e){}},d.toQueryString=n,d.request=function(e){var  t=d.toQueryString(d.defaults);d.loadScript(d.redirectHost+"/cgi-bin/erle.cgi?"+e+"&rnd=![rnd]"+(t?"&"+t:""))},d.getUrlParameters=r,d.getCookie=i,d.items=[],d.defaults={tail256:document.referrer||"unknown"},d.redirectHost="https://ad.adriver.ru",d.urlParams={},d)),new  AdriverCounter(0,e,t)}function n(e,t){function  n(e,t,n){t=t||"&",n=n||"=";var r=[];for(var o in  e)e.hasOwnProperty(o)&&r.push(o+n+encodeURIComponent(e[o]));return  r.join(t)}function r(e,t){var n=e.cookie.match("(^|;)  ?"+t+"=([^;]*)(;|$)");return n?decodeURIComponent(n[2]):null}var  o,i,d,a,c;o=e,i=t,d=document.domain,a={tail256:document.referrer||"unknown"},void  0!==(c=function(e){var t={};if(e){var n=e.split("&");for(var r in  n)if(n.hasOwnProperty(r)){var o=n[r].split("=");void  0!==o[0]&&void 0!==o[1]&&(t[o[0]]=decodeURIComponent(o[1]))}}return  t}(window.location.search.substring(1))).adrclid&&(o.fsid=c.adrclid),null!==r(document,"adrcid")&&(o.cid=r(document,"adrcid")),i&&i.id&&null!==r(document,i.id)&&(o.suid=d+"_"+encodeURIComponent(r(document,i.id))),i&&i.gid1?o.gid1=i.gid1:null!==r(document,"_ga")&&(o.gid1=encodeURIComponent(r(document,"_ga"))),i&&i.yid1?o.yid1=i.yid1:null!==r(document,"_ym_uid")&&(o.yid1=encodeURIComponent(r(document,"_ym_uid"))),o.loc=encodeURIComponent(window.location.href),o.custom&&(o.custom=n(o.custom,";")),function(e,t){!function(e){if(e=e.split("![rnd]").join(~~(1e6*Math.random())),document.createElement&&document.body){var  t=document.createElement("img");t.style.position="absolute",t.style.display="none",t.style.width=t.style.height="0px",t.setAttribute("referrerpolicy","no-referrer-when-downgrade"),t.src=e,document.body.appendChild(t)}else{var  n=new  Image;n.setAttribute("referrerpolicy","no-referrer-when-downgrade"),n.src=e}}("https://ad.adriver.ru/cgi-bin/rle.cgi?"+e+"&rnd=![rnd]"+(t?"&"+t:""))}(n(o),n(a))}try{var  r=JSON.parse(e.data);if(!r.adriver||void  0===r.parameters.sid)return;"IMGCounter"===r.adriver?n(r.parameters,r.cookies):"JSCounter"===r.adriver&&t(r.parameters,r.cookies)}catch(e){}}window.addEventListener?window.addEventListener("message",AdriverCounterListener):window.attachEvent("onmessage",AdriverCounterListener);

2.5 Код для учета количества отправленных форм

Пример кода и описание см. в статье.

2.6 Коды JS-counter для учета e-commerce-параметров

Примеры кодов и описание см. в статье.


3. Инструкция по установке кода JS-counter на HTML-версию сайта

Код Adriver типа JS-counter предназначен для обеспечения синхронизации идентификаторов AdRiver и веб-аналитической системы сайта рекламодателя для последующей постклик- и поствью-аналитики рекламных кампаний.

Для учета 1st party cookie AdRiver и автоматического получения и передачи  ID пользователя  Google Analytics (GA), Яндекс.Метрика (ЯМ)  или других собственных идентификаторов (например, из CRM или  1st party cookie сайта) на сайте нужно  разместить библиотеку и код JS-counter.

Рекомендуется размещение подключение библиотеки в тэгах <head> .

<script src="https://content.adriver.ru/AdRiverFPS.js"></script>

Код и библиотека автоматически найдут на странице ID GA и  ID ЯМ и передадут в запросе в параметрах  gid1 и yid1.

При размещении кода на страницах сайта через Google Tag Manager (GTM) и наличии возможностей получения ID  через надстройку custom task  можно самостоятельно заполнять значениями  в коде  параметры gid1:"",yid1:""
В таком случае передаваться в запросе будут в первую очередь заполненные значения параметров.
Если значения параметров остаются пустыми, то  код автоматически их заполнит.

Если сайту  требуется передача  собственного ID пользователя (например, по данным CRM или 1st party cookie), то в секцию id нужно вписать название собственного ID.
Здесь внимание! Не значение, а название  ID или собственной  1st party cookie сайта.
Библиотека и код автоматически передадут в запросе значение cookie под этим названием  в отдельном параметре suid.


4. Дополнительно – описание работы скрипта, параметры запроса и ответа

Примеры кодов и реплаев в этом описании не связаны друг с другом, приведены для примера.

Пример кода, размещаемого на сайте
<script type="text/javascript">
  !function(e,n){function o(e,n,o){n=n||"&",o=o||"=";var  d=[];for(var r in  e)e.hasOwnProperty(r)&&d.push(r+o+encodeURIComponent(e[r]));return  d.join(n)}function d(e,n){var o=e.cookie.match("(^|;)  ?"+n+"=([^;]*)(;|$)");return o?decodeURIComponent(o[2]):null}var  r,t,i,c,u;r=e,t=n,i=document.domain,c={tail256:document.referrer||"unknown"},void  0!==(u=function(e){var n={};if(e){var o=e.split("&");for(var d in  o)if(o.hasOwnProperty(d)){var r=o[d].split("=");void  0!==r[0]&&void 0!==r[1]&&(n[r[0]]=decodeURIComponent(r[1]))}}return  n}(window.location.search.substring(1))).adrclid&&(r.fsid=u.adrclid),null!==d(document,"adrcid")&&(r.cid=d(document,"adrcid")),t&&t.id&&null!==d(document,t.id)&&(r.suid=i+"_"+encodeURIComponent(d(document,t.id))),t&&t.gid1?r.gid1=t.gid1:null!==d(document,"_ga")&&(r.gid1=encodeURIComponent(d(document,"_ga"))),t&&t.yid1?r.yid1=t.yid1:null!==d(document,"_ym_uid")&&(r.yid1=encodeURIComponent(d(document,"_ym_uid"))),r.loc=encodeURIComponent(window.location.href),r.custom&&(r.custom=o(r.custom,";")),function(e,n){!function(e){if(e=e.split("![rnd]").join(~~(1e6*Math.random())),document.createElement&&document.body){var  n=document.createElement("img");n.style.position="absolute",n.style.display="none",n.style.width=n.style.height="0px",n.setAttribute("referrerpolicy","no-referrer-when-downgrade"),n.src=e,document.body.appendChild(n)}else{var  o=new  Image;o.setAttribute("referrerpolicy","no-referrer-when-downgrade"),o.src=e}}("https://ad.adriver.ru/cgi-bin/rle.cgi?"+e+"&rnd=![rnd]"+(n?"&"+n:""))}(o(r),o(c))}
  ({ sid: 123456, bt: 62},{ id:  "", gid1: "", yid1: "" });
  </script>

Параметры GET-запроса кода
  • sid – ID сайта в системе (регистрируется в системе AdRiver и остается статичным всегда)
  • bt – тип баннера, для трекингового пикселя это всегда 62
  • sz – строка, например "order", "order_confirm" и т.д. – название конверсионного события в случае, если для данного конверсионного события не используется определение по URL и настроенным в системе шаблонам. Если параметр указан, то он имеет больший приоритет, чем настроенные в системе шаблоны соответствия URL -> событие. Ограничение 256 байт.
  • gid1 – ID Google Analytics (строка 64 байта)
  • yid1 – ID Яндекс.Метрика (строка 64 байта)

значения параметров gid1, yid1 можно указать средствами сайта, если параметры в коде остаются пустыми, код самостоятельно может взять их из cookie GA или ЯМ текущей страницы

  • custom – в него можно передавать несколько разных кастомных значений параметров и для этого у параметра есть номер позиции.

В коде он выглядит вот так – custom: {1:’hid’, 2:’wuid’,5:’any_id’,66:’any_id_1′}
Параметр custom – строка с ограничением в 512 байт.

  • suid — параметр для передачи 1 st party cookie сайта для идентификации пользователя при необходимости использовать этот идентфикатор в постклик- или поствью-аналитике. Параметр suid заполняется кодом автоматически при указании в коде в параметре id:““ названия 1 st party cookie сайта.

Если параметр кода id:““ остается пустым, то в suid также ничего не будет передаваться.

  • loc — параметр для передачи URL страницы через JS
  • rnd — параметр случайного числа для предотвращения кэширования запросов пикселя браузерами.
  • tail256 — параметр для передачи URL предыдущей страницы
  • cid — 1 st party cookie AdRiver, если на странице подключается библиотека <script src="https://content.adriver.ru/AdRiverFPS.js"></script>

Если библиотека не подключается, в этом параметре на странице подставляется 3 td party cookie AdRiver из http-заголовков.

Параметры http-заголовков GET- запроса
  • Cookie – cid=3 td party cookie Адривера
  • Host – ad.adriver.ru
  • Referer – URL источника запроса, по сути адрес страницы показа пикселя.
  • User-Agent – идентификационная строка клиентского приложения/браузера
  • User IP – уникальный числовой идентификатор устройства в компьютерной сети, работающей по протоколу TCP/IP

Отправляется GET запрос к ad.adriver.ru (см. примечание про ad.adriver.ru  внизу статьи)

Пример строки запроса
https://ad.adriver.ru/cgi-bin/rle.cgi?sid=223961&bt=62&sz=order&custom=1=hid;2=wuid;5=any_id;66=any_id_1&cid=A1t9mqBgi1WKRvQc6ZtyJwQ&gid1=GA1.2.949755102.1597758005&loc=http%3A%2F%2Ffiles.adriver.ru%2Fksi%2Ftinkoff.html&rnd=569936&tail256=unknown

Помимо трех вышеперечисленных кук, в AdRiver приходит стандартная информация из http-заголовка:

  • referer
  • IP
  • useragent
  • 3-p кука Адривера
Реплай

На пришедший запрос Адривер отвечает таким реплаем:

rle.cgi — ContentType: image/gif – отдается графическая картинка gif размером 1х1 пиксель.

Пример кода
<script type="text/javascript">
  !function(e,n){function o(e,n,o){n=n||"&",o=o||"=";var  d=[];for(var r ine)e.hasOwnProperty(r)&&d.push(r+o+encodeURIComponent(e[r]));return  d.join(n)}functiond(e,n){var o=e.cookie.match("(^|;) ?"+n+"=([^;]*)(;|$)");return  o?decodeURIComponent(o[2]):null}varr,t,i,c,u;r=e,t=n,i=document.domain,c={tail256:document.referrer||"unknown"},void  0!==(u=function(e){var n={};if(e){var o=e.split("&");for(var d in  o)if(o.hasOwnProperty(d)){varr=o[d].split("=");void 0!==r[0]&&void  0!==r[1]&&(n[r[0]]=decodeURIComponent(r[1]))}}returnn}(window.location.search.substring(1))).adrclid&&(r.fsid=u.adrclid),null!==d(document,"adrcid")&&(r.cid=d(document,"adrcid")),t&&t.id&&null!==d(document,t.id)&&(r.suid=i+"_"+encodeURIComponent(d(document,t.id))),t&&t.gid1?r.gid1=t.gid1:null!==d(document,"_ga")&&(r.gid1=encodeURIComponent(d(document,"_ga"))),t&&t.yid1?r.yid1=t.yid1:null!==d(document,"_ym_uid")&&(r.yid1=encodeURIComponent(d(document,"_ym_uid"))),r.loc=encodeURIComponent(window.location.href),r.custom&&(r.custom=o(r.custom,";")),function(e,n){!function(e){if(e=e.split("![rnd]").join(~~(1e6*Math.random())),document.createElement&&document.body){varn=document.createElement("img");n.style.position="absolute",n.style.display="none",n.style.width=n.style.height="0px",n.setAttribute("referrerpolicy","no-referrer-when-downgrade"),n.src=e,document.body.appendChild(n)}else{var  o=newImage;o.setAttribute("referrerpolicy","no-referrer-when-downgrade"),o.src=e}}("https://ad.adriver.ru/cgi-bin/rle.cgi?"+e+"&rnd=![rnd]"+(n?"&"+n:""))}(o(r),o(c))}({sid:223961,  bt:62, sz:'order', custom: {1:'hid', 2:'wuid',5:'any_id',66:'any_id_1'}},{id:"",gid1:"",yid1:""});
  </script>

Примечание:Adriver CDN  – это собственные сервера компании ООО «Адривер».
Все договоры заключены с российскими юр.лицами, все сервера размещены в России.