Как не терять атрибуцию в Яндекс Директе на многостраничных сайтах — гайд
Как отслеживать заявки с сайта и видеть, откуда они пришли? ppc-специалист в WGG Advertising Agency Амалия Исагулова делится гайдом, как настроить UTM-метки для Директа и не потерять атрибуцию на многостраничных сайтах.
Представьте, вы запускаете продвижение в Яндекс Директе, ведете трафик на сайт, настраиваете цели в Метрике, проверяете разметку. На первый взгляд, всё выглядит идеально: кампании аккуратно размечены UTM-метками, в Метрике источники и кампании отображаются так, как и планировалось, пользователи спокойно переходят со страницы на страницу, просматривают контент, двигаются по воронке.
Но как только дело доходит до самого важного — отправки формы, заявки или брони, — начинается странная магия:
-
часть заявок внезапно прилетает без корректных UTM-меток;
-
у части в отчетах появляется какой-то левый источник;
-
часть вообще проваливается в «не определено».
Формально трафик есть, клики есть, сессии есть, но связать заявки с конкретными кампаниями становится либо сложно, либо вовсе невозможно.
Особенно часто подобные истории возникают на конструкторах (Tilda, Readymag, Webflow) и любых других многостраничных сайтах, где путь до заявки состоит из нескольких шагов. Пользователь переходит между страницами и где-то по дороге UTM-метки теряются.
В рекламном кабинете и Метрике картинка одна, а реальное распределение заявок по источникам и кампаниям — совсем другое. В результате:
-
алгоритмы оптимизации рекламы обучаются на ложных данных;
-
пропадает возможность вручную чисто настраивать кампании (исключать негативные ключевые слова и расставлять верные корректировки и ставки);
-
сбивается цена метрик, таких как CPC и CPA.
Для бизнеса такие технические сбои — это слив бюджета впустую, неправильные выводы об эффективности кампании, ложные прогнозы и неверное планирование.
Разберем, в чем причины этой проблемы и как ее решить:
Откуда берется проблема с атрибуцией
UTM-метки живут в URL. Представим, что на первой странице всё нормально: site.ru/?utm_source=yandex&utm_medium=cpc&utm_campaign=search.
Дальше пользователь кликает «Услуги», «Цены», «Акции», уходит на внутренние страницы без UTM, потом попадает на форму и конвертируется в заявку уже на URL без меток.
Если внутренняя навигация происходит на чистых ссылках (без UTM-метки), Метрика помнит первый заход из рекламы, но если страница с отправкой формы открыта без UTM, атрибуция начинает плыть.
В отчетах это выглядит так: заявки есть, клики из Директа есть, а нормальной связки «кампания—конверсии» нет, особенно при смешанном трафике (реклама, органика, прямые). Это напрямую влияет на обучение кампаний. В итоге стратегия начинает оптимизироваться по неполным и искаженным конверсиям — бюджет уходит в менее эффективные связки, CPA растет, а стабильного результата по заявкам добиться сложнее.
Понять, что проблема уже здесь, можно по очень характерным симптомам. Самый частый сценарий — сайт только что опубликован, он еще не успел нормально проиндексироваться. Далее вы запускаете Яндекс Директ, а в отчетах внезапно появляется аномально много конверсий из любых источников, кроме Директа: органика, прямые, рефералы и пр. На конструкторах это встречается особенно часто: там SEO почти всегда настроено либо базово, либо криво, поэтому обращайте внимание:
-
на любую «внезапную органику» или активность из поисковых систем на свежем сайте;
-
на конверсии, которые регулярно улетают в «не определено» или начинают гулять между источниками без логики, хотя трафик идет стабильно из рекламы.
Источник: скриншот кабинета Метрики
Как это проверить:
-
Открываете сайт по ссылке с UTM-меткой.
-
Переходите по внутренним страницам через меню и кнопки и смотрите, сохраняются ли UTM в адресной строке. Если после пары кликов URL становится чистым и метки исчезают, значит на пути до формы они теряются, и это как раз ваш случай.
Как избежать потери атрибуции
Правильная атрибуция важна, потому что она отвечает на главный вопрос: «Что именно приносит заявки и выручку?». Если источники и кампании фиксируются неправильно, бюджет распределяется вслепую:
-
усиливаются неэффективные связки и отключаются рабочие;
-
растет стоимость лида;
-
падает предсказуемость результатов.
В итоге страдает не только продвижение конкретных услуг или товаров, но и бизнес в целом: планирование, экономика, масштабирование и даже доверие внутри команды.
Логика решения простая: UTM-метки не обязаны жить только в URL — их можно один раз посчитать при входе и «запомнить» в браузере. Как это работает:
-
При первом заходе пользователя на сайт мы считываем utm_source, utm_medium, utm_campaign, utm_content и другие параметры и сохраняем их в сессии. Дальше пользователь спокойно ходит по сайту: главная → услуги и пр.
-
В момент целевого действия: отправка формы, переход на «спасибо»-страницу или любое другое целевое событие, — сайт достает сохраненные при первом заходе UTM-метки и подмешивает их туда, где они нам нужны:
-
добавляет к URL «спасибо»-страницы;
-
отправляет в скрытых полях формы;
-
передает в Метрику отдельным параметром.
-
В результате, даже если пользователь десять раз прыгал по разделам, к моменту заявки мы всё равно узнаем исходный источник и кампанию.
Настроить это поможет небольшой скрипт, который нужно вставить в <head> секцию сайта. Один раз подключили — дальше он подхватывает UTM при входе и «дотаскивает» их до заявки.
Документ со скриптом улетит в папку «Загрузки», проверьте ее.
Если скрипт не скачался:
<script>
(function() {
const UTM_KEYS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term', 'yclid', 'ymclid'];
function saveUtmFromUrl() {
const params = new URLSearchParams(window.location.search);
let hasAnyUtm = false;
UTM_KEYS.forEach(function(key) {
const value = params.get(key);
if (value) {
hasAnyUtm = true;
sessionStorage.setItem(key, value);
}
});
const utmSource = params.get('utm_source');
const utmMedium = params.get('utm_medium');
const yclid = params.get('yclid') || params.get('ymclid');
if ((utmSource === 'yandex' && (utmMedium === 'cpc' || utmMedium === 'ppc')) || yclid) {
sessionStorage.setItem('from_yandex_ads', '1');
}
if (hasAnyUtm && utmSource && utmSource !== 'yandex' && !yclid) {
sessionStorage.removeItem('from_yandex_ads');
}
}
function applyUtmToLinks() {
const fromAds = sessionStorage.getItem('from_yandex_ads') === '1';
if (!fromAds) return;
const stored = {};
UTM_KEYS.forEach(function(key) {
const value = sessionStorage.getItem(key);
if (value) {
stored[key] = value;
}
});
if (!Object.keys(stored).length) return;
const links = document.querySelectorAll('a[href]');
if (!links.length) return;
links.forEach(function(link) {
const href = link.getAttribute('href');
if (!href) return;
if (
href.startsWith('mailto:') ||
href.startsWith('tel:') ||
href.startsWith('#') ||
href.startsWith('javascript:')
) return;
try {
const url = new URL(href, window.location.origin);
Object.keys(stored).forEach(function(key) {
url.searchParams.set(key, stored[key]);
});
link.href = url.toString();
} catch (e) {
console.warn('Invalid URL', e);
}
});
}
document.addEventListener('DOMContentLoaded', function() {
saveUtmFromUrl();
applyUtmToLinks();
});
})();
</script>
Почему настройка атрибуции особенно актуальна для Tilda и других конструкторов
На конструкторах всё особенно хрупко:
-
куча редиректов;
-
нестандартные формы;
-
сбор ссылок через визуальный интерфейс.
Любое обновление блока или меню легко обрывает UTM, даже если изначально всё размечали по правилам.
Решение: хранить источник на уровне сессии. То есть заставлять сайт запоминать источник и UTM при первом заходе и хранить их до конца визита. Так сайт становится гораздо спокойнее к изменениям. Технически всё упирается в небольшой скрипт: он считывает параметры из URL при входе, сохраняет их в браузере (в рамках сессии), а потом в момент заявки подставляет эти данные туда, где нужно. Для контекстолога здесь важен не сам код, а принцип: атрибуция больше не зависит от того, есть ли UTM в текущем URL, а опирается на исходный источник сессии, который живет до конца визита.
Выводы
Важно настраивать UTM-метки так, чтобы они корректно доживали до конверсии — это основа управляемой рекламы. Именно по этой связке принимаются решения:
-
что масштабировать;
-
что выключать;
-
где чистить поисковые запросы;
-
куда ставить корректировки;
-
как считать реальный CPA.
Если метки теряются, отчетность становится бесполезной — конверсии разъезжаются по источникам, часть уходит в «не определено», кампании обучаются на искаженных сигналах, а оптимизация превращается в гадание. В итоге бюджет может уходить в менее эффективные связки, стоимость лида расти, а стабильность заявок падать.
Всё потому, что алгоритм и человек опираются не на реальную картину.
Если всё настроено правильно, то UTM-метки фиксируются при входе и передаются в момент заявки. В итоге бизнес получает:
-
нормальную привязку «кампания—конверсия»;
-
честные цифры по CPL и CPA;
-
понятный вклад каналов и прогнозируемость.
Это дает возможность уверенно перераспределять бюджет, быстрее масштабировать то, что работает, и не терять деньги на невидимые заявки, которые фактически пришли из рекламы, но в отчетах выглядят как что-то другое.
Комментарии 5
Авторизуйтесь, чтобы оставить комментарий.
Вячеслав Колчин
Редакция ppc.world
Вячеслав Колчин
Дмитрий Кучкин
Вячеслав Горячев