Как размечать трафик UTM‑метками, чтобы аналитика не врала

5 написаний одной соцсети и 40% рекламы в строке «определено по меткам»: так выглядит счетчик, где метки стоят везде, но не работают. Внутри: словарь значений, которые понимает Метрика, параметры Директа, 4 этапа потери метки, скрипт передачи в CRM и таблица симптомов.

Открываем отчет «Источники, сводка» у нового клиента и видим 5 строк про одну и ту же соцсеть: vk, VK, Vkontakte, vk.com и vk_ads. Рядом «Другая реклама: определено по меткам» с 40% всего платного трафика и 3 кампании Директа, у которых в utm_campaign стоит слово «тест». На вопрос «какой канал приносит заявки» этот счетчик ответить не может, хотя метки в нем стоят на каждой ссылке. Это собирательный пример, но в нем нет ни одной выдуманной детали.

Короткий ответ на вопрос из заголовка: UTM-метки работают, когда у компании есть 3 вещи. Словарь значений, которого придерживаются все, кто делает ссылки. Понимание, на каком из 4 этапов пути метка теряется, и проверка каждого. И привычка раз в месяц открывать отчет «Метки UTM» и чистить мусор. Все остальное, включая генераторы ссылок и красивые названия кампаний, вторично.

Дальше по порядку: что Метрика читает из метки, какие значения она понимает, почему в Директе метки лучше не писать руками, где они теряются по дороге до отчета и как довести метку до CRM вместе с заявкой.

Что Метрика читает из UTM‑метки

UTM-метка — это набор параметров в конце адреса страницы, после знака «?». Метрика считывает их в момент загрузки счетчика и относит визит к источнику. Параметров 5, и справка Метрики описывает их так:

  • utm_source. Источник трафика: рекламная система, соцсеть, рассылка, партнерский сайт. Обязателен для соцсетей и всех рекламных систем, кроме Директа.
  • utm_medium. Канал: контекстная реклама, медийная, рассылка, QR-код. Обязателен для QR-кодов, соцсетей, мессенджеров, рассылок и рекомендательных систем.
  • utm_campaign. Название кампании.
  • utm_content. Содержание: конкретное объявление, баннер, место ссылки в письме.
  • utm_term. Ключевая фраза.

Первый параметр идет после «?», остальные после «&». В ссылке не должно быть лишних символов вроде %2B, второго знака вопроса или пробела: любой из них ломает разбор, и метка либо не читается целиком, либо читается частично.

Еще 3 правила из справки, которые чаще всего нарушают.

Первое: Метрика берет метку из первого просмотра в визите. Если посетитель зашел на сайт без метки, а через минуту кликнул по размеченной ссылке в письме, визит останется с тем источником, с которого начался. Второе: значения регистрозависимы: utm_source=Vkontakte и utm_source=vkontakte в отчете будут 2 разными источниками, и загрузка расходов по рекламе тоже разойдется. Третье: порядок параметров формально не важен, но справка Директа рекомендует ставить их последовательно: source, medium, campaign, content, term. Это удобно, когда ссылки читают люди, и снимает часть ошибок при копировании.

Отдельная история — параметр utm_referrer. Он не входит в стандартную пятерку, но Метрика его понимает: в него передают адрес сайта, с которого идет переход, когда обычный реферер теряется. Так бывает при JavaScript-редиректе и при переходе с HTTPS-сайта на сайт, который еще работает по HTTP.

Путь UTM-метки от ссылки до отчета Метрики: 4 этапа, на каждом из которых данные теряются
4 этапа пути метки по справке Метрики. Расхождение между кликами в кабинете и визитами в отчете накапливается на каждом из них.

Словарь значений: договоритесь до первой ссылки

Самая частая причина, по которой аналитика по меткам врет, не техническая. Ссылки делают 4 человека: подрядчик по Директу, SMM-специалист, тот, кто рассылает письма, и менеджер, который кидает ссылку партнеру. У каждого свое представление, как называется соцсеть и что писать в utm_medium. Через полгода в отчете 30 вариантов источников, и свести их в 5 каналов можно только руками.

Решается это одним документом на 1 страницу: таблицей разрешенных значений. Важно, что значения в ней не произвольные. У Метрики есть список слов, по которым она сама распознает источник и относит визит в нужный отчет: «Рекламные системы», «Социальные сети», «Мессенджеры», «Рассылки». Если написать значение не из списка, визиты по справке уйдут в сборную группу «определено по меткам», и сравнивать канал с другими придется вручную.

Каналutm_sourceutm_mediumКуда попадет в Метрике
Яндекс Директyandex (Директ может сократить до ya)cpcРекламные системы, плюс отчеты группы «Директ» по yclid
VK Рекламаvk_adscpc или cpmРекламные системы
Пост в сообществе ВКонтактеvksocialСоциальные сети
Реклама в Telegramtelegram_adscpmРекламные системы
Пост в Telegram-каналеtelegrammessengerМессенджеры
Email-рассылканазвание сервиса или newsletteremailРассылки
QR-код на упаковке, вывескеместо размещенияqrИсточники, сводка (переходы по QR)
Партнерский сайтдомен партнераreferralСборная группа «определено по меткам»

Главный вывод из таблицы: utm_source и utm_medium — не поле для творчества. Их значения диктует Метрика, а свобода начинается с utm_campaign. Полный список распознаваемых значений лежит в той же справке, и он длиннее, чем кажется: там есть Avito, Ozon, Яндекс Маркет, myTarget и еще около 50 систем.

Для utm_campaign, utm_content и utm_term правила проще, но они тоже нужны:

  • Только латиница и нижний регистр. Кириллица в адресе кодируется в UTF-8, ссылка становится в 3 раза длиннее, а в некоторых сервисах превращается в набор процентов. Слова разделяйте подчеркиванием или дефисом.
  • Название кампании читается без словаря. support_msk_search лучше, чем camp_17: через год никто не вспомнит, что было под номером 17.
  • Один смысл на один параметр. Не пишите в utm_campaign одновременно и регион, и тип объявления, и дату. Регион — в utm_campaign, объявление — в utm_content. Если нужно больше уровней, используйте разделитель внутри значения: utm_content=banner_a.top.

Директ: не пишите метки руками

В Директе UTM-метки не нужно вписывать в каждую ссылку. С 2022 года в кампаниях есть блок «Параметры URL», и метка из него автоматически добавляется ко всем ссылкам объявления: основной, быстрым ссылкам и кнопке. Так работает справка Директа на сентябрь 2026 года, и там же описан порядок приоритетов: метка на уровне объявления перебивает метку группы, метка группы перебивает метку кампании. Если параметр с тем же именем уже есть в ссылке объявления, значение возьмется из блока «Параметры URL», а параметры, которых в блоке нет, останутся как были.

Дальше главное, ради чего этот блок стоит использовать: динамические параметры. Директ сам подставляет в ссылку идентификатор кампании, объявления, ключевую фразу, тип площадки, регион и устройство. Рабочая заготовка для блока на уровне кампании выглядит так:

utm_source=yandex&utm_medium=cpc&utm_campaign={campaign_id}&utm_content={ad_id}&utm_term={keyword}

# расширенный вариант: площадка и тип блока для РСЯ и поиска
utm_source=yandex&utm_medium=cpc&utm_campaign={campaign_id}&utm_content={ad_id}.{source_type}.{position_type}&utm_term={keyword}

Полный список подстановок есть в справке «Параметры URL». Из практики полезнее всего 5: {campaign_id}, {ad_id}, {keyword}, {source} (домен площадки РСЯ или none для поиска) и {device_type}. Параметр {campaign_name} удобен для чтения, но название кампании можно переименовать, и статистика разъедется; идентификатор стабилен.

3 подводных камня, про которые в справке написано мелко.

Директ может сократить utm_source=yandex до utm_source=ya при переходе: ссылки с полным словом у части пользователей открывались некорректно. Если в отчетах нужна единообразная метка, справка советует сразу писать ya или любое другое значение. Метрика при этом распознает Директ по служебному параметру yclid, а не по utm_source, поэтому на отчеты группы «Директ» сокращение не влияет.

После изменения параметров URL объявления уходят на повторную модерацию. Правка меток в работающей кампании в пятницу вечером — не лучшая идея.

Если адрес с подставленными значениями длиннее 4096 байт, Директ передаст только yclid и метку Openstat. Обычной ссылке это не грозит, но кириллические ключевые фразы в {keyword} кодируются в UTF-8 и раздувают адрес в разы.

Бесплатный аудит вашего сайта
Найдем уязвимости и точки роста за 3 дня и покажем, что чинить в первую очередь.
Получить аудит

Где метка теряется по дороге

Справка Метрики описывает путь метки как 4 этапа: создание ссылки, клик и переход, загрузка счетчика, чтение отчета. На каждом данные могут потеряться, и разбирать расхождение между кликами в кабинете и визитами в отчете нужно по этим этапам, по порядку.

Этап 1. Ссылка

Опечатки в именах параметров: utm_sourse, utm-medium, utm_campaing. Такой параметр Метрика не считает UTM-меткой: он попадет в отчет «Параметры URL», но не в «Метки UTM», и источник по нему не определится. Второй знак вопроса перед метками в адресе, где уже есть параметры: ?ref=123?utm_source=… вместо ?ref=123&utm_source=…. Скопированные из другой системы объявления с чужими метками: трафик VK Рекламы приписывается Директу. Закодированный амперсанд & из HTML-письма: сотрудник Яндекса в Клубе Метрики прямо пишет, что такие метки Метрика корректно обработать не сможет.

Этап 2. Переход

Здесь живет самая коварная потеря — редирект, который отбрасывает параметры. Классический случай: в объявлении стоит http://site.ru/page, сайт перенаправляет на https://www.site.ru/page/, и если правило перенаправления написано без сохранения строки запроса, посетитель приходит уже без меток. Метрика видит визит, но относит его к переходу по ссылке без источника или к прямому заходу.

Проверяется за минуту: откройте ссылку из объявления в режиме инкогнито и посмотрите на адресную строку после загрузки. Если меток в ней нет, а в объявлении они были, редирект их съел. Чинится на стороне сервера. Для nginx правило с сохранением параметров выглядит так:

# http и www -> https без www, параметры сохраняются
server {
    listen 80;
    server_name example.ru www.example.ru;
    return 301 https://example.ru$request_uri;
}

# добавление слэша в конце: $request_uri уже содержит ?utm_...,
# поэтому дописываем слэш только к пути
location ~ ^([^.?]*[^/])$ {
    return 301 $1/$is_args$args;
}

Переменная $request_uri содержит и путь, и строку запроса, поэтому метки доезжают. Ошибка, которую делают чаще всего: return 301 https://example.ru$uri; — здесь $uri без параметров, и все UTM пропадают. В Apache то же самое решается флагом QSA в правиле RewriteRule.

Вторая потеря на этом этапе — JavaScript-редирект на промежуточной странице или переход через сервис сокращения ссылок с промежуточным экраном. Метка при этом может сохраниться, но реферер теряется. На этот случай и есть utm_referrer.

Этап 3. Счетчик

Счетчика нет на посадочной странице. Это бывает чаще, чем кажется: лендинг сделали на отдельном поддомене, а счетчик стоит только на основном сайте. Счетчик есть, но грузится после тяжелых скриптов, и часть посетителей закрывает страницу раньше. Блокировщики и корпоративные прокси режут счетчик у части аудитории. Этот процент есть всегда, повлиять на него нельзя, но он объясняет, почему клики в кабинете и визиты в Метрике никогда не сходятся один в один.

Этап 4. Отчет

Данные есть, но их сравнивают неправильно. Кабинет рекламной системы считает кликом и переход на сайт, и открытие карточки объявления, и переход в сообщество. Метрика фиксирует только тех, кто дошел до сайта. Разные модели атрибуции: в Метрике по умолчанию «Последний переход», в кабинете может быть «Последний значимый». Разные периоды и часовые пояса. Прежде чем искать ошибку в метках, приведите к одному знаменателю период, атрибуцию и определение клика.

Как довести метку до CRM вместе с заявкой

Отчет «Метки UTM» показывает визиты и конверсии по целям. Для оценки рекламы этого мало: нужно знать, из какой кампании пришла заявка, которая в итоге стала оплатой. Значит, метка должна попасть в CRM вместе с заявкой.

Схема простая. При первом заходе скрипт на сайте читает UTM-параметры из адреса и сохраняет их в браузере. Когда посетитель заполняет форму, скрипт подставляет сохраненные значения в скрытые поля. Форма уходит на сервер, сервер передает их в CRM в поля источника лида. Хранить нужно именно первый набор меток за сессию: если посетитель пришел из рекламы, погулял по сайту и вернулся с закладки, метка рекламы не должна затереться.

(function () {
  var keys = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term'];
  var params = new URLSearchParams(location.search);
  var saved = {};
  try { saved = JSON.parse(localStorage.getItem('dl_utm') || '{}'); } catch (e) {}

  // сохраняем только если пришли с меткой и в хранилище еще пусто (первый касание за 30 дней)
  var fresh = {};
  keys.forEach(function (k) { if (params.get(k)) fresh[k] = params.get(k).slice(0, 100); });
  if (Object.keys(fresh).length && (!saved.ts || Date.now() - saved.ts > 30 * 86400000)) {
    fresh.ts = Date.now();
    localStorage.setItem('dl_utm', JSON.stringify(fresh));
    saved = fresh;
  }

  // подставляем в скрытые поля всех форм на странице
  document.querySelectorAll('form').forEach(function (form) {
    keys.forEach(function (k) {
      var input = form.querySelector('input[name="' + k + '"]');
      if (input && saved[k]) input.value = saved[k];
    });
  });
})();

В форме при этом должны быть скрытые поля с теми же именами:

<form method="post" action="/api/lead.php">
  <input type="hidden" name="utm_source">
  <input type="hidden" name="utm_medium">
  <input type="hidden" name="utm_campaign">
  <input type="hidden" name="utm_content">
  <input type="hidden" name="utm_term">
  <input type="tel" name="phone" required>
  <button type="submit">Оставить заявку</button>
</form>

Пара замечаний к коду. Значения обрезаются до 100 символов и на сервере должны проверяться как любые пользовательские данные: в UTM-параметр можно передать что угодно. Срок хранения 30 дней — ориентир, для сделок с длинным циклом его увеличивают. И это первое касание, а не последнее: если для вас важнее, откуда пришли непосредственно перед заявкой, условие с датой нужно убрать. Какую логику выбрать, зависит от того, как вы считаете окупаемость: отчет по окупаемости рекламы в Метрике работает с атрибуцией визитов, а CRM обычно хранит одно значение источника на лид.

Со звонками та же логика, только метку в CRM передает коллтрекинг: он подменяет номер под сессию с меткой и при звонке отдает ее вместе с записью. Как это устроено, мы разбирали в статье про коллтрекинг в Яндекс Директе.

Настройка и ведение Яндекс Директа
Посчитаем стоимость заявки в вашей нише до запуска, настроим цели, звонки и связку с CRM.
Обсудить Директ

Проверка раз в месяц: 20 минут

Метки ломаются постепенно: новый подрядчик, новая рассылка, переезд на HTTPS. Поэтому раз в месяц стоит открыть отчет «Отчеты → Источники → Метки UTM» и пройти по короткому списку.

  1. Дерево источников. В отчете по умолчанию значения группируются деревом: source → medium → campaign. Разверните первый уровень и сравните с вашим словарем. Каждое значение, которого нет в словаре, — ошибка в чьей-то ссылке.
  2. Отчет «Параметры URL». Отфильтруйте параметры, начинающиеся с utm. Здесь всплывают опечатки: utm_sourse, utm_compaign. Они не попадают в отчет по меткам, поэтому в первом пункте их не видно.
  3. Регистр. Ищите дубли, различающиеся только заглавными буквами. Из-за них расходы, загруженные по одной версии метки, не свяжутся с визитами по другой.
  4. Сверка с кабинетом. Возьмите 1 кампанию Директа и сравните клики за неделю с визитами по ее utm_campaign в Метрике. Расхождение в пределах 10–15% — рабочий ориентир (это оценка, у Яндекса такой нормы нет): блокировщики, отмененные загрузки, разное определение клика. Расхождение в разы — сигнал искать потерю на 2 или 3 этапе.
  5. Рассылки и QR. Убедитесь, что визиты из последней рассылки видны в отчете «Рассылки». Если ушли в общую группу, значит в utm_medium написано что-то кроме email.
Симптом в отчетеВероятная причинаЧто сделать
Кликов в кабинете в 3 раза больше, чем визитов по меткеРедирект отбрасывает параметры или счетчика нет на посадочнойОткрыть ссылку из объявления в инкогнито, проверить адрес после загрузки и наличие счетчика
Реклама в соцсети показана как «определено по меткам»В utm_source значение не из списка МетрикиЗаменить на vk_ads, telegram_ads и подобные из справки
Одна кампания разбита на 2–3 строкиРазный регистр или разные написания в разных объявленияхПеренести метки в блок «Параметры URL» на уровне кампании
Есть визиты, нет ни одной метки в отчетеОпечатка в имени параметраПроверить отчет «Параметры URL»
Расходы Директа не сходятся с визитами по меткеyandex сократился до ya или расходы загружены по другому написаниюЗафиксировать одно значение и перезагрузить расходы

Таблица закрывает 90% обращений «метки не работают», с которыми к нам в Design Lab приходят на аудит. Остальные 10% — экзотика вроде кеширования страницы вместе с адресом или самописных форм, которые чистят адрес при загрузке.

Частые вопросы

Нужны ли UTM‑метки для Директа, если Метрика и так его видит?

Для отчетов группы «Директ» не нужны: Метрика связывает клики по параметру yclid, который Директ добавляет сам. Метки нужны, когда вы сравниваете Директ с другими каналами в одном отчете «Метки UTM», передаете источник в CRM или используете стороннюю систему аналитики, которая yclid не понимает. На практике метки ставят всегда, а yclid работает параллельно.

Что будет, если поставить метку на внутреннюю ссылку сайта?

Начнется новый визит с источником из метки, а реальный источник посетителя потеряется. Это ломает атрибуцию: заявка, которую принесла реклама, будет приписана «баннеру на главной». Внутренние переходы размечают через параметры целей и события, а не через UTM.

Можно ли использовать кириллицу в значениях?

Технически можно: адрес закодируется в UTF-8, и Метрика его прочитает, если сайт корректно принимает такую кодировку. Но ссылка становится длиннее в 3 раза, ломается при копировании в некоторых мессенджерах, а в Директе может упереться в лимит 4096 байт. Латиница и транслит надежнее.

Как разметить ссылку в офлайне: на вывеске, листовке, упаковке?

Через QR-код со ссылкой, в которой стоит utm_medium=qr и в utm_source указано место размещения. Метрика выделяет переходы по QR-кодам в отдельный источник. Печатать длинную ссылку с метками текстом бессмысленно: ее никто не наберет руками.

Метки стоят, а в отчете «Метки UTM» пусто. Куда смотреть?

По порядку этапов: ссылка (опечатки, второй «?»), переход (открыть в инкогнито и посмотреть адрес после редиректа), счетчик (есть ли он на посадочной и загружается ли), период отчета. В 4 случаях из 5 причина находится на первых 2 этапах.

Бесплатный аудит вашего сайта
Найдем уязвимости и точки роста за 3 дня и покажем, что чинить в первую очередь.
Получить аудит

Что сделать на этой неделе

Составить словарь значений на 1 страницу и разослать всем, кто делает ссылки. Перенести метки Директа в блок «Параметры URL» на уровне кампаний с динамическими подстановками. Открыть 3 ссылки из объявлений в инкогнито и проверить адрес после загрузки. Добавить скрытые поля в формы и убедиться, что метка приходит в CRM с тестовой заявкой. После этого отчет «Метки UTM» начнет отвечать на вопрос, ради которого его открывают: какой канал приносит деньги. Если нужен взгляд со стороны, мы в Design Lab проверяем разметку и путь метки до CRM в рамках аудита рекламы.

Давайте
обсудим проект
  • Разберем задачу и предложим решения
  • Покажем кейсы из вашей отрасли
  • Оценим сроки и бюджет до старта
Алексей Грицук
Алексей Грицук, руководитель
Что вас интересует?
Приложить файлы
Как с вами связаться?
Заявка отправлена!
Спасибо! Ответим в течение рабочего дня — тем способом, который вы выбрали.
Обсудить проект