<script>
(function (m, e, t, r, i, k, a) {
m[i] = m[i] || function () {
(m[i].a = m[i].a || []).push(arguments);
};
m[i].l = 1 * new Date();
k = e.createElement(t);
a = e.getElementsByTagName(t)[0];
k.async = true;
k.src = r;
a.parentNode.insertBefore(k, a);
})(window, document, 'script', 'https://mc.yandex.ru/metrika/tag.js', 'ym');
ym(101348564, 'init', {
clickmap: true,
trackLinks: true,
accurateTrackBounce: true,
webvisor: true,
});
var MIN_TIME_ON_SITE = 90000; // 1,5 минут
var DAILY_COUNTER_STORAGE_KEY = 'interested_user_daily_counter';
var MAX_GOAL_COUNT_PER_DAY = 1;
var SCROLL_PAUSE_TIME = 5000; // 5 секунд
var MIN_SCROLL_PAUSES = 2; // Минимальное количество пауз для считывания заинтересованности
var startTime;
var isUserActive = false;
var lastScrollPosition = 0;
var scrollPauseTimer;
var scrollPauseCount = 0;
function trackInterestedUser() {
var currentTime = Date.now();
var timeOnSite = currentTime - startTime;
if (isUserActive &&
timeOnSite >= MIN_TIME_ON_SITE &&
isHuman() &&
isWithinDailyLimit() &&
scrollPauseCount >= MIN_SCROLL_PAUSES) {
ym(101348564, 'reachGoal', 'InterestedUser');
incrementDailyCounter();
}
}
function handleScroll() {
clearTimeout(scrollPauseTimer);
var currentScrollPosition = window.scrollY;
if (currentScrollPosition !== lastScrollPosition) {
lastScrollPosition = currentScrollPosition;
scrollPauseTimer = setTimeout(function () {
scrollPauseCount++;
console.log('Пауза при прокрутке: ' + scrollPauseCount); // Для отладки
}, SCROLL_PAUSE_TIME);
}
}
function handleUserActivity() {
if (!isUserActive) {
isUserActive = true;
startTime = Date.now();
setInterval(trackInterestedUser, 10000); // Проверяем каждые 10 секунд
window.addEventListener('scroll', throttle(handleScroll, 100), { passive: true });
}
}
function isHuman() {
var userAgent = navigator.userAgent.toLowerCase();
var botPatterns = [
'bot', 'crawler', 'spider', 'crawling', 'slurp', 'baiduspider', 'yandexbot', 'googlebot', 'bingbot', 'applebot',
'facebookexternalhit', 'twitterbot', 'linkedinbot', 'telegrambot', 'facebot', 'whatsapp', 'pingdom', 'mj12bot',
'ahrefsbot', 'semrushbot', 'dotbot', 'duckduckbot', 'yoozbot', 'sistrix', 'yodaobot', 'xovibot', 'mauibot',
'netestate', 'seokicks', 'exabot', 'seznambot', 'headlesschrome', 'phantomjs', 'selenium', 'webdriver',
'puppeteer', 'httrack', 'nutch', 'scrapyproject', 'rogerbot', 'proximic', 'grapeshotcrawler', 'developers.google.com',
'pinterestbot', 'uptimerobot', 'alexabot', 'archive.org_bot', 'barkrowler', 'butterfly', 'buzzbot', 'discobot',
'discordbot', 'domainarebot', 'feedfetcher', 'gigabot', 'ia_archiver', 'ips-agent', 'lycos', 'mediapartners',
'megaindex', 'netcraft', 'nimbostratus-bot', 'nmap', 'openai', 'paperlibot', 'petal', 'redditbot', 'showyoubot',
'skypeuripreview', 'slack', 'slackbot', 'sogou', 'surveybot', 'teoma', 'tweetmemebot', 'validator', 'webmasteraid',
'wotbox', 'yacybot', 'yeti', 'yisouspider', 'yodaobot', 'zabbix', 'zoombot'
];
var botRegex = new RegExp(botPatterns.join('|'), 'i');
if (botRegex.test(userAgent)) {
return false;
}
// Дополнительные проверки
if (navigator.webdriver || window._phantom || window.callPhantom) {
return false;
}
// Проверка на заголовки, часто используемые ботами
if (navigator.platform === 'Linux' && /khtml|gecko/i.test(userAgent) && !/chrome|safari/i.test(userAgent)) {
return false;
}
return true;
}
function isWithinDailyLimit() {
return getDailyCounterFromStorage() < MAX_GOAL_COUNT_PER_DAY;
}
function incrementDailyCounter() {
var dailyCounter = getDailyCounterFromStorage() + 1;
setDailyCounterToStorage(dailyCounter);
}
function getDailyCounterFromStorage() {
return parseInt(localStorage.getItem(DAILY_COUNTER_STORAGE_KEY)) || 0;
}
function setDailyCounterToStorage(value) {
localStorage.setItem(DAILY_COUNTER_STORAGE_KEY, value.toString());
}
function throttle(func, limit) {
var inThrottle;
return function () {
var args = arguments;
var context = this;
if (!inThrottle) {
func.apply(context, args);
inThrottle = true;
setTimeout(function () { inThrottle = false; }, limit);
}
};
}
function resetDailyCounterAtMidnight() {
var now = new Date();
var night = new Date(
now.getFullYear(),
now.getMonth(),
now.getDate() + 1,
0, 0, 0
);
var msToMidnight = night.getTime() - now.getTime();
setTimeout(function () {
setDailyCounterToStorage(0);
resetDailyCounterAtMidnight();
}, msToMidnight);
}
// Инициализация
window.addEventListener('load', handleUserActivity, { once: true });
resetDailyCounterAtMidnight();
// Добавляем обработчики событий с использованием делегирования и throttle
var events = ['mousemove', 'keydown', 'touchstart', 'touchmove', 'touchend'];
events.forEach(function (event) {
document.addEventListener(event, throttle(handleUserActivity, 250), { passive: true });
});
</script>