ГНУСНЫЙ
МАРКЕТИНГ

Как отслеживать копирование почты в Яндекс.Метрике через ЯТМ (Яндекс Тег Менеджер)

Копирование контактного email можно отслеживать отдельной целью в Яндекс.Метрике. Показываю, как установить обработчик через Яндекс Тег Менеджер: посетитель выделяет почту на странице, копирует её — скрипт отправляет событие copy_email.

Этот вариант работает с копированием выделенного текста через Ctrl+C, Cmd+C или пункт «Копировать» в меню браузера. В скрипте указываем контактные адреса сайта, которые нужно учитывать. Сам адрес в Метрику не передаётся — только событие.

Создаём цель в Метрике

Открываем нужный счётчик и переходим в «Цели → Добавить цель». Заполняем:

  • Название: Копирование почты.
  • Тип: Целевое событие.
  • Условие: совпадает.
  • Идентификатор: copy_email.

Сохраняем цель. Идентификатор должен совпадать со значением GOAL_ID в коде ниже.

Добавляем скрипт в ЯТМ

В Метрике открываем «Настройки → Счётчик». Включаем Яндекс Тег Менеджер и функцию «Пользовательский HTML», сохраняем изменения. Если они уже включены, переходим к созданию тега.

В разделе «Тег Менеджер → Теги» нажимаем «Добавить тег». Называем его «Копирование почты» и выбираем шаблон «Пользовательский HTML».

Вставляем весь код, включая теги <script>. Перед сохранением заменяем:

  • 12345678 — на номер своего счётчика Метрики.
  • info@example.ru — на контактную почту сайта, копирование которой нужно отслеживать.

Если адресов несколько, перечисляем их в строке EMAILS: var EMAILS = ['info@site.ru', 'sales@site.ru'];

HTML + JavaScript
<script>
(function () {
  'use strict';

  var COUNTER_ID = 12345678; // Номер счётчика Метрики
  var GOAL_ID = 'copy_email';
  var EMAILS = ['info@example.ru']; // Контактные адреса сайта

  var guard = '__gmCopyEmail_' + COUNTER_ID + '_' + GOAL_ID;
  if (window[guard]) return;
  window[guard] = true;

  var allowed = EMAILS.map(function (email) {
    return email.trim().toLowerCase();
  });

  document.addEventListener('copy', function (event) {
    if (!event.isTrusted) return;

    var target = event.target;
    if (target && (target.isContentEditable ||
        /^(INPUT|TEXTAREA)$/.test(target.tagName))) return;

    var text = String(window.getSelection() || '').toLowerCase();
    var emails = text.match(/[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\.[a-z0-9-]+)+/g) || [];
    var matched = emails.some(function (email) {
      return allowed.indexOf(email) !== -1;
    });
    if (!matched) return;

    window.setTimeout(function () {
      if (event.defaultPrevented || typeof window.ym !== 'function') return;
      window.ym(COUNTER_ID, 'reachGoal', GOAL_ID);
    }, 0);
  }, true);
})();
</script>

Назначаем триггер и публикуем

Добавляем к тегу триггер загрузки страницы «Модель DOM готова» и задаём срабатывание на всех страницах, где нужно отслеживать копирование почты.

Сохраняем тег и публикуем изменения контейнера ЯТМ. После публикации обработчик будет устанавливаться на этих страницах.

Проверяем цель

  1. Открываем страницу сайта с параметром ?_ym_debug=2. Если в адресе уже есть ?, добавляем &_ym_debug=2.
  2. Выделяем контактный email, указанный в скрипте, и копируем его.
  3. Внизу страницы открываем панель отладки Метрики. На вкладке Events или Console проверяем достижение цели copy_email у нужного счётчика.
  4. Копируем обычный текст без этого адреса. Цель copy_email срабатывать не должна.

Скрипт учитывает адрес и внутри выделенного фрагмента текста. Копирование из полей ввода и редактируемых областей пропускается. Повторная установка того же тега не добавляет второй обработчик.

Для отдельной кнопки «Скопировать почту» нужна привязка к её обработчику: этот код отслеживает копирование выделенного текста страницы. Достижение цели показывает действие копирования, а отправку письма не подтверждает.

Ещё больше практических инструкций по рекламе и аналитике — в «Гнусном Маркетинге».

Для обращений через другой способ связи есть отдельная инструкция: как отслеживать отправку сообщения в Telegram в Яндекс.Метрике.