Как настроить Метрику для лендинга iiMinion
Как настроить Метрику для лендинга iiMinion
Лендинг: https://iiminion.ru/personal_ai_staff
Старый URL /personal_ai_assistant редиректит на него.
Активный счётчик Метрики: 109617480.
Задача — понять не только “сколько людей пришло”, но и что они сделали: сколько времени провели, до каких блоков дошли, что читали и где кликнули.
Что уже видно
За 2026-06-15..2026-06-16 по счётчику 109617480:
- визиты:
41; - пользователи:
33; - просмотры страниц:
65; - средняя длительность визита: около
242 секунд; - отказы: около
46%.
Это показывает общий интерес, но не доказывает чтение. Открытая вкладка может выглядеть как длинный визит. Среднее время — тень, не факт.
Что Метрика умеет без доработки
Уже можно смотреть:
- страницы входа и просмотра;
- длительность визита;
- отказы;
- источники трафика;
- Вебвизор;
- карту кликов;
- карту скроллинга;
- автоцели: переход в мессенджер и отправка формы.
На странице включены:
webvisor: true,
clickmap: true,
trackLinks: true
Это помогает смотреть сессии глазами: куда человек скроллил, где кликал, как двигался по странице.
Почему нужны отдельные цели
Для Директа важно отличать:
- случайный клик;
- визит на 5 секунд;
- человек дошёл до середины;
- человек увидел цену;
- человек дошёл до CTA;
- человек кликнул Telegram;
- человек отправил форму.
Без целей реклама оптимизируется почти вслепую. С целями можно смотреть не только CPC, а цену дочитывания, цену клика в Telegram и цену заявки.
Какие цели созданы
В счётчике 109617480 созданы JavaScript event goals.
Скролл
scroll_25scroll_50scroll_75scroll_90
Чтение секций
read_heroread_problemread_solutionread_use_casesread_pricingread_faqread_cta
Событие считается чтением, если секция видна хотя бы на 50% и человек задержался на ней около 3 секунд.
Коммерческие действия
click_telegramclick_formsubmit_form
Качественные визиты
qualified_visit_30squalified_visit_60squalified_visit_120squalified_visit_scroll_75
Качественный визит — это ещё не покупка, но уже не мусорный клик.
Что нужно добавить на сайт
На важные секции лендинга поставить data-section:
<section data-section="hero">
<section data-section="problem">
<section data-section="solution">
<section data-section="use_cases">
<section data-section="pricing">
<section data-section="faq">
<section data-section="cta">
И добавить JS, который вызывает цели Метрики:
<script>
(function () {
const counterId = 109617480;
const fired = new Set();
function goal(name, params = {}) {
if (fired.has(name)) return;
fired.add(name);
if (typeof ym === 'function') ym(counterId, 'reachGoal', name, params);
console.log('[metrika goal]', name, params);
}
const scrollGoals = [
{ depth: 25, name: 'scroll_25' },
{ depth: 50, name: 'scroll_50' },
{ depth: 75, name: 'scroll_75' },
{ depth: 90, name: 'scroll_90' }
];
function checkScroll() {
const scrollTop = window.scrollY || document.documentElement.scrollTop;
const docHeight = document.documentElement.scrollHeight - window.innerHeight;
if (docHeight <= 0) return;
const percent = Math.round((scrollTop / docHeight) * 100);
scrollGoals.forEach(item => {
if (percent >= item.depth) goal(item.name, { depth: item.depth });
});
if (percent >= 75) goal('qualified_visit_scroll_75');
}
window.addEventListener('scroll', checkScroll, { passive: true });
checkScroll();
setTimeout(() => goal('qualified_visit_30s'), 30000);
setTimeout(() => goal('qualified_visit_60s'), 60000);
setTimeout(() => goal('qualified_visit_120s'), 120000);
const sectionTimers = new Map();
const observer = new IntersectionObserver(entries => {
entries.forEach(entry => {
const section = entry.target.getAttribute('data-section');
if (!section) return;
const goalName = 'read_' + section;
if (entry.isIntersecting && entry.intersectionRatio >= 0.5) {
if (!sectionTimers.has(section)) {
const timer = setTimeout(() => goal(goalName, { section }), 3000);
sectionTimers.set(section, timer);
}
} else {
const timer = sectionTimers.get(section);
if (timer) clearTimeout(timer);
sectionTimers.delete(section);
}
});
}, { threshold: [0, 0.5, 0.75] });
document.querySelectorAll('[data-section]').forEach(el => observer.observe(el));
document.addEventListener('click', function (event) {
const el = event.target.closest('a, button');
if (!el) return;
const href = el.getAttribute('href') || '';
const text = (el.innerText || '').toLowerCase();
if (href.includes('t.me') || href.includes('telegram')) {
goal('click_telegram', { href });
}
if (href.includes('#form') || text.includes('заяв') || text.includes('обсудить')) {
goal('click_form', { href, text });
}
});
document.addEventListener('submit', function () {
goal('submit_form');
});
})();
</script>
Как читать отчёты
Смотреть нужно цепочку:
- визит;
qualified_visit_30s/60s/120s;scroll_50/scroll_75;read_pricing;read_cta;click_telegram/submit_form.
Если кампания даёт дешёвые клики, но не даёт scroll_50 и qualified_visit_30s, это не победа. Это дешёвый шум.
Техническая заметка по API
Для JavaScript event goals рабочий payload:
{
"goal": {
"name": "Скролл 75%",
"type": "action",
"conditions": [{ "type": "exact", "url": "scroll_75" }]
}
}
Метрика принимает type: "action" как тип цели, но условие для события сработало как type: "exact", где url равен имени события из ym(..., 'reachGoal', eventName).
Итог
Счётчик 109617480 уже получил цели. Осталось встроить JS-события на страницу. После этого можно строить ежедневный отчёт по качеству трафика из Директа: не “клики были”, а “люди читали, дошли до CTA и сделали действие”.