Настраиваем пользовательские цели на основе поведения посетителей сайта

Настраиваем пользовательские цели на основе поведения посетителей сайта

Всем привет 👋

Прошел почти месяц с момента публикации моего проекта по автоматической оптимизации рекламных кампаний в Яндекс Директ — вот ссылка на пост.

К сожалению, пост не получил достаточного отклика, чтобы я начал записывать подробную инструкцию по настройке, но всё ещё в силе: как только он наберёт 100 лайков — я обязательно подготовлю и опубликую полноценное руководство.

А пока что — немного новостей и полезностей.

Сейчас я работаю над новым проектом, который опубликую здесь, как только доведу его до ума. Он полностью решит проблему с обучаемостью рекламных кампаний — раз и навсегда.

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

Что делает скрипт?

Он создаёт 3 цели, которые автоматически заполняются в зависимости от того, насколько "качественным" оказался пользователь, зашедший на сайт. Затем эти цели можно использовать в качестве конверсий для оптимизации в Яндекс Директ — это позволит системе эффективнее обучаться и не останавливать обучение рекламной кампании.

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

Итак, давайте сначала разберем принцип работы скрипта и каким проектам он будет полезен.

Принцип работы

Принцип работы максимально простой: скрипт отслеживает поведение пользователя на сайте и по завершению сессии определяет, к какому из трёх сегментов он относится:

  • Качественный пользователь (low) - низкая заинтересованность
  • Качественный пользователь (medium) - средняя заинтересованность
  • Качественный пользователь (high) - высокая заинтересованность.

Распределение по сегментам происходит на основе заранее заданных правил. Скрипт оценивает следующие параметры:

var SEGMENT_RULES = { 'quality_user_high': { minTimeOnSiteMs: 300000, minPageViews: 3, minScrollDepthPercentage: 30, minScrollPauses: 3 }, 'quality_user_medium': { minTimeOnSiteMs: 60000, minPageViews: 2, minScrollDepthPercentage: 30, minScrollPauses: 2 }, 'quality_user_low': { minTimeOnSiteMs: 0, minPageViews: 0, minScrollDepthPercentage: 0, minScrollPauses: 0 } }
  • minTimeOnSiteMs - минимальное количество времени, который должен провести на сайте (в миллисекундах)
  • minPageViews - минимальное количество страниц, которое пользователь должен просмотреть во время сессии.
  • minScrollDepthPercentage - минимальный процент прокрутки страницы
  • minScrollPauses — минимальное количество пауз при прокрутке (скролл-стопов)

Отдельно стоит отметить: скрипт умеет определять, является ли посетитель сайта ботом. Если пользователь распознан как бот — никакие цели ему не присваиваются.

Для каких проектов будет полезно?

В первую очередь такой скрипт будет полезен проектам в перегретых нишах, где:

  • Высокая конкуренция
  • дорогой CPL (стоимость лида)
  • Недельный бюджет, который не позволяет стабильно получать хотя бы 10 конверсий в неделю — это минимальный объём, необходимый для обучения рекламных кампаний в Яндекс Директе.

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

Чтобы внедрить скрипт на сайт и начать отслеживать поведение пользователей для последующей сегментации, потребуется следующее:

  • Скрипт — сам код, который будет анализировать поведение и отправлять цели в Метрику
  • Доступ к Яндекс Тег Менеджеру — если нет возможности напрямую редактировать HTML-код сайта
  • Доступ к Яндекс Метрике — минимальный уровень доступа: Аналитика, чтобы была возможность создать цели для скрипта.

Ниже опубликован сам скрипт:

<script> (function() { console.log('[SegTracker] Скрипт инициализирован.') var DAILY_COUNTER_STORAGE_KEY = 'quality_user_daily_counter' var MAX_GOAL_COUNT_PER_DAY = 1 var SESSION_END_INACTIVITY_THRESHOLD = 180000 var MIN_SESSION_DURATION_FOR_GOAL_MS = 30000 var SEGMENT_RULES = { 'quality_user_high': { minTimeOnSiteMs: 300000, minPageViews: 3, minScrollDepthPercentage: 30, minScrollPauses: 3 }, 'quality_user_medium': { minTimeOnSiteMs: 60000, minPageViews: 2, minScrollDepthPercentage: 30, minScrollPauses: 2 }, 'quality_user_low': { minTimeOnSiteMs: 0, minPageViews: 0, minScrollDepthPercentage: 0, minScrollPauses: 0 } } var SCROLL_PAUSE_DURATION = 3000 var SEGMENT_CHECK_INTERVAL_MS = 5000; // New: Check segment every 5 seconds var STORAGE_KEYS = { startTime: 'q_ses_start', active: 'q_ses_active', scrollPauses: 'q_scroll_pauses', scrollDepth: 'q_scroll_depth', pageViews: 'q_page_views', sent: 'q_goal_sent', segment: 'q_current_segment', daily: function(goal) { return DAILY_COUNTER_STORAGE_KEY + '_' + goal } } var startTime = parseInt(sessionStorage.getItem(STORAGE_KEYS.startTime)) || Date.now() sessionStorage.setItem(STORAGE_KEYS.startTime, startTime) var scrollPauses = parseInt(sessionStorage.getItem(STORAGE_KEYS.scrollPauses)) || 0 var maxScroll = parseInt(sessionStorage.getItem(STORAGE_KEYS.scrollDepth)) || 0 var pageViews = parseInt(sessionStorage.getItem(STORAGE_KEYS.pageViews)) || 1 var goalSent = sessionStorage.getItem(STORAGE_KEYS.sent) === 'true' function getScrollPercent() { var height = document.documentElement.scrollHeight - window.innerHeight return height > 0 ? Math.min(100, (maxScroll / height) * 100) : 0 } function isWithinDailyLimit(goal) { return (parseInt(localStorage.getItem(STORAGE_KEYS.daily(goal))) || 0) < MAX_GOAL_COUNT_PER_DAY } function incrementDailyCounter(goal) { var key = STORAGE_KEYS.daily(goal) var current = parseInt(localStorage.getItem(key)) || 0 localStorage.setItem(key, current + 1) } function determineSegment() { var time = Date.now() - startTime var scroll = getScrollPercent() // Дополнительное логирование для отладки console.log('[SegTracker] Проверка сегмента: Время на сайте (мс): ' + time + ', Просмотры страниц: ' + pageViews + ', Прокрутка (%): ' + scroll.toFixed(2) + ' (макс. пикселей: ' + maxScroll + '), Паузы скролла: ' + scrollPauses); var keys = [] for (var name in SEGMENT_RULES) { if (!SEGMENT_RULES.hasOwnProperty(name)) continue keys.push(name) } keys.sort(function(a, b) { return SEGMENT_RULES[b].minTimeOnSiteMs - SEGMENT_RULES[a].minTimeOnSiteMs }) for (var i = 0; i < keys.length; i++) { var k = keys[i] var rules = SEGMENT_RULES[k] if ( time >= rules.minTimeOnSiteMs && pageViews >= rules.minPageViews && scroll >= rules.minScrollDepthPercentage && scrollPauses >= rules.minScrollPauses ) { console.log('[SegTracker] Текущий сегмент: ' + k) return k } } return null } function sendFinalGoal() { if (goalSent) return var segment = sessionStorage.getItem(STORAGE_KEYS.segment) || determineSegment() if (!segment || !isWithinDailyLimit(segment)) return var time = Date.now() - startTime if (segment !== 'quality_user_low' && time < MIN_SESSION_DURATION_FOR_GOAL_MS) { console.log('[SegTracker] Недостаточно времени на сайте для цели: ' + time + ' мс') return } ym(НОМЕР_ВАШЕГО_СЧЕТЧИКА, 'reachGoal', segment) incrementDailyCounter(segment) sessionStorage.setItem(STORAGE_KEYS.sent, 'true') console.log('[SegTracker] Отправлена цель: ' + segment) } var scrollTimer window.addEventListener('scroll', function() { var y = window.scrollY maxScroll = Math.max(maxScroll, y) sessionStorage.setItem(STORAGE_KEYS.scrollDepth, maxScroll.toString()) clearTimeout(scrollTimer) scrollTimer = setTimeout(function() { scrollPauses++ sessionStorage.setItem(STORAGE_KEYS.scrollPauses, scrollPauses.toString()) console.log('[SegTracker] Засчитана пауза прокрутки. Всего: ' + scrollPauses + '. Текущая макс. прокрутка (px): ' + maxScroll) // Дополнительное логирование }, SCROLL_PAUSE_DURATION) }) var inactivityTimer function resetInactivityTimer() { clearTimeout(inactivityTimer) inactivityTimer = setTimeout(function() { console.log('[SegTracker] Неактивность. Попытка отправки цели.') sendFinalGoal() }, SESSION_END_INACTIVITY_THRESHOLD) } var events = ['mousemove', 'keydown', 'click', 'touchstart'] for (var i = 0; i < events.length; i++) { document.addEventListener(events[i], resetInactivityTimer, { passive: true }) } document.addEventListener('visibilitychange', function() { if (document.hidden) { console.log('[SegTracker] Страница скрыта. Ожидание завершения сессии...') inactivityTimer = setTimeout(function() { sendFinalGoal() }, SESSION_END_INACTIVITY_THRESHOLD) } else { console.log('[SegTracker] Страница снова видима.') resetInactivityTimer() } }) window.addEventListener('beforeunload', function() { if (sessionStorage.getItem('q_internal_nav') === 'true') { sessionStorage.removeItem('q_internal_nav') console.log('[SegTracker] Внутренний переход. Цель не отправляется.') return } console.log('[SegTracker] Выход со страницы. Отправка цели...') sendFinalGoal() }) document.addEventListener('click', function(e) { var a = e.target.closest('a') if (a && a.href && a.origin === location.origin && a.pathname !== location.pathname) { sessionStorage.setItem('q_internal_nav', 'true') console.log('[SegTracker] Обнаружен внутренний переход по ссылке: ' + a.href) } }) // New function to check and update segment periodically function checkAndUpdateSegment() { var best = determineSegment() var currentStoredSegment = sessionStorage.getItem(STORAGE_KEYS.segment) if (best && best !== currentStoredSegment) { sessionStorage.setItem(STORAGE_KEYS.segment, best) console.log('[SegTracker] Обнаружен и сохранен новый сегмент: ' + best + '. Предыдущий сегмент: ' + (currentStoredSegment || 'не определен')) } // No else if for 'best' being the same, to reduce console spam from periodic checks } window.addEventListener('load', function() { var prev = sessionStorage.getItem('q_prev_url') var curr = location.href if (prev && prev !== curr) { pageViews++ console.log('[SegTracker] Переход на новую страницу. pageViews: ' + pageViews) } else if (!prev) { console.log('[SegTracker] Первая страница в сессии.') } else { console.log('[SegTracker] Перезагрузка текущей страницы.') } sessionStorage.setItem(STORAGE_KEYS.pageViews, pageViews.toString()) sessionStorage.setItem('q_prev_url', curr) // Initial segment check on page load checkAndUpdateSegment(); }) window.sendFinalGoal = sendFinalGoal resetInactivityTimer() // New: Start periodic segment check setInterval(checkAndUpdateSegment, SEGMENT_CHECK_INTERVAL_MS); })() </script>

Найдите следующую строчку

ym(НОМЕР_ВАШЕГО_СЧЕТЧИКА, 'reachGoal', segment)

Замените "НОМЕР_ВАШЕГО_СЧЕТЧИКА" на актуальный номер счетчика яндекс метрики, перед тем, как установить скрипт на сайт.

Ниже — ключевые параметры скрипта, которые вы можете (и должны) настроить под особенности вашего сайта:

var MAX_GOAL_COUNT_PER_DAY = 1

Ограничение на количество целей в сутки с одного пользователя. Позволяет избежать повторных засчитываний целей от одного и того же пользователя. По умолчанию — не больше одной цели в день.

var SESSION_END_INACTIVITY_THRESHOLD = 180000

Порог бездействия для завершения сессии (в миллисекундах). Если пользователь не проявлял активности более 3 минут (180 000 мс), сессия считается завершённой — скрипт оценивает поведение и отправляет цель.

var MIN_SESSION_DURATION_FOR_GOAL_MS = 10000

Минимальная продолжительность сессии, чтобы засчитать цель. Если пользователь пробыл на сайте меньше 10 секунд — поведение считается недостаточным для сегментации, и цель не отправляется.

var SCROLL_PAUSE_DURATION = 3000

Длительность паузы между скроллами (в миллисекундах). Используется для оценки "вдумчивого" чтения. Если пользователь останавливается во время скролла хотя бы на 3 секунды — засчитывается пауза.

var SEGMENT_CHECK_INTERVAL_MS = 5000

Интервал проверки сегментации (в миллисекундах). Скрипт каждые 5 секунд анализирует активность пользователя, чтобы определить, достиг ли он нужного уровня вовлечённости.

Условия (правила) для распределения пользователя в тот или иной сегмент описаны выше.

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

Теперь, когда вы отредактировали скрипт, нужно создать соответствующие цели в интерфейсе Яндекс Метрики.

Переходим в нужный счётчик → раздел «Цели» → «Добавить цель», и создаём 3 цели типа "JavaScript-событие" с идентификаторами:

  • quality_user_low
  • quality_user_medium
  • quality_user_high

Ниже записал видео как пример создания цели quality_user_low

Установка скрипта с помощью Яндекс Тег Менеджера

Если у вас нет доступа к HTML-коду сайта, вы можете установить скрипт через Яндекс Тег Менеджер (ЯТМ). Это удобно, быстро и не требует участия разработчиков.

Чтобы начать работу с ЯТМ, нужно сначала убедиться, что:

  • Тег Менеджер активирован — это можно сделать в настройках счётчика Яндекс Метрики. 👉 Важно: активировать Тег Менеджер может только владелец счётчика.
  • У вас есть доступ к контейнеру — для полноценной работы (просмотр, редактирование и добавление скриптов) необходим доступ с правами:
  • «Просмотр контейнера»
  • «Редактирование контейнера»
  • «Создание контейнера»

Внутри интерфейса ЯТМ перейдите в раздел «Теги» и нажмите на кнопку «Добавить тег», откроется окно создания тега со следующим содержимым:

  • Название — придумайте название тегу, оно может быть произвольным, например «Качественный пользователь»
  • Шаблон тега — в выпадающем списке выберите «Пользовательский HTML» и вставьте подготовленный скрипт внутрь появившегося окна
  • Триггеры — пока оставьте пустым

Сохраните ваш тег.

Перейдите в раздел «Триггеры» и нажмите на кнопку «Добавить триггер», откроется окно создания тега со следующим содержимым:

  • Название — придумайте название тегу, оно может быть произвольным, например «Качественный пользователь»
  • Тип триггера — в выпадающем списке выберите «Просмотр страницы»
  • Условия активации триггера — все события

Сохраните ваш триггер.

После создания триггера вернитесь в раздел «Теги», откройте ранее созданный тег и выберите нужный триггер в соответствующем поле. В конечном счете у вас должно быть примерно вот так:

Настраиваем пользовательские цели на основе поведения посетителей сайта

Не забудьте опубликовать изменения, без этого скрипт не заработает на сайте.

Проверка работоспособности

Теперь, когда вы опубликовали тег в интерфейсе ЯТМ осталось проверить его работоспособность. Для этого перейдите на сайт, откройте режим разработчика и перейдите во вкладку «Console». Вы должны увидеть, что скрипт начал исполняться, соответствующие сообщения вы должны увидеть здесь.

Настраиваем пользовательские цели на основе поведения посетителей сайта
[SegTracker] Скрипт инициализирован. [SegTracker] Первая страница в сессии. [SegTracker] Проверка сегмента: Время на сайте (мс): 100, Просмотры страниц: 1, Прокрутка (%): 0.00 (макс. пикселей: 0), Паузы скролла: 0 [SegTracker] Текущий сегмент: quality_user_low [SegTracker] Обнаружен и сохранен новый сегмент: quality_user_low. Предыдущий сегмент: не определен [SegTracker] Проверка сегмента: Время на сайте (мс): 5002, Просмотры страниц: 1, Прокрутка (%): 0.00 (макс. пикселей: 0), Паузы скролла: 0

Эти сообщения, которые выводятся в консоли говорят о том, что скрипт запустился и начал свою работу.

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

Откройте сайт с параметром отладки, например:

www.washsaite.ru?_ym_debug=2

Параллельно откройте инструменты разработчика (F12) → вкладка Console. Выполните какие-либо действия на сайте (пролистывания, переходы, задержитесь на странице), и наблюдайте, что выводится в консоль — скрипт покажет, какой сегмент был назначен.

Когда увидите сообщение о присвоении сегмента (например, Обнаружен и сохранен новый сегмент: quality_user_low. ), вручную отправьте срабатывание цели, выполнив в консоли команду:

sendFinalGoal();

После того как отправите команду в консоль, откройте вкладку «Events» в дебаггере Метрики — вы должны увидеть, что цель, соответствующая вашему сегменту, сработала. Это значит, что скрипт работает корректно и цели успешно передаются в Метрику.

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

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

Ну а если вам нужна настройка рекламных кампаний, аудит или консультация, можете написать мне в телеграм 😊

3
4 комментария
","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Найдите следующую строчку

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"ym(НОМЕР_ВАШЕГО_СЧЕТЧИКА, 'reachGoal', segment)","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Замените \"НОМЕР_ВАШЕГО_СЧЕТЧИКА\" на актуальный номер счетчика яндекс метрики, перед тем, как установить скрипт на сайт.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Ниже — ключевые параметры скрипта, которые вы можете (и должны) настроить под особенности вашего сайта:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"var MAX_GOAL_COUNT_PER_DAY = 1","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Ограничение на количество целей в сутки с одного пользователя. Позволяет избежать повторных засчитываний целей от одного и того же пользователя. По умолчанию — не больше одной цели в день.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"var SESSION_END_INACTIVITY_THRESHOLD = 180000","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Порог бездействия для завершения сессии (в миллисекундах). Если пользователь не проявлял активности более 3 минут (180 000 мс), сессия считается завершённой — скрипт оценивает поведение и отправляет цель.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"var MIN_SESSION_DURATION_FOR_GOAL_MS = 10000","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Минимальная продолжительность сессии, чтобы засчитать цель. Если пользователь пробыл на сайте меньше 10 секунд — поведение считается недостаточным для сегментации, и цель не отправляется.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"var SCROLL_PAUSE_DURATION = 3000","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Длительность паузы между скроллами (в миллисекундах). Используется для оценки \"вдумчивого\" чтения. Если пользователь останавливается во время скролла хотя бы на 3 секунды — засчитывается пауза.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"var SEGMENT_CHECK_INTERVAL_MS = 5000","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Интервал проверки сегментации (в миллисекундах). Скрипт каждые 5 секунд анализирует активность пользователя, чтобы определить, достиг ли он нужного уровня вовлечённости.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Условия (правила) для распределения пользователя в тот или иной сегмент описаны выше.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Создаем цель в Яндекс Метрике"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Теперь, когда вы отредактировали скрипт, нужно создать соответствующие цели в интерфейсе Яндекс Метрики.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Переходим в нужный счётчик → раздел «Цели» → «Добавить цель», и создаём 3 цели типа \"JavaScript-событие\" с идентификаторами:

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["quality_user_low","quality_user_medium
","quality_user_high
"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Ниже записал видео как пример создания цели quality_user_low

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"06bababd-9d3e-54f8-8d4e-13def5d9a63c","width":2848,"height":1336,"size":1093919,"type":"gif","color":"1f2220","hash":"","external_service":[],"duration":28.45,"isVideo":false,"has_audio":false}}}]}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Установка скрипта с помощью Яндекс Тег Менеджера"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Если у вас нет доступа к HTML-коду сайта, вы можете установить скрипт через Яндекс Тег Менеджер (ЯТМ). Это удобно, быстро и не требует участия разработчиков.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Чтобы начать работу с ЯТМ, нужно сначала убедиться, что:

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Тег Менеджер активирован — это можно сделать в настройках счётчика Яндекс Метрики. 👉 Важно: активировать Тег Менеджер может только владелец счётчика.","У вас есть доступ к контейнеру — для полноценной работы (просмотр, редактирование и добавление скриптов) необходим доступ с правами:","«Просмотр контейнера»","«Редактирование контейнера»","«Создание контейнера»"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Внутри интерфейса ЯТМ перейдите в раздел «Теги» и нажмите на кнопку «Добавить тег», откроется окно создания тега со следующим содержимым:

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Название — придумайте название тегу, оно может быть произвольным, например «Качественный пользователь»","Шаблон тега — в выпадающем списке выберите «Пользовательский HTML» и вставьте подготовленный скрипт внутрь появившегося окна","Триггеры — пока оставьте пустым
"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Сохраните ваш тег.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Перейдите в раздел «Триггеры» и нажмите на кнопку «Добавить триггер», откроется окно создания тега со следующим содержимым:

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Название — придумайте название тегу, оно может быть произвольным, например «Качественный пользователь»","Тип триггера — в выпадающем списке выберите «Просмотр страницы»","Условия активации триггера — все события"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Сохраните ваш триггер.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

После создания триггера вернитесь в раздел «Теги», откройте ранее созданный тег и выберите нужный триггер в соответствующем поле. В конечном счете у вас должно быть примерно вот так:

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"b255a464-4053-5e29-b1a9-42f4ca5b205b","width":1348,"height":1734,"size":131682,"type":"png","color":"343983","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAQFCf/EAB8QAAIBBAIDAAAAAAAAAAAAAAECAwAEESExYSJS0f/EABYBAQEBAAAAAAAAAAAAAAAAAAEAA//EABkRAQEBAAMAAAAAAAAAAAAAAAABEQISYf/aAAwDAQACEQMRAD8A0ws7pVmkSe8kTLkKq+Qx2DW3O5JMVxYFtoYmk49V+Vn28Qso0MSkopOTvHdFEMHmgP/Z"}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Не забудьте опубликовать изменения, без этого скрипт не заработает на сайте.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Проверка работоспособности"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Теперь, когда вы опубликовали тег в интерфейсе ЯТМ осталось проверить его работоспособность. Для этого перейдите на сайт, откройте режим разработчика и перейдите во вкладку «Console». Вы должны увидеть, что скрипт начал исполняться, соответствующие сообщения вы должны увидеть здесь.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"b7d69c0f-4d4b-591a-8d51-45d68398def1","width":3420,"height":2014,"size":1006820,"type":"png","color":"e4e0da","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAACQQI/8QAJBAAAgEDAgYDAAAAAAAAAAAAAQIDBAURAAYIEhQWIWETImL/xAAWAQEBAQAAAAAAAAAAAAAAAAAFBAb/xAAgEQABAwMFAQAAAAAAAAAAAAABAAIDBBFxBSExMmGx/9oADAMBAAIRAxEAPwCxuCt7Nc6Wsu2y6ea2xFusMMpccuD9h4JznHgA6z8cmoNdZ4uPiSjhpzE6SVwBHDdyT5twsjXCgsUFfUwpDBGsczqEYgFQGIwfenm3IBujTZJRu/c+5e3oF7huePmIx1cn696M1AAQDKSoCTOcIqtxMz7gubMxLGsmJJPknnOko+gwoJO5yv/Z"}}}]}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"[SegTracker] Скрипт инициализирован.\n[SegTracker] Первая страница в сессии.\n[SegTracker] Проверка сегмента: Время на сайте (мс): 100, Просмотры страниц: 1, Прокрутка (%): 0.00 (макс. пикселей: 0), Паузы скролла: 0\n[SegTracker] Текущий сегмент: quality_user_low\n[SegTracker] Обнаружен и сохранен новый сегмент: quality_user_low. Предыдущий сегмент: не определен\n[SegTracker] Проверка сегмента: Время на сайте (мс): 5002, Просмотры страниц: 1, Прокрутка (%): 0.00 (макс. пикселей: 0), Паузы скролла: 0","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Эти сообщения, которые выводятся в консоли говорят о том, что скрипт запустился и начал свою работу.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Откройте сайт с параметром отладки, например:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"www.washsaite.ru?_ym_debug=2","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Параллельно откройте инструменты разработчика (F12) → вкладка Console. Выполните какие-либо действия на сайте (пролистывания, переходы, задержитесь на странице), и наблюдайте, что выводится в консоль — скрипт покажет, какой сегмент был назначен.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Когда увидите сообщение о присвоении сегмента (например, Обнаружен и сохранен новый сегмент: quality_user_low. ), вручную отправьте срабатывание цели, выполнив в консоли команду:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"sendFinalGoal();","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

После того как отправите команду в консоль, откройте вкладку «Events» в дебаггере Метрики — вы должны увидеть, что цель, соответствующая вашему сегменту, сработала. Это значит, что скрипт работает корректно и цели успешно передаются в Метрику.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"506b5483-d3f3-5a65-a52a-9264cb8929ef","width":3420,"height":1856,"size":1705250,"type":"gif","color":"e8eeef","hash":"","external_service":[],"duration":17.15,"isVideo":false,"has_audio":false}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Ну а если вам нужна настройка рекламных кампаний, аудит или консультация, можете написать мне в телеграм 😊

"}},{"type":"link","cover":false,"hidden":false,"anchor":"","data":{"link":{"type":"link","data":{"url":"https://api.vc.ru/v2.8/redirect?to=http%3A%2F%2Ft.me%2FmaxOvo&postId=2095040","title":"Maxim Voznyuk","description":"рџ“€Marketing","image":{"type":"image","data":{"uuid":"0c5ec522-6456-5837-a7a9-efa6a12645d2","width":180,"height":180,"size":4016,"type":"png","color":"26a5e4","hash":"","external_service":[]}},"v":1,"hostname":"t.me"}}}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":4,"favorites":5,"reposts":0,"views":402,"hits":241,"reads":null,"online":0},"dateFavorite":0,"hitsCount":241,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":false,"withheld":[],"ogTitle":null,"ogDescription":"Скрипт для сегментации пользователей, создание целей в Яндекс Метрике, оптимизация рекламных кампаний, повышение эффективности в Яндекс Директ","url":"https://vc.ru/marketing/2095040-kastomnaya-tsel-optimizatsiya-reklamnykh-kampanij","author":{"id":779649,"name":"Максим Вознюк","nickname":null,"description":"Интернет-маркетолог. Рассказываю о том, как автоматизировать процесс работы рекламных кампаний и не только 👋","uri":"","avatar":{"type":"image","data":{"uuid":"5b113363-0041-5c16-bd2f-23ffa5171ad0","width":855,"height":855,"size":409712,"type":"png","color":"993c06","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAHAAcAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABwUI/8QAJhAAAQMDAwIHAAAAAAAAAAAAAQIDBAAFEQYSISIxExQjMlFhYv/EABYBAQEBAAAAAAAAAAAAAAAAAAYEBf/EACIRAAEDBAICAwAAAAAAAAAAAAEAAgMEBREhMVESgSJBYf/aAAwDAQACEQMRAD8AwFpiFbvLXNmbHQ46mBvj4QVuBf4APcn6PArIu1fOJoH07iAHAHeB+5SCxWmlNNUsrGBzi0kay4deO0cLkyN6spQDk8baQeQO8owGAawlXQXpToshrod8RPWnhXv+e9C718g5p469J9YdRl4579qtcoUNVxlKVEZJL6ySWxkncahgleImgE8BWywxl7iWjk/S/9k="}},"cover":{"cover":{"type":"image","data":{"uuid":"4963838f-7454-5b9a-b626-90d521d531a9","width":4896,"height":3264,"size":329702,"type":"jpg","color":"638eca","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAARCAAKAAoDASEAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAwUGCP/EACYQAAIBAwIEBwAAAAAAAAAAAAECAwAEBREhBgciQRIVFzFRYYH/xAAVAQEBAAAAAAAAAAAAAAAAAAAGBf/EABwRAAICAwEBAAAAAAAAAAAAAAEDAAIEISISof/aAAwDAQACEQMRAD8AJn+YuPsbUpl7nh2FgCQsEYeTbt0Lt+1HeufCK9PkEz6beIIu/wB+9Lr5ik87P2HqY7GdTPeelle7nZ5HZmcliWJJOvelup+aOMJ9GWqDU//Z"}},"cover_y":60},"achievements":[{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4657386,"userId":779649,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4657386"},{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 23 июля 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":1033299,"userId":779649,"count":0,"shareImage":"https://api.vc.ru/achievements/share/1033299"}],"lastModificationDate":1764999766,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":199113,"name":"Маркетинг","description":"Рекламные кейсы из России и других стран, советы по продвижению, маркетинг и digital.","uri":"/marketing","avatar":{"type":"image","data":{"uuid":"d66009fe-9bf0-52da-bdbf-4c758eba39e7","width":2400,"height":2400,"size":841299,"type":"jpg","color":"f97373","hash":"0c1cf06cf0d010","external_service":[]}},"cover":{"type":"image","data":{"uuid":"5488a646-f32d-57a6-a31f-d290afc4388a","width":960,"height":280,"size":177,"type":"png","color":"fc7c7c","hash":"","external_service":[]}},"lastModificationDate":1661337194,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":false,"isDisabledAd":false,"nickname":"marketing","isUnsubscribable":true,"badge":null,"badgeId":null,"isDonationsEnabled":false,"isOnline":false,"isPlus":false,"isUnverifiedBlogForCompanyWithoutPro":false,"isVerified":false,"isRemovedByUserRequest":false,"isFrozen":false,"isPro":false,"type":2,"subtype":"community"},"reactions":{"counters":[{"id":1,"count":3}],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null,"keywords":[],"media":{"type":"image","data":{"uuid":"f6ac00f6-23c9-5b61-b417-815edbf28bcf","width":1237,"height":617,"size":331007,"type":"jpg","color":"7f5343","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAAKAAoDAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAACQcK/8QAKxAAAQQAAwQLAQAAAAAAAAAAAwECBAUABgkIERRhBxITFSEjMTRBQlOR/8QAFwEBAQEBAAAAAAAAAAAAAAAABwgEBv/EACkRAAIBAgQFAwUAAAAAAAAAAAECEQMSAAQhQQUGEyIxMlFhBxQVQlL/2gAMAwEAAhEDEQA/AKNsN5Wr48XMx6SDV52t6qsu5mWsspOC2bd2tbAlHqqw8hokjRGW84AIg5CFc0bZLSOaitVEl6ry1T4hxOiKzTlmcKxBJIUGCxAEaLJiTJg7giu6ufq5bIZipSpt10osygixXaO1ASbgZAmQdzPua0vVA1cQSpIZWz7XZakhkGFIy6un/tD3K0BxkcwtKtwG5UNstURHQe8hKo53YcUxVaVFwqL9NeTwqgZV3hQLvvUW6B6rbe2fMbTGBR+eeby7S9huaU/H5s2GTKyHg2+JGhiRhDdMwpE6RHIhHonXF4I9271b8b+a/wBXGfh6JbT7F8j9R/Q+MLvECehVEmNNJ08ttjVDEIThIvmP9uH7O/NvPHZIBYug9K7D2GDaoSKjgExe2/ycf//Z"}},"customCover":null,"robotsTag":null,"categories":[4],"isAnonymized":true}};