Umami Analytics для бизнеса: от установки до роста выручки
Практический гайд для предпринимателей: как внедрить Umami Analytics и использовать данные для роста бизнеса — без сложной технической терминологии, с конкретными метриками и планом действий
Оглавление
Umami Analytics для бизнеса: от установки до роста выручки
Для кого этот гайд?
Основатели стартапов, технические предприниматели и продуктовые команды, которые хотят принимать решения на основе данных, а не догадок — без переплат за Google Analytics и без юридических проблем с GDPR.
Что вы получите:
- ✅ Понимание, как аналитика влияет на выручку
- ✅ Готовые компоненты для отслеживания ключевых метрик
- ✅ Конкретные сценарии анализа с примерами решений
- ✅ План внедрения на неделю с чеклистами
🎯 Почему аналитика = деньги
Реальная история
До внедрения аналитики:
- Bounce rate на главной: неизвестно
- Конверсия в регистрацию: ~2% (примерно)
- Стоимость привлечения клиента (CAC): $120
- Решения принимаются "на ощущениях"
После недели работы с Umami:
- Обнаружили: 68% пользователей уходят со страницы pricing (не видели кнопку CTA)
- Переместили кнопку выше, изменили текст → конверсия выросла до 4.2%
- Результат: CAC снизился до $57 → экономия $1890/месяц на 30 клиентах
ROI внедрения: 30 минут на настройку + $0 (self-hosted) = экономия $22,680/год
📊 Бизнес-ценность Umami для предпринимателя
Что вы сможете делать
| Бизнес-задача | Что отслеживать в Umami | Как это влияет на выручку |
|---|---|---|
| Увеличить конверсию в продажи | Воронка: просмотр → клик → заявка | Найти шаг с максимальной потерей → убрать трение → +20-40% конверсии |
| Снизить расходы на маркетинг | UTM-метки, источники трафика, ROI канала | Перенести бюджет из дорогих каналов в эффективные → -30% стоимость лида |
| Уменьшить отток пользователей | Bounce rate, время на сайте, scroll depth | Выявить проблемные страницы → переработать → +15% retention |
| Улучшить производительность продукта | Core Web Vitals (LCP, INP, CLS) | Ускорить загрузку на 1 секунду → +7% конверсия (данные Google) |
| Проверить гипотезы A/B тестов | Кастомные события с вариантами | Протестировать 3 варианта landing page → выбрать лучший → +25% конверсия |
Сравнение: Umami vs Google Analytics
| Параметр | Umami | Google Analytics |
|---|---|---|
| Стоимость | $0 (self-hosted) или $9/мес (cloud) | $0-$150k/год (GA4 360 для >10M hits) |
| GDPR compliance | ✅ Не требует согласия (no cookies) | ❌ Требует cookie banner + legal docs |
| Влияние на скорость | +10ms (2KB скрипт) | +500ms (45KB скрипт) |
| Время на настройку | 5 минут (copy-paste скрипт) | 2-4 часа (конфигурация, цели, фильтры) |
| Сложность интерфейса | 3/10 (минимализм) | 8/10 (перегружен) |
| Контроль данных | 🔒 Ваш сервер | ☁️ Серверы Google |
| Подходит стартапам | ✅ Идеально | ⚠️ Overkill для <100k пользователей |
| Кастомные события | Простой API: umami.track('event') | Сложный: gtag events + конфигурация |
| Real-time данные | ✅ Обновление каждые 5 секунд | ⚠️ Задержка до 24-48 часов |
| Программный доступ API | ✅ REST API из коробки | ⚠️ Требует настройки BigQuery |
| Privacy-friendly | ✅ Не продаёт данные третьим лицам | ❌ Данные используются Google для рекл |
| Self-hosted | ✅ Полный контроль | ❌ Только cloud |
| Open Source | ✅ MIT License | ❌ Proprietary |
| Подходит для MVP | ✅✅✅ Запуск за 5 минут | ⚠️ Избыточно сложно |
Вердикт: Для стартапов с <1M пользователей/месяц Umami — лучший выбор по соотношению цена/скорость внедрения/простота.
🏆 Реальные кейсы: как аналитика изменила бизнес
Case Study 1: SaaS-платформа для планирования встреч
Компания: Calendly-подобный стартап (15k пользователей/месяц)
Проблема:
- 70% drop-off между выбором времени встречи и финальным подтверждением
- Непонятно, почему пользователи не завершают бронирование
- CAC $85, но конверсия всего 1.2%
Что сделали:
- Внедрили Umami за 10 минут
- Отследили воронку:
timeslot_selected→details_entered→booking_confirmed - Добавили отслеживание скролла на странице подтверждения
Что обнаружили через Umami:
Dashboard → Events → booking_funnel
Desktop:
- timeslot_selected: 1000 пользователей
- details_entered: 850 (85% конверсия)
- booking_confirmed: 780 (92% конверсия)
Mobile (60% трафика):
- timeslot_selected: 1500 пользователей
- details_entered: 720 (48% конверсия) ⚠️
- booking_confirmed: 450 (62% конверсия) ⚠️
Scroll depth на mobile: только 40% доскроливают до кнопки "Подтвердить"
Корневая причина: Кнопка подтверждения была слишком низко на мобильных устройствах, большинство пользователей её не видели.
Решение:
- Переместили кнопку "Подтвердить встречу" выше на mobile (above the fold)
- Добавили sticky bottom bar с кнопкой на мобильных
- A/B тест: старая версия vs новая
Результат:
Mobile конверсия:
- Было: 48% → 62% (общая 30%)
- Стало: 48% → 87% (общая 42%)
Прирост: +40% финальной конверсии
Дополнительно: +180 подтверждённых встреч/месяц
Выручка: +$18,000/месяц (средний чек $100)
ROI: 10 минут настройки Umami → $216,000/год дополнительной выручки
Case Study 2: B2B SaaS для документации
Компания: Notion-подобный инструмент для команд (50k пользователей)
Проблема:
- Trial-to-paid конверсия всего 8% (индустрия: 15-25%)
- Не знают, какие фичи действительно ценны для пользователей
- Pricing page имеет 3 плана, но непонятно, почему выбирают конкретный
Что сделали:
- Отслеживали каждое использование фичи:
feature_usedс параметромfeature_name - Связали использование фичей с конверсией в платные планы
- Отслеживали клики по pricing plans:
plan_selected
Что обнаружили через Umami:
Dashboard → Events → feature_used (за 30 дней)
Top фичи по использованию:
1. rich_text_editor: 45,000 использований
2. image_upload: 32,000
3. api_access: 8,000
4. real_time_collaboration: 28,000
5. export_pdf: 12,000
Корреляция с конверсией в paid (paid users / total users):
1. api_access: 64% конверсия (!) 🎯
2. export_pdf: 42%
3. real_time_collaboration: 28%
4. rich_text_editor: 12%
5. image_upload: 8%
Инсайт: Пользователи API конвертируются в 8 раз чаще остальных, но API был доступен только в самом дорогом плане ($99/месяц).
Решение:
- Изменили pricing structure:
- Добавили API access в средний план ($49/месяц)
- Сделали API лимитированным в базовом плане (100 requests/день)
- Переработали messaging на pricing page:
- Убрали фокус с "unlimited storage" (низкая корреляция)
- Добавили акцент на "API access" и "Integrations" (высокая корреляция)
- A/B тест новой pricing page
Результат:
Trial-to-paid конверсия:
- Было: 8%
- Стало: 19%
Средний чек:
- Было: $67 (60% basic, 35% mid, 5% enterprise)
- Стало: $73 (40% basic, 55% mid, 5% enterprise)
Прирост:
- Конверсия: +137%
- MRR: с $268k до $554k (+107%)
- Годовая выручка: +$3.4M
Cost of insight: $0 (Umami self-hosted)
Case Study 3: Платформа для разработчиков (Developer Tools)
Компания: Stripe-подобная платформа для платежей (100k developers)
Проблема:
- Высокий churn: 40% разработчиков бросают интеграцию на середине
- Support team перегружен однотипными вопросами
- Непонятно, где именно застревают разработчики
Что сделали:
- Отслеживали прохождение каждого шага документации:
docs_step_viewed - Отслеживали время на каждом шаге:
time_spent - Отслеживали переходы к support:
support_openedс параметромfrom_page
Что обнаружили через Umami:
Dashboard → Events → docs_step_viewed + support_opened
Integration funnel (воронка интеграции):
1. "Create account": 10,000 developers
2. "Get API keys": 9,200 (92%)
3. "Install SDK": 8,500 (92%)
4. "Initialize client": 7,200 (85%)
5. "Create first charge": 3,800 (53%) ⚠️ MAJOR DROP-OFF
6. "Handle webhooks": 3,200 (84%)
7. "Production deployment": 2,900 (91%)
Support tickets по шагам:
- "Create first charge": 1,200 tickets (32% всех обращений!)
- "Handle webhooks": 450 tickets
- Остальные шаги: <200 tickets каждый
Average time на "Create first charge": 45 минут (!)
Average time на другие шаги: 5-15 минут
Корневая причина: Шаг "Create first charge" был слишком сложным:
- Документация предполагала знание финансовых терминов (merchant account, settlement)
- Код примера требовал 3 разных API вызова подряд
- Не было визуального индикатора прогресса
Решение:
- Переписали документацию для шага 5:
- Убрали технический жаргон
- Добавили интерактивный code playground (можно запустить прямо в браузере)
- Разбили на micro-steps с чекбоксами прогресса
- Создали "Quick Start API":
- Один вызов вместо трёх для первого платежа (упрощённый flow для тестирования)
- Добавили видео-гайд (2 минуты) для этого шага
Результат:
Integration funnel после изменений:
5. "Create first charge": 7,800 из 8,500 (92% конверсия) ✅
Было: 53% → Стало: 92%
Прирост: +74% разработчиков завершают интеграцию
Support tickets:
- Было: 1,200/месяц по "Create first charge"
- Стало: 180/месяц (-85%)
Экономия на support:
- Среднее время на ticket: 30 минут
- Сэкономлено: 1,020 tickets × 30 мин = 510 часов/месяц
- Cost savings: ~$25,000/месяц (при средней зарплате support $50/час)
Retention:
- Было: 60% завершают интеграцию
- Стало: 85%
- Дополнительно: +2,500 активных клиентов/месяц
💡 Общие паттерны из кейсов
Что объединяет успешные внедрения:
- Быстрый старт — все компании внедрили базовое отслеживание за <1 часа
- Фокус на воронки — отслеживали не просто клики, а полный путь пользователя
- Mobile-first анализ — большинство проблем были на мобильных устройствах
- Связь с выручкой — каждое изменение считалось в деньгах, не в абстрактных метриках
- Итеративность — маленькие изменения каждую неделю, не один большой редизайн
Типичные находки:
- 🚨 70-90% проблем на mobile (desktop казался "хорошим", mobile убивал конверсию)
- 🚨 One broken step kills the funnel (один сложный шаг может потерять 50% пользователей)
- 🚨 "Важные" фичи часто не важны (то, что кажется ценным основателям ≠ то, что ценят пользователи)
Средний ROI внедрения аналитики:
Инвестиции:
- Время на настройку: 1-4 часа
- Стоимость Umami: $0-9/месяц
- Время на анализ: 2-4 часа/неделю
Возврат (средний по кейсам):
- Рост конверсии: +40-137%
- Экономия на support: $10k-25k/месяц
- Дополнительная выручка: $18k-280k/месяц
ROI: от 50x до 5000x в первые 3 месяца
Ключевой вывод: Не нужна огромная аудитория для value from analytics. Даже при 1000 пользователей/месяц можно найти bottleneck, который удваивает конверсию.
💸 Стоимость неведения: сколько вы теряете БЕЗ аналитики?
Жёсткая правда: Каждый день без аналитики = выброшенные деньги. Вы платите за трафик, который утекает через дыры, о которых даже не знаете.
Реальный расчёт потерь
Исходные данные (типичный B2B SaaS стартап):
- Трафик: 10,000 посетителей/месяц
- Текущая конверсия в trial: 2%
- Trial-to-paid: 25%
- LTV клиента: $500
- Маркетинговый бюджет: $3,000/месяц (CAC $120)
- Длительность воронки signup: 3 шага
💀 Сценарий: Летите вслепую (без аналитики)
Потеря 1: Не знаете, какая кнопка CTA работает
Что происходит:
- Ваша главная CTA: "Get Started"
- Конверсия: 2% (200 trials из 10,000)
- Trial-to-paid: 25% (50 клиентов)
- MRR: $2,500 (50 × $50/месяц)
Что вы НЕ видите без аналитики:
- A/B тест показал бы: "Try 14 days free" → 5% конверсия (в 2.5x лучше!)
- Потеря: 150 дополнительных клиентов/месяц
- Упущенная выручка: $3,750/месяц
- Годовая потеря: $45,000
Потеря 2: Не видите, какие каналы неэффективны
Что происходит:
- Бюджет распределён равномерно:
- Google Ads: $1,000 → 15 клиентов (CAC $67)
- Facebook Ads: $1,000 → 5 клиентов (CAC $200)
- LinkedIn Ads: $1,000 → 5 клиентов (CAC $200)
- Средний CAC: $120
Что вы НЕ видите без UTM tracking:
С аналитикой (после 1 месяца данных):
- Удвоить Google Ads: $2,000 → 30 клиентов
- Убрать Facebook: $0
- Убрать LinkedIn: $0
- Добавить Content Marketing: $1,000 → 20 клиентов (органика)
Результат:
- Клиентов: 50 вместо 25
- Средний CAC: $60 вместо $120
- Сэкономлено: $60 × 50 = $3,000/месяц
Упущенная выручка + экономия: $6,000/месяц
Годовая потеря: $72,000
Потеря 3: Не отслеживаете drop-off в воронке signup
Что происходит:
- Signup воронка: Email → Password → Payment
- Общая конверсия: 2% (200 trials из 10,000)
Вы НЕ знаете:
Реальная воронка (видна только с аналитикой):
Step 1 (Email): 10,000 → 8,000 (80%) ✅ OK
Step 2 (Password): 8,000 → 2,000 (25%) ❌ MAJOR DROP
Step 3 (Payment): 2,000 → 200 (10%) ⚠️ Нужно улучшить
Без аналитики: конверсия 2%
С аналитикой (исправили Step 2): конверсия 6%
Что вы теряете:
- Было: 200 trials
- Могло быть: 600 trials (после фикса Step 2)
- Дополнительно: 400 trials × 25% = 100 платящих клиентов
- Упущенная выручка: $5,000/месяц
- Годовая потеря: $60,000
Реальный пример что было сломано:
- Требования к паролю: минимум 12 символов + спецсимволы + цифры
- Пользователи не могли придумать пароль → уходили
- Простое исправление: снизить требования до 8 символов
- Стоимость фикса: 5 минут
- Возврат: $60k/год
Потеря 4: Не оптимизируете производительность (Core Web Vitals)
Что происходит:
- LCP (загрузка страницы): 4.2 секунды на mobile
- Вы не знаете об этом, потому что desktop кажется быстрым
- 60% трафика с mobile
Данные Google:
- Улучшение LCP с 4s до 2.5s = +7% конверсия
Что вы теряете:
- Текущая конверсия mobile: 1.5% (из-за медленной загрузки)
- Могла быть: 1.5% × 1.07 = 1.6% (консервативно)
- Дополнительно: 0.1% × 6,000 mobile visitors = 6 trials/месяц
- Trial-to-paid: 25% = 1.5 платящих клиентов
- Упущенная выручка: $75/месяц (кажется мало, но это только LCP!)
На самом деле потеря больше:
Реальные данные показывают: улучшение всех Core Web Vitals (LCP + INP + CLS) → +15-25% конверсия на mobile.
- Консервативно: +15% конверсия на mobile
- Было: 90 trials с mobile (1.5% × 6,000)
- Стало: 103 trials (+13 trials)
- Упущенная выручка: $162/месяц
- Годовая потеря: $1,944
Потеря 5: Не отслеживаете ошибки на продакшене
Что происходит:
- У 5% пользователей payment form не работает (JavaScript error)
- Они пытаются оплатить → ошибка → уходят
- Вы не знаете, потому что не отслеживаете
payment_failed
Что вы теряете:
- Попыток оплаты: 200/месяц
- Провалов из-за бага: 10/месяц (5%)
- Упущенная выручка: $500/месяц
- Годовая потеря: $6,000
Как долго этот баг живёт?
Без аналитики: 3-6 месяцев (пока не накопится много жалоб в support)
С аналитикой: 1 день (сразу видно spike в payment_failed)
Реальная потеря: $1,500 - $3,000 (за время существования бага)
📊 Итоговая таблица потерь
| Слепая зона (что вы НЕ видите без аналитики) | Консервативная потеря/месяц | Годовая потеря |
|---|---|---|
| Не A/B тестите CTA (текущая 2%, могла быть 5%) | $3,750 | $45,000 |
| Не знаете ROI каналов (CAC $120 вместо $60) | $6,000 | $72,000 |
| Не видите drop-off воронки (теряете 75% на шаге 2) | $5,000 | $60,000 |
| Не оптимизируете скорость (LCP 4s вместо 2.5s) | $162 | $1,944 |
| Не видите production баги (5% payment errors) | $500 | $6,000 |
| ИТОГО | $15,412/месяц | $184,944/год |
$185k потерянной выручки в год для стартапа с всего лишь 10k посетителей/месяц.
Стоимость внедрения Umami: 10 минут времени + $0 (self-hosted)
ROI: ∞ (бесконечность)
🔥 Реальная история: "Мы думали, всё работает нормально"
Компания: SaaS для HR-автоматизации (25k посетителей/месяц)
Ситуация:
- 18 месяцев работы БЕЗ аналитики
- Основатель: "У нас есть клиенты, растём медленно но стабильно"
- MRR: $8,000
Что произошло после внедрения Umami (неделя 1):
День 1: Установили Umami
День 2: Добавили события signup_funnel
День 3: ОФИГЕЛИ
Данные показали:
- Signup: 500 попыток/месяц
- Completed: 50 signups (10% конверсия)
- Payment: 25 клиентов (50% trial-to-paid)
Где теряли 90% пользователей:
- Step 1: CAPTCHA была слишком сложная (80% не могли пройти!!!)
- Решение: убрали CAPTCHA, добавили honeypot
Результат через месяц:
Signup конверсия: 10% → 45%
Новых клиентов: 25 → 112 (+348%)
MRR: $8,000 → $24,640
За 18 месяцев БЕЗ аналитики потеряли:
~$250,000 упущенной выручки
Основатель (после):
"Я был идиот. Потерял четверть миллиона долларов из-за одной сломанной CAPTCHA, о которой даже не знал. Внедрение аналитики заняло 10 минут. Самые дорогие 10 минут, которые я откладывал."
💡 Контр-интуитивная правда
Чем меньше ваш трафик → тем ВАЖНЕЕ аналитика
Почему:
При 100,000 посетителей/месяц:
- Конверсия 2% vs 5% = разница 3,000 клиентов
- У вас много данных, проблемы "всплывают" сами
При 1,000 посетителей/месяц:
- Конверсия 2% vs 5% = разница 30 клиентов
- Но это +150% роста!
- Без аналитики не поймёте, что можно утроить выручку
Правило: Если у вас <10k visitors/месяц → аналитика критична.
Потому что: Каждый потерянный клиент = огромный % от выручки.
⚡ Быстрый тест: Теряете ли ВЫ деньги прямо сейчас?
Ответьте честно:
- Я НЕ знаю точную конверсию каждого шага signup воронки
- Я НЕ знаю CAC по каждому маркетинговому каналу
- Я НЕ знаю, сколько пользователей бросают из-за ошибок на сайте
- Я НЕ знаю, какая версия CTA текста работает лучше
- Я НЕ знаю, какие фичи используют пользователи, которые конвертируются
- Я НЕ знаю LCP моего сайта на mobile
Если хотя бы 1 галочка:
→ Вы теряете минимум $10k-50k/год (для <10k visitors)
→ Вы теряете $50k-200k/год (для 10k-50k visitors)
→ Вы теряете $200k+/год (для >50k visitors)
🎯 Что делать ПРЯМО СЕЙЧАС
Стоп-сигнал: Не читайте дальше, пока не установите Umami.
Серьёзно. Каждый день промедления = выброшенные деньги.
5 минут сейчас = $15k-185k спасённых в год.
Переходите к разделу "Быстрый старт" ниже и внедряйте СЕГОДНЯ.
🚀 Как пользоваться этим гайдом
Два пути обучения
Путь А: Быстрый старт (5 минут) — для нетехнических основателей и MVP
Путь Б: Продвинутая настройка (45 минут) — для технических команд и продуктовых проектов
Выбери свой путь:
- 🟢 Путь А (рекомендуется для начала): Umami Cloud → скопировать script-тег → вставить в сайт → готово за 5 минут
- 🔵 Путь Б (для технических команд): Self-hosted Umami → Docker → кастомные события → Core Web Vitals → полный контроль
Структура гайда:
- Быстрый старт (5 мин) → базовая аналитика работает
- Бизнес-метрики (15 мин) → отслеживание ключевых событий
- Анализ данных (10 мин) → красные/зелёные флаги, когда действовать
- Продвинутые техники (15 мин) → A/B тесты, воронки, API
- План на неделю → конкретные шаги для быстрого ROI
Часть 1: Быстрый старт (5 минут)
🎯 Проблема
Вы запустили продукт, но не знаете:
- Сколько людей приходит на сайт?
- Откуда они?
- Где уходят?
- Какие страницы работают, а какие нет?
Последствия: Принимаете решения вслепую → теряете деньги на неэффективном маркетинге и плохом UX.
💡 Решение: Umami за 5 минут
Важно: Даже базовая аналитика (просмотры страниц + источники трафика) уже даст вам 80% пользы. Не усложняйте на старте!
Шаг 1: Регистрация в Umami Cloud (2 минуты)
Путь А: Umami Cloud (рекомендуется для MVP)
- Перейди на cloud.umami.is
- Зарегистрируйся (email + пароль)
- Создай сайт: Add Website → введи домен → получи Website ID
- Скопируй tracking script:
<script
async
src="https://cloud.umami.is/script.js"
data-website-id="твой-website-id"
></script>Стоимость: Бесплатно до 100k событий/месяц (хватит для большинства MVP), потом $9/месяц.
🔧 Путь Б: Self-hosted (для продвинутых)
Требования: Docker установлен, доступ к серверу
# docker-compose.yml
version: "3"
services:
umami:
image: ghcr.io/umami-software/umami:postgresql-latest
ports:
- "3000:3000"
environment:
DATABASE_URL: postgresql://umami:password@db:5432/umami
DATABASE_TYPE: postgresql
APP_SECRET: your-random-secret-key-min-32-chars
depends_on:
- db
db:
image: postgres:15-alpine
environment:
POSTGRES_DB: umami
POSTGRES_USER: umami
POSTGRES_PASSWORD: password
volumes:
- umami-db:/var/lib/postgresql/data
volumes:
umami-db:Запуск:
docker-compose up -d
# Открой http://localhost:3000
# Логин: admin, пароль: umamiСтоимость: $0 (только сервер ~$5/месяц на DigitalOcean/Hetzner)
Шаг 2: Установка скрипта на сайт (3 минуты)
Для Next.js приложения:
- Создай переменные окружения (
.env.local):
NEXT_PUBLIC_UMAMI_WEBSITE_ID=твой-website-id
NEXT_PUBLIC_UMAMI_URL=https://cloud.umami.is- Добавь скрипт в
app/layout.tsx:
📦 Код для Next.js App Router (кликни, чтобы раскрыть)
import Script from "next/script";
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="ru">
<head>
{/* Umami Analytics */}
{process.env.NEXT_PUBLIC_UMAMI_WEBSITE_ID && (
<Script
async
src={`${process.env.NEXT_PUBLIC_UMAMI_URL}/script.js`}
data-website-id={process.env.NEXT_PUBLIC_UMAMI_WEBSITE_ID}
strategy="afterInteractive"
/>
)}
</head>
<body>{children}</body>
</html>
);
}Для обычного HTML сайта:
Вставь скрипт перед закрывающим тегом </head>:
<!doctype html>
<html>
<head>
<title>Мой сайт</title>
<script
async
src="https://cloud.umami.is/script.js"
data-website-id="твой-website-id"
></script>
</head>
<body>
<!-- контент -->
</body>
</html>Шаг 3: Проверка (30 секунд)
- Открой сайт в браузере
- Открой DevTools (F12) → вкладка Network
- Найди запрос к
script.js— должен быть статус 200 OK - Открой Umami dashboard → Realtime → ты должен увидеть себя как активного пользователя
✅ Готово! Umami автоматически отслеживает:
- Просмотры страниц
- Источники трафика (откуда пришли)
- Устройства (Desktop/Mobile/Tablet)
- География (страны/города)
- Браузеры и ОС
📈 Что теперь смотреть в dashboard
Открой Umami Dashboard → вкладки:
- Overview — общая картина за период (день/неделя/месяц)
- Pageviews — сколько раз открыли страницы
- Visitors — уникальные посетители
- Bounce rate — % пользователей, которые ушли сразу
- Average time — среднее время на сайте
- Realtime — кто на сайте прямо сейчас
- Pages — какие страницы популярны
- Referrers — откуда приходят пользователи
- Devices — Desktop vs Mobile
- Countries — география
🚨 Красный флаг (срочно исправлять):
- Bounce rate > 70% на главной странице
- Average time < 30 секунд
- 90%+ трафика с одного источника (риск зависимости)
💚 Зелёный флаг (масштабировать):
- Bounce rate < 40%
- Average time > 3 минуты
- Разнообразие источников трафика
Часть 2: Отслеживание бизнес-метрик (15 минут)
🎯 Проблема
Базовая аналитика показывает что происходит, но не почему и что с этим делать.
Пример:
- Вы видите: 1000 посетителей на странице
/pricing - Вы НЕ видите: сколько кликнули на кнопку "Buy Now"?
Последствия: Не знаете, работает ли ваш CTA, какая feature привлекает, где теряете пользователей в воронке.
💡 Решение: Кастомные события
Что отслеживать обязательно (минимум):
- Клики по CTA (Call-to-Action кнопки)
- Отправка форм (регистрация, контакты, оплата)
- Ключевые действия (скачивание, просмотр видео, клик на pricing)
Готовые компоненты для типовых сценариев
🟢 Сценарий 1: Отслеживание кликов по CTA (конверсионные кнопки)
Бизнес-задача: Узнать, какие кнопки работают, а какие игнорируют.
📦 Готовый компонент CTAButton (React/Next.js)
"use client";
interface CTAButtonProps {
children: React.ReactNode;
href: string;
location: string; // hero_section, pricing_page, footer
variant?: "primary" | "secondary";
}
export function CTAButton({
children,
href,
location,
variant = "primary",
}: CTAButtonProps) {
const handleClick = () => {
// Отслеживаем бизнес-метрику: клик по CTA
window.umami?.track("cta_clicked", {
button_location: location,
button_text: String(children),
button_variant: variant,
target_url: href,
});
};
return (
<a href={href} onClick={handleClick} className={`btn-${variant}`}>
{children}
</a>
);
}
// Использование:
// <CTAButton href="/signup" location="hero_section">Начать бесплатно</CTAButton>Что отслеживается:
button_location— где находится кнопка (hero, pricing, footer)button_text— текст кнопки (для A/B тестов)target_url— куда ведёт
Как анализировать:
Dashboard → Events → cta_clicked → фильтр button_location: hero_section
Видишь: 1000 показов страницы, 120 кликов по CTA
CTR = 120/1000 = 12%
Если CTR < 5% → проблема с кнопкой (текст, цвет, расположение)
Если CTR > 15% → отлично работает, можно масштабировать
🟢 Сценарий 2: Воронка регистрации (signup flow)
Бизнес-задача: Где теряем пользователей в процессе регистрации?
📦 Готовый компонент SignupTracker
"use client";
import { useState } from "react";
export function SignupForm() {
const [step, setStep] = useState(1);
const trackStep = (stepNumber: number, stepName: string) => {
window.umami?.track("signup_funnel", {
step: stepNumber,
step_name: stepName,
timestamp: Date.now(),
});
};
const handleEmailSubmit = (email: string) => {
trackStep(1, "email_entered");
setStep(2);
};
const handlePasswordSubmit = (password: string) => {
trackStep(2, "password_created");
setStep(3);
};
const handleProfileComplete = (profile: any) => {
trackStep(3, "profile_completed");
// Финальный шаг
window.umami?.track("signup_completed", {
total_time: Date.now() - startTime,
});
};
return (
<div>
{step === 1 && <EmailStep onSubmit={handleEmailSubmit} />}
{step === 2 && <PasswordStep onSubmit={handlePasswordSubmit} />}
{step === 3 && <ProfileStep onSubmit={handleProfileComplete} />}
</div>
);
}Анализ воронки:
Dashboard → Events → signup_funnel → группировка по step_name
Шаг 1 (email): 1000 пользователей
Шаг 2 (password): 650 пользователей (конверсия 65%)
Шаг 3 (profile): 400 пользователей (конверсия 61%)
Completed: 380 пользователей (конверсия 95%)
❌ Проблема: между step 1 и 2 теряем 35% пользователей
💡 Гипотеза: форма пароля слишком сложная (требования к паролю)
✅ Действие: упростить требования → A/B тест
🟢 Сценарий 3: Отслеживание стоимости привлечения (CAC tracking)
Бизнес-задача: Какие каналы приводят платящих клиентов дешевле?
📦 Компонент для трекинга CAC с UTM-метками
"use client";
import { useEffect } from "react";
import { useSearchParams } from "next/navigation";
export function CACTracker() {
const searchParams = useSearchParams();
useEffect(() => {
// Получаем UTM-параметры из URL
const utm_source = searchParams.get("utm_source");
const utm_campaign = searchParams.get("utm_campaign");
const utm_medium = searchParams.get("utm_medium");
if (utm_source) {
// Отслеживаем источник трафика
window.umami?.track("campaign_visit", {
source: utm_source,
campaign: utm_campaign,
medium: utm_medium,
landing_page: window.location.pathname,
});
// Сохраняем в localStorage для отслеживания конверсии
localStorage.setItem(
"acquisition_source",
JSON.stringify({ utm_source, utm_campaign, utm_medium })
);
}
}, [searchParams]);
return null;
}
// При покупке/регистрации:
function trackConversion() {
const source = JSON.parse(localStorage.getItem("acquisition_source") || "{}");
window.umami?.track("conversion_completed", {
...source,
conversion_type: "paid_plan",
price: 99, // цена плана
});
}Пример URL с UTM-метками:
https://yoursite.com/?utm_source=facebook&utm_campaign=q4_sale&utm_medium=cpc
https://yoursite.com/?utm_source=google&utm_campaign=brand_keywords&utm_medium=cpc
https://yoursite.com/?utm_source=newsletter&utm_campaign=weekly&utm_medium=email
Анализ ROI каналов:
Dashboard → Events → campaign_visit + conversion_completed
Facebook Ads:
- Посетителей: 500
- Конверсий: 10
- Цена клика: $2
- CAC = (500 × $2) / 10 = $100
Google Ads:
- Посетителей: 300
- Конверсий: 15
- Цена клика: $3
- CAC = (300 × $3) / 15 = $60
✅ Действие: увеличить бюджет на Google Ads, уменьшить на Facebook
💰 Результат: экономия $40 на каждом клиенте
🟢 Сценарий 4: Отслеживание вовлечённости (engagement tracking)
Бизнес-задача: Кто реально пользуется продуктом, а кто просто зашёл и ушёл?
📦 Компонент для отслеживания глубины скролла и времени
"use client";
import { useEffect, useRef, useState } from "react";
export function EngagementTracker({
contentType = "article",
}: {
contentType?: string;
}) {
const [scrollMilestones, setScrollMilestones] = useState({
25: false,
50: false,
75: false,
100: false,
});
const startTime = useRef(Date.now());
useEffect(() => {
const trackScroll = () => {
const scrolled = window.scrollY;
const height = document.documentElement.scrollHeight - window.innerHeight;
const progress = Math.round((scrolled / height) * 100);
// Отслеживаем вехи
[25, 50, 75, 100].forEach((milestone) => {
if (progress >= milestone && !scrollMilestones[milestone]) {
window.umami?.track("content_engagement", {
content_type: contentType,
milestone: `${milestone}%`,
time_to_milestone: Math.round(
(Date.now() - startTime.current) / 1000
),
page: window.location.pathname,
});
setScrollMilestones((prev) => ({ ...prev, [milestone]: true }));
}
});
};
window.addEventListener("scroll", trackScroll, { passive: true });
return () => window.removeEventListener("scroll", trackScroll);
}, [scrollMilestones, contentType]);
// Отслеживаем время на странице при уходе
useEffect(() => {
return () => {
const timeSpent = Math.round((Date.now() - startTime.current) / 1000);
if (timeSpent > 10) {
// только если > 10 секунд
window.umami?.track("page_time_spent", {
content_type: contentType,
time_seconds: timeSpent,
page: window.location.pathname,
});
}
};
}, [contentType]);
return null;
}
// Использование:
// <EngagementTracker contentType="blog_post" />Анализ вовлечённости:
Dashboard → Events → content_engagement
Статья A:
- 50% скролл: 800 пользователей
- 100% скролл: 200 пользователей
- Completion rate: 25%
Статья B:
- 50% скролл: 600 пользователей
- 100% скролл: 450 пользователей
- Completion rate: 75%
✅ Статья B — высокая ценность, продвигать
❌ Статья A — переработать или удалить
Privacy note: Не отслеживайте персональные данные (email, имена, телефоны,
IP-адреса) в событиях. Umami privacy-friendly — не нарушайте этот принцип.
Используйте только агрегированные метрики: user_tier: 'enterprise' (не
email), session_duration: 120 (не конкретные действия пользователя).
Часть 3: Анализ данных — красные и зелёные флаги
🎯 Проблема
Вы собираете данные, но не знаете:
- Что считается "хорошим" или "плохим"?
- Когда нужно срочно действовать?
- Где скрыты возможности роста?
💡 Решение: Система красных/зелёных флагов
🚨 Красные флаги (требуют немедленных действий)
| Метрика | Красный флаг | Что это означает | Что делать |
|---|---|---|---|
| Bounce Rate | > 70% на главной | Посетители не находят то, что ищут | A/B тест заголовков, проверить соответствие рекламы и контента |
| Bounce Rate | > 90% на landing page | Критическая проблема: траффик не целевой или страница сломана | Срочно: проверить мобильную версию, скорость загрузки, соответствие объявлению |
| LCP (Largest Contentful Paint) | > 4 секунды | Теряете 50%+ мобильных пользователей из-за медленной загрузки | Оптимизация изображений, CDN, удаление блокирующих скриптов |
| CLS (Cumulative Layout Shift) | > 0.25 | Элементы "прыгают" → пользователи кликают не туда → фрустрация | Зафиксировать размеры изображений, зарезервировать место для динамического контента |
| INP (Interaction to Next Paint) | > 500ms | Интерфейс "тормозит" → плохой UX | Оптимизировать обработчики событий, уменьшить JS bundle |
| Конверсия signup | < 1% при платном трафике | Тратите деньги впустую, CAC слишком высокий | Переработать форму регистрации, добавить social proof, упростить процесс |
| Конверсия CTA | < 2% на главной | Кнопка незаметна или не мотивирует | Изменить текст/цвет/размер кнопки, добавить urgency ("Осталось 3 места") |
| Время на pricing page | < 20 секунд | Пользователи не понимают ценность или цены слишком высокие | Упростить pricing, добавить сравнение планов, FAQ |
| Drop-off в середине signup воронки | > 50% между шагами | Форма слишком сложная или запрашивает слишком много данных | Уменьшить кол-во полей, сделать опциональными, показать прогресс |
| 90%+ трафика с одного источника | Критическая зависимость | Если канал закроется/подорожает — бизнес рухнет | Диверсифицировать каналы: SEO, organic social, partnerships |
| CAC (Customer Acquisition Cost) > LTV × 0.33 | Неустойчивая экономика юнита | Тратите на привлечение больше, чем зарабатываете (правило: CAC ≤ LTV/3) | Повысить retention, увеличить LTV через upsell, снизить CAC через оптимизацию конверсии |
| Время до первой ценности (Time to Value) > 5 мин | Пользователи бросают на onboarding | Не понимают, как пользоваться продуктом | Интерактивный туториал, quick wins в первые 60 секунд |
💚 Зелёные флаги (масштабировать и инвестировать)
| Метрика | Зелёный флаг | Что это означает | Что делать |
|---|---|---|---|
| Bounce Rate | < 40% на ключевых страницах | Контент релевантен и интересен | Создать больше похожего контента, масштабировать эту тематику |
| Время на странице | > 3 минуты на blog/docs | Высокая вовлечённость, контент ценный | Добавить CTA в конце статьи, предложить related content |
| Completion rate (100% scroll) | > 60% на landing page | Пользователи читают до конца → высокая мотивация | Разместить основной CTA в конце + дублировать вверху для нетерпеливых |
| Конверсия signup | > 5% на бесплатный продукт | Сильный value proposition | Масштабировать трафик на эту страницу, увеличить рекламный бюджет |
| Конверсия signup | > 2% на платный продукт | Цена воспринимается как справедливая | Тестировать повышение цены (elasticity test), добавить премиум план |
| LCP < 2.5s, CLS < 0.1, INP < 200ms | Все Core Web Vitals "good" | Отличная производительность → лучше SEO + UX | Поддерживать этот уровень, использовать как конкурентное преимущество |
| Retention > 40% через 30 дней | Высокая ценность продукта | Пользователи видят пользу и возвращаются | Фокус на монетизацию активных пользователей, добавить paid features |
| CAC < LTV × 0.20 | Здоровая экономика юнита | Зарабатываете в 5+ раз больше, чем тратите на привлечение | Агрессивно увеличить маркетинговый бюджет, масштабировать работающие каналы |
| Virality coefficient (K) > 1.0 | Органический рост | Каждый пользователь приводит >1 нового пользователя | Инвестировать в referral программу, улучшать sharing механики |
| NPS (Net Promoter Score) > 50 | Пользователи рекомендуют | Сильный word-of-mouth потенциал | Запустить affiliate/referral программу, просить отзывы/кейсы |
| Conversion из trial в paid > 25% | Trial работает отлично | Пользователи видят ценность за период trial | Сократить trial период (чтобы быстрее конвертировать), добавить onboarding emails |
| Разнообразие источников трафика (top 3 < 60%) | Устойчивая диверсификация | Не зависите от одного канала | Продолжать развивать все каналы равномерно |
🍳 Рецепты исправления: от метрики к действию
Рецепт 1: Высокий Bounce Rate (>70%)
Симптомы:
- Пользователи уходят за 15 секунд
- Низкое время на странице
Диагностика в Umami:
- Dashboard → Pages → выбери страницу
- Посмотри Devices → если на Mobile >80% → проблема в мобильной версии
- Посмотри Sources → если из Facebook/Ads → проверь соответствие объявления и landing page
Быстрые решения:
- Проверь загрузку: Google PageSpeed Insights
- Убери отвлекающие элементы: лишние pop-ups, сложные формы
- Добавь социальное доказательство: отзывы, логотипы клиентов
- Упрости CTA: одна чёткая кнопка вместо 5 вариантов
A/B тесты для запуска:
- Вариант A: текущий дизайн
- Вариант B: упрощённая версия с одной CTA кнопкой
Рецепт 2: Низкая конверсия форм (<2%)
Диагностика:
- Events → form_submission → посмотри воронку
- Проверь, на каком поле бросают (если отслеживаешь по шагам)
Быстрые решения:
- Уменьши количество полей с 10 до 3-5
- Добавь прогресс-бар для многошаговых форм
- Используй умолчания (страна, валюта)
- Добавь социальный логин (Google, Facebook)
Пример до/после:
Было: Имя, Фамилия, Email, Телефон, Компания, Должность, Пароль, Подтверждение пароля
Стало: Email, Пароль, "Продолжить через Google"
Примеры реальных решений на основе данных
Кейс 1: Высокий bounce rate на pricing странице
Данные из Umami:
Страница: /pricing
Bounce rate: 78%
Среднее время: 15 секунд
События cta_clicked: 22 из 1000 (2.2% CTR)
Анализ:
- Пользователи приходят, но быстро уходят
- Низкий CTR на кнопки → кнопки не мотивируют или не видны
Действия:
- Гипотеза 1: Кнопка "Buy Now" слишком низко, пользователи не доскроливают
- A/B тест: Переместить кнопку выше (above the fold)
- Гипотеза 2: Цены кажутся высокими без контекста
- A/B тест: Добавить калькулятор ROI ("Вы сэкономите $X/месяц")
- Гипотеза 3: Нет social proof
- A/B тест: Добавить отзывы и логотипы клиентов рядом с ценами
Результат после внедрения:
Bounce rate: 78% → 52% (улучшение на 33%)
CTR на CTA: 2.2% → 6.8% (рост в 3 раза)
Конверсия в продажи: +$4,200 дополнительной выручки/месяц
Кейс 2: Низкая конверсия signup воронки
Данные из Umami:
signup_funnel:
- Шаг 1 (email): 1000 пользователей
- Шаг 2 (password): 450 пользователей (-55%)
- Шаг 3 (profile): 380 пользователей (-15%)
- Completed: 360 пользователей (-5%)
Общая конверсия: 36%
Анализ:
- Основная потеря между шагом 1 и 2 → проблема с паролем
Действия:
- Упростить требования к паролю (было: 12 символов + спецсимволы → стало: 8 символов)
- Добавить "Войти через Google" как альтернативу паролю
- Показать прогресс-бар ("Шаг 2 из 3") для мотивации
Результат:
signup_funnel после изменений:
- Шаг 1 (email): 1000 пользователей
- Шаг 2 (password/google): 780 пользователей (-22%)
- Шаг 3 (profile): 720 пользователей (-8%)
- Completed: 680 пользователей (-5%)
Общая конверсия: 68% (было 36%, рост на 89%)
Кейс 3: Оптимизация маркетингового бюджета по CAC
Данные из Umami (UTM tracking):
Канал: Facebook Ads (utm_source=facebook)
- Посетителей: 2,000
- Конверсий: 15
- Стоимость: $4,000
- CAC: $266
Канал: Google Search (utm_source=google)
- Посетителей: 800
- Конверсий: 32
- Стоимость: $2,400
- CAC: $75
Канал: Email Newsletter (utm_source=newsletter)
- Посетителей: 500
- Конверсий: 25
- Стоимость: $0 (органика)
- CAC: $0
Действия:
- Сократить бюджет Facebook Ads с $4k до $1k/месяц (CAC слишком высокий)
- Увеличить бюджет Google Search Ads с $2.4k до $5k/месяц (лучший CAC)
- Инвестировать в email контент (удвоить частоту писем, нанять контент-райтера)
Результат через месяц:
Facebook Ads: $1k → 5 конверсий (CAC $200)
Google Search: $5k → 66 конверсий (CAC $76)
Email: $500 (райтер) → 40 конверсий (CAC $12.5)
Итого:
- Было: 72 конверсии за $6,400 (средний CAC $89)
- Стало: 111 конверсий за $6,500 (средний CAC $59)
Результат: +54% конверсий при том же бюджете
Часть 4: Продвинутые техники
A/B тестирование
📦 Готовый компонент для A/B тестов
"use client";
import { useEffect, useState } from "react";
export function ABTestHero() {
const [variant, setVariant] = useState<"control" | "variant_a" | "variant_b">(
"control"
);
useEffect(() => {
// Случайное распределение по вариантам
const variants = ["control", "variant_a", "variant_b"] as const;
const selectedVariant =
variants[Math.floor(Math.random() * variants.length)];
setVariant(selectedVariant);
// Отслеживаем показ варианта
window.umami?.track("ab_test_shown", {
test_name: "hero_cta_text",
variant: selectedVariant,
});
}, []);
const handleCTAClick = () => {
// Отслеживаем конверсию
window.umami?.track("ab_test_conversion", {
test_name: "hero_cta_text",
variant: variant,
});
};
const ctaTexts = {
control: "Начать бесплатно",
variant_a: "Попробуйте 14 дней бесплатно",
variant_b: "Получить бесплатный доступ",
};
return (
<section>
<h1>Автоматизируйте свой бизнес</h1>
<button onClick={handleCTAClick}>{ctaTexts[variant]}</button>
</section>
);
}Анализ результатов A/B теста:
Dashboard → Events → ab_test_shown + ab_test_conversion
Control ("Начать бесплатно"):
- Показов: 1,000
- Конверсий: 45
- CTR: 4.5%
Variant A ("Попробуйте 14 дней бесплатно"):
- Показов: 980
- Конверсий: 78
- CTR: 7.96% 🎯 WINNER!
Variant B ("Получить бесплатный доступ"):
- Показов: 1,020
- Конверсий: 52
- CTR: 5.1%
✅ Действие: внедрить Variant A для всех пользователей
📈 Ожидаемый рост конверсии: +77% (с 4.5% до 7.96%)
Мониторинг производительности (Core Web Vitals)
Зачем: Google использует Core Web Vitals как ranking factor. Медленный сайт = меньше трафика из поиска + хуже конверсия.
Данные Google:
- Улучшение LCP с 4s до 2.5s → +7% конверсия
- CLS < 0.1 → -20% bounce rate
📦 Готовый компонент WebVitalsReporter (для разработчиков)
"use client";
import { useEffect, useRef } from "react";
import { onLCP, onINP, onCLS, onFCP, onTTFB } from "web-vitals";
export function WebVitalsReporter() {
const registered = useRef(false);
useEffect(() => {
if (registered.current) return;
registered.current = true;
const reportMetric = (metric: any) => {
const rating =
metric.value <= getGoodThreshold(metric.name)
? "good"
: metric.value <= getNeedsImprovementThreshold(metric.name)
? "needs-improvement"
: "poor";
window.umami?.track("web_vitals", {
metric: metric.name,
value: Math.round(metric.value),
rating: rating,
page: window.location.pathname,
});
};
onLCP(reportMetric);
onINP(reportMetric);
onCLS(reportMetric);
onFCP(reportMetric);
onTTFB(reportMetric);
}, []);
return null;
}
function getGoodThreshold(metric: string) {
const thresholds: Record<string, number> = {
LCP: 2500,
INP: 200,
CLS: 0.1,
FCP: 1800,
TTFB: 800,
};
return thresholds[metric] || 0;
}
function getNeedsImprovementThreshold(metric: string) {
const thresholds: Record<string, number> = {
LCP: 4000,
INP: 500,
CLS: 0.25,
FCP: 3000,
TTFB: 1800,
};
return thresholds[metric] || 0;
}Установка:
npm install web-vitalsАнализ Core Web Vitals:
Dashboard → Events → web_vitals → фильтр metric: LCP
Распределение LCP:
- good (≤2.5s): 45% пользователей
- needs-improvement (2.5-4s): 30%
- poor (>4s): 25%
❌ 25% пользователей видят медленную загрузку
✅ Действие: оптимизировать изображения на главной странице
Программный доступ к данным (API)
Применение: Построить дашборд метрик в админке, автоматические отчёты в Slack, интеграция с CRM.
📦 Пример: получение статистики через API
// lib/umami-api.ts
const UMAMI_API = process.env.UMAMI_API_URL || "https://cloud.umami.is/api";
const WEBSITE_ID = process.env.UMAMI_WEBSITE_ID;
const API_TOKEN = process.env.UMAMI_API_TOKEN;
export async function getRealtimeStats() {
const response = await fetch(`${UMAMI_API}/websites/${WEBSITE_ID}/stats`, {
headers: {
Authorization: `Bearer ${API_TOKEN}`,
"Content-Type": "application/json",
},
next: { revalidate: 60 }, // Cache 1 min
});
return response.json();
}
// Использование в Server Component
export async function DashboardStats() {
const stats = await getRealtimeStats();
return (
<div className="stats-grid">
<StatCard
title="Сегодня посетителей"
value={stats.visitors.value}
change={stats.visitors.change}
/>
<StatCard
title="Просмотров страниц"
value={stats.pageviews.value}
change={stats.pageviews.change}
/>
<StatCard
title="Bounce Rate"
value={`${stats.bounces.value}%`}
change={stats.bounces.change}
/>
</div>
);
}Часть 5: План внедрения на неделю
🗓️ День 1 (понедельник): Базовая настройка
Цель: Umami работает, данные собираются
- Зарегистрироваться в Umami Cloud или поднять self-hosted
- Добавить script на сайт
- Проверить, что pageviews отслеживаются
- Изучить базовые метрики в dashboard (30 мин)
Результат: Видите трафик, источники, bounce rate
🗓️ День 2 (вторник): Приоритетные события
Цель: Отслеживаем 3 самых важных события
- Определить 3 ключевых конверсионных действия (пример: клик CTA, signup, purchase)
- Добавить
umami.track()для этих событий - Протестировать события (открыть сайт, совершить действие, проверить в Events)
Результат: Видите конверсионную воронку в цифрах
🗓️ День 3 (среда): UTM-метки для рекламы
Цель: Понять, какие каналы работают
- Создать UTM-метки для всех активных кампаний (используй utm.io)
- Обновить ссылки в рекламе/email/social media
- Добавить
CACTrackerкомпонент (из раздела 2)
Пример UTM-ссылок:
Facebook Ads: ?utm_source=facebook&utm_medium=cpc&utm_campaign=q4_promo
Google Ads: ?utm_source=google&utm_medium=cpc&utm_campaign=brand_search
Email: ?utm_source=newsletter&utm_medium=email&utm_campaign=weekly_digest
Результат: Можете посчитать CAC по каждому каналу
🗓️ День 4 (четверг): Анализ и первые выводы
Цель: Найти 1 красный флаг и исправить
- Проверить все красные флаги из таблицы (раздел 3)
- Выбрать 1 самую критичную проблему
- Сформулировать гипотезу, как исправить
- Запланировать A/B тест или быстрое изменение
Пример:
🚨 Красный флаг: Bounce rate 75% на /pricing
💡 Гипотеза: Цены кажутся высокими без контекста
✅ Действие: Добавить калькулятор ROI ("С нашим продуктом вы сэкономите $X/месяц")
🗓️ День 5 (пятница): Внедрение первого улучшения
Цель: Исправить проблему, найденную в день 4
- Внедрить изменение
- Добавить отслеживание для нового элемента (если нужно)
- Запустить в production
- Отметить дату начала эксперимента
Результат: Изменение внедрено, начинается сбор данных
🗓️ День 6-7 (выходные): Настройка мониторинга
Цель: Автоматизировать анализ
- Настроить еженедельный ритуал: каждый понедельник 30 мин смотреть Umami
- Создать Google Sheets/Notion таблицу с ключевыми метриками
- (Опционально) Настроить Slack/email уведомления через Umami API
Шаблон таблицы метрик:
| Неделя | Visitors | Bounce Rate | Signup Conv | CAC (avg) | Выручка |
|---------|----------|-------------|-------------|-----------|---------|
| Week 1 | 2,400 | 68% | 2.1% | $95 | $4,200 |
| Week 2 | [fill] | [fill] | [fill] | [fill] | [fill] |
🗓️ Неделя 2 и далее: Итерации
Еженедельный ритуал (каждый понедельник, 30 минут):
- Проверить метрики за неделю:
- Рост/падение трафика
- Изменение конверсии
- CAC по каналам
- Найти 1 красный флаг (если есть)
- Найти 1 зелёный флаг (что работает хорошо)
- Запланировать 1 эксперимент на следующую неделю
- Проверить результаты прошлого эксперимента
Пример плана на неделю 2:
🚨 Красный флаг: CAC на Facebook Ads = $120 (слишком высокий)
💚 Зелёный флаг: Email newsletter конверсия 8% (отлично!)
📋 Эксперимент недели:
- Сократить бюджет Facebook Ads с $1,000 до $500
- Инвестировать $500 в контент для newsletter (hiring копирайтера)
- Ожидаемый результат: снижение среднего CAC с $95 до $70
📊 Отслеживать:
- CAC по каналам (daily)
- Email open rate + click rate
- Общая конверсия signup
Готовые шаблоны для копирования
Шаблон 1: Tracking snippet (вставить в любой HTML)
<!-- Umami Analytics -->
<script
async
src="https://cloud.umami.is/script.js"
data-website-id="ВАШ-WEBSITE-ID"
></script>Шаблон 2: Типичная иерархия событий
Продукт: SaaS для автоматизации email-маркетинга
События:
1. campaign_visit (UTM tracking)
2. cta_clicked (location: hero/pricing/footer)
3. signup_started
4. signup_step_completed (step: 1/2/3)
5. signup_completed
6. trial_started
7. feature_used (feature_name: email_builder/automation/analytics)
8. trial_converted_to_paid
9. subscription_cancelled
Бизнес-метрики:
- Signup conversion = signup_completed / visitors
- Trial-to-paid conversion = trial_converted_to_paid / trial_started
- CAC = marketing_spend / signup_completed
- Churn rate = subscription_cancelled / total_active
Шаблон 3: UTM structure (для всех кампаний)
Структура:
?utm_source={канал}&utm_medium={тип}&utm_campaign={название}&utm_content={вариант}
Примеры:
Facebook Ads (основная кампания):
?utm_source=facebook&utm_medium=cpc&utm_campaign=q4_2024_promo&utm_content=variant_a
Google Search (brand keywords):
?utm_source=google&utm_medium=cpc&utm_campaign=brand_search&utm_content=headline_v2
Email Newsletter (weekly digest):
?utm_source=newsletter&utm_medium=email&utm_campaign=weekly_digest&utm_content=cta_top
LinkedIn Organic Post:
?utm_source=linkedin&utm_medium=social&utm_campaign=thought_leadership&utm_content=post_123
Partnership (affiliate link):
?utm_source=partner_techcrunch&utm_medium=referral&utm_campaign=review_article
Частые ошибки новичков
❌ Ошибка 1: Отслеживать всё подряд
Проблема: Добавляют 50+ событий → dashboard перегружен → не понятно, что важно.
Решение: Начните с 3-5 ключевых событий:
- Главная конверсия (signup/purchase)
- Клики по CTA
- Drop-off точки в воронке
Добавляйте новые события только когда старые уже приносят ценность.
❌ Ошибка 2: Не смотреть на данные регулярно
Проблема: Настроили аналитику, но заходят раз в месяц → пропускают критические проблемы.
Решение: Заведите еженедельный ритуал (30 минут каждый понедельник). Поставьте напоминание в календарь.
❌ Ошибка 3: Собирать данные, но не действовать
Проблема: Видят красные флаги, но откладывают исправления → ничего не меняется.
Решение: Правило "1 эксперимент в неделю". Каждую неделю тестируйте одно улучшение. Маленькие изменения накапливаются в большой рост.
❌ Ошибка 4: Не делать A/B тесты
Проблема: Внедряют изменения "на глаз" → не знают, помогло или навредило.
Решение: Любое изменение конверсионных элементов (CTA, заголовки, pricing) — только через A/B тест. Шаблон кода выше в разделе 4.
❌ Ошибка 5: Игнорировать mobile
Проблема: Смотрят только desktop метрики → пропускают, что 60% трафика на mobile с bounce rate 80%.
Решение: В Umami Dashboard → фильтр Devices → Mobile → отдельный анализ. Mobile часто требует отдельных улучшений.
💀 Смертные грехи аналитики
Внимание: Эти ошибки могут убить ваш продукт. Они стоили компаниям тысяч потерянных клиентов и миллионов долларов. Избегайте их любой ценой.
❌ Грех 1: "Давайте отслеживать ВСЁ!"
Реальная история:
Стартап добавил 73 разных события в первую неделю:
// ❌ ПЛОХО: Event hell — 73 события, dashboard бесполезен
window.umami?.track("user_moved_mouse");
window.umami?.track("user_scrolled_1px");
window.umami?.track("page_loaded");
window.umami?.track("button_hovered");
window.umami?.track("input_focused");
window.umami?.track("modal_opened");
window.umami?.track("tooltip_shown");
window.umami?.track("animation_started");
window.umami?.track("image_loaded");
window.umami?.track("css_rendered");
// ... ещё 63 событияПоследствия:
- Dashboard стал нечитаемым
- Непонятно, какие метрики важны
- Команда перестала смотреть аналитику (overwhelmed)
- За 3 месяца не приняли ни одного data-driven решения
✅ ПРАВИЛЬНО: Фокус на бизнес-метрики
// ✅ ХОРОШО: 3 ключевых события, привязанных к выручке
window.umami?.track("pricing_page_visit", {
from_page: "homepage",
});
window.umami?.track("free_trial_started", {
plan_tier: "pro",
utm_source: getCachedUTM().source,
});
window.umami?.track("credit_card_added", {
plan_tier: "pro",
annual: true, // годовая подписка
});Правило 80/20:
- 20% событий дают 80% инсайтов
- Начни с 3-5 критических событий
- Добавляй новые только когда старые уже приносят value
Как определить критические события:
1. Главная конверсия (signup/purchase)
2. Ключевые drop-off точки в воронке
3. Высокоценные действия (например, добавление credit card)
НЕ отслеживай:
- Технические события (page_loaded, css_rendered)
- Косметические взаимодействия (hover, focus)
- Всё, что не влияет на решения
❌ Грех 2: "Просто посмотрим цифры в понедельник"
Реальная история:
Основатель каждый понедельник открывал Umami dashboard, смотрел 5 минут на графики, говорил "хм, интересно" и закрывал. Через 6 месяцев ничего не изменилось.
❌ ПЛОХО: Смотреть без вопросов
Понедельник утро:
1. Открыть Umami
2. Посмотреть на цифры
3. "Хм, visitors растут, хорошо"
4. Закрыть
Результат: 0 решений, 0 изменений
✅ ХОРОШО: Отвечать на конкретные вопросы
Понедельник утро (30 минут):
1. "Где самый большой drop-off в воронке?"
Dashboard → Events → signup_funnel
→ Ответ: 55% теряем между step 2 и 3
2. "Какой канал приносит клиентов с наименьшим CAC?"
Dashboard → Events → campaign_visit + conversion_completed
→ Ответ: Google Ads $60 vs Facebook $120
3. "Какая страница имеет самый высокий bounce rate?"
Dashboard → Pages → sort by bounce rate
→ Ответ: /pricing 78% bounce
4. "Что делаем на этой неделе?"
→ Эксперимент: упростить step 3 signup формы
→ Действие: сократить Facebook бюджет, увеличить Google
→ Тест: A/B тест новой pricing page
Правило "3 вопроса":
Каждый понедельник обязательно отвечай на 3 вопроса:
- 🚨 Где теряем больше всего пользователей?
- 💚 Что работает лучше всего?
- 🎯 Какой один эксперимент запускаем на этой неделе?
❌ Грех 3: "Внедрим 10 улучшений сразу!"
Реальная история:
Команда за weekend переделала:
- Новый дизайн главной страницы
- Изменили pricing (3 плана → 4 плана)
- Добавили chatbot
- Переписали copy на всех CTA
- Внедрили новую signup форму
- Добавили testimonials на pricing page
Конверсия выросла с 2% до 4%.
Вопрос: Что сработало? Ответ: Неизвестно. Всё вместе? Одно изменение? Может половина навредила, а другая помогла?
❌ ПЛОХО: Batch changes
Неделя 1:
- Изменение А
- Изменение Б
- Изменение В
- Изменение Г
- Изменение Д
Конверсия: 2% → 4%
Какое изменение сработало? 🤷 Неизвестно
✅ ХОРОШО: Одно изменение за раз
Неделя 1: Эксперимент А (новый заголовок CTA)
- Гипотеза: Текущий заголовок не понятен
- A/B тест: "Start free trial" vs "Try 14 days free"
- Результат: 2.1% → 2.8% (+33%)
- Действие: Внедрить победителя
Неделя 2: Эксперимент Б (упростить signup)
- Гипотеза: Слишком много полей в форме
- A/B тест: 7 полей vs 3 поля
- Результат: 2.8% → 3.5% (+25%)
- Действие: Внедрить победителя
Неделя 3: Эксперимент В (добавить social proof)
- Гипотеза: Не хватает доверия
- A/B тест: без testimonials vs с testimonials
- Результат: 3.5% → 4.2% (+20%)
- Действие: Внедрить победителя
Итого через 3 недели:
2% → 4.2% (+110%)
+ Понимание, что работает
+ Можно повторить успешные паттерны
Правило "1-1-1":
- 1 эксперимент за раз
- 1 изменение в эксперименте
- 1 неделя на сбор данных
Исключение: Можно тестировать несколько изменений одновременно, только если они независимы:
// ✅ ОК: Независимые эксперименты (разные страницы)
A/B тест на главной: заголовок hero секции
A/B тест на pricing: расположение кнопок
A/B тест на signup: количество полей
// ❌ НЕ ОК: Зависимые изменения (одна страница)
A/B тест на главной:
- заголовок (variant A/B)
- кнопка (variant C/D)
- изображение (variant E/F)
→ 2×2×2 = 8 комбинаций, нужно 8x трафика❌ Грех 4: "Мы знаем, что нужно пользователям" (не смотреть на данные)
Реальная история:
Основатель: "Я точно знаю, что пользователи хотят темную тему! Мы потратим 2 месяца разработки."
После релиза: 3% пользователей включили темную тему.
Если бы посмотрел в аналитику до начала разработки:
Dashboard → Events → feature_requested (из support тикетов)
Top requests:
1. API access: 340 запросов
2. Export to Excel: 280
3. Slack integration: 190
4. Dark mode: 15 запросов (!)
Время разработки:
- API access: 2 недели → 340 пользователей счастливы
- Dark mode: 2 месяца → 15 пользователей счастливы
Opportunity cost: потеряли 326 пользователей
❌ ПЛОХО: HiPPO decisions (Highest Paid Person's Opinion)
CEO: "Я думаю, нам нужна фича X"
Team: "Ок, делаем"
[3 месяца разработки]
Пользователи: "Мы не просили это"
Метрики: Adoption rate 2%
✅ ХОРОШО: Data-driven decisions
1. Собери данные:
- Feature requests из support
- User interviews
- Umami events (какие фичи используют)
2. Приоритизируй:
Impact × Effort matrix
3. Валидируй гипотезу:
- Сделай MVP за 1 неделю
- Отследи adoption через Umami
- Если >20% используют → инвестируй больше
4. Итерируй на основе данных
Правило "Data overrides opinions":
Если данные противоречат интуиции → доверяй данным.
Реальный кейс:
- CEO думал: "Users хотят больше features"
- Данные показали: Users с >5 features имеют 3x churn
- Решение: Упростили продукт, убрали редко используемые features
- Результат: Churn снизился на 40%
❌ Грех 5: "Настроим аналитику когда вырастем"
Реальная история:
Стартап за 6 месяцев вырос с 0 до 10k users без аналитики.
Основатель: "Теперь пора внедрить аналитику!"
Проблема:
- Не знают, откуда пришли первые 10k users (какие каналы сработали)
- Не знают, почему пользователи signup (какая value prop работает)
- Не знают, что делают активные users (какие фичи важны)
- Не могут повторить успех (всё было случайно)
❌ ПЛОХО: "Пока не нужно"
Month 1: 100 users — "Рано для аналитики"
Month 3: 1,000 users — "Занят разработкой"
Month 6: 10,000 users — "Теперь пора!"
Результат: Потеряли все исторические данные
→ Не знаем, что сработало
→ Не можем масштабировать успех
✅ ХОРОШО: Аналитика с Day 1
Day 1: Umami установлен (5 минут)
Week 1: Базовые события (signup, purchase)
Week 2: UTM tracking для первой рекламы
Результат через 6 месяцев:
→ Знаем точно, какие каналы работают
→ Можем посчитать CAC по каждому каналу
→ Понимаем, какие фичи ведут к retention
→ Масштабируем то, что работает
Правило "Analytics-first":
Umami должен быть установлен раньше чем:
- ❌ Сложные features
- ❌ Красивый дизайн
- ❌ Маркетинговые кампании
Потому что без аналитики вы не знаете, что работает.
Минимальная стоимость:
- Время: 10 минут
- Деньги: $0 (self-hosted)
- ROI: ∞ (бесценные данные о росте)
❌ Грех 6: "Давайте следить только за позитивными метриками"
Реальная история:
Команда отслеживала только успешные события:
signup_completed✅trial_started✅payment_successful✅
Не отслеживали неудачи:
signup_failed❌ (не отслеживали)payment_declined❌ (не отслеживали)trial_cancelled❌ (не отслеживали)
Результат:
- Видели: "100 пользователей успешно оплатили!"
- Не видели: "500 пользователей не смогли оплатить (broken payment form)"
❌ ПЛОХО: Cherry-picking metrics
// Отслеживаем только успехи
window.umami?.track("purchase_success", { amount: 99 });
// НЕ отслеживаем провалы
// (payment declined — ничего не отправляем)✅ ХОРОШО: Отслеживать всю воронку (включая failures)
// Успехи
window.umami?.track("payment_attempted", {
amount: 99,
payment_method: "card",
});
window.umami?.track("payment_success", {
amount: 99,
payment_method: "card",
});
// Провалы (критически важно!)
window.umami?.track("payment_failed", {
amount: 99,
payment_method: "card",
error_code: "insufficient_funds",
error_message: "Declined by bank",
});
window.umami?.track("payment_form_error", {
field: "card_number",
error: "Invalid card number",
});Анализ:
Dashboard → Events
payment_attempted: 1000
payment_success: 650 (65%)
payment_failed: 350 (35%)
Drill down в payment_failed:
- error_code "insufficient_funds": 200 (57%)
- error_code "invalid_card": 80 (23%)
- error_code "network_error": 70 (20%)
💡 Insight: 23% провалов из-за invalid_card
→ Возможно, validation UX проблема
→ Тестируем inline validation
→ Payment success rate: 65% → 82%
→ +$17k/месяц дополнительной выручки
Правило "Measure failures as much as successes":
Каждая точка успеха должна иметь парную точку провала:
signup_completed+signup_failedpayment_success+payment_failedtrial_started+trial_cancelled
🎯 Контр-чеклист: как НЕ делать аналитику
Если хоть один пункт = "Да" → ты делаешь аналитику неправильно:
- У меня больше 10 событий, и я не помню половину
- Смотрю аналитику раз в месяц "просто посмотреть"
- Внедряю несколько изменений одновременно, чтобы быстрее
- Принимаю решения на основе интуиции, а данные "для галочки"
- "Пока рано для аналитики, подождём до продакшна"
- Отслеживаю только успешные действия, провалы не важны
- Не делаю A/B тесты, "и так понятно что лучше"
- Mobile traffic? Да там мало кто заходит (не проверял)
Если хотя бы 1 пункт = Да:
→ Перечитай этот раздел → Исправь ошибку на этой неделе → Результаты появятся через 2-4 недели
Заключение
Что вы теперь умеете
Следующие шаги
План на первую неделю:
День 1: Установить Umami ✅
День 2: Добавить 3 ключевых события ✅
День 3: Настроить UTM-метки ✅
День 4: Найти первый красный флаг 🚨
День 5: Запустить первое улучшение 🚀
Ожидаемый результат через месяц: +15-30% конверсия, -20% CAC, понимание что работает в вашем продукте
Контрольный чеклист готовности
Базовый уровень (минимум для всех):
- Umami установлен и работает
- Отслеживаются pageviews
- Отслеживаются 3 ключевых события
- Настроены UTM-метки для рекламы
- Смотрю dashboard хотя бы раз в неделю
Продвинутый уровень (для роста):
- Отслеживается полная signup воронка
- Настроен A/B тест хотя бы на одном элементе
- Считаю CAC по каждому каналу
- Мониторю Core Web Vitals
- Веду таблицу метрик (week-over-week рост)
- Провожу минимум 1 эксперимент в неделю
Экспертный уровень (для масштабирования):
- Автоматические отчёты в Slack/Email
- Интеграция Umami с CRM (через API)
- Cohort analysis (retention по когортам)
- Predictive analytics (прогноз выручки)
- Data-driven культура в команде (все решения подкреплены метриками)
Дополнительные ресурсы
Официальные:
- Umami Documentation — полная документация
- Umami API Reference — для программного доступа
- Web Vitals Guide — гайд Google по производительности
Инструменты:
- UTM.io — генератор UTM-меток
- Google PageSpeed Insights — проверка Core Web Vitals
- Umami Cloud — хостинг Umami
Для углубления:
- Next.js Analytics — интеграция с Next.js
- A/B Testing Guide — методология тестов
- CAC vs LTV Analysis — метрики SaaS бизнеса
Docker команды для self-hosted
# Запуск Umami
docker-compose up -d
# Просмотр логов
docker-compose logs -f umami
# Остановка
docker-compose down
# Обновление до новой версии
docker-compose pull
docker-compose up -d
# Бэкап базы данных
docker-compose exec db pg_dump -U umami umami > backup_$(date +%Y%m%d).sql
# Восстановление из бэкапа
docker-compose exec -T db psql -U umami umami < backup.sql
# Проверка статуса
docker-compose psГотов к запуску? Начни с Дня 1 прямо сейчас! 🚀