Настройка цели Метрики «Время на сайте»: инструкция
Сегодня мы настроим еще одну нужную цель Яндекс Метрики: «Время на сайте» с учетом активности.
Содержание статьи
Как время на сайте влияет на конверсию?
Время, проведенное пользователем на сайте, это один из важнейших факторов, который позволяет оценить, насколько сайт отвечает запросу пользователей. Не случайно, при оценке поведения посетителя на ресурсе, все поисковые системы в первую очередь обращают внимание, сколько времени провел пользователь на сайте.
Если время визита составляет менее 15 секунд, то метрики фиксируют «Отказ». Как правило, этого времени достаточно, чтобы пользователь успел открыть страницу и оценить, насколько сайт отвечает его поисковому запросу и либо продолжил изучение информации, либо продолжил поиск.
Логично, что если посетитель закрыл сайт в первые секунды посещения, то такой визит не даст конверсионных действий. И так же верно обратное, чем больше времени провел посетитель на сайте, чем тщательнее изучал представленную информацию, тем выше вероятность, что он заинтересован, а значит имеет смысл таких пользователей попытаться конвертировать в покупателей, например, с помощью ретаргетинговой кампании
Время на сайте без учета активности
Однако, не достаточно просто выбрать все визиты с длительностью выше 15 секунд. Часто бывает, что в отчетах Яндекс Метрики мы видим визиты продолжительностью в несколько минут, однако если анализировать параметры глубже, то мы обнаружим, что пользователь не совершал никакой активности.
На скриншоте мы видим, что был переход по рекламе и длительность визита составила 4 минуты и 44 секунды. Если ориентироваться только на время, то такое посещение нужно записать в «Заинтересованный потенциальный клиент» и настроить ретаргетинговую кампанию. Но если мы зайдем в Вебвизор ( как улучшить сайт с помощью вебвизора у нас была отдельная статья) , то увидим, что после открытия страницы посетитель не совершал никаких действий.
Для оценки заинтересованности важно не только, сколько времени провел посетитель, но и его активность на сайте. Чем больше действий он совершил, тем выше его вовлеченность.
В нашем случае мы понимаем, что это просто бот, а значит он для нас бесполезен: боты не становятся клиентами и покупателями, хотя даже умеют оставлять заявки.
Поэтому рассматривать время на сайте без учета активности пользователя во время визита нельзя.
Скрипт для сайта
Сегодня мы поделимся с Вами скриптом, который не только умеет фиксировать время на сайте, но и учитывает активность пользователя. Вот, собственно, сам код:
<script>
var settings = {
vremya: 30, // Время в секундах для отправки события
checkTime: 10, // Период проверки активности (должен быть кратным vremya)
IDmetrika: XXXXXXXX, // ID счетчика Яндекс Метрики
};
// Функция для отправки события в Яндекс Метрику
var metricsFn = function () {
if (ActiveScore.timer >= ActiveScore.vremya) {
console.log("Событие отправлено в Яндекс Метрику");
ym(settings.IDmetrika, "reachGoal", this.cookieName.slice(0, -3));
}
};
var ActiveScore = {
vremya: settings.vremya,
checkTime: settings.checkTime,
loop: true,
counter: 0,
cookieName: "60sec_ap",
sendFn: null,
parts: 0,
active_parts: 0,
timer: 0,
events: [
"click", "scroll", "mousemove", "touchmove", "focus", "blur" // Добавьте нужные события
],
// Устанавливаем обработчики событий
setEvents: function () {
this.events.forEach(eventName => {
window.addEventListener(eventName, (e) => {
if (e.isTrusted) {
this.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();
}
},
// Чтение последнего значения cookie
readLastCookie: function () {
for (let i = 1; i < 100000; i++) {
let cookie = this.getCookie(i * this.vremya + 'sec_ap');
if (cookie != this.parts * this.parts) return { i: i, cookie: cookie };
}
return { i: 1, cookie: 0 };
},
setStartCounter: function () {
let lastCookie = this.readLastCookie();
this.counter = lastCookie.i - 1;
this.active_parts = Number(lastCookie.cookie);
this.cookieName = (this.counter + 1) * this.vremya + "sec_ap";
},
calcParts: function () {
this.parts = Math.ceil(this.vremya / this.checkTime);
},
setPeriod: function () {
this.period.start = this.microtime();
this.period.end = this.period.start + this.checkTime;
this.period.events = false;
},
microtime: function () {
return Math.floor(Date.now() / 1000);
},
start: function () {
this.setPeriod();
this.runPeriod();
},
timeoutId: null,
checkPeriod: function () {
if (this.period.events) {
this.active_parts++;
}
this.timer = this.active_parts * this.checkTime;
console.log(`${this.active_parts} / ${this.parts} [${this.timer}]`);
if (!this.checkSecs()) {
this.start();
}
this.setCookie(this.cookieName, this.active_parts);
},
checkSecs: function () {
if (this.timer >= this.vremya) {
this.send();
if (this.loop) {
this.counter++;
this.timer = 0;
this.active_parts = 0;
this.cookieName = (this.counter + 1) * this.vremya + "sec_ap";
}
return false;
}
return true;
},
timeoutFn: function () {
ActiveScore.checkPeriod();
},
runPeriod: function () {
this.timeoutId = setTimeout(this.timeoutFn.bind(this), 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.sendFn();
},
checkCookie: function () {
let c = this.getCookie(this.cookieName);
if (!c) return true;
c = parseInt(c);
if (c >= this.parts) {
return this.loop;
} else {
this.active_parts = c;
return true;
}
},
setCookie: function (name, value, days) {
let expires = "";
if (days) {
let 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) {
let nameEQ = name + "=";
let ca = document.cookie.split(";");
for (let i = 0; i < ca.length; i++) {
let c = ca[i].trim();
if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length);
}
return null;
},
eraseCookie: function (name) {
document.cookie = `${name}=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;`;
},
};
// Инициализация
ActiveScore.init(metricsFn);
</script>
Инструкция, как настроить цель «Время на сайте»
Для того, чтобы добавить скрипт на ваш сайт, вам нужно просто скопировать и вставить код через GTM, а так же задать свои параметры. Меняем только 3 значения:
Функция vremya- устанавливаем, как часто будет срабатывать событие. Мы рекомендуем использовать период либо 30, либо 60 секунд.
XXXXXX- тут нужно указать номер вашего счетчика в Яндекс Метрике
После чего вам нужно в настройках счетчика создать новую цель, например, «Визит 60 секунд» и в качестве идентификатора указать «60sec».
Если все сделано правильно, то вы сможете отслеживать время на сайте с учетом активности пользователя.
No block ID is set