惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Full Disclosure
Recorded Future
Recorded Future
T
Tenable Blog
S
Securelist
C
CERT Recently Published Vulnerability Notes
T
Threatpost
S
Schneier on Security
A
Arctic Wolf
The Hacker News
The Hacker News
C
CXSECURITY Database RSS Feed - CXSecurity.com
Know Your Adversary
Know Your Adversary
P
Privacy International News Feed
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Register - Security
The Register - Security
Cisco Talos Blog
Cisco Talos Blog
AWS News Blog
AWS News Blog
K
Kaspersky official blog
T
True Tiger Recordings
T
Threat Research - Cisco Blogs
V
Vulnerabilities – Threatpost
P
Palo Alto Networks Blog
T
The Exploit Database - CXSecurity.com
小众软件
小众软件
B
Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Azure Blog
Microsoft Azure Blog
Cyberwarzone
Cyberwarzone
C
Cybersecurity and Infrastructure Security Agency CISA
T
Tor Project blog
Spread Privacy
Spread Privacy
Malwarebytes
Malwarebytes
P
Proofpoint News Feed
F
Fox-IT International blog
F
Fortinet All Blogs
P
Privacy & Cybersecurity Law Blog
G
GRAHAM CLULEY
量子位
Latest news
Latest news
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 叶小钗
Project Zero
Project Zero
T
Tailwind CSS Blog
N
Netflix TechBlog - Medium
Martin Fowler
Martin Fowler
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
I
Intezer
博客园_首页
腾讯CDC
H
Hackread – Cybersecurity News, Data Breaches, AI and More
D
Darknet – Hacking Tools, Hacker News & Cyber Security

Все публикации подряд на Хабре

Менеджер ресурсов ЯНДЕКС 360 (YANDEX 360) промокоды июнь 2026: промокод Yandex 360 скидка 40% на годовые тарифы Open-Source инструмент для автоматического перевода книг Ищу ранних тестировщиков для Android-версии agent harnesses Не используйте LLM для текста Оптимизация запросов к PostgreSQL: 5 неочевидных настроек для продакшена 45 лет тюрьмы за DROP TABLE и переход Карпатого в Anthropic Планирование движения для ровера на ходовой Ackerman'а Революция в изучении языков Java — быстрая. Ваш код может таким не быть Как я опоздал на конкурс OpenAi с новой архитектурой нейросети Быстрые интеграции в 1С: прощайте, бесконечные переделки Как получить субсидию 300 миллионов от Минпромторга? preIPO Anthropic, OpenAI, SpaceX. Разбираемся — стоит ли участвовать? Entaxy ION + OPC UA: два способа получить данные с промышленного оборудования Память на миллион, а толку ноль: как мы спасали ИИ-агента от «тупости» РСЯ, AdSense или myTarget: что на самом деле в 2026 приносит больше денег сайту и причем тут монетизаторы Практическое построение сервисов на Go под реальный трафик PostgreSQL и аналитика: что меняется, когда хранилище становится общим Codex за 5 месяцев 2026: мой топ-5 релизов, что не зашло и где OpenAI обогнал Anthropic Как создать короткое видео с помощью нейросетей: Полный гайд по Veo 3.1, Kling 3.0 и Happy Horse 1.0 Алгоритм проверок физлиц от экс сотрудника ФНС Как ИИ портит резюме студентам Системные вызовы в сфере ИТ в 2026: стратегический взгляд для ИТ-руководителей Вайбкодинг заканчивается на localhost: как я строю SaaS для цифровизации коттеджных поселков с Codex Производственные риски в небольшом кастомном производстве. С чем я сталкивалась и как научилась это учитывать Подключаем ИИ органы чувств: bash-демон, пайка и самосознание на Raspberry Pi Я хотел повторить Growing Neural CA за вечер. Ушёл месяц Промт для генерации текста без ИИ следа — как писать уникальные тексты через нейросеть От capabilities к AppArmor: что реально остановит атакующего в контейнере CactOS Вектора интересов: как находить настоящую мотивацию и усиливать команды Цена безопасности [Перевод] Цена безопасности “Рубик” от пет-проекта до прода или ITIL 4 для строительно-торговых центров Чего ждать (и не ждать) от ремейка AC4 Black Flag Архитектурный тупик корпоративного хранения: почему смена модели не снимает ограничений и что с этим делать Атаки через подрядчиков, дефицит кадров и квест с импортозамещением: главные вызовы ИБ в 2026 году Я не оставлю детям наследства Почему порты стали «дверями» в сервер, и кто решил, что SSH будет 22 Почему зарубежные разработчики чипов возвращаются на китайские фабрики Как у меня НЕ получился торговый бот на Polymarket Проектирование архитектуры в нотации ArchiMate с использованием ИИ. Часть 2 Как превратить домашнюю файлопомойку в умную AI-галерею на основе сборки из x99+Xeon и видеокарты за 2 тыс рублей Перспективы заселения нашей галактики Кризис менеджмент в ИТ Reactive Programming не спасёт вас. Если вы не решили эти 5 проблем — у вас просто медленный монолит с Flux Как я делаю DIY-контроллер для ПК: громкость, приложения, MIDI, OBS Миграция микросервисов на Python с помощью LLM: экономим месяцы для разработчиков Программирование микросхем GAL и им подобных Почему таск-трекер не заменяет ИСУП: из чего состоит полноценный контур управления проектами Всё об информационной безопасности. Кибербезопасность. DevOps, CI/CD. Хакеры. Алексей Федулаев Как импортировать базу клиентов в amoCRM и навести порядок в контактах Как мы четыре раза переписали Outbox Google предлагает единый «водяной знак» для изображений, видео и текста, созданных ИИ Сексизм в IT: данные вместо домыслов Один фронтенд, чтоб править всеми, один фронтенд, чтоб всех найти: 1 точка входа, разные BI ИИ в тестировании: зачем мы пошли в пилот и почему начали с чата, а не с агентов Как я научила Telegram-бота наводить порядок в чате с мемами: пересылка по хештегам в соответствующую тему Как мы сделали внутреннюю CRM для управления студией – опыт Doubletapp Десятипальцевый метод — как печатать цифру " Шесть "? Партнерская программа по нейросетям: зарабатывай на ИИ, приводя клиентов в AI-сервис Как я сделал «клик по элементу → открыть в VS Code» за один вечер Эволюция Telegram‑бота на C++: от «лапши» в main() до ООП, in‑memory кэша и мутов по Фибоначчи Как я (внезапно) стал адвокатом вайб‑кодинга в корпорации Дизайн за 5 минут. Дайджест мая 2026 Только 17% всех 64-битных целых чисел можно разложить на два 32-битных 0,000000001% × ∞ = 100%. Вы осознаёте что любое событие неизбежно? «Вы либо трусы наденьте, либо крестик снимите». Как мы выиграли еще один суд против PR-агентства PRslon Почему вы тратите время не на переговоры, а на чужую внутреннюю драму. Как проходят переговоры с крупными компаниями Как приоритизировать регрессионные проверки, когда сжаты сроки релиза Электронные транспортные накладные: технический разбор нововведений 2026 года для логистов, разработчиков и бизнеса Как определить LLM под капотом чат-бота: учебный эксперимент по black-box fingerprinting Хабру 20 лет — зовём вас отметить это к нам Домой iPad как инструмент разработчика в эпоху агентного программирования Inspector v3: как я сделал свой центр управления Kubernetes на старом ноутбуке Как мы осваивали производство гибко-жёстких печатных плат: от проб и ошибок к рабочей технологии 30 лет мы внедряли в России Ansys. А потом он ушёл — и пришлось садиться писать собственный CAE для аддитивной печати Цифровой рубль и цифровой чек Облако под защитой от DDoS: чем On-Demand отличается от Always-On Распродажа в издательстве «Питер» Почему современный стадион больше похож на ЦОД, чем на арену Машина, которая учится думать Запихнули игровую приставку в короб и в первый же месяц продали на 3 млн Игровой ноутбук vs игровой ПК за те же деньги: что изменилось в 2026 году ГИС для Minecraft. Часть 1 Смена старого оборудования на новое убирает огромные затраты на его эксплуатацию — но куда девать всё это старое? Project Manager 2026: как AI-инструменты меняют профессию SLA как инструмент, а не отчёт. Часть 1. Как подружить бизнес и инженеров через общие цифры Послания от ангелов и первый шаг к компьютерам: стеганография Средневековья и Ренессанса Что новенького есть в CSS в 2026 году? Хватит мучить ChatGPT. Почему ваш промпт не сработает Как и зачем мы писали семантический слой для ИИ аналитики – SLayer Маленькая EVPN/VXLAN-фабрика без тупика: как мы запускали площадку в Амстердаме Репликация по DDIA: что я понял, только когда сам сломал прод RAG без downtime: настраиваем инкрементальное обновление документов на Qdrant и LangChain Тени истории: война машин. Как «Энигма» и «Фиалка» определили исход Второй мировой войны Как ускорить распознавание объектов нейросетями среди множества классов, не жертвуя памятью и точностью Как я хотел две странички для SAMBA и NFS, а сделал полноценную панель управления NAS на 20+ страницах Kubernetes для баз данных? CloudNativePG делает PostgreSQL по-настоящему Cloud-Native
Увеличиваем продажи без слез аналитика
Andrey_Biryu · 2026-05-27 · via Все публикации подряд на Хабре

Увеличиваем продажи без слез аналитика

Уровень сложностиПростой

Время на прочтение7 мин

Охват и читатели4.4K

Туториал

Привет, Хабр! Меня зовут Андрей Бирюков. Я являюсь независимым экспертом в области ИТ и ИБ, преподаю в учебных центрах и пишу книги.

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

  • event_name = “Click

  • event_name = “form_submit_2

  • event_name = “send

  • event_name = “Пользователь нажал кнопку” (кириллицей, да)

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

И что мы имеем в итоге – у нас есть воронка, но считать по ней нельзя. Потому что этапы размыты, события дублируются, а пользователь может скачать файл 50 раз и засчитать себе 50 лидов.

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

Шаг 1. Забудьте слово «Click»

Начнем с названий событий. Событие не должно называться по типу действия в интерфейсе. То есть название события «Click» — это плохой вариант. Вместо этого называем события по их бизнес‑смыслу.

Примеры боли и решений:

Вы говорите разработчику

Он делает

Аналитик потом

«Отправь событие на клик по кнопке “Оставить заявку”»

click_button_feedback

Не поймет, это заявка, подписка или просто нажатие

«Отследи отправку формы»

form_send

А какая форма? Карьеры? Скидки? Консультации?

«Событие на успешную отправку»

success

Простите, что? Успех чего? Регистрации? Платежа? Скачивания?

В общем, как в той «баянистой» картинке:

А теперь серьезно.

Правило. Схема именования: [объект]__[действие]_[результат]

Вот несколько примеров:

- lead__created_success — лид создался;

- payment__completed_initial — первая оплата прошла;

- file__downloaded_brochure — скачали брошюру.

Здесь в качестве разделителей выступает двойное подчеркивание, если событие с частями. И никакого CamelCase и no_spaces.

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

Шаг 2. Нарисуйте воронку на салфетке перед тем, как писать техническое задание

Аналитик и разработчик часто говорят на разных языках. Аналитик — про «лиды, клиенты, жизненный цикл». Разработчик — про «DOM-дерево, асинхронные вызовы, колбэки». Ваша задача — переложить воронку на события до того, как разработчик начнет писать код.

Возьмите лист бумаги (да, да, реальную бумагу). Напишите сверху «Пришел на сайт». Снизу — «Купил». Между ними — этапы вашей воронки.

Например:

  • Пришел на сайт.

  • Посмотрел товар (страница карточки).

  • Добавил в корзину.

  • Начал оформление.

  • Оплатил.

Теперь для каждого этапа укажите одно единственное событие, которое означает переход на этот этап.

Этап

Событие

Пришел на сайт

session__started (срабатывает на любой странице)

Посмотрел товар

product__viewed_item (сработало — человек минимум 5 секунд был на странице, иначе не считаем)

Добавил в корзину

cart__item_added (идентификатор товара, количество)

Начал оформление

checkout__started

Оплатил

payment__completed (статус "success", сумма, метод платежа)

Важнейшее правило: один этап — одно ключевое событие. Не надо на этап «Оплатил» вешать click_pay_button, payment_processing_started, payment_success. Аналитик сам запросит детали, если надо. Ему нужна чистая воронка.

Что вы можете сделать прямо сейчас? Нарисуйте эту схему на стикере (да, тоже на бумажном) и повесьте на монитор разработчика. Пусть он видит её каждый день.

Шаг 3. Убейте 99% мусора на этапе отправки события

Самая частая жалоба аналитика: «В логах 70% — боты, роботы сканирования и наши же тестировщики, которые накликали по 300 заявок».

Здесь есть два простых фильтра, которые нужно резать на стороне клиента до отправки, а не в аналитике.

Фильтр 1. Режим разработчика

Событие не отправляется, если:

- localhost, 127.0.0.1, dev- или test- в домене.

- Пользователь залогинен как tester@company.com или любой адрес с доменом вашей компании (если это внутренний тест).

Фильтр 2. Боты по User-Agent

Перед отправкой события делаете простую проверку на JavaScript:

const botPattern = /bot|crawl|spider|scrape|scan|headless/i;
if (botPattern.test(navigator.userAgent)) {
    return; // не отправляем событие
}
```

И обязательно — фильтр на window.innerWidth > 0 (безобидный способ отсечь headless-браузеры, которые часто не инициализируют размер окна).

На этом шаге, прямо сейчас проверьте, в каком проценте ваших сырых событий есть userAgent со словами bot, crawl или headless. Если больше 5%, — вы потеряли кучу денег на обработку мусора.

Шаг 4. Проектируйте обязательные поля как у пистолета — с предохранителем

Запомните три простых правила: событие без идентификатора пользователя — мусор. Событие без метки времени — мусор. Событие без идентификатора сессии — полумусор.

Ваша задача сделать так, чтобы эти поля были обязательными на уровне сбора. В Google Tag Manager — это настройка «Require» для полей. В собственном SDK — это проверка на бэкенде перед записью в лог.

Минимальный обязательный набор для любого события:

- event_name (схема из шага 1);

- user_id (если есть авторизация) или anonymous_id (если нет);

- session_id (один и тот же для всей сессии);

- timestamp (ISO 8601, с часовым поясом);

- page_url (без UTM-меток, они отдельно).

Если разработчик говорит: «А можно без session_id, мы его через IP и User-Agent склеим», — не соглашайтесь. Склейка вероятностная, точность упадет. Генерируйте session_id на клиенте при первом событии и тащите его во все последующие.

Напишите однострочный документ «Обязательные поля для всех событий» и отправьте в чат с разработкой. Скажите: «Без этих полей ваши события уходят в черную дыру и не попадают в отчеты к гендиректору».

Шаг 5. Боритесь с «двойным счетом» через один флаг

Вспомним еще одну классическую проблему: пользователь нажал кнопку «Отправить» 5 раз, потому что форма долго грузилась. У вас в логах — 5 событий lead__created_success. В CRM — 1 лид. Получаем разрыв.

Решение: событие отправляется один раз на бизнес-результат, а не на действие в интерфейсе.

Как это выглядит в коде (псевдокод для понимания):

// Плохо
document.getElementById('submit').addEventListener('click', () => {
    sendEvent('lead__created_success');
});

// Хорошо
form.addEventListener('submit', async (e) => {
    e.preventDefault();
    const response = await sendFormData();
    if (response.status === 'success' && !alreadySent) {
        sendEvent('lead__created_success', { lead_id: response.lead_id });
        alreadySent = true;
    }
});
```

Здесь нашим спасением может стать флаг alreadySent, хранящийся в памяти сессии. Пользователь может тыкать кнопку 100 раз — событие уйдет один раз.

Прямо сейчас найдите в вашей системе самое часто дублирующееся событие (подсказка: это обычно form_submit). Проверьте, есть ли там защита от двойного счета. Если нет — это ваша первая точка для исправления.

Шаг 6. Сделайте «песочницу» для новых событий, а не правку в боевых

Разработчики любят делать плохую вещь - добавлять события прямо в боевой код. Потому что «быстро, надо срочно отчет завтра». Через месяц таких правок у вас 5 разных версий одного и того же события.

Здесь вам поможет следующее правило: все новые события сначала идут в тестовый контейнер (тестовый GTM-контейнер, dev-ветку SDK). Там они живут не менее 2 дней, за это время вы проверяете:

  • Имя события соответствует схеме.

  • Все обязательные поля есть.

  • Нет ложных срабатываний (например, событие purchase не уходит при добавлении в корзину).

  • Только после этого событие передается в прод.

Прямо сейчас вы можете создать в Jira/Notion/Trello простой чек-лист для принятия нового события. Три пункта: «схема имени соблюдена?», «обязательные поля есть?», «протестировано на dev 3 дня?». Без этих галочек — не выпускать.

Шаг 7. Добавьте в события «контекст сделки», а не просто «действие»

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

Пример:

  • Вы ловите событие file__downloaded_pdf.

  • Но не знаете, к какому продукту относится этот PDF.

  • И не знаете, был ли пользователь уже лидом.

  • И не знаете, какая рекламная кампания привела этого пользователя.

Итог: все, что вы знаете, это что кто-то что-то скачал, но продажи от этого не приблизились. Здесь нужен обязательный блок для событий, которые находятся в середине воронки (между первым касанием и сделкой):

{
  "event_name": "file__downloaded_brochure",
  "user_id": "12345",
  "session_id": "sess_67890",
  "context": {
    "product_id": "PROD-42",
    "campaign_source": "google_cpc_summer_sale",
    "current_step": "consideration",
    "lead_id": "LD-100500",
    "is_known_lead": true
  }
}

Эти поля позволяют ответить на вопрос: «А люди, которые скачали брошюру по продукту X из кампании Y, купили потом или нет?» Без этого контекста вы никогда не построите нормальную атрибуцию.

 Для начала возьмите три самых частых события в вашей системе (например, просмотр карточки, добавление в корзину, отправка контактной формы). Допишите к ним контекст из примера выше. Увидите, как много не хватает.

Итоговый чек-лист для внедрения (повесьте над рабочим столом)

Перед тем как сказать разработчику «давай добавим событие», пробегитесь по списку:

  1. Имя — по схеме объект__действие_результат? (да/нет)

  2. Один этап = одно событие? (нет второго события для той же бизнес-точки)

  3. Обязательные поля — user_id, session_id, timestamp есть?

  4. Защита от дублей — флаг alreadySent стоит?

  5. Отсев ботов — проверка User-Agent и размера окна есть?

  6. Песочница — сначала на dev, потом в прод?

  7. Контекст сделки — привязано к продукту, кампании, этапу воронки?

Если хотя бы один пункт — НЕТ, событие не принимается.

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

Если в событийной аналитике хаос начинается с Click, send и form_submit_2, то в финансовых моделях — с разрозненных таблиц, ручных сверок и данных, которым никто до конца не доверяет.

На бесплатных уроках OTUS разберем, как перейти от AS IS-хаоса к TO BE-контролю: собрать единую автоматизированную финансовую модель, сократить ручные операции и убрать «человеческий фактор» из расчетов.

  • 3 июня в 20:00. «От хаоса к контролю: как построить финансовую модель, которой можно верить». Записаться
    Обсудим, как перестать тратить большую часть времени на сбор данных и сверки, а БДР и ДДС собирать автоматически.

  • 17 июня в 20:00. «Как убрать “человеческий фактор” из финансовых моделей: от расчёта NPV до сложных систем оплаты труда». Записаться
    Поговорим о том, как построить единую автоматизированную модель, где покупка оборудования, найм специалиста и KPI сотрудников считаются без ошибок и ручных правок.

А если хотите выбрать другое занятие под свои задачи — загляните в календарь открытых уроков.

Больше материалов про IT, аналитику, разработку и обучение — на канале OTUS в MAX. Подписывайтесь, чтобы не пропускать новые статьи, разборы и анонсы открытых уроков.