Если вы читаете эту запись скорее всего вы искали «Скрипт 60 секунд для Яндекс Директ» в поисковой системе. В данном гайде я расскажу, что такое «Скрипт 60 секунд», как установить скрипт на сайт, как правильно обучать рекламные кампании Яндекс Директ при работе со скриптом.
Зачем нужен скрипт 60 секунд для Яндекс Директ?
Скрипт 60 секунд представляет набор кастомных целей для Яндекс Метрики и служит для отслеживания времени которое посетитель провёл на сайте. По умолчанию доступны цели 30 секунд, 60 секунд, 90 секунд, 120 секунд, 150 секунд, 180 секунд и т.д. с шагом в 30 секунд. По этим целям можно оптимизировать рекламу Яндекс Директ на автоматических стратегиях с оплатой за результат, платя только за качественный трафик (посетителей которые провели на сайте определённое количество времени).
Как установить скрипт на сайт и задать цели в Яндекс Метрике
Для того чтобы кастомные цели считались корректно скрипт должен отображаться на всех страницах сайта. Если у вас динамический сайт под управлением CMS, оптимальным будет установка скрипта в Header. Если сайт состоит из статических страниц, скрипт придётся устанавливать на каждую статическую страницу. Так же скрипт можно установить через Google Tag Manager.
После установки, рекомендую создать цели в Яндекс Метрике по JavaScript событиям.

Название идентификаторов для целей:
- 30sec
- 60sec
- 90sec
- 120sec
- 150sec
- 180seс
- и т.д.
Скрипт 60 секунд для Яндекс Директ
<script>
var settings = {
need: 30,
checkTime: 10,
IDmetrika: 00000000, // Сюда вписываем ИД Счетчика Яндекс Метрики
}
var metricsFn = function () {
console.log(ActiveScore.timer);
console.log(ActiveScore.need);
var c1 = this.getCookie(this.cookieName);
console.log(c1);
if (ActiveScore.timer >= ActiveScore.need) {
console.log("событие отправилось");
ym(settings.IDmetrika, "reachGoal", this.cookieName.slice(0, -3));
}
};
var ActiveScore = {
need: settings.need,
checkTime: settings.checkTime,
loop: true,
counter: 0,
cookieName: "60sec_ap",
sendFn: null,
parts: 0,
active_parts: 0,
timer: 0,
events: [
"touchmove",
"blur",
"focus",
"focusin",
"focusout",
"load",
"resize",
"scroll",
"unload",
"click",
"dblclick",
"mousedown",
"mouseup",
"mousemove",
"mouseover",
"mouseout",
"mouseenter",
"mouseleave",
"change",
"select",
"submit",
"keydown",
"keypress",
"keyup",
"error",
],
setEvents: function () {
for (var index = 0; index < this.events.length; index++) {
var eName = this.events[index];
window.addEventListener(eName, function (e) {
if (e.isTrusted && ActiveScore.period.events == false) {
ActiveScore.period.events = true;
}
});
}
},
period: {
start: 0,
end: 0,
events: false,
},
init: function (fn) {
this.calcParts();
this.setEvents();
this.setStartCounter();
if (this.checkCookie()) {
this.sendFn = fn;
this.start();
}
},
readLastCookie: function () {
var absurdlyLarge = 100000;
for (var i = 1; i < absurdlyLarge; i++) {
var cookie = this.getCookie(i * this.need + 'sec_ap');
if (cookie != this.parts * this.parts) return { i: i, cookie: cookie };
}
return { i: 1, cookie: 0 };
},
setStartCounter: function () {
var lastCookie = this.readLastCookie();
this.counter = lastCookie.i - 1;
this.active_parts = Number(lastCookie.cookie);
this.cookieName = (this.counter + 1) * this.need + "sec_ap";
},
calcParts: function () {
this.parts = Math.ceil(this.need / this.checkTime);
},
setPeriod: function () {
this.period.start = this.microtime();
this.period.end = this.period.start + this.checkTime;
this.period.events = false;
},
microtime: function () {
var now = new Date().getTime() / 1000;
var s = parseInt(now);
return s;
},
start: function () {
this.setPeriod();
this.runPeriod();
},
timeoutId: null,
checkPeriod: function () {
if (this.period.events == true) {
this.active_parts = this.active_parts + 1;
// console.log('В этой секции были действия');
} else {
// console.log('В этой секции НЕБЫЛО действия');
}
this.timer = this.active_parts * this.checkTime;
console.log(
this.active_parts + " / " + this.parts + " [" + this.timer + "]"
);
if (this.checkSecs()) {
} else {
this.start();
}
this.setCookie(this.cookieName, this.active_parts);
},
checkSecs: function () {
if (this.timer >= this.need) {
this.send();
if (this.loop == true) {
this.counter++;
this.timer = 0;
this.active_parts = 0;
this.cookieName = (this.counter + 1) * this.need + "sec_ap";
return false;
} else {
// console.log('Завершили проверку активности');
return true;
}
}
return false;
},
timeoutFn: function () {
ActiveScore.checkPeriod();
},
runPeriod: function () {
this.timeoutId = setTimeout(this.timeoutFn, this.checkTime * 1000);
},
send: function () {
if (this.getCookie(this.cookieName) == this.parts * this.parts) {
this.setStartCounter();
} else {
this.setCookie(this.cookieName, this.active_parts * this.active_parts);
}
this.sendFn();
},
checkCookie: function () {
var c = this.getCookie(this.cookieName);
if (c == null) {
return true;
} else {
if (c == '') return true;
c = parseInt(c);
if (c >= this.parts) {
// console.log('Скрипт даже не запустился...');
if (this.loop == true) {
return true;
}
return false;
} else {
this.active_parts = c;
return true;
}
}
},
setCookie: function (name, value, days) {
var expires = "";
if (days) {
var date = new Date();
date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
expires = "; expires=" + date.toUTCString();
}
document.cookie = name + "=" + (value || "") + expires + "; path=/";
},
getCookie: function (name) {
var nameEQ = name + "=";
var ca = document.cookie.split(";");
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == " ") c = c.substring(1, c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
}
return null;
},
eraseCookie: function (name) {
document.cookie =
name + "=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;";
},
};
ActiveScore.init(metricsFn);
</script>
Как обучить рекламные кампании Яндекс Директ
Если кратко, скрипт 60 секунд поможет нам платить только за качественную аудиторию которая проводит время на сайте (соответственно их интересует наше предложение и они с большой вероятностью совершат конверсионное действие). По моим наблюдениям для одностраничных сайтов этот период равен 60-90 секунд, для многостраничных B2B сайтов и интернет-магазинов — 120-180 секунд.
Для того чтобы Яндекс Директ мог обучатся по кастомным целям, после их создания нам необходимо получить как можно больше трафика. Лично я включаю стратегии с оплатой за клики (CPC) в Яндекс Директ и после того как по каждой из целей наберётся несколько десятков конверсионных действий, создаю копию рекламных кампаний и выбираю стратегию оплаты за конверсии. Адекватной стоимостью конверсии на старте можно считать 80-90 рублей.
Постепенно, если конверсий много, стоимость конверсии можно понижать не более чем на 10% за раз и отправлять рекламную кампанию на переобучение.
