Настройка целей и конверсий в Яндекс.Метрике
Метрика поддерживает два типа целей: автоматические (визиты с глубиной, звонки, формы) и ручные (JavaScript-события). Для рекламы в Директе цели используются в стратегиях автоматического управления ставками — правильная настройка напрямую влияет на стоимость лида.
Счётчик и инициализация
<!-- Счётчик Метрики — перед </head> -->
<script type="text/javascript">
(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
m[i].l=1*new Date();
for(var j=0;j<document.scripts.length;j++){if(document.scripts[j].src===r){return;}}
k=e.createElement(t);a=e.getElementsByTagName(t)[0];k.async=1;k.src=r;a.parentNode.insertBefore(k,a)})
(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
ym(COUNTER_ID, "init", {
clickmap: true,
trackLinks: true,
accurateTrackBounce: true,
webvisor: true, // запись сессий
ecommerce: "dataLayer", // имя массива для e-commerce данных
});
</script>
<noscript>
<div><img src="https://mc.yandex.ru/watch/COUNTER_ID" style="position:absolute; left:-9999px;" alt=""/></div>
</noscript>
COUNTER_ID — числовой ID счётчика из настроек Метрики.
Типы целей
JavaScript-событие (наиболее гибкий тип)
// Простая цель
ym(COUNTER_ID, 'reachGoal', 'GOAL_IDENTIFIER');
// Цель с параметрами (params)
ym(COUNTER_ID, 'reachGoal', 'form_submitted', {
form_type: 'contact',
page: window.location.pathname,
has_phone: true,
});
// Цель с ценностью (для расчёта ROI в Директе)
ym(COUNTER_ID, 'reachGoal', 'purchase', {
order_id: 'ORDER-789',
revenue: 14500,
});
GOAL_IDENTIFIER должен совпадать с идентификатором, который задан в настройках счётчика → «Цели».
Настройка цели в интерфейсе Метрики
- Счётчик → «Цели» → «Добавить цель»
- Тип: «JavaScript-событие»
- Идентификатор:
form_submitted(тот же, что в коде) - Ценность (опционально): фиксированная или из параметров события
Цель по URL (для страниц благодарности)
Тип: Посещение страниц
URL содержит: /thank-you
Не требует JS — работает автоматически при заходе на страницу.
Конверсии для ключевых сценариев
// Отправка формы заявки
document.getElementById('lead-form').addEventListener('submit', function() {
ym(COUNTER_ID, 'reachGoal', 'lead_form_submit', {
form_location: this.dataset.location ?? 'unknown',
});
});
// Клик по номеру телефона
document.querySelectorAll('a[href^="tel:"]').forEach(link => {
link.addEventListener('click', () => {
ym(COUNTER_ID, 'reachGoal', 'phone_click', {
phone: link.href.replace('tel:', ''),
page: window.location.pathname,
});
});
});
// Клик по email
document.querySelectorAll('a[href^="mailto:"]').forEach(link => {
link.addEventListener('click', () => {
ym(COUNTER_ID, 'reachGoal', 'email_click');
});
});
// Открытие чата
document.getElementById('chat-button').addEventListener('click', () => {
ym(COUNTER_ID, 'reachGoal', 'chat_opened');
});
// Прокрутка страницы до блока с формой
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
ym(COUNTER_ID, 'reachGoal', 'form_visible');
observer.disconnect();
}
});
}, { threshold: 0.5 });
observer.observe(document.querySelector('#contact-section'));
Электронная коммерция
Метрика поддерживает e-commerce через dataLayer. Нужно задать имя массива в инициализации счётчика (ecommerce: "dataLayer").
// Просмотр списка товаров
dataLayer.push({
ecommerce: {
currencyCode: 'RUB',
impressions: [
{
id: 'SKU-001',
name: 'Professional Plan',
category: 'Subscription',
price: 2990,
position: 1,
},
],
},
});
// Добавление в корзину
dataLayer.push({
ecommerce: {
add: {
products: [{
id: 'SKU-001',
name: 'Professional Plan',
category: 'Subscription',
price: 2990,
quantity: 1,
}],
},
},
});
// Покупка
dataLayer.push({
ecommerce: {
purchase: {
actionField: {
id: 'ORDER-789',
revenue: 14500,
tax: 500,
shipping: 300,
coupon: 'PROMO10',
},
products: [
{
id: 'SKU-001',
name: 'Professional Plan',
category: 'Subscription',
price: 13700,
quantity: 1,
},
],
},
},
});
Параметры визитов и пользователей
Параметры позволяют сегментировать аудиторию в отчётах:
// Параметры визита (привязываются к конкретному визиту)
ym(COUNTER_ID, 'params', {
visit_params: {
source_form: 'popup',
ab_variant: 'B',
user_type: 'new',
},
});
// Параметры пользователя (сохраняются между визитами)
ym(COUNTER_ID, 'userParams', {
UserID: 'usr_12345',
plan: 'pro',
registration_date: '2024-01-15',
company_size: 'smb',
});
// UserID для кросс-девайс трекинга
ym(COUNTER_ID, 'setUserID', 'usr_12345');
Связка с Яндекс.Директом
Для автоматических стратегий Директа:
- Директ → «Редактирование кампании» → «Стратегия» → «Оплата за конверсии»
- Выбрать цель из Метрики (счётчик должен быть добавлен в кампанию)
- Установить целевую стоимость конверсии
Важно: цель должна накопить минимум 10 конверсий за последние 28 дней, чтобы автостратегия работала корректно.
Офлайн-конверсии через API
Если конверсия происходит офлайн (звонок закрыт в сделку, оплата счёта), её можно загрузить в Метрику:
# Загрузка офлайн-конверсий
curl -X POST \
'https://api-metrika.yandex.net/management/v1/counter/COUNTER_ID/offline_conversions/upload' \
-H 'Authorization: OAuth YOUR_TOKEN' \
-H 'Content-Type: text/csv' \
--data-binary $'UserId,Target,DateTime,Price,Currency\nClientId123,purchase,2024-01-15T14:30:00,25000,RUB'
Поля:
-
ClientId— из cookie_ym_uidили черезym(id, 'getClientID', callback) -
Target— идентификатор цели -
DateTime— ISO 8601 -
Price— ценность конверсии
Отладка
// Проверить инициализацию счётчика
window.ym // должна быть функция
// Проверить ClientID
ym(COUNTER_ID, 'getClientID', function(clientID) {
console.log('Metrika ClientID:', clientID);
});
// Тестовая цель — должна появиться в Метрике → Отладка
ym(COUNTER_ID, 'reachGoal', 'test_goal');
В расширении «Яндекс.Метрика Debugger» для Chrome все hits отображаются в панели DevTools с деталями.
Задержка данных в отчётах Метрики — до 2 часов. В разделе «Отладка» данные в реальном времени.
Сроки
Установка счётчика, настройка 4–6 целей в коде и интерфейсе — 1 день. Подключение e-commerce и параметров визитов — 4–6 часов. Настройка офлайн-конверсий и интеграция с Директом — ещё 1 день.







