Никита Сивков

Вернуться к работам на главной

Пришёл перерисовать первый экран — начал с настройки метрик

Продукт
truststore.ru  — откроется в новой вкладке
Роль
Дизайн, вёрстка, аналитика
Не моё
Бэкенд, деплой
Срок
Июль–август 2026
Инструменты
Claude Code, Яндекс Метрика, Вариокуб, Google Tag Manager

Коротко

Редизайн первого экрана, A/B-тест, аудит аналитики и пути оплаты.

  1. Перепроектировал первый экран и доказал результат A/B-тестом.
  2. Настроил метрики, нашёл в учёте дефекты и перевёл измерение оплат на подтверждение сервером.
  3. Разобрал путь оплаты по коду, нашёл четыре дефекта и довёл их до прода.

2,25×

Рост кликов по главной кнопке

10,0% → 22,6% · A/B-тест, p < 0,01 · 3 недели, 622 визита · выкачено на 100%

Контекст

TrustStore продаёт подписки на зарубежные сервисы. Живой магазин с постоянным трафиком, владелец держит на себе бэкенд и деплой.

Я предложил владельцу переделать первый экран и замерить эффект A/B-тестом. Мерить было нечем: попросил подключить Яндекс Метрику и GTM. Сам настроил цели — под тест и на будущее.

Тест запустили, и владелец попросил заняться воронкой «корзина → чекаут → оплата»: там теряются деньги. Гипотеза разумная — заказы создаются, часть не оплачивается, значит что-то не так.

  • Возврат от «Подготовка теста» к «Новый экран»: Чинил экран до старта
  • Возврат от «Учёт оплат» к «Метрика и цели»: Чинил сломанные цели
Ход проекта

Ограничения

Решение 1. Новый первый экран

Старый первый экран truststore.ru: фиолетовый градиент во весь экран, заголовок «Лучший сервис по оплате зарубежных подписок» с эмодзи трофея, подзаголовок «Безопасные покупки. Мгновенная доставка. Гарантия качества.», белая кнопка «Популярные товары» и ссылка «Отзывы о нашей работе». Ниже — пять карточек фактов и летний баннер «Поздравляем с началом лета!» — откроется снимок целиком в новой вкладке
Первый экран до теста, июль 2026

Что не так со старым экраном

Мой экспертный разбор показал, что первый экран работает сильно хуже, чем мог бы:

1440 · 768 · 375 px

Новый первый экран, июль 2026

Что сделал— Решение 1

Убрал всё, что конкурировало за внимание: секция фактов дублировала первый экран и свернулась в одну тихую полосу, сезонный баннер снят.

Как сделано

Анимация — чистые SVG и CSS, ноль библиотек и ноль новых сетевых запросов, учтён prefers-reduced-motion. Экран собирается от 320 пикселей. Всё на токенах существующей дизайн-системы. Имена классов сохранены: на них завязаны цели аналитики, и переименование сломало бы измерения. Вёрстку собрал через Claude Code и передал пакетом на прод, выкатывал владелец.

Решение 2. Настоял на A/B-тесте вместо выката по вкусу

Новый экран нравился и мне, и владельцу. Это плохое основание для выката в прод.

Чем аргументировал

Его деньгами: первый экран покупатель видит сразу, нельзя дважды произвести первое впечатление. Это важная точка контакта с клиентом. Если он красивый, по нашему мнению, но хуже по метрикам, то падение спишут на сезон или конкурентов, и никто не узнает причину без A/B-теста.

Заранее объявил проигрышный для себя исход приемлемым: выигрывает старый экран — значит сэкономили деньги, не потеряли на новом. Новый выиграет — значит экран действительно лучше доводит клиентов до товаров. Правило решения зафиксировали до того, как увидели данные: выкатываем новый вариант, если он значимо выигрывает по кликам и не даёт значимого ухудшения по оплатам.

Спор про антифликер

Пока экран грузится, посетителю нельзя показать старый вариант и подменить на новый — часть аудитории попадёт не в свою группу. Стандартное решение — ненадолго скрыть страницу. У владельца таймаут стоял на 140–180 миллисекунд ради высокой оценки скорости загрузки сайта. Этого времени недостаточно, чтобы платформа успела ответить: тест просто перестаёт измерять. Предложил снимать маску не по таймеру, а в момент, когда платформа ответила, какой вариант показать: обычно это около 0,3 секунды. И скрывать не всю страницу, а только первый экран. Возражение про скорость разобрал отдельно: лабораторная оценка ранжирование не определяет. Цену решения назвал сразу: у тех, кому платформа не ответила вовсе, первый экран остаётся скрытым до 2,5 секунд, а потом показывается старый вариант. Владелец принял схему, и тест запустили с ней.

Что чинил до старта

Три недели ушли не на дизайн, а на то, чтобы тест мог измерять. Я нашёл ещё четыре поломки: ни одна не роняет тест с ошибкой — он продолжает идти и выдаёт правдоподобную цифру, которой нельзя верить. Клики по первому экрану гасил обработчик плавной прокрутки, скрипт параллакса тянул новый экран вниз, самописная навигация плодила копии стилей эксперимента, цели на клики в отзывы не существовало вовсе. Всё исправил до теста.

Самое полезное — история с копиями стилей. Навигация при каждом переходе добавляла на страницу ещё одну копию, и заголовок мерцал. Владелец починил: стиль с тем же именем больше не добавлялся второй раз. Владелец проверил так: посчитал на странице стили с этим именем. Нашёл один — значит, всё ок. Но такая проверка и не могла показать другое число: она считала ровно то, что починка убирала. Рядом копировался второй стиль, без имени, — его не видели ни починка, ни проверка. Я посчитал все стили эксперимента по содержимому, а не по имени, — копии продолжали множиться. Дал второму стилю имя, и только тогда счётчик перестал расти.

Результат теста

Отчёт A/B-теста «Hero: old vs new» в Вариокубе за 23 июля — 13 августа, фильтры «Исключить роботов» и «Только полные дни». График по дням: конверсия в клик по главной кнопке у двух групп с доверительными интервалами. Таблица: Old — 259 визитов, 26 с кликом, 10,04%, интервал от 5,53 до 14,54%; Connector — 363 визита, 82 с кликом, 22,59%, прирост 12,55 пункта, или 125,03%, интервал от 16,23 до 28,95%, p-value 0 — откроется снимок целиком в новой вкладке
Отчёт Вариокуба, 23 июля — 13 августа

Клики по главной кнопке: 10,0% → 22,6%, рост в 2,25 раза, p < 0,01, доверительные интервалы не пересекаются. Накопленная конверсия нового варианта держалась ровно на всех четырёх замерах — 22,4%, 24,6%, 22,5%, 22,6%. Так ведёт себя настоящий эффект, а не шум. Выкатили на 100%: выигрыш по кликам значимый, а оплаты не просели — это проверили уже по базе заказов, об этом в разделе «Что тест не доказал».

10,0% → 22,6%

Рост доли визитов с кликом по главной кнопке

Ещё один результат я не могу записать на свой счёт — это было бы не совсем честно. За период теста отказы упали почти вдвое, с 30% до 18%, — с первых же дней. Среди возможных причин есть и новый экран, но доказательств нет.

Что тест не доказал

Рядом с основной метрикой стояла вторая — конверсия в оплату, страховка «не стало ли хуже». У нового варианта она показала минус 40%, и Вариокуб в отчёте написал, что это незначимо. Визитов было мало: тест заметил бы только падение больше чем наполовину. Так что «незначимо» здесь значит не «не хуже», а «мы бы и не увидели».

Хуже того, моя цель-страховка считала не оплаты. Она засчитывала любой заход на страницу успеха, а это не факт платежа. Против реальных оплат в базе она завышала показатели в 2,55 раза. Цель давала 16,8% конверсии в оплату, а по базе заказов реальная — около 7%. Инструмент не мог измерить ничего. Потом я заменил её новой — об этом в Решении 3.

+155%

Столько лишних оплат засчитывала цель. База заказов, 4–13 августа

Точное влияние на деньги неизвестно. Метки эксперимента в заказах не было, разложить продажи по вариантам нельзя. Пересчёт по базе заказов показал, что ни одна ступень воронки не просела значимо. После завершения теста мы вернули старый вариант на три дня, и уровень оплат не изменился: если бы новый экран резал продажи на 40%, это было бы видно. Итого: новый вариант не показал ухудшения продаж.

Какая из правок сработала — неизвестно. Тест мерил связку целиком. Сколько дал ярлык кнопки, сколько её контраст, сколько плашка с рейтингом — по этим данным не разложится.

Клики по кнопке первого экрана — не главный путь к покупке: кнопка лишь прокручивает к товарам на той же странице, и до них доходят и без неё. Удвоение кликов улучшило вход в воронку, который для многих не критичен.

Решение 3. Заменить сломанный учёт, а не чинить его

Я прошёл путь покупки вживую и сверил цели с базой заказов. Метрикам верить было нельзя — в том числе тем, что настраивал я сам.

Что выяснил

Переходы внутри сайта не считались вообще. Навигация работала без перезагрузки, а виртуальный хит отправлялся только при условии, которое всегда ложно: скрипт навигации искал номер счётчика в переменной, которой на проде не было, — сам счётчик подключался с номером напрямую. Замерил вживую — подменил функцию отправки и посчитал запросы. Клики в шапке, футере и хлебных крошках не давали ни одного хита.

Возврат с платёжной страницы открывает новый визит, потому что меняется источник трафика. Составная воронка «корзина → чекаут → оплата в одном визите» не замыкалась в принципе. Плюс в чекаут вели два пути мимо страницы корзины: виджет, который стоит на каждой странице, и кнопка «Купить сейчас» у товара. Так что цель «посещение корзины» была сломана не технически, а концептуально: даже после починки она мерила бы один маршрут из трёх.

Цель «оплата», о которой я писал в разделе «Что тест не доказал», засчитывала любой заход на страницу успеха.

Что сделал— Решение 3

Переходы починил, не трогая код: через GTM задал переменную с номером счётчика, которую ждала навигация, и хиты пошли. Цель «посещение корзины» заменил событиями — «добавил в корзину» и «перешёл к оплате»: они срабатывают на любом из трёх маршрутов.

Цель «посещение корзины»засчитывает заход на страницу корзины

Цель «посещение корзины» считает один путь в чекаут из трёх — страницу корзины. Виджет корзины и кнопку «Купить сейчас» она не видит.

События «добавил в корзину» и «перешёл к оплате»срабатывают на любом пути

События «добавил в корзину» и «перешёл к оплате» считают все три пути в чекаут.

Был соблазн посчитать поправочный коэффициент к цели «оплата» и жить дальше. Нельзя: величина приписки плавала от периода к периоду — на одном отрезке +40%, на другом +13%, а в августе — в 2,55 раза. Коэффициент, который меняется, — это признак того, что метрике верить нельзя. Сначала я планировал метку в браузере: запоминать номер заказа перед переходом на оплату и засчитывать цель, если человек с ним вернулся. Отказался — метка подтверждала бы возвращение, а не платёж. Вместо неё владелец переписал страницу успеха так, чтобы она спрашивала статус заказа у сервера по номеру. Новую цель и остальной учёт я собрал сам, в GTM, — без новых деплоев владельца. Через несколько дней это окупилось: я нашёл 39 визитов за шесть дней, приходящих в обход обычного пути покупки, без номера заказа. Без условия по номеру новая цель зачла бы их как оплаты и сломалась бы ровно так же, как старая.

Новая цель не видит тех, кто оплатил в приложении банка и в браузер не вернулся, — недобирает около 29%. Инструмент, у которого не описана слепая зона, через месяц начнёт врать молча.

≈29%

Новая цель не видит тех, кто платит в приложении банка и не возвращается в браузер

Решение 4. Не редизайнить чекаут

Чем обосновал отказ

Заказ в базе появляется, когда человек заполнил чекаут и нажал «Оплатить». Примерно каждый четвёртый такой заказ так и не оплачивался — значит, через корзину и чекаут люди проходили, а терялись дальше, уже на платёжной странице. Сама форма чекаута короткая: два поля, правильные типы ввода, есть автозаполнение, сводка заказа над формой, липкая плашка с суммой на мобильном. Страница загружается быстро. На компьютерах и смартфонах покупают одинаково часто. Потери происходят после перехода на оплату — за пределами того, что я могу перерисовать. Редизайн чекаута дал бы сильно меньший эффект, чем устранение проблем на стороне оплаты.

≈25%

Доля заказов, не оплаченных за пределами сайта

Что сделал вместо редизайна

Разобрал путь оплаты по коду и нашёл четыре дефекта:

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

Блок «Состав и итог» чекаута truststore.ru до исправлений: ChatGPT Plus, 1 месяц, 2 490 ₽, к оплате 2 490 ₽, оплата через СБП — откроется снимок целиком в новой вкладке
Перед оплатой

Платёж не прошёл, человек вернулся на сайт

Тот же блок после неудачного платежа и возврата на сайт: вместо товара заглушка «Товар», 0 ₽, к оплате 0 ₽ — откроется снимок целиком в новой вкладке
После возврата

Я описал исправления, владелец выкатил версию, приёмку прошёл я на живом проде.

Результат

Я закрыл утечку на пути оплаты: человек, у которого не прошёл платёж, больше не начинает покупку с нуля. Основные потери остаются после перехода на оплату — их я описал и передал владельцу. Эффекта в процентах измерить не удалось. При таком объёме оплат измеримого прироста конверсии не будет ещё месяцы — чувствительности не хватает.

Чему научился

  1. Метрику-страховку сверять с базой заказов до старта. Уже в июле цель давала на 40% больше оплат, чем было в базе.
  2. Цели ставить на действие, а не на адрес страницы. «Посещение корзины» не видела покупателей, шедших в чекаут мимо неё, а «оплата» засчитывала любой заход на страницу успеха.
  3. Записывать в заказ, какой вариант видел покупатель. Без этого заказы не разделить по вариантам, и на вопрос «а продажи выросли?» точного ответа нет.

AI в работе

Весь проект я вёл через Claude Code: настройка Google Tag Manager, Яндекс Метрики, Вариокуба, чтение чужого кода по слепкам прода, разбор выгрузок базы, вёрстка нового экрана, отладка перед запуском.

Интереснее, где я его вывод отбросил.

Инструмент ускоряет всё, но иногда ошибается, и его надо перепроверять.

Другие кейсы

Интерфейс платформы Robotter: сводка портфеля, статистика сделок, график P&L и карточки активных ботов

Исследования UI/UX Дизайн-система 2024

Платформа для алготрей­динга

Спроектировал платформу целиком. Разобрал конкурентов, гонял модерируемые UX-тесты, собрал дизайн-систему с нуля, сделал AI-чат. К сожалению, продукт закрыли до релиза.

Смотреть кейс

Первый экран labs.robotter.ai: заголовок Web3 Venture Builder, три плитки с числами и логотипы клиентов

Концепт и дизайн Figma Readymag 2025

Редизайн сайта для блокчейн-разработчиков

Пересобрал структуру под доверие: подал услуги простыми словами, показал команду и кейсы с фактами. Собрал сайт без разработчика.

Смотреть кейс

Напишите

Открыт к удалённой работе. Рассматриваю продуктовые и UI/UX-позиции. Быстрее всего отвечу в Телеграме.