Маркетинговое агентство полного цикла KeyClient
Агентство интернет маркетинга KeyClient – профессиональные комплексные digital услуги в Москве. Performance-маркетинг, разработка сайтов, внедрение web-аналитики, продвижение в Яндекс и Google под маркетинговую стратегию.
123100
Россия
Москва
Москва
Мантулинская улица, 20
+7 (495) 128-15-50
info@key-client.ru
773612846790
Cодержание
Cодержание
меню
Главная
Отраслевые решения
Услуги и цены
Акции
Кейсы
Блог
Полезное
Компания
Контакты
Звоните, мы работаемПн-пт 10:00–19:00
+7 (495) 128-15-50
info@key-client.ru
Обсудить проект
Все статьи Новинки
Разделы
Популяр Рекоменд
Скрипт отправки целей в Яндекс Метрику – для отслеживания активности пользователей и копирования email
Скрипт отправки целей в Яндекс Метрику – для отслеживания активности пользователей и копирования email
все разделы
Нашли опечатку?
Выделите и нажмите Ctrl+Enter

Скрипт отправки целей в Яндекс Метрику – для отслеживания активности пользователей и копирования email

Скрипт Яндекс Метрика для отслеживания активности пользователей и копирования email

Скрипт для отправки целей в Яндекс Метрику – универсальный инструмент для отслеживания активности посетителей сайта и фиксации действий с email-ссылками. Он помогает автоматически отправлять события (цели) в Метрику, чтобы вы могли видеть, сколько времени посетители проводят на сайте и как часто они копируют ваш email (например, для обратной связи).

А также он позволяет не платить за клики по рекламе Яндекс Директ, которые постоянно растут в цене – можно настроить стратегию кампании с оплатой за конверсии, например за активного пользователя, который действительно изучал ваш товар или услугу!

Преимущества скрипта

  • Простота установки и использования: код скрипта работает как на обычных сайтах, так и на платформах, использующих Google Tag Manager;
  • Универсальность: работает во всех популярных браузерах, на компьютерах, ноутбуках, планшетах и мобильных устройствах.
  • Автоматическая фиксация активности: отслеживает, сколько времени посетитель проводит на сайте. Если посетитель активно взаимодействует (движение мыши, клики, прокрутка и т.д.), то по достижении определённых временных порогов (например, 60, 90, 120 секунд) отправляются цели;
  • Отслеживание email-ссылок: скрипт фиксирует момент, когда посетитель:
    • Нажимает на email (обычный клик или касание);
    • Использует контекстное меню (правый клик или 2 пальца на тачпаде) для выбора команды «Копировать» или «Скопировать адрес электронной почты»;
    • Выполняет копирование через сочетание клавиш (Ctrl+C/Command+C).

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

Какие цели и при каких условиях отслеживает скрипт

  1. Активность пользователя:
    • Как работает: скрипт отслеживает активное время посетителя. Если посетитель активно взаимодействует (движется мышь, кликает, прокручивает страницу или нажимает клавиши), таймер увеличивается;
    • Цели: при достижении определённых порогов (например, 60, 90, 120, 150 секунд и далее) скрипт отправляет цели вида user_active_60_sec, user_active_90_sec и т.д.;
    • Особенности: если посетитель сворачивает вкладку, закрывает браузер или уводит курсор за пределы окна, таймер останавливается. При возобновлении активности – продолжается отсчёт.
  2. Отправка цели при копировании email:
    • Как работает: скрипт отслеживает, когда посетитель нажимает на ссылку с email (ссылки с префиксом mailto:) – при обычном клике или касании цель отправляется сразу;
    • Контекстное меню: если посетитель вызывает контекстное меню (например, нажимает правой кнопкой или двумя пальцами на тачпаде) и выбирает команду копирования email, скрипт фиксирует это действие и отправляет соответствующую цель;
    • Событие копирования: если посетитель выделяет email и нажимает сочетание клавиш для копирования (Ctrl+C или Command+C), также отправляется цель.

Как использовать скрипт в Яндекс Метрике и Директе

В Яндекс Метрике

  1. Настройка счётчика: в коде скрипта замените переменную metricId на номер вашего счётчика (например, 12345678).
  2. Добавление целей: создайте цели в Яндекс Метрике:
    • Для активности пользователя – цели вида user_active_60_sec, user_active_90_sec и т.д.;
    • Для email – цель email_copied.
  3. Получайте аналитику в разделе Конверсии и в других срезах по конверсиям.

В Яндекс Директе

Используйте данные о целях (например, активность пользователя – 180 секунд активности) для настройки стратегий оплаты за конверсии. Например, настройте кампанию с оплатой за конверсии, где конверсия определяется достижением 180 секунд активности. Это позволит более точно оценивать вовлечённость аудитории и оптимизировать рекламный бюджет.

Если нужна помочь с рекламными кампаниями – обращайтесь в наше агентство за настройкой Яндекс Директ.

Инструкция по установке

Вставка скрипта на сайт

  1. Скопируйте код: возьмите приведённый ниже скрипт;
  2. Вставьте код: вставьте его перед закрывающим тегом </body> на всех нужных страницах вашего сайта. Если используется шаблон, добавьте скрипт в общий футер;

Установка через Google Tag Manager (GTM)

  1. Войдите в GTM: зайдите в свой аккаунт Google Tag Manager и выберите нужный контейнер.
  2. Создайте новый тег:
    • Нажмите «Новый тег»;
    • Задайте имя (например, «Отслеживание активности и email»).
  3. Выберите тип тега:
    • Выберите «Пользовательский HTML»;
    • Вставьте код скрипта в поле HTML.
  4. Настройте триггер: выберите триггер «All Pages» (или другой, подходящий для вашего сайта).
  5. Сохраните и опубликуйте: сохраните настройки и опубликуйте контейнер.

Инструкция по добавлению целей в Яндекс Метрике

  1. Войдите в Яндекс Метрику: зайдите в личный кабинет Метрики и выберите нужный счётчик.
  2. Добавьте цели через «JavaScript-событие»:
    • Создайте цель для активности пользователя – user_active_30_sec
    • Создайте цель для активности пользователя – user_active_60_sec
    • Создайте цель для активности пользователя – user_active_90_sec
    • Создайте цель для активности пользователя – user_active_120_sec
    • Создайте цель для активности пользователя – user_active_150_sec
    • Создайте цель для активности пользователя – user_active_180_sec
    • Создайте цель для активности пользователя – user_active_240_sec
    • Создайте цель для активности пользователя – user_active_300_sec
    • Создайте цель для email – email_copied
  3. Настройте условия: при настройке цели укажите, что она срабатывает при достижении соответствующего события (например, reachGoal('email_copied')).

Инструкция по проверке срабатывания целей

После установки скрипта добавьте параметр /?_ym_debug=2 к URL вашего сайта, чтобы увидеть отладочную информацию в консоли и убедиться, что цели отправляются корректно. Изучите подробнее как проверять цели https://yandex.ru/support/metrica/general/check-goal.html

  1. Включите режим отладки: добавьте /?_ym_debug=2 к URL вашего сайта (например, https://вашсайт.ru/?_ym_debug=2).
  2. Откройте консоль браузера: в консоли вы увидите отладочные сообщения (например, «Отправка цели: email_copied», «Отправка цели: user_active_90_sec»).
  3. Проверьте отчёты: после тестирования проверьте отчёты в Яндекс Метрике, чтобы убедиться, что цели регистрируются.

Полный скрипт

<script>
(function() {
    // ------------------ Отслеживание активности пользователя ------------------
    var cursorInWindow = true;
    var userIsActive = true;
    var activeTime = parseInt(sessionStorage.getItem('activeTime')) || 0;
    var activityTimeout;
    var intervalId = null;
    var inactivityThreshold = 5000; // 5 секунд бездействия
    var metricId = '12345678'; // Номер счётчика Яндекс Метрики
    var allGoalsSent = false;
    var timeIntervals = [30, 60, 90, 120, 150, 180, 240, 300]; // интервалы в секундах
    var sentGoals = JSON.parse(sessionStorage.getItem('sentGoals')) || {};

    function isGoalSent(goalId) {
        return sentGoals.hasOwnProperty(goalId);
    }
    function setGoalAsSent(goalId) {
        sentGoals[goalId] = true;
        sessionStorage.setItem('sentGoals', JSON.stringify(sentGoals));
    }
    function sendGoal(goalId) {
        if (!isGoalSent(goalId) && typeof window.ym === 'function') {
            console.log('Отправка цели:', goalId);
            window.ym(metricId, 'reachGoal', goalId);
            setGoalAsSent(goalId);
        }
    }
    function trackActivity() {
        if (allGoalsSent) return;
        if (!intervalId) {
            intervalId = setInterval(function() {
                if (cursorInWindow && userIsActive) {
                    activeTime++;
                    sessionStorage.setItem('activeTime', activeTime);
                    for (var i = 0; i < timeIntervals.length; i++) {
                        var sec = timeIntervals[i];
                        var goalId = 'user_active_' + sec + '_sec';
                        if (activeTime >= sec && !isGoalSent(goalId)) {
                            sendGoal(goalId);
                        }
                    }
                }
            }, 1000);
        }
        resetActivityTimer();
    }
    function stopTracking() {
        clearInterval(intervalId);
        intervalId = null;
    }
    function resetActivityTimer() {
        clearTimeout(activityTimeout);
        activityTimeout = setTimeout(function() {
            stopTracking();
        }, inactivityThreshold);
    }
    function checkCursorInWindow(event) {
        cursorInWindow = !(event.relatedTarget == null);
        if (!cursorInWindow) stopTracking();
    }
    function handleVisibilityChange() {
        if (document.hidden) {
            stopTracking();
        } else {
            userIsActive = true;
            trackActivity();
        }
    }
    function handleFocus() {
        userIsActive = true;
        trackActivity();
    }
    function handleBlur() {
        stopTracking();
    }
    window.addEventListener('mouseout', checkCursorInWindow);
    window.addEventListener('mouseover', function() { cursorInWindow = true; });
    document.addEventListener('visibilitychange', handleVisibilityChange);
    window.addEventListener('focus', handleFocus);
    window.addEventListener('blur', handleBlur);
    var activityEvents = ['mousemove', 'scroll', 'click', 'keydown'];
    for (var i = 0; i < activityEvents.length; i++) {
        document.addEventListener(activityEvents[i], trackActivity);
    }

    // ------------------ Отслеживание email-ссылок ------------------
    function sendEmailCopiedGoal() {
        if (!isGoalSent('email_copied') && typeof window.ym === 'function') {
            console.log('Отправка цели: email_copied');
            window.ym(metricId, 'reachGoal', 'email_copied');
            setGoalAsSent('email_copied');
        }
    }
    function emailLinkHandler(e) {
        var target = e.target;
        while (target && target !== document) {
            if (target.tagName && target.tagName.toLowerCase() === 'a') {
                var href = target.getAttribute('href');
                if (href && href.indexOf('mailto:') === 0) {
                    if (e.type === 'click' && (typeof e.button === 'undefined' || e.button === 0)) {
                        sendEmailCopiedGoal();
                    } else if (e.type === 'touchstart') {
                        sendEmailCopiedGoal();
                    }
                    break;
                }
            }
            target = target.parentNode;
        }
    }
    document.addEventListener('click', emailLinkHandler);
    document.addEventListener('touchstart', emailLinkHandler);
    document.addEventListener('copy', function() {
        var selectedText = window.getSelection().toString().trim();
        if (/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(selectedText)) {
            if (contextMenuTimer) {
                clearTimeout(contextMenuTimer);
                contextMenuTimer = null;
            }
            sendEmailCopiedGoal();
        }
    });
    var pendingEmailCopy = null;
    var contextMenuTimer = null;
    document.addEventListener('contextmenu', function(e) {
        var target = e.target;
        pendingEmailCopy = null;
        if (contextMenuTimer) {
            clearTimeout(contextMenuTimer);
            contextMenuTimer = null;
        }
        while (target && target !== document) {
            if (target.tagName && target.tagName.toLowerCase() === 'a') {
                var href = target.getAttribute('href');
                if (href && href.indexOf('mailto:') === 0) {
                    pendingEmailCopy = href.replace('mailto:', '').trim();
                    console.log('contextmenu: pendingEmailCopy установлено: ' + pendingEmailCopy);
                    contextMenuTimer = setTimeout(function(){
                        console.log('contextmenu timer fired, отправляем цель');
                        sendEmailCopiedGoal();
                        pendingEmailCopy = null;
                        contextMenuTimer = null;
                    }, 1500);
                    break;
                }
            }
            target = target.parentNode;
        }
    });
    document.addEventListener('click', function(e) {
        if (contextMenuTimer) {
            clearTimeout(contextMenuTimer);
            contextMenuTimer = null;
        }
        pendingEmailCopy = null;
    });
    function setupEmailCopyTracking() {
        var emailLinks = document.querySelectorAll('a[href^="mailto:"]');
        for (var i = 0; i < emailLinks.length; i++) {
            (function(link) {
                link.addEventListener('touchstart', function(e) {
                    sendEmailCopiedGoal();
                });
            })(emailLinks[i]);
        }
    }
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', setupEmailCopyTracking);
    } else {
        setupEmailCopyTracking();
    }
})();
</script>

Если вам понравился этот скрипт и вы хотите узнавать ещё больше полезных советов, подписывайтесь на наш Telegram-канал https://t.me/keyclient. Мы регулярно делимся фишками, инструментами и практическими решениями для оптимизации сайтов и работы с Яндекс Метрикой!

Маркетинговое агентство KeyClient
15.03.2025
127
14 мин
Сохранить расчёт
Нажимая «Получить по эл.почте», вы соглашаетесь с политикой конфиденциальности сайта
Рекомендуем
Поделиться статьей

Блог от экспертов