CRO как конвейер: от аналитики до выручки
В марте 2025 года владелец магазина туристического снаряжения в Порту позвонил мне по поводу своей кассы. Его команда продавала палатки, рюкзаки и спальные мешки через магазин Shopify и посадочные страницы на Next.js. Трафик держался около 9 000 визитов в месяц. Доля завершённых покупок составляла 1,9 процента. За предыдущие четыре месяца он прогнал одиннадцать тестов кнопки покупки: зелёная, оранжевая, широкие отступы, жирный текст, закрепление на мобильных. Итоговый эффект на выручку: ноль. Он попросил меня запустить двенадцатый тест. Я предложил ему поставить новые тесты на паузу на месяц и открыть со мной поток событий. Через восемь недель доля завершённых покупок выросла до 3,1 процента на том же трафике, около €14 000 добавленной месячной выручки при его среднем чеке €85. Этот результат дали четыре этапа. Я веду их по порядку в каждой работе на выручку: аналитика, гипотеза, релиз, замер. Каждый этап ловит сбой, мимо которого проходят остальные.
Ловушка цвета кнопки
Кнопочные тесты проваливаются по арифметике раньше, чем по креативу. При трафике 9 000 визитов в месяц и базовой доле 1,9 процента магазин видел около 171 заказа в месяц. Относительный прирост на 10 процентов означает 19 добавочных заказов. Чтобы зафиксировать такой прирост с уверенностью 95 процентов, нужно около 30 000 посетителей на вариант. При его трафике один тест тянется семь месяцев. Он держал каждый тест десять дней, читал шум, выпускал победителя и наблюдал плоскую выручку. Такую картину я вижу везде: малый трафик, короткие замеры, уверенные заявления, плоская выручка.
Кнопки стоят в конце длинной цепочки. Его воронка показала: 62 процента посетителей карточки товара так и не начинали оформление. Из начавших 41 процент уходил на шаге доставки. Зелёная кнопка не касается ни одной из групп. Она обращается к трём процентам посетителей, которые уже решили купить и сомневаются из-за цвета. Такой группы почти нет. Тесты в узком конце воронки двигают наименьшую аудиторию. Конвейер ниже переносит тест выше по потоку, туда, где живёт аудитория.
Этап 1: аналитика, которая окупается
Я закрыл инструмент тестов и открыл с ним PostHog. Мы описали пять событий со строгими именами: view_item, add_to_cart, start_checkout, enter_shipping, purchase. Каждое событие несло session_id, класс устройства и источник трафика. Недостающие я добавил через пиксель Shopify и небольшой роут Next.js, который досылал серверные покупки с тем же session_id. Одна неделя чистых данных заменила четыре месяца догадок.
Всплыли три утечки. Первая: страница таблицы размеров глотала 54 процента своих посетителей. Записи сессий показали, как покупатели открывают таблицу, листают плотную сетку и уходят. Вторая: стоимость доставки появлялась поздно. Зарубежные покупатели доходили до третьего шага, видели наценку €18, и 41 процент уходил в течение минуты. Третья: мобильная форма просила девять полей, включая название компании и факс. Мобильная доходимость держалась вдвое ниже десктопной.
Я оцениваю этап в три рабочих дня: день на имена событий и трекинг, день на сорок записей сессий и чтение воронки по устройствам и источникам, день на три нумерованных вывода со скриншотами. Аналитика окупается, когда называет точный экран, где останавливаются деньги.
Этап 2: гипотезы с правилом остановки
Каждая утечка стала одной записанной гипотезой с механизмом, метрикой и правилом остановки. Гипотеза первая: покупатели, видящие подбор размера внутри карточки товара, чаще кладут товар в корзину. Метрика: доля add_to_cart на трафике таблицы размеров. Правило остановки: глушить тест, когда 1 000 сессий таблицы размеров проходят без прироста или растут обращения в поддержку по размерам. Гипотеза вторая: покупатели, видящие стоимость доставки в карточке товара, чаще начинают оформление. Метрика: доля start_checkout зарубежного трафика. Правило остановки: глушить, когда выручка на посетителя проседает сильнее 5 процентов после 500 зарубежных сессий. Гипотеза третья: мобильные покупатели, встречающие четыре поля, чаще завершают оплату. Метрика: доля покупок на мобильных. Правило остановки: глушить, когда ошибки оплаты поднимаются выше базовых 1,2 процента.
Я ранжирую тройку по охвату: доставка касалась 38 процентов трафика, мобильные поля касались 61 процента оформлений, подбор размера касался 9 процентов. Доставка пошла первой.
Каждая гипотеза несёт одно предложение, которое её убивает. Правило остановки я пишу до открытия редактора. Тест без правила остановки крутится, пока о нём помнят, забытые тесты гниют в вечных полуфичах. Правило бережёт календарь и кодовую базу.
Этап 3: релиз без потери доверия
Каждый вариант я выпускаю за флагом в LaunchDarkly по хешу id клиента. Флаг отдаёт контроль или вариант, пятьдесят на пятьдесят. Каждое изменение я раскатываю на 5 процентов трафика на полные сутки и смотрю три ограждения: частоту ошибок кассы в Sentry, неуспешные платежи в вебхуках Stripe и новые ветки поддержки с тегом checkout. Только затем открываю тест на полный трафик.
Сборка подбора размера показывает зачем. Первая версия накрыла кнопку Apple Pay в Safari и заблокировала тапы. Sentry поймал всплеск ошибок кликов в течение часа. Флаг погасил вариант для пользователей Safari за двадцать минут, баг увидели только 3 процента сессий. Без флага баг гулял бы все выходные.
Варианты я держу достаточно мелкими для удаления. Каждый вариант живёт в одном файле компонента с именем флага наверху. Когда тест заканчивается, проигравшая ветка покидает кодовую базу в тот же день. Владелец магазина доверил процессу, поскольку сломанные сборки никогда не выходили на полную аудиторию. Доверие дают флаг, ограждения и удаление в день финала.
Этап 4: честное чтение результатов
Результаты я читаю по фиксированному календарю: 21 день, включая три уикенда, без ранних решений. Будние покупатели отличаются от покупателей выходных, доля выходных у него составляла 44 процента. Подглядывание на пятый день с коронацией лидера дважды увенчало бы шум за эту работу.
Главная метрика держится одной: выручка на посетителя. Вторичные метрики ведут долю завершённых покупок и средний чек. Ограждения ведут долю возвратов и обращения в поддержку на сто заказов. Вариант, поднимающий конверсию и одновременно поднимающий возвраты, проигрывает. Это правило я записываю до запуска, чтобы победа не обольщала меня в день чтения.
Прозрачность доставки победила. Доля start_checkout зарубежного трафика выросла с 22 до 34 процентов. Доля завершённых покупок двинулась с 1,9 до 3,1 процента по сайту. Выручка на посетителя выросла на 41 процент. Доля возвратов удержалась на 2,1 процента. Обращения про доставку упали с одиннадцати в неделю до трёх. Мобильная форма из четырёх полей победила следующей, добавив ещё 0,4 пункта. Подбор размера сыграл вничью после 1 000 сессий, правило остановки убрало его по расписанию.
Каждое решение я пишу в одну таблицу: дата, гипотеза, чтение, действие. Четыре строки закрывают работу. Каждый этап конвейера ловит собственный сбой: аналитика ловит догадки, гипотеза ловит бесконечные тесты, релиз ловит сломанные сборки, честное чтение ловит дутые победы. Откройте на неделе поток событий и перечислите три выхода, стоящие вам дороже всего.