new

Полный курс по продвижению в Telegram🔥 Пройти бесплатно

10056 https://ppc.world/uploads/images/30/6c/697722035d01e-Kategoriya-Yandeks.jpg 2026-01-27 Директ ppc.world 160 31

Как не терять атрибуцию в Яндекс Директе на многостраничных сайтах — гайд

Как отслеживать заявки с сайта и видеть, откуда они пришли? 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 почти всегда настроено либо базово, либо криво, поэтому обращайте внимание:

  • на любую «внезапную органику» или активность из поисковых систем на свежем сайте;

  • на конверсии, которые регулярно улетают в «не определено» или начинают гулять между источниками без логики, хотя трафик идет стабильно из рекламы.

    Источник: скриншот кабинета Метрики

Как это проверить:

  1. Открываете сайт по ссылке с UTM-меткой.

  2. Переходите по внутренним страницам через меню и кнопки и смотрите, сохраняются ли UTM в адресной строке. Если после пары кликов URL становится чистым и метки исчезают, значит на пути до формы они теряются, и это как раз ваш случай.

Как избежать потери атрибуции

Правильная атрибуция важна, потому что она отвечает на главный вопрос: «Что именно приносит заявки и выручку?». Если источники и кампании фиксируются неправильно, бюджет распределяется вслепую:

  • усиливаются неэффективные связки и отключаются рабочие;

  • растет стоимость лида;

  • падает предсказуемость результатов.

В итоге страдает не только продвижение конкретных услуг или товаров, но и бизнес в целом: планирование, экономика, масштабирование и даже доверие внутри команды.

Логика решения простая: UTM-метки не обязаны жить только в URL — их можно один раз посчитать при входе и «запомнить» в браузере. Как это работает:

  1. При первом заходе пользователя на сайт мы считываем utm_source, utm_medium, utm_campaign, utm_content и другие параметры и сохраняем их в сессии. Дальше пользователь спокойно ходит по сайту: главная → услуги и пр.

  2. В момент целевого действия: отправка формы, переход на «спасибо»-страницу или любое другое целевое событие, — сайт достает сохраненные при первом заходе UTM-метки и подмешивает их туда, где они нам нужны:

    1. добавляет к URL «спасибо»-страницы;

    2. отправляет в скрытых полях формы;

    3. передает в Метрику отдельным параметром.

В результате, даже если пользователь десять раз прыгал по разделам, к моменту заявки мы всё равно узнаем исходный источник и кампанию.

Настроить это поможет небольшой скрипт, который нужно вставить в <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

      Вячеслав Колчин, добрый день! Файл должен упасть в "Загрузки". На всякий случай добавили скрипт в материал текстом)

  • Дмитрий Кучкин

    Спасибо за материал. У нас хоть и не конструктор, но есть проблема с атрибуцией. Отправил разработчику почитать и оценить применимость для нас.

  • Вячеслав Горячев

    спасибо, полезно!