<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:yandex="http://news.yandex.ru" xmlns:turbo="http://turbo.yandex.ru" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>Кейсы</title>
    <link>https://www.ddoynikov.ru</link>
    <description/>
    <language>ru</language>
    <lastBuildDate>Mon, 06 Jul 2026 22:34:30 +0300</lastBuildDate>
    <item turbo="true">
      <title>Cosmopet: как убрать базовый SKU с сайта и начать строить D2C, который маркетплейс не съест</title>
      <link>https://www.ddoynikov.ru/cases/jbdtoyhcm1-cosmopet-kak-ubrat-bazovii-sku-s-saita-i</link>
      <amplink>https://www.ddoynikov.ru/cases/jbdtoyhcm1-cosmopet-kak-ubrat-bazovii-sku-s-saita-i?amp=true</amplink>
      <pubDate>Thu, 28 May 2026 17:48:00 +0300</pubDate>
      <author>Денис Дойников</author>
      <category>Обзор</category>
      <description>Ozon давал 75% оборота, Retention 70%, а unit-экономика разрушалась изнутри. Разбор архитектурной ломки канала через модель Закрытого клуба.</description>
      <turbo:content><![CDATA[<header><h1>Cosmopet: как убрать базовый SKU с сайта и начать строить D2C, который маркетплейс не съест</h1></header><blockquote class="t-redactor__quote">У большинства pet-food брендов в России сегодня одинаковая иллюзия контроля. Продажи растут, Ozon показывает красивую динамику, команда бодро отчитывается по ROMI, и собственник видит оборот — и считает, что система работает. Проблема в том, что бизнес в этот момент может уже находиться в предынфарктном состоянии: просто кассовый разрыв ещё не материализовался в конкретную цифру. Именно в этой точке мы зашли в Cosmopet — бренд премиальных кормов с сильными числами на поверхности и полностью разрушенной архитектурой каналов внутри.</blockquote><h2  class="t-redactor__h2"><span style="color: rgb(42, 82, 255);">§ 01//</span> Контекст и диагноз риск-зон</h2><blockquote class="t-redactor__preface"><strong>Когда хорошие цифры скрывают структурный разлом</strong></blockquote><div class="t-redactor__text">Снаружи картина выглядела сильной: Ozon давал около 75% оборота, а Retention внутри площадки доходил до 70%. Для FMCG-категории это аномально высокий показатель — на таких числах обычно строят кейсы успеха. Но когда начинаешь разбирать unit-экономику вглубь, картина переворачивается. Валовая маржа на базовом корме — около 14%. При этом 55% маркетингового бюджета уходило на продвижение внутри Ozon, ещё 28% — на Wildberries. Собственный сайт приносил меньше 1% оборота.<br /><br />Это не проблема трафика и не проблема контента. Это структурный диагноз: бизнес арендует клиентов у платформы, платит за их привлечение и не имеет никакого ownership над customer relationship. Площадка владеет данными, поведением, повторными заказами — бренд лишь поставляет SKU.<br /><br /><strong style="color: rgb(42, 82, 255);">Ключевые risk-зоны на старте:</strong><br /><br /><ul><li data-list="bullet">Валовая маржа на core-SKU ~14% при доле маркетплейсов &gt;80% оборота — любое изменение комиссионной политики площадки кладёт экономику модели</li><li data-list="bullet">83% маркетингового бюджета сжигается внутри чужой инфраструктуры без накопления собственного CRM-актива</li><li data-list="bullet">D2C-сайт существует формально: трафик есть, конверсии нет, причина не в UX — в ценовой архитектуре</li><li data-list="bullet">Бренд не имеет ни одного механизма перехвата клиента из маркетплейса в собственную экосистему</li></ul></div><img src="https://static.tildacdn.com/tild3133-3937-4463-a564-643534363465/Gemini_Generated_Ima.png"><blockquote class="t-redactor__preface"><strong style="color: rgb(42, 82, 255);">Корневая авария: ценовой разрыв, который физически убивает D2C</strong></blockquote><div class="t-redactor__text">Когда мы начали сравнивать цены на идентичные SKU в реальной рознице, появилась главная причина нулевой конверсии сайта. Базовый сухой корм Cosmocat 1.8 кг на официальном сайте стоил 4398 рублей. На официальной витрине Ozon — 1149 рублей. Разница почти в четыре раза.<br /><br />Клиент не воспринимает это как акцию маркетплейса. Он считывает это как ошибку ценообразования, наценку или прямой обман со стороны бренда — и уходит с сайта с устойчивым недоверием. Доверие к D2C-каналу разрушается не через плохой UX, а через ценовой сигнал, который невозможно перебить никаким performance-маркетингом.<br /><br />После этого любые разговоры про Яндекс.Директ, SEO или CRM превращаются в экономический абсурд. Механика выглядит так: бренд покупает трафик в Директе → пользователь переходит на сайт → видит корм за 4398 рублей → открывает Ozon → находит его за 1149 → покупает там. CAC оплачивает компания. Продажу забирает маркетплейс. Это не проблема конверсии — это архитектурная ловушка, в которую бизнес загонял себя сам каждый раз, когда увеличивал рекламный бюджет.</div><img src="https://static.tildacdn.com/tild6635-3837-4363-a232-323965313530/Gemini_Generated_Ima.png"><h2  class="t-redactor__h2"><span style="color: rgb(42, 82, 255);">§ 02 //</span> ИНЖЕНЕРИЯ СИСТЕМЫ И СИСТЕМНЫЕ РЕШЕНИЯ</h2><blockquote class="t-redactor__preface"><strong style="color: rgb(42, 82, 255);">Стратегический разворот: сайт перестаёт быть магазином</strong></blockquote><div class="t-redactor__text">Ключевое решение было радикальным, и именно поэтому оно работает. Пока одинаковый SKU существует одновременно на сайте и на маркетплейсе с разницей в цене в 4 раза — сайт никогда не выиграет эту битву. Поэтому базовый сухой корм был полностью убран из открытого каталога сайта. Не перепрайсован, не спрятан в подкатегорию — убран. Это единственное решение, которое разрывает порочный цикл.<br /><br />Сайт перестал быть магазином. Он стал закрытым D2C-клубом здоровья питомца. Как только бренд прекращает конкурировать SKU-в-SKU с маркетплейсом, появляется пространство для собственной экономики с нормальной маржой и ownership над клиентом.<br /><br />В открытый каталог сайта выведены только категории с ценовым паритетом и рабочей маржинальностью:<br /><ul><li data-list="bullet"><strong>Freeze-Dried лакомства</strong> — маржа ~20%, нет прямого ценового конкурента на Ozon</li><li data-list="bullet"><strong>Уходовая косметика Pet Spa с ионами серебра</strong> — premium-сегмент, слабо представленный на маркетплейсах</li><li data-list="bullet"><strong>Тофу-наполнители</strong> — нишевый продукт с низкой ценовой чувствительностью</li><li data-list="bullet"><strong>Закрытые health-бандлы и D2C-only наборы</strong> — сборки, которых нет на маркетплейсах физически</li><li data-list="bullet"><strong>Комплексные ветеринарные программы</strong> — персонализированный формат, несовместимый с карточкой товара на Ozon</li></ul></div><blockquote class="t-redactor__preface"><strong style="color: rgb(42, 82, 255);">Quiz-driven onboarding вместо каталога</strong></blockquote><div class="t-redactor__text">Вместо «выбери мешок из каталога» пользователь попадает в ветеринарный квиз-хаб. Он проходит тест-диагностику под особенности своего питомца — возраст, порода, вес, особенности ЖКТ, аллергии, чувствительность пищеварения, риски МКБ. На выходе система собирает индивидуальный стартовый набор. Это фундаментальная смена формата взаимодействия: не транзакция, а персонализированная рекомендация с ветеринарным контекстом.</div><blockquote class="t-redactor__preface"><strong style="color: rgb(42, 82, 255);">E-protein как narrative, а не ингредиент</strong></blockquote><div class="t-redactor__text">Отдельную позицию в стратегии занял E-protein — белок чёрной львинки с усвояемостью около 90%. У большинства брендов подобные инновации лежат мёртвым грузом в карточке товара в виде технической характеристики. Это сигнал о том, что команда думает категориями состава, а не категориями покупательской тревожности. Владелец животного не покупает «усвояемость 90%» — он покупает снижение тревоги за хроническое здоровье члена семьи. E-protein стал нарративной осью для истории про решение хронических ЖКТ-проблем, пищевых аллергий и превентивную заботу — preventive care как позиционирование, а не просто продуктовая фича.</div><blockquote class="t-redactor__preface"><strong style="color: rgb(42, 82, 255);">Механика инбокс-маркетинга: Ozon как верхний слой воронки</strong></blockquote><div class="t-redactor__text">Самая недооцененная вещь в работе с маркетплейсами — они уже выполняют функцию субсидируемой инфраструктуры привлечения. Ozon сам финансирует значительную часть customer acquisition: даёт аудиторию, закрывает логистику, обеспечивает доверие и формирует repeat behavior. Вопрос не в том, как уйти с маркетплейса. Вопрос в том, как перехватить клиента из чужой инфраструктуры в собственную.<br /><br />В каждую коробку с FBS-отгрузкой сухого корма на Ozon начали вкладываться:<br /><br /><ul><li data-list="bullet">Промо-паки Freeze-Dried лакомств (физический продукт, а не купон)</li><li data-list="bullet">QR-коды и вкладыши-приглашения в закрытый клуб Cosmopet</li><li data-list="bullet">Домашние экспресс-тесты на pH мочи кошки — для профилактики МКБ и цистита</li></ul><br />Принципиально важная деталь: это не скидки. Удержание строилось через value layer — дополнительную ценность, которой нет на маркетплейсе. Коммуникационная рамка звучала так: «На Ozon — базовое повседневное питание. В клубе Cosmopet — персональный ветеринарный care-уход для питомца». Это меняет восприятие бренда на уровне категории, а не на уровне промо.</div><img src="https://static.tildacdn.com/tild6264-3363-4166-b531-643663653635/Gemini_Generated_Ima.png"><blockquote class="t-redactor__preface"><strong style="color: rgb(42, 82, 255);">CRM: predictive replenishment вместо автоподписки</strong></blockquote><div class="t-redactor__text">Вместо жёсткой автоподписки (которую пользователь воспринимает как навязывание) внедрена predictive replenishment model — модель предиктивного пополнения. CRM-система рассчитывает цикл потребления корма на основе веса питомца, возраста, породы, объёма упаковки и нормы кормления. Когда в пачке остаётся около 25% корма — пользователь получает сообщение в WhatsApp или Telegram: его персонализированный повторный набор уже собран в корзине, осталось подтвердить заказ.<br /><br />Бренд перестаёт выглядеть продавцом, давящим на конверсию. Он становится системой заботы, которая думает за владельца. Именно здесь формируется настоящий D2C moat — не в UX и не в дизайне, а в ownership над customer relationship, который невозможно скопировать через маркетплейс.</div><h2  class="t-redactor__h2"><span style="color: rgb(42, 82, 255);">§ 03 //</span> ПРОТОКОЛ ДЕЙСТВИЙ: ЧТО БЫЛО → СДЕЛАНО → СТАЛО</h2><div class="t-table__viewport"><div class="t-table__wrapper"><table class="t-table__table"><tbody><tr class="t-table__row" style="color:rgb(42, 82, 255);"><td class="t-table__cell" data-row="0" data-column="0"><div class="t-table__cell-content">Департамент / Канал
</div></td><td class="t-table__cell" data-row="0" data-column="1"><div class="t-table__cell-content">Было на старте
</div></td><td class="t-table__cell" data-row="0" data-column="2"><div class="t-table__cell-content">Что сделано руками и головой
</div></td><td class="t-table__cell" data-row="0" data-column="3"><div class="t-table__cell-content">Итоговый результат (Стало)
</div></td></tr><tr class="t-table__row" style="color:rgb(42, 82, 255);"><td class="t-table__cell" data-row="1" data-column="0"><div class="t-table__cell-content">1. Стратегия D2C и сайт
</div></td><td class="t-table__cell" data-row="1" data-column="1"><div class="t-table__cell-content"></div></td><td class="t-table__cell" data-row="1" data-column="2"><div class="t-table__cell-content"></div></td><td class="t-table__cell" data-row="1" data-column="3"><div class="t-table__cell-content"></div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="2" data-column="0"><div class="t-table__cell-content">Роль сайта
</div></td><td class="t-table__cell" data-row="2" data-column="1"><div class="t-table__cell-content">Дублирующий интернет-магазин с теми же SKU, что на маркетплейсе
</div></td><td class="t-table__cell" data-row="2" data-column="2"><div class="t-table__cell-content">Полный редизайн роли канала: сайт перепозиционирован как закрытый D2C-клуб здоровья питомца
</div></td><td class="t-table__cell" data-row="2" data-column="3"><div class="t-table__cell-content">Сайт перестал конкурировать с Ozon SKU-в-SKU — появилось собственное ценностное пространство
</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="3" data-column="0"><div class="t-table__cell-content">Каталог и ассортимент
</div></td><td class="t-table__cell" data-row="3" data-column="1"><div class="t-table__cell-content">Базовый сухой корм в открытом каталоге по цене 4398 руб. (vs 1149 руб. на Ozon)
</div></td><td class="t-table__cell" data-row="3" data-column="2"><div class="t-table__cell-content">Базовый корм полностью убран из каталога сайта; выведены только high-margin и D2C-exclusive категории
</div></td><td class="t-table__cell" data-row="3" data-column="3"><div class="t-table__cell-content">Ценовой каннибализм устранён; каталог сайта не создаёт ценовых противоречий в customer journey
</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="4" data-column="0"><div class="t-table__cell-content">Конверсионная механика
</div></td><td class="t-table__cell" data-row="4" data-column="1"><div class="t-table__cell-content">Стандартный каталог товаров без персонализации
</div></td><td class="t-table__cell" data-row="4" data-column="2"><div class="t-table__cell-content">Разработан ветеринарный квиз-хаб (quiz-driven onboarding): диагностика по возрасту, породе, весу, ЖКТ, аллергиям, риску МКБ
</div></td><td class="t-table__cell" data-row="4" data-column="3"><div class="t-table__cell-content">Пользователь получает персонализированный стартовый набор вместо обезличенного SKU из каталога
</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="5" data-column="0"><div class="t-table__cell-content">Доля сайта в обороте
</div></td><td class="t-table__cell" data-row="5" data-column="1"><div class="t-table__cell-content"><1%
</div></td><td class="t-table__cell" data-row="5" data-column="2"><div class="t-table__cell-content">Переключение трафика с performance на органику + CRM-перехват из маркетплейса
</div></td><td class="t-table__cell" data-row="5" data-column="3"><div class="t-table__cell-content">Канал переведён из «мёртвой зоны» в активный D2C-актив с собственной customer base
</div></td></tr><tr class="t-table__row" style="color:rgb(42, 82, 255);"><td class="t-table__cell" data-row="6" data-column="0"><div class="t-table__cell-content">2. Продуктовый микс и инбокс-маркетинг
</div></td><td class="t-table__cell" data-row="6" data-column="1"><div class="t-table__cell-content"></div></td><td class="t-table__cell" data-row="6" data-column="2"><div class="t-table__cell-content"></div></td><td class="t-table__cell" data-row="6" data-column="3"><div class="t-table__cell-content"></div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="7" data-column="0"><div class="t-table__cell-content">Freeze-Dried лакомства
</div></td><td class="t-table__cell" data-row="7" data-column="1"><div class="t-table__cell-content">Присутствовали в ассортименте как обычные SKU без стратегической роли
</div></td><td class="t-table__cell" data-row="7" data-column="2"><div class="t-table__cell-content">Переведены в статус D2C-anchor category; физически вкладываются в FBS-коробки как промо-семплы
</div></td><td class="t-table__cell" data-row="7" data-column="3"><div class="t-table__cell-content">Стали точкой входа в закрытый клуб — первый физический контакт с premium-продуктом без барьера цены
</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="8" data-column="0"><div class="t-table__cell-content">Уходовая косметика Pet Spa с ионами серебра
</div></td><td class="t-table__cell" data-row="8" data-column="1"><div class="t-table__cell-content">Находилась в ассортименте без отдельной маркетинговой стратегии
</div></td><td class="t-table__cell" data-row="8" data-column="2"><div class="t-table__cell-content">Выделена в premium D2C-only линейку; позиционируется как часть экосистемы health-care, недоступной на маркетплейсах
</div></td><td class="t-table__cell" data-row="8" data-column="3"><div class="t-table__cell-content">Создан ассортиментный периметр, который физически невозможно воспроизвести в карточке Ozon
</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="9" data-column="0"><div class="t-table__cell-content">Инбокс-маркетинг
</div></td><td class="t-table__cell" data-row="9" data-column="1"><div class="t-table__cell-content">Отсутствовал — коробки уходили с FBS без какого-либо value layer
</div></td><td class="t-table__cell" data-row="9" data-column="2"><div class="t-table__cell-content">В каждую FBS-отгрузку добавлены: промо-пак Freeze-Dried, QR + вкладыш-приглашение в клуб, экспресс-тест pH мочи
</div></td><td class="t-table__cell" data-row="9" data-column="3"><div class="t-table__cell-content">Каждая маркетплейс-отгрузка стала точкой CRM-перехвата; физический продукт заменил скидочный купон
</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="10" data-column="0"><div class="t-table__cell-content">E-protein (белок чёрной львинки)
</div></td><td class="t-table__cell" data-row="10" data-column="1"><div class="t-table__cell-content">Техническая характеристика в карточке товара — «усвояемость 90%»
</div></td><td class="t-table__cell" data-row="10" data-column="2"><div class="t-table__cell-content">Переведён в нарративную ось: история про превентивный care, решение хронических ЖКТ-проблем и снижение тревожности владельца
</div></td><td class="t-table__cell" data-row="10" data-column="3"><div class="t-table__cell-content">Продуктовая инновация стала маркетинговым активом и дифференциатором позиционирования
</div></td></tr><tr class="t-table__row" style="color:rgb(42, 82, 255);"><td class="t-table__cell" data-row="11" data-column="0"><div class="t-table__cell-content">3. CRM-инфраструктура и Predictive Replenishment
</div></td><td class="t-table__cell" data-row="11" data-column="1"><div class="t-table__cell-content"></div></td><td class="t-table__cell" data-row="11" data-column="2"><div class="t-table__cell-content"></div></td><td class="t-table__cell" data-row="11" data-column="3"><div class="t-table__cell-content"></div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="12" data-column="0"><div class="t-table__cell-content">CRM-модель
</div></td><td class="t-table__cell" data-row="12" data-column="1"><div class="t-table__cell-content">Отсутствовала полноценная CRM; повторные покупки обеспечивал Ozon своими алгоритмами
</div></td><td class="t-table__cell" data-row="12" data-column="2"><div class="t-table__cell-content">Разработана predictive replenishment model на основе веса питомца, возраста, породы, объёма упаковки и нормы кормления
</div></td><td class="t-table__cell" data-row="12" data-column="3"><div class="t-table__cell-content">Бренд вышел из зависимости от алгоритмов маркетплейса в формировании повторного спроса
</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="13" data-column="0"><div class="t-table__cell-content">Триггерные коммуникации
</div></td><td class="t-table__cell" data-row="13" data-column="1"><div class="t-table__cell-content">Push-рассылки без персонализации или их отсутствие
</div></td><td class="t-table__cell" data-row="13" data-column="2"><div class="t-table__cell-content">Автоматический расчёт цикла потребления; триггер при остатке ~25% корма — сообщение в WhatsApp/Telegram с готовой корзиной
</div></td><td class="t-table__cell" data-row="13" data-column="3"><div class="t-table__cell-content">Retention перестал быть функцией Ozon — он стал функцией собственной CRM-системы бренда
</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="14" data-column="0"><div class="t-table__cell-content">Ownership над клиентом
</div></td><td class="t-table__cell" data-row="14" data-column="1"><div class="t-table__cell-content">Клиент принадлежал платформе: данные, поведение, повторные заказы — всё на стороне Ozon
</div></td><td class="t-table__cell" data-row="14" data-column="2"><div class="t-table__cell-content">Построена собственная база с данными питомца, историей потребления и персонализированными health-параметрами
</div></td><td class="t-table__cell" data-row="14" data-column="3"><div class="t-table__cell-content">Сформирован D2C moat — капитализируемый актив, который не исчезает при изменении политики маркетплейса
</div></td></tr></tbody><colgroup><col style="max-width:180px;min-width:180px;width:180px;"><col style="max-width:180px;min-width:180px;width:180px;"><col style="max-width:180px;min-width:180px;width:180px;"><col style="max-width:180px;min-width:180px;width:180px;"></colgroup></table></div></div><blockquote class="t-redactor__callout t-redactor__callout_fontSize_default" style="background: #161618; color: #ffffff;">
                                <div class="t-redactor__callout-icon" style="color: #2a52ff">
                                    <svg width="24" height="24" role="img" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24">
                                        <circle cx="12.125" cy="12.125" r="12" style="fill:currentColor"/>
                                        <path d="M10.922 6.486c0-.728.406-1.091 1.217-1.091s1.215.363 1.215 1.091c0 .347-.102.617-.304.81-.202.193-.507.289-.911.289-.811 0-1.217-.366-1.217-1.099zm2.33 11.306h-2.234V9.604h2.234v8.188z" style="fill:#fff"/>
                                    </svg>
                                </div>
                                <div class="t-redactor__callout-text">
                                     Маркетплейсы не убивают D2C. D2C убивает неправильная архитектура каналов. Ozon в этой стратегии не враг и не конечная точка продажи — это субсидируемая инфраструктура привлечения, которую бренд либо использует как верхний слой воронки, либо добровольно отдаёт платформе весь customer relationship навсегда.<br /><br />Директор по маркетингу, который воспринимает маркетплейс как канал продаж, постепенно и безвозвратно теряет контроль над клиентом, маржой и экономикой бизнеса. Директор по маркетингу, который воспринимает его как subsidized acquisition — начинает строить независимый, капитализируемый актив поверх чужой инфраструктуры.<br /><br />Cosmopet не уходил с Ozon. Он перестал на нём заканчиваться.
                                </div>
                            </blockquote>]]></turbo:content>
    </item>
    <item turbo="true">
      <title>Додо. Как мы сократили расходы на маркетинг в 4 раза.</title>
      <link>https://www.ddoynikov.ru/cases/dodo_case</link>
      <amplink>https://www.ddoynikov.ru/cases/dodo_case?amp=true</amplink>
      <pubDate>Mon, 06 Jul 2026 23:25:00 +0300</pubDate>
      <author>Денис Дойников</author>
      <category>Кейсы</category>
      <description>Маркетинг - чёрный ящик: история сети из 10 пиццерий. Снизили расходы с 774 тыс. до 184 тыс. рублей в месяц без падения продаж, пересобрали команду и наладили систему. Для тех, у кого маркетинг уже не «ручной», но до регламента далеко.</description>
      <turbo:content><![CDATA[<header><h1>Додо. Как мы сократили расходы на маркетинг в 4 раза.</h1></header><h2  class="t-redactor__h2">Ситуация</h2><div class="t-redactor__text">Сеть из 10 пиццерий в 8 городах Юга России. Оборот - почти 100 млн рублей в месяц.</div><div class="t-redactor__text">В штате — два SMM-специалиста. Один без глубоких компетенций. Второй с опытом, но его подход не вписывается в задачи сети. Работа идёт по инерции, без системы.</div><div class="t-redactor__text">На аутсорсе — таргетолог (50 тыс. руб/мес) и директолог (110 тыс. руб/мес плюс 20 тыс. за настройку нового кабинета при открытии точки).</div><div class="t-redactor__text">Отчётность фрагментирована: данные в Метрике, ВКонтакте, Appsflyer. Собрать общую картину невозможно. Никто не владеет полной информацией — ни в штате, ни у подрядчиков.</div><div class="t-redactor__text">Вот как выглядела ситуация.</div><h2  class="t-redactor__h2">Что сделали</h2><div class="t-redactor__text"><strong>Шаг первый. Аудит процессов, а не каналов</strong></div><div class="t-redactor__text">Не начинали с рекламных кампаний. Посмотрели, как устроена работа.</div><div class="t-redactor__text">Выяснилось: у команды нет единой логики. Отчёты дублируют друг друга. Подрядчики работают изолированно. Таргетолог получает задачу «продвинь этот пост» — и продвигает. Без анализа, без гипотез, без связи с бизнес-целями.</div><div class="t-redactor__text">Собственник управлял не маркетингом, а людьми, которые что-то делают. Но ответа на вопрос «зачем это делается» не было.</div><div class="t-redactor__text">Данные собрали за год. Из Метрики, Appsflyer, ВКонтакте. Свели в единую таблицу. Только после этого стало видно, какие связки работают, а какие — нет.</div><div class="t-redactor__text"><strong>Шаг второй. Пересобрали бюджет</strong></div><div class="t-redactor__text">Раньше деньги распределяли по принципу «процент от выручки». Для обычных точек — 1%, для проблемных — 1,5%.</div><div class="t-redactor__text">Ушли от этой логики.</div><div class="t-redactor__text">Теперь бюджет исходил из задач: сколько денег нужно конкретной точке, чтобы получить результат. Не «сколько нужно освоить», а <strong>«сколько нужно для роста»</strong>.</div><div class="t-redactor__text"><strong>Шаг третий. Пересмотрели роли</strong></div><div class="t-redactor__text">Вместо четырех разрозненных исполнителей (два SMM-специалиста в штате и два подрядчика на аутсорсе) сделали двух ответственных. Один на диджитал, второй в офлайн.</div><div class="t-redactor__text">С двумя сотрудниками расстались. Не потому что плохие, а потому что их навыки не подходили для реализации задач. Две размытые роли превратились в одну понятную.</div><div class="t-redactor__text">Подрядчиков убрали полностью. Их функции взял на себя новый сотрудник - интегрированный в бизнес. </div><div class="t-redactor__embedcode"><style>
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Unbounded:wght@600;700&display=swap');

.dd-team,
.dd-team *,
.dd-team *::before,
.dd-team *::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

.dd-team {
  --dd-bg: #fffbf7;
  --dd-ink: #11100e;
  --dd-muted: #636366;
  --dd-border: rgba(17, 16, 14, 0.14);
  --dd-accent: #f2662b;
  font-family: 'Inter', system-ui, -apple-system, sans-serif;
  background: var(--dd-bg);
  color: var(--dd-ink);
  width: 100%;
  max-width: 820px;
  padding: clamp(4px, 1vw, 8px);
}

.dd-team__grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: clamp(12px, 2.5vw, 20px);
}

.dd-team__card {
  display: flex;
  flex-direction: column;
  padding: clamp(20px, 4vw, 28px);
  min-height: 100%;
}

.dd-team__card--before {
  border: 1px solid var(--dd-border);
  border-radius: 0;
  background: var(--dd-bg);
}

.dd-team__card--after {
  border: none;
  border-radius: 0;
  background: var(--dd-bg);
  border-top: 3px solid var(--dd-accent);
}

.dd-team__head {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: clamp(16px, 3vw, 24px);
}

.dd-team__icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  flex-shrink: 0;
  font-size: 16px;
  font-weight: 700;
  line-height: 1;
  border-radius: 0;
}

.dd-team__icon--before {
  color: var(--dd-muted);
  border: 1.5px solid var(--dd-muted);
}

.dd-team__icon--after {
  color: var(--dd-accent);
  border: 1.5px solid var(--dd-accent);
}

.dd-team__title {
  font-size: clamp(13px, 2.2vw, 14px);
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--dd-muted);
}

.dd-team__card--after .dd-team__title {
  color: var(--dd-accent);
}

.dd-team__list {
  list-style: none;
  display: flex;
  flex-direction: column;
  gap: clamp(10px, 2vw, 14px);
  flex: 1;
  margin-bottom: clamp(20px, 4vw, 32px);
}

.dd-team__item {
  font-size: clamp(14px, 2.5vw, 16px);
  line-height: 1.45;
  color: var(--dd-ink);
  padding-left: 0;
}

.dd-team__item--muted {
  color: var(--dd-muted);
}

.dd-team__item strong {
  font-weight: 600;
  color: var(--dd-ink);
}

.dd-team__price {
  font-family: 'Unbounded', system-ui, sans-serif;
  font-weight: 700;
  font-size: clamp(22px, 5vw, 36px);
  line-height: 1.1;
  letter-spacing: -0.04em;
  margin-top: auto;
}

.dd-team__price--before {
  color: var(--dd-muted);
}

.dd-team__price--after {
  color: var(--dd-ink);
}

.dd-team__price-note {
  display: block;
  margin-top: 6px;
  font-family: 'Inter', system-ui, sans-serif;
  font-size: clamp(12px, 2.2vw, 14px);
  font-weight: 400;
  letter-spacing: 0;
  color: var(--dd-muted);
}

@media (max-width: 640px) {
  .dd-team__grid {
    grid-template-columns: 1fr;
  }
}
</style>

<div class="dd-team">
  <div class="dd-team__grid">

    <div class="dd-team__card dd-team__card--before">
      <div class="dd-team__head">
        <span class="dd-team__icon dd-team__icon--before" aria-hidden="true">✕</span>
        <span class="dd-team__title">Было</span>
      </div>
      <ul class="dd-team__list">
        <li class="dd-team__item">2&nbsp;SMM-специалиста</li>
        <li class="dd-team__item">Таргетолог — <strong>50&nbsp;000&nbsp;₽</strong></li>
        <li class="dd-team__item">Директолог — <strong>110&nbsp;000&nbsp;₽</strong> + <strong>20&nbsp;000&nbsp;₽</strong></li>
        <li class="dd-team__item dd-team__item--muted">4&nbsp;исполнителя, разные отчёты, нет единой ответственности</li>
      </ul>
      <div class="dd-team__price dd-team__price--before">
        ~310&nbsp;000&nbsp;₽/мес
        <span class="dd-team__price-note">Затраты с непредсказуемым результатом</span>
      </div>
    </div>

    <div class="dd-team__card dd-team__card--after">
      <div class="dd-team__head">
        <span class="dd-team__icon dd-team__icon--after" aria-hidden="true">✓</span>
        <span class="dd-team__title">Стало</span>
      </div>
      <ul class="dd-team__list">
        <li class="dd-team__item"><strong>1&nbsp;ответственный</strong> за диджитал </li>
        <li class="dd-team__item"><strong>1&nbsp;ответственный</strong> за офлайн </li>
        <li class="dd-team__item">Единая отчётность</li>
        <li class="dd-team__item">Стоимость та же, но ответственность другая</li>
      </ul>
      <div class="dd-team__price dd-team__price--after">
        &nbsp;300&nbsp;000&nbsp;₽
        <span class="dd-team__price-note">порядок вместо хаоса</span>
      </div>
    </div>

  </div>
</div></div><div class="t-redactor__text"><strong>Шаг четвёртый. Ввели систему подготовки к открытиям</strong></div><div class="t-redactor__text">Раньше открытие новой пиццерии — это производственный Ад. Всё делали в последний момент. За неделю до старта никто не мог сказать, какие рассылки запущены и что будет в день открытия.</div><div class="t-redactor__text">Создали чек-лист. Запустили подготовку за 3 месяца до открытия. Постепенно, без авралов, без переработок.</div><div class="t-redactor__text">В день открытия всё готово. Никто не забыл, ничего не упустили.</div><div class="t-redactor__text">Каждый из этих шагов по отдельности не дал бы эффекта. Вместе они превратили хаос в систему.</div><img src="https://static.tildacdn.com/tild3131-3764-4937-b639-633137323130/SCR-20260704-bzfb.png"><h2  class="t-redactor__h2">Результат</h2><div class="t-redactor__text"><strong>Бюджет перестал быть чёрной дырой.</strong></div><div class="t-redactor__embedcode"><style>
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Unbounded:wght@600;700&display=swap');

.dd-budget,
.dd-budget *,
.dd-budget *::before,
.dd-budget *::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

.dd-budget {
  --dd-bg: #fffbf7;
  --dd-ink: #11100e;
  --dd-muted: #636366;
  --dd-accent: #f2662b;
  --dd-white: #ffffff;
  --dd-border: rgba(17, 16, 14, 0.18);
  font-family: 'Inter', system-ui, -apple-system, sans-serif;
  background: var(--dd-bg);
  color: var(--dd-ink);
  width: 100%;
  max-width: 720px;
  padding: clamp(20px, 4vw, 32px);
  border-radius: 0;
}

.dd-budget__label {
  display: inline-block;
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--dd-muted);
  margin-bottom: clamp(16px, 3vw, 24px);
}

.dd-budget__main {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: clamp(8px, 2vw, 16px);
  margin-bottom: clamp(14px, 2.5vw, 20px);
}

.dd-budget__amount {
  font-family: 'Unbounded', system-ui, sans-serif;
  font-weight: 700;
  line-height: 1.05;
  letter-spacing: -0.04em;
  white-space: nowrap;
}

.dd-budget__amount--old {
  font-size: clamp(22px, 5.5vw, 40px);
  font-weight: 600;
  color: var(--dd-muted);
  text-decoration: line-through;
  text-decoration-thickness: 2px;
}

.dd-budget__arrow {
  font-family: 'Unbounded', system-ui, sans-serif;
  font-size: clamp(18px, 4vw, 28px);
  font-weight: 700;
  color: var(--dd-accent);
  line-height: 1;
}

.dd-budget__amount--new {
  font-size: clamp(28px, 7vw, 48px);
  color: var(--dd-ink);
}

.dd-budget__badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 6px 12px;
  background: var(--dd-accent);
  color: var(--dd-bg);
  font-family: 'Inter', system-ui, sans-serif;
  font-size: clamp(13px, 2.5vw, 15px);
  font-weight: 600;
  line-height: 1;
  border-radius: 0;
  white-space: nowrap;
}

.dd-budget__conclusion {
  font-size: clamp(15px, 2.8vw, 18px);
  font-weight: 400;
  line-height: 1.45;
  color: var(--dd-ink);
  margin-bottom: clamp(18px, 3.5vw, 28px);
  max-width: 36ch;
}

.dd-budget__footer {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
}

.dd-budget__chip {
  flex: 1 1 220px;
  padding: clamp(12px, 2.5vw, 16px) clamp(14px, 3vw, 20px);
  font-size: clamp(13px, 2.5vw, 15px);
  font-weight: 600;
  line-height: 1.35;
  border-radius: 0;
}

.dd-budget__chip--accent {
  background: var(--dd-accent);
  color: var(--dd-bg);
}

.dd-budget__chip--outline {
  background: var(--dd-white);
  color: var(--dd-ink);
  border: 1px solid var(--dd-border);
  font-weight: 500;
}

@media (max-width: 480px) {
  .dd-budget__main {
    flex-direction: column;
    align-items: flex-start;
  }

  .dd-budget__arrow {
    transform: rotate(90deg);
  }

  .dd-budget__footer {
    flex-direction: column;
  }

  .dd-budget__chip {
    flex: 1 1 auto;
    width: 100%;
  }
}
</style>

<div class="dd-budget">
  <div class="dd-budget__label">Бюджет на маркетинг</div>

  <div class="dd-budget__main">
    <span class="dd-budget__amount dd-budget__amount--old">774&nbsp;000&nbsp;₽</span>
    <span class="dd-budget__arrow" aria-hidden="true">→</span>
    <span class="dd-budget__amount dd-budget__amount--new">184&nbsp;000&nbsp;₽</span>
    <span class="dd-budget__badge">−76%</span>
  </div>

  <p class="dd-budget__conclusion">Снизили расходы без падения продаж</p>

  <div class="dd-budget__footer">
    <div class="dd-budget__chip dd-budget__chip--accent">Экономия 590&nbsp;000&nbsp;₽/мес</div>
    <div class="dd-budget__chip dd-budget__chip--outline">Срок: 5&nbsp;месяцев</div>
  </div>
</div></div><div class="t-redactor__text">В июле 2025 расходы на маркетинг составляли 774 тыс. рублей в месяц. К ноябрю снизили до 184 тыс. — в 4,2 раза. Без падения продаж.</div><div class="t-redactor__text">В феврале и марте мы намеренно увеличили расходы до 855 тыс. и 756 тыс. — чтобы провести масштабные кампании в четырёх городах. Бюджет стал инструментом, а не статьёй расходов.</div><div class="t-redactor__text">Только на подрядчиках сэкономили 1,8 млн рублей в год. Рекламные кампании пересобрали — убрали всё, что не приносило заказов.</div><div class="t-redactor__text"><strong>Выручка сети выросла на 8,2%.</strong></div><div class="t-redactor__text">Июль 2025 — 74,1 млн рублей. Май 2026 — 80,2 млн рублей. С учётом двух новых пиццерий, которые открылись за этот период.</div><div class="t-redactor__text">Если смотреть только на существующие точки — динамика другая: 65,1 млн в июле 2025 против 63,8 млн в июне 2026. С учётом сезонности и падающего рынка — это удержание позиций без повышения цен.</div><div class="t-redactor__text">По данным официальной отчётности Додо Пицца, трафик в апреле 2026 упал на 8% по сравнению с прошлым годом. В наших пиццериях динамика лучше: от -3% до +2,7% по разным городам. В некоторых точках — Пятигорск, Лабинск — заказы выросли, несмотря на общий тренд.</div><img src="https://static.tildacdn.com/tild3461-3934-4436-a533-376139313539/SCR-20260704-cayt.png"><div class="t-redactor__text"><strong>Возврат с каждого рубля стал предсказуемым.</strong></div><div class="t-redactor__text">Раньше он колебался от 20% до 391%. Неделя на неделю не приходилась. Бюджет планировать было невозможно.</div><div class="t-redactor__text">Теперь он стабильный — в диапазоне 550–890% в первые месяцы 2026 года.</div><div class="t-redactor__embedcode"><style>
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap');

.dd-chart-widget,
.dd-chart-widget *,
.dd-chart-widget *::before,
.dd-chart-widget *::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

.dd-chart-widget {
  --dd-bg: #fffbf7;
  --dd-ink: #11100e;
  --dd-muted: #636366;
  --dd-bar: #e8e3dc;
  --dd-bar-hover: #d9d2c9;
  --dd-accent: #f2662b;
  --dd-accent-dim: rgba(242, 102, 43, 0.12);
  font-family: 'Inter', system-ui, -apple-system, sans-serif;
  background: var(--dd-bg);
  color: var(--dd-ink);
  width: 100%;
  max-width: 100%;
  padding: clamp(16px, 3vw, 28px);
  border-radius: 0;
  position: relative;
}

.dd-chart-widget__legend {
  display: flex;
  flex-wrap: wrap;
  gap: clamp(16px, 3vw, 28px);
  margin-bottom: clamp(12px, 2.5vw, 20px);
  font-size: clamp(12px, 2.2vw, 13px);
  font-weight: 500;
  color: var(--dd-muted);
}

.dd-chart-widget__legend-item {
  display: inline-flex;
  align-items: center;
  gap: 8px;
}

.dd-chart-widget__legend-bar {
  width: 14px;
  height: 14px;
  background: var(--dd-bar);
  border-radius: 0;
  flex-shrink: 0;
}

.dd-chart-widget__legend-line {
  width: 22px;
  height: 3px;
  background: var(--dd-accent);
  border-radius: 0;
  flex-shrink: 0;
  position: relative;
}

.dd-chart-widget__legend-line::after {
  content: '';
  position: absolute;
  right: -1px;
  top: 50%;
  width: 7px;
  height: 7px;
  background: var(--dd-accent);
  border-radius: 50%;
  transform: translateY(-50%);
}

.dd-chart-widget__scroll {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  padding-bottom: 4px;
}

.dd-chart-widget__scroll::-webkit-scrollbar {
  height: 4px;
}

.dd-chart-widget__scroll::-webkit-scrollbar-thumb {
  background: rgba(17, 16, 14, 0.15);
  border-radius: 0;
}

.dd-chart-widget__canvas {
  display: block;
  height: auto;
  overflow: visible;
}

.dd-chart-widget__tip {
  position: absolute;
  pointer-events: none;
  opacity: 0;
  transform: translate(-50%, -110%);
  background: var(--dd-ink);
  color: var(--dd-bg);
  font-size: 12px;
  line-height: 1.45;
  padding: 8px 12px;
  border-radius: 0;
  white-space: nowrap;
  z-index: 10;
  transition: opacity 0.15s ease;
}

.dd-chart-widget__tip.is-visible {
  opacity: 1;
}

.dd-chart-widget__tip strong {
  display: block;
  font-weight: 600;
  margin-bottom: 2px;
}
</style>

<div class="dd-chart-widget" data-dd-chart>
  <div class="dd-chart-widget__legend">
    <span class="dd-chart-widget__legend-item">
      <span class="dd-chart-widget__legend-bar" aria-hidden="true"></span>
      Затраты, тыс. ₽
    </span>
    <span class="dd-chart-widget__legend-item">
      <span class="dd-chart-widget__legend-line" aria-hidden="true"></span>
      ср ROMI
    </span>
  </div>
  <div class="dd-chart-widget__scroll">
    <svg class="dd-chart-widget__canvas" role="img" aria-label="Динамика затрат и ср ROMI, декабрь 2024 — май 2026"></svg>
  </div>
  <div class="dd-chart-widget__tip" aria-hidden="true"></div>
</div>

<script>
(function () {
  var DATA = {
    months: ['дек. 24','янв. 25','февр. 25','мар. 25','апр. 25','мая 25','июн. 25','июл. 25','авг. 25','сент. 25','окт. 25','нояб. 25','дек. 25','янв. 26','февр. 26','мар. 26','апр. 26','мая 26'],
    shortMonths: ['дек','янв','фев','мар','апр','май','июн','июл','авг','сен','окт','ноя','дек','янв','фев','мар','апр','май'],
    expenses: [817058,518523,565033,582165,667830,699043,661930,774046,303057,395206,346159,184871,370890,268270,855437,756229,394899,343021],
    romi: [209,18,48,147,152,1484,506,261,391,89,471,1090,785,890,584,716,550,552]
  };

  var COLORS = {
    ink: '#11100e',
    muted: '#636366',
    bar: '#e8e3dc',
    barHover: '#d9d2c9',
    accent: '#f2662b',
    accentDim: 'rgba(242, 102, 43, 0.12)',
    grid: 'rgba(17, 16, 14, 0.08)',
    bg: '#fffbf7'
  };

  var START_IDX = 7;
  var CAMP_IDX = [14, 15];
  var hasAnimated = false;

  function easeOutCubic(t) {
    return 1 - Math.pow(1 - t, 3);
  }

  function toThousands(v) {
    return Math.round(v / 1000);
  }

  function el(tag, attrs) {
    var node = document.createElementNS('http://www.w3.org/2000/svg', tag);
    Object.keys(attrs || {}).forEach(function (k) {
      node.setAttribute(k, attrs[k]);
    });
    return node;
  }

  function fmtMoney(v) {
    return toThousands(v).toLocaleString('ru-RU');
  }

  function initChart() {
    var wrap = document.querySelector('[data-dd-chart]');
    if (!wrap || wrap.getAttribute('data-dd-ready') === '1') return;

    var svg = wrap.querySelector('.dd-chart-widget__canvas');
    var tip = wrap.querySelector('.dd-chart-widget__tip');
    if (!svg) return;

    wrap.setAttribute('data-dd-ready', '1');

    var expenses = DATA.expenses.map(toThousands);
    var romi = DATA.romi;
    var n = DATA.months.length;

    function isMobile() {
      return window.innerWidth <= 640;
    }

    function shouldShowMonth(i) {
      if (isMobile()) return i % 3 === 0 || i === n - 1;
      return i % 2 === 0 || i === n - 1;
    }

    function getRomiLabelPos(i, cy) {
      var prev = i > 0 ? romi[i - 1] : romi[i];
      var next = i < n - 1 ? romi[i + 1] : romi[i];
      var isPeak = romi[i] >= prev && romi[i] >= next;
      var isValley = romi[i] <= prev && romi[i] <= next;

      if (isPeak) return { y: cy - 16, anchor: 'above' };
      if (isValley) return { y: cy + 20, anchor: 'below' };
      return i % 2 === 0 ? { y: cy - 14, anchor: 'above' } : { y: cy + 18, anchor: 'below' };
    }

    function haloText(x, y, str, opts) {
      opts = opts || {};
      var g = el('g', { opacity: opts.opacity != null ? opts.opacity : 1 });
      var t = el('text', {
        x: x,
        y: y,
        fill: opts.fill || COLORS.muted,
        'font-size': opts.size || 10,
        'font-family': 'Inter, system-ui, sans-serif',
        'font-weight': opts.weight || '400',
        'text-anchor': opts.anchor || 'middle',
        stroke: COLORS.bg,
        'stroke-width': opts.halo || 3,
        'paint-order': 'stroke fill'
      });
      t.textContent = str;
      g.appendChild(t);
      svg.appendChild(g);
      return g;
    }

    function animateAttr(node, attr, from, to, delay, duration) {
      setTimeout(function () {
        var start = performance.now();
        function frame(now) {
          var t = Math.min(1, (now - start) / duration);
          var v = from + (to - from) * easeOutCubic(t);
          node.setAttribute(attr, v.toFixed(2));
          if (t < 1) requestAnimationFrame(frame);
        }
        requestAnimationFrame(frame);
      }, delay);
    }

    function animateOpacity(node, delay, duration, target) {
      node.setAttribute('opacity', '0');
      setTimeout(function () {
        var start = performance.now();
        function frame(now) {
          var t = Math.min(1, (now - start) / duration);
          node.setAttribute('opacity', (easeOutCubic(t) * (target || 1)).toFixed(3));
          if (t < 1) requestAnimationFrame(frame);
        }
        requestAnimationFrame(frame);
      }, delay);
    }

    function animateDash(path, delay, duration) {
      var len = path.getTotalLength();
      path.setAttribute('stroke-dasharray', len);
      path.setAttribute('stroke-dashoffset', len);
      setTimeout(function () {
        var start = performance.now();
        function frame(now) {
          var t = Math.min(1, (now - start) / duration);
          path.setAttribute('stroke-dashoffset', (len * (1 - easeOutCubic(t))).toFixed(2));
          if (t < 1) requestAnimationFrame(frame);
        }
        requestAnimationFrame(frame);
      }, delay);
    }

    function showTip(e, html) {
      var rect = wrap.getBoundingClientRect();
      tip.innerHTML = html;
      tip.classList.add('is-visible');
      tip.style.left = (e.clientX - rect.left) + 'px';
      tip.style.top = (e.clientY - rect.top) + 'px';
    }

    function hideTip() {
      tip.classList.remove('is-visible');
    }

    function draw(doAnimate) {
      var slotMin = isMobile() ? 42 : 52;
      var w = Math.max(wrap.clientWidth, n * slotMin + 120);
      var h = isMobile() ? 380 : 420;
      var pad = {
        top: isMobile() ? 78 : 88,
        right: 62,
        bottom: isMobile() ? 48 : 56,
        left: 58
      };

      var chartW = w - pad.left - pad.right;
      var chartH = h - pad.top - pad.bottom;
      var expMax = 900;
      var romiMax = 1600;
      var slot = chartW / n;
      var barW = Math.min(slot * 0.58, isMobile() ? 22 : 28);
      var bottom = pad.top + chartH;
      var axisFont = isMobile() ? 9 : 10;
      var valueFont = isMobile() ? 8 : 9;
      var noteFont = isMobile() ? 8 : 9;

      svg.setAttribute('viewBox', '0 0 ' + w + ' ' + h);
      svg.setAttribute('width', w);
      svg.setAttribute('height', h);
      svg.innerHTML = '';

      function xCenter(i) {
        return pad.left + slot * i + slot / 2;
      }

      function yExp(v) {
        return pad.top + chartH - (v / expMax) * chartH;
      }

      function yRomi(v) {
        return pad.top + chartH - (v / romiMax) * chartH;
      }

      haloText(pad.left, 22, 'Затраты, тыс. ₽', {
        anchor: 'start',
        size: axisFont,
        fill: COLORS.muted,
        weight: '500',
        halo: 0
      });

      haloText(w - pad.right, 22, 'ср ROMI, %', {
        anchor: 'end',
        size: axisFont,
        fill: COLORS.accent,
        weight: '500',
        halo: 0
      });

      [0.2, 0.4, 0.6, 0.8, 1].forEach(function (ratio) {
        svg.appendChild(el('line', {
          x1: pad.left,
          y1: pad.top + chartH * (1 - ratio),
          x2: pad.left + chartW,
          y2: pad.top + chartH * (1 - ratio),
          stroke: COLORS.grid,
          'stroke-width': 1
        }));
      });

      [0, 200, 400, 600, 800].forEach(function (v) {
        haloText(pad.left - 16, yExp(v) + 4, v, { anchor: 'end', size: axisFont, halo: 2 });
      });

      [0, 400, 800, 1200, 1600].forEach(function (v) {
        haloText(w - pad.right + 16, yRomi(v) + 4, v, {
          anchor: 'start',
          size: axisFont,
          fill: COLORS.accent,
          halo: 2
        });
      });

      /* Июль 2025 */
      (function () {
        var cx = xCenter(START_IDX);
        var tagY = pad.top - 30;
        var tagW = isMobile() ? 68 : 84;
        var box = el('rect', {
          x: cx - tagW / 2,
          y: tagY - 14,
          width: tagW,
          height: 18,
          fill: COLORS.accentDim,
          stroke: COLORS.accent,
          'stroke-width': 1,
          opacity: doAnimate ? 0 : 1
        });
        svg.appendChild(box);
        var label = haloText(cx, tagY, 'Пришёл я', {
          size: noteFont,
          fill: COLORS.accent,
          weight: '600',
          opacity: doAnimate ? 0 : 1,
          halo: 2
        });
        var line = el('line', {
          x1: cx,
          y1: tagY + 4,
          x2: cx,
          y2: yExp(expenses[START_IDX]) - 8,
          stroke: COLORS.accent,
          'stroke-width': 1,
          'stroke-dasharray': '3 3',
          opacity: doAnimate ? 0 : 0.55
        });
        svg.appendChild(line);
        if (doAnimate) {
          animateOpacity(box, 500, 450, 1);
          animateOpacity(label, 550, 450, 1);
          animateOpacity(line, 600, 450, 0.55);
        }
      })();

      /* Фев–мар 2026 */
      (function () {
        var x1 = xCenter(CAMP_IDX[0]);
        var x2 = xCenter(CAMP_IDX[1]);
        var barTop = Math.min(yExp(expenses[CAMP_IDX[0]]), yExp(expenses[CAMP_IDX[1]]));
        var bracketY = barTop - (isMobile() ? 34 : 42);
        var label = isMobile() ? 'Крупные кампании' : 'Крупные рекламные кампании';
        var labelW = isMobile() ? 112 : 170;

        var box = el('rect', {
          x: (x1 + x2) / 2 - labelW / 2,
          y: bracketY - 16,
          width: labelW,
          height: 18,
          fill: COLORS.accentDim,
          stroke: COLORS.accent,
          'stroke-width': 1,
          opacity: doAnimate ? 0 : 1
        });
        svg.appendChild(box);

        var camp = haloText((x1 + x2) / 2, bracketY - 3, label, {
          size: noteFont,
          fill: COLORS.accent,
          weight: '600',
          opacity: doAnimate ? 0 : 1,
          halo: 2
        });

        [x1, x2].forEach(function (x) {
          svg.appendChild(el('line', {
            x1: x,
            y1: bracketY + 2,
            x2: x,
            y2: barTop - 8,
            stroke: COLORS.accent,
            'stroke-width': 1,
            'stroke-dasharray': '3 3',
            opacity: 0.5
          }));
        });

        svg.appendChild(el('line', {
          x1: x1,
          y1: bracketY + 2,
          x2: x2,
          y2: bracketY + 2,
          stroke: COLORS.accent,
          'stroke-width': 1,
          opacity: 0.5
        }));

        if (doAnimate) {
          animateOpacity(box, 800, 450, 1);
          animateOpacity(camp, 850, 450, 1);
        }
      })();

      /* Столбцы */
      expenses.forEach(function (v, i) {
        var cx = xCenter(i);
        var y = yExp(v);
        var barH = bottom - y;

        var hit = el('rect', {
          x: cx - slot / 2,
          y: pad.top,
          width: slot,
          height: chartH,
          fill: 'transparent',
          'data-idx': i
        });
        hit.style.cursor = 'pointer';
        hit.addEventListener('mouseenter', function (e) {
          rect.setAttribute('fill', COLORS.barHover);
          showTip(e,
            '<strong>' + DATA.months[i] + '</strong>' +
            'Затраты: ' + fmtMoney(DATA.expenses[i]) + ' ₽<br>' +
            'ср ROMI: ' + romi[i] + '%'
          );
        });
        hit.addEventListener('mousemove', function (e) {
          showTip(e,
            '<strong>' + DATA.months[i] + '</strong>' +
            'Затраты: ' + fmtMoney(DATA.expenses[i]) + ' ₽<br>' +
            'ср ROMI: ' + romi[i] + '%'
          );
        });
        hit.addEventListener('mouseleave', function () {
          rect.setAttribute('fill', COLORS.bar);
          hideTip();
        });
        svg.appendChild(hit);

        var rect = el('rect', {
          x: cx - barW / 2,
          y: doAnimate ? bottom : y,
          width: barW,
          height: doAnimate ? 0 : barH,
          fill: COLORS.bar,
          rx: 0
        });
        svg.appendChild(rect);

        var expLabelY = Math.max(y + 14, pad.top + 12);
        var val = haloText(cx, expLabelY, String(v), {
          size: valueFont,
          fill: COLORS.ink,
          weight: '600',
          opacity: doAnimate ? 0 : 1,
          halo: 3
        });

        if (doAnimate) {
          animateAttr(rect, 'y', bottom, y, 150 + i * 35, 550);
          animateAttr(rect, 'height', 0, barH, 150 + i * 35, 550);
          animateOpacity(val, 150 + i * 35 + 300, 350, 1);
        }
      });

      /* Линия ROMI */
      var pathD = romi.map(function (v, i) {
        return (i === 0 ? 'M' : 'L') + xCenter(i).toFixed(2) + ' ' + yRomi(v).toFixed(2);
      }).join(' ');

      var path = el('path', {
        d: pathD,
        fill: 'none',
        stroke: COLORS.accent,
        'stroke-width': isMobile() ? 2 : 2.5,
        'stroke-linejoin': 'round',
        'stroke-linecap': 'round'
      });
      svg.appendChild(path);
      if (doAnimate) animateDash(path, 500, 1400);

      /* Точки ROMI */
      romi.forEach(function (v, i) {
        var cx = xCenter(i);
        var cy = yRomi(v);
        var pos = getRomiLabelPos(i, cy);

        var dot = el('circle', {
          cx: cx,
          cy: cy,
          r: isMobile() ? 3 : 3.5,
          fill: COLORS.accent,
          stroke: COLORS.bg,
          'stroke-width': 1.5,
          opacity: doAnimate ? 0 : 1
        });
        dot.style.cursor = 'pointer';
        dot.addEventListener('mouseenter', function (e) {
          dot.setAttribute('r', isMobile() ? 4.5 : 5);
          showTip(e,
            '<strong>' + DATA.months[i] + '</strong>' +
            'ср ROMI: ' + v + '%<br>' +
            'Затраты: ' + fmtMoney(DATA.expenses[i]) + ' ₽'
          );
        });
        dot.addEventListener('mousemove', function (e) {
          showTip(e,
            '<strong>' + DATA.months[i] + '</strong>' +
            'ср ROMI: ' + v + '%<br>' +
            'Затраты: ' + fmtMoney(DATA.expenses[i]) + ' ₽'
          );
        });
        dot.addEventListener('mouseleave', function () {
          dot.setAttribute('r', isMobile() ? 3 : 3.5);
          hideTip();
        });
        svg.appendChild(dot);

        var pct = haloText(cx, pos.y, v + '%', {
          size: valueFont,
          fill: COLORS.accent,
          weight: '600',
          opacity: doAnimate ? 0 : 1,
          halo: 4
        });

        if (doAnimate) {
          animateOpacity(dot, 700 + i * 45, 300, 1);
          animateOpacity(pct, 750 + i * 45, 300, 1);
        }
      });

      /* Ось X */
      DATA.months.forEach(function (label, i) {
        if (!shouldShowMonth(i)) return;
        var shown = isMobile() ? DATA.shortMonths[i] + " '" + label.split('.')[1].trim().slice(-2) : label;
        haloText(xCenter(i), h - pad.bottom + 20, shown, {
          size: isMobile() ? 8 : 10,
          fill: COLORS.muted,
          halo: 2
        });
      });

      svg.appendChild(el('line', {
        x1: pad.left,
        y1: bottom,
        x2: pad.left + chartW,
        y2: bottom,
        stroke: 'rgba(17, 16, 14, 0.15)',
        'stroke-width': 1
      }));
    }

    draw(!hasAnimated);
    hasAnimated = true;

    var resizeTimer;
    window.addEventListener('resize', function () {
      clearTimeout(resizeTimer);
      resizeTimer = setTimeout(function () { draw(false); }, 150);
    });
  }

  function boot() {
    initChart();
  }

  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', boot);
  } else {
    boot();
  }

  setTimeout(boot, 400);
  setTimeout(boot, 1200);
})();
</script></div><div class="t-redactor__text"><strong>Система заработала.</strong></div><div class="t-redactor__text">Раньше ивенты проводили от случая к случаю. Теперь «День пиццы» проходит раз в две недели в каждой пиццерии. С шоу-программой, акциями, прогревом.</div><div class="t-redactor__text">Один такой день в Элисте принёс 303 тыс. рублей выручки и 752 новых клиента за сутки. В Михайловске — 410 тыс. рублей и 266 новых клиентов. Это не разовая акция. Это регулярный процесс, который приносит прибыль.</div><div class="t-redactor__text">Теперь на каждый вопрос из начала есть ответ. Сколько заказов принёс каждый рубль? Какой возврат по каждой точке? Почему бюджет именно такой? Всё это не гадание. Это управленческие решения, подкреплённые цифрами.</div><div class="t-redactor__embedcode"><style>
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500&family=Unbounded:wght@600;700&display=swap');

.dd-quote,
.dd-quote *,
.dd-quote *::before,
.dd-quote *::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

.dd-quote {
  --dd-bg: #0b0b0c;
  --dd-cream: #fffbf7;
  --dd-muted: #636366;
  --dd-accent: #f2662b;
  font-family: 'Inter', system-ui, -apple-system, sans-serif;
  background: var(--dd-bg);
  color: var(--dd-cream);
  width: 100%;
  max-width: 900px;
  padding: clamp(48px, 10vw, 96px) clamp(24px, 5vw, 48px);
  text-align: center;
}

.dd-quote__inner {
  max-width: 48ch;
  margin: 0 auto;
}

.dd-quote__mark {
  display: block;
  font-family: 'Inter', system-ui, sans-serif;
  font-size: clamp(40px, 10vw, 64px);
  font-weight: 700;
  line-height: 0.8;
  color: var(--dd-accent);
  text-align: left;
  margin-bottom: clamp(8px, 2vw, 16px);
  user-select: none;
}

.dd-quote__text {
  font-family: 'Inter', system-ui, sans-serif;
  font-size: clamp(24px, 5vw, 36px);
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: -0.04em;
  color: var(--dd-cream);
  text-align: left;
  margin-bottom: clamp(20px, 4vw, 32px);
}

.dd-quote__divider {
  display: block;
  width: clamp(48px, 12vw, 72px);
  height: 2px;
  background: var(--dd-accent);
  margin: 0 auto clamp(16px, 3vw, 24px);
  border: none;
}

.dd-quote__note {
  font-family: 'Inter', system-ui, sans-serif;
  font-size: clamp(14px, 2.5vw, 16px);
  font-weight: 400;
  line-height: 1.5;
  color: var(--dd-muted);
  max-width: 52ch;
  margin: 0 auto;
}
</style>

<blockquote class="dd-quote">
  <div class="dd-quote__inner">
    <span class="dd-quote__mark" aria-hidden="true">«</span>
    <p class="dd-quote__text">Это не разовая акция. Это регулярный процесс, который приносит прибыль</p>
    <span class="dd-quote__divider" aria-hidden="true"></span>
    <p class="dd-quote__note">День пиццы проходит 1&nbsp;раз в&nbsp;год. Мероприятие с&nbsp;подрядчиками, конкурсами и&nbsp;акцией</p>
  </div>
</blockquote></div><h2  class="t-redactor__h2">Кому полезен этот опыт</h2><div class="t-redactor__text"><strong>Собственникам бизнеса с оборотом от 300 млн до 5 млрд рублей.</strong></div><div class="t-redactor__text">Тем, у кого маркетинг уперся в потолок.</div><div class="t-redactor__text">Кто подозревает, что деньги уходят впустую, но не знает, с какой стороны подойти.</div><div class="t-redactor__text">Кому надоело управлять людьми вместо управления результатами.</div>]]></turbo:content>
    </item>
    <item turbo="true">
      <title>ЗооОптТорг. Вывести новый бренд в ТОП по прибыли</title>
      <link>https://www.ddoynikov.ru/cases/zoopt_case</link>
      <amplink>https://www.ddoynikov.ru/cases/zoopt_case?amp=true</amplink>
      <pubDate>Sat, 04 Jul 2026 02:04:00 +0300</pubDate>
      <author>Денис Дойников</author>
      <category>Кейсы</category>
      <description>Запустили премиальный корм Jarvi. Построили дашборд, чтобы видеть окупаемость акции в реальном времени. Через 3 месяца акция перестала быть убыточной.</description>
      <turbo:content><![CDATA[<header><h1>ЗооОптТорг. Вывести новый бренд в ТОП по прибыли</h1></header><h3  class="t-redactor__h3">Боль: Мы работали как «кормушка» для гигантов</h3><div class="t-redactor__text">Мы продавали корма Royal Canin и Proplan. Стабильный поток, высокая узнаваемость. Но маржа смешная. Клиенты приходили за брендом, а мы зарабатывали копейки.</div><div class="t-redactor__text">При этом мы видели, что рынок зоотоваров растёт, конкуренция ещё не консолидирована, а покупатели готовы платить за качество. Мы хотели запустить свой премиальный корм — Jarvi, эксклюзивный финский продукт. Но как?</div><div class="t-redactor__text">Раздавать бесплатно — страшно. Расходы растут, а отдачи нет. Запускать рекламу — непонятно, окупится ли. Мы застряли в совещаниях. Каждый день отсрочки — потерянная прибыль. Но и ошибиться было нельзя: бюджет ограничен, сеть федеральная, ошибка ударит по всей компании.</div><h3  class="t-redactor__h3">Ситуация: федеральная сеть с оборотом от 500 млн в месяц</h3><div class="t-redactor__text">Zoopt — крупная сеть зоомагазинов, работающая в нескольких городах-миллионниках. У нас были розничные точки, интернет-магазин и партнёрство с маркетплейсами. Мы знали, что наши клиенты покупают дорогие корма. Но мы не знали, как переключить их на свой продукт.</div><div class="t-redactor__text">Мы видели данные по продажам, но они лежали мёртвым грузом. Было много цифр, но ни одной системы, которая помогала бы принимать решения. Решения принимались на основе опыта и интуиции — как у большинства ритейлеров.</div><h3  class="t-redactor__h3">Что мы сделали</h3><h4  class="t-redactor__h4">Шаг 1. Поняли: пробник — лучшая реклама</h4><div class="t-redactor__text">Вместо того чтобы заливать бюджеты в контекстную рекламу и ТВ, мы решили дать клиентам попробовать Jarvi бесплатно. Не потому что мы щедрые, а потому что это дешевле, чем покупать лояльность через рекламу.</div><div class="t-redactor__text">Себестоимость одного пауча — 21 рубль. Это копейки по сравнению с тем, сколько мы платили за привлечение нового клиента через Яндекс.Директ.</div><div class="t-redactor__text">Механика была простой: клиент покупает Royal Canin или Proplan на сумму от 2000 рублей — получает пару паучей Jarvi в подарок. Клиент счастлив (подарок), его питомец пробует новый корм, а через 1–2 недели клиент возвращается за полноценной упаковкой Jarvi. Потому что питомцу понравилось, а хозяин видит, что корм качественный.</div><div class="t-redactor__text">Мы знали: если мы дадим человеку попробовать хороший продукт, он к нему вернётся. Главное — перетерпеть первые недели, когда видны только затраты.</div><h4  class="t-redactor__h4">Шаг 2. Перестали гадать — построили дашборд</h4><div class="t-redactor__text">Раздавать подарки мы начали ежедневно. И каждый день видели, как растут расходы. Это было страшно. Собственники спрашивали: «Мы что, просто раздаём корм? Когда это начнёт окупаться?»</div><div class="t-redactor__embedcode"><link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">

<blockquote class="dd-quote">
  <span class="dd-quote__mark" aria-hidden="true">"</span>
  <p class="dd-quote__text">Мы что, просто раздаём корм? Когда это начнёт окупаться?</p>
  <footer class="dd-quote__footer">
    <cite class="dd-quote__author">Собственники сети Zoopt</cite>
  </footer>
</blockquote>

<style>
  .dd-quote {
    width: 100%;
    background: #0b0b0c;
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
    box-sizing: border-box;
    margin: 0;
    padding: 72px 48px 64px;
    border: none;
    position: relative;
  }

  .dd-quote *,
  .dd-quote *::before,
  .dd-quote *::after {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
  }

  .dd-quote__mark {
    display: block;
    font-size: 64px;
    font-weight: 700;
    line-height: 1;
    color: #f2662b;
    margin-bottom: 8px;
    user-select: none;
  }

  .dd-quote__text {
    max-width: 780px;
    font-size: clamp(22px, 3.2vw, 36px);
    font-weight: 500;
    line-height: 1.35;
    letter-spacing: -0.02em;
    color: #fffbf7;
  }

  .dd-quote__footer {
    display: flex;
    justify-content: flex-end;
    margin-top: 32px;
  }

  .dd-quote__author {
    font-style: normal;
    font-size: 13px;
    font-weight: 600;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: #f2662b;
  }

  @media (max-width: 639px) {
    .dd-quote {
      padding: 48px 24px 40px;
    }

    .dd-quote__mark {
      font-size: 48px;
      margin-bottom: 4px;
    }

    .dd-quote__text {
      font-size: 20px;
      line-height: 1.4;
    }

    .dd-quote__footer {
      margin-top: 24px;
    }

    .dd-quote__author {
      font-size: 11px;
    }
  }
</style>

<script></script></div><div class="t-redactor__text">Чтобы ответить на этот вопрос, мы построили дашборд. Он работал на реальных данных из нашей базы. Сразу скажу: цифры на дашборде изменены для демонстрации — я не раскрываю коммерческую тайну Zoopt. Но логика ровно та, что мы использовали в работе.</div><div class="t-redactor__text">Раньше мы строили такие отчёты в Power BI. Но сейчас, в условиях блокировок, мы пересобрали всё в открытом Superset. Это бесплатно, не блокируется и выглядит современно. Мы показываем, что можно обойтись без дорогих импортных инструментов.</div><div class="t-redactor__text">Наш дашборд показывал две линии в реальном времени:</div><div class="t-redactor__text"><ul><li data-list="bullet"><strong>Красная</strong> — накопленные затраты на подарки. Она росла быстро, и это пугало.</li><li data-list="bullet"><strong>Зелёная</strong> — накопленный доход от повторных продаж Jarvi. Сначала она стояла на месте.</li></ul></div><div class="t-redactor__text">Мы смотрели на этот график каждый день. И заставляли себя терпеть, когда красная линия уходила вверх, а зелёная даже не шевелилась.</div><h4  class="t-redactor__h4">Шаг 3. Управляли акцией итеративно</h4><div class="t-redactor__text">Мы не запустили акцию и не забыли. Мы её постоянно улучшали.</div><div class="t-redactor__text">В первые недели мы поняли, что даём слишком много паучей — клиент пробовал и не возвращался, потому что ему хватало подарка на неделю. Мы сократили количество паучей в подарке, и доля клиентов, вернувшихся за покупкой, выросла.</div><div class="t-redactor__text">Потом мы заметили, что в некоторых магазинах акция работает хуже, чем в других. Мы проверили — оказалось, что консультанты забывали предлагать подарок. Мы провели короткое обучение, и возврат клиентов подтянулся.</div><div class="t-redactor__text">Мы отключали акцию на неделю, смотрели, как падают продажи Jarvi, и понимали, что без подарков клиенты не переключаются. Включали обратно — и снова наблюдали за кривыми.</div><div class="t-redactor__text">Каждое решение мы принимали, глядя на дашборд. Мы не гадали — мы видели, что работает, а что нет.</div><h4  class="t-redactor__h4">Шаг 4. Дождались точки окупаемости</h4><div class="t-redactor__text">На 78-й день случилось главное. Зелёная линия пересекла красную. Акция перестала быть убыточной.</div><img src="https://static.tildacdn.com/tild3861-6138-4464-b833-386264366534/image.png"><div class="t-redactor__text">Теперь каждый рубль, который мы вкладывали в подарки, приносил доход от повторных продаж. А через 3 месяца мы вышли на устойчивую самоокупаемость.</div><div class="t-redactor__text">Мы знали, что если доля вернувшихся клиентов упадёт ниже 15% — мы остановим акцию. Она держалась в диапазоне 20–28%. Мы управляли рисками, а не надеялись на авось.</div><img src="https://static.tildacdn.com/tild3039-3866-4531-b131-386334616130/image.png"><h3  class="t-redactor__h3">Результат</h3><div class="t-redactor__text"><ul><li data-list="bullet"><strong>Через 3 месяца</strong> акция вышла на самоокупаемость.</li><li data-list="bullet"><strong>Через 1.5 года</strong> Jarvi занял &gt; 40% валовой прибыли сети в своём сегменте.</li><li data-list="bullet"><strong>Мы снизили зависимость</strong> от брендов-гигантов — начали зарабатывать на собственном эксклюзивном продукте.</li><li data-list="bullet"><strong>Сейчас Jarvi продаётся</strong> не только в ЗооОптТорг. Бренд состоялся как самостоятельный финский премиальный корм. У него свой сайт, своя аудитория, свои лояльные клиенты.</li></ul></div><div class="t-redactor__text">Но главный результат — не цифры. А то, что мы перестали принимать решения на основе интуиции. Мы построили систему, которая показывает, где бизнес теряет деньги, а где — зарабатывает. И это стало стандартом для всех наших следующих акций.</div><h3  class="t-redactor__h3">Кому полезен этот кейс</h3><div class="t-redactor__text"><ul><li data-list="bullet"><strong>Если вы хотите запустить свой продукт</strong>, но боитесь слить бюджет и не знаете, с какой стороны подойти.</li><li data-list="bullet"><strong>Если у вас есть данные</strong>, но нет системы принятия решений — вы тонете в отчётах, но не видите главного.</li><li data-list="bullet"><strong>Если вы устали гадать</strong>, окупится ли акция, и хотите видеть это в реальном времени на дашборде.</li><li data-list="bullet"><strong>Если вы готовы вкладываться в клиентов</strong>, но хотите понимать, когда это перестаёт быть расходом и становится инвестицией.</li><li data-list="bullet"><strong>Если ваш бизнес перерос «маркетинг по наитию»</strong> и требует управляемости.</li></ul></div><div class="t-redactor__text">Если вы узнали себя в этой истории — давайте обсудим, как я могу построить такую же систему в вашем бизнесе.</div><div class="t-redactor__text">Я не просто маркетолог. Я строю управляемые процессы на основе данных. Я пишу SQL, строю дашборды и считаю экономику каждого канала продаж. Если вам нужен человек, который говорит с собственниками на языке прибыли, а не охватов, — напишите мне.</div>]]></turbo:content>
    </item>
    <item turbo="true">
      <title>Superpet. Мы привлекли в 3 раза больше клиентов, но они не возвращались. Проблема оказалась не в рекламе</title>
      <link>https://www.ddoynikov.ru/cases/superpet_case</link>
      <amplink>https://www.ddoynikov.ru/cases/superpet_case?amp=true</amplink>
      <pubDate>Sat, 04 Jul 2026 02:05:00 +0300</pubDate>
      <author>Денис Дойников</author>
      <description>Реклама работала, но клиенты не возвращались. Вместо настройки таргета мы проанализировали покупателей, нашли проблему в доставке и запустили эксперимент, изменивший логистику.</description>
      <turbo:content><![CDATA[<header><h1>Superpet. Мы привлекли в 3 раза больше клиентов, но они не возвращались. Проблема оказалась не в рекламе</h1></header><h3  class="t-redactor__h3">Боль</h3><div class="t-redactor__text">Когда я пришёл в Superpet, собственник сказал:</div><div class="t-redactor__text"><em>«Денис, мы делаем хороший продукт. Клиенты нас любят, отзывы отличные. Но мы не растем. Нужно каким-то образом кратно увеличивать количество новых клиентов».</em></div><div class="t-redactor__text">Он тратил на рекламу. Запускал точечные кампании. Менял креативы. Новые клиенты приходили — но не возвращались. База стояла на месте. Деньги уходили в песок.</div><div class="t-redactor__text">Он привык, что «маркетинг — это про привлечение». И не смотрел дальше первого заказа.</div><h3  class="t-redactor__h3">Ситуация</h3><div class="t-redactor__text">Superpet — производитель натуральных замороженных кормов для кошек и собак по системе BARF (сырое мясо с овощами). Это не сухой корм из злаков и субпродуктов, а просто мясо рубят, фасуют, замораживают. Никакой химии. Можно посмотреть здесь: superpet.ru</div><div class="t-redactor__text">Рынок нишевый, но растущий. Основные города — Москва и Санкт-Петербург. Ежемесячная выручка ~25 млн рублей. Вся компания ~30 человек.</div><div class="t-redactor__text">Аудитория: владельцы кошек (82%), женщины (85%), доход выше среднего. В основном Москва (78%) и Питер (21%). Среди профессий — образование, IT, строительство. 74% ведут ЗОЖ. Это не те, кто ищет дешёвый корм. Они ищут здоровье для питомца.</div><div class="t-redactor__text">И три сегмента:</div><div class="t-redactor__text"><ul><li data-list="bullet"><strong>Лояльные.</strong> Уже кормят натуралкой. Их мало, и они наши.</li><li data-list="bullet"><strong>Сомневающиеся.</strong> Знают, что сухой корм — вредно, но не знают, с какой стороны подступиться к переходу. Их много.</li><li data-list="bullet"><strong>Противники.</strong> Не верят, не хотят заморачиваться.</li></ul></div><div class="t-redactor__text">Компания работала только с первым сегментом — теми, кто уже «созрел». На остальных просто не было понятного языка.</div><h3  class="t-redactor__h3">Что сделали</h3><div class="t-redactor__text"><strong>1. Перестроили воронку привлечения</strong></div><div class="t-redactor__text">Вместо прямых продаж запустили многоступенчатый прогрев. Статьи и реклама о вреде сухих кормов («А вы знаете, что сухой корм для кошек — как доширак для людей?»), потом образование («Как перейти на натуралку без стресса»), потом предложение готового решения.</div><div class="t-redactor__text">Стратегия пугала и давила на чувство вины. Мы знали: это вызовет негатив у части аудитории. Но другого способа «расшатать» парадигму мышления не было.</div><div class="t-redactor__text">Бюджет вырос. Собственник нервничал: <em>«Мы тратим больше, а гарантий нет»</em>. Шел второй месяц экспериментов. Но я настоял: нужен еще 1 месяц.</div><div class="t-redactor__text">Результат пришёл: <strong>в марте — 650 новых клиентов</strong>. В три раза больше, чем в феврале.</div><div class="t-redactor__text">Но через месяц я заметил тревожный сигнал: эти 650 человек почти не возвращались за повторными заказами. Воронка снова сломалась — теперь на этапе удержания.</div><div class="t-redactor__text">Я посмотрел на цифры и подумал: <em>«Мы привлекли их. Они купили. Почему они ушли?»</em>.</div><div class="t-redactor__text"><strong>2. Провели исследование клиентов</strong></div><div class="t-redactor__text">Я не стал гадать. Мы запустили опросы — больше тысячи респондентов. Провели глубинные интервью с 76 лояльными покупателями. Послушали записи звонков. Прочитали чаты поддержки.</div><div class="t-redactor__text">Выяснили главное.</div><div class="t-redactor__text">76% потенциальных клиентов боятся переходить на натуралку. Главный страх: «а станет ли питомец есть?» (31%). Второй: «из чего это сделано?» (19%). Третий: «дорого» (13%).</div><div class="t-redactor__text">Но для тех, кто уже купил, всё было иначе. Постоянные клиенты любят Superpet за удобство (18%), доставку (17%), качество и состав (по 11%).</div><div class="t-redactor__text">И тут мы наткнулись на стену.</div><div class="t-redactor__text">В открытых вопросах и интервью клиенты снова и снова писали одно и то же:</div><div class="t-redactor__text"><em>«У вас сложно выбрать, что купить»</em>.</div><div class="t-redactor__text"><em>«У меня закончился корм, а ваш ждать сколько?»</em>.</div><div class="t-redactor__text"><em>«Сегодня заказал — через два дня привезут. Это долго»</em>.</div><div class="t-redactor__text">Я перечитал эти ответы раз десять. И понял.</div><div class="t-redactor__text"><strong>3. Нашли скрытый тормоз</strong></div><div class="t-redactor__text">В Superpet работала стандартная схема: заказы собирали до 16:00, на следующий день формировали маршруты, доставляли через день. Для рынка товаров повседневного спроса это катастрофа.</div><div class="t-redactor__text">Владелец питомца не планирует корм за двое суток. Когда пауч закончился, он хочет купить новый в течение пары часов.</div><div class="t-redactor__text">Я пришёл к собственнику и сказал:</div><div class="t-redactor__text"><em>«Проблема не в продукте. Не в цене. Не в рекламе. Проблема в том, что клиент не может получить товар сегодня»</em>.</div><div class="t-redactor__text">Мы попытались решить вопрос через собственную курьерскую службу. Быстро поняли: это дорого, долго и рискованно. Для проверки гипотезы нужен был лёгкий, дешёвый эксперимент.</div><div class="t-redactor__text"><strong>4. Запустили эксперимент на Ozon</strong></div><div class="t-redactor__text">Мы открыли магазин на Ozon с экспресс-доставкой. Клиент получает заказ через 3 часа.</div><div class="t-redactor__text">Цену подняли на 25% — чтобы не работать в минус. Комиссия маркетплейса, логистика — всё это съедало маржу. Мы сознательно пошли на это. Задача была не заработать, а проверить: <strong>решает ли скорость проблему удержания?</strong></div><div class="t-redactor__text">Я помню, как собственник сказал:</div><div class="t-redactor__text"><em>«Ты хочешь, чтобы мы продавали дороже и зарабатывали меньше?»</em>.</div><div class="t-redactor__text">Я ответил:</div><div class="t-redactor__text"><em>«Если мы не проверим, мы никогда не узнаем.»</em>.</div><div class="t-redactor__text">Результат пришёл через неделю. Новые клиенты пошли. Но самое удивительное — мы проанализировали адреса доставки и увидели: <strong>на Ozon перешли наши же постоянные клиенты.</strong> Те, кто раньше заказывал на сайте, теперь платили на 25% дороже, но получали корм в тот же день.</div><div class="t-redactor__text">Они не ушли от нас. Они ушли от долгой доставки.</div><div class="t-redactor__text">Гипотеза подтвердилась. Клиент готов переплачивать за скорость. И если вы не даёте ему эту скорость — он найдёт, у кого купить, пусть даже дороже.</div><h3  class="t-redactor__h3">Результат</h3><div class="t-redactor__text"><ul><li data-list="bullet">Рост числа новых клиентов за месяц — <strong>в 3 раза</strong> (с ~200 до 650).</li><li data-list="bullet">Цена на Ozon на <strong>25% выше</strong> — люди платят за скорость. Это главный сигнал: клиент готов переплачивать.</li><li data-list="bullet">Компания масштабировала решение: на собственном сайте заработала доставка <strong>день в день</strong>.</li><li data-list="bullet">По открытым данным, выручка выросла <strong>с 25 до 70 млн рублей в месяц</strong>.</li><li data-list="bullet">Инструменты, которые мы внедрили — сегментация аудитории, многоступенчатый прогрев, системные исследования, фокус на клиентском опыте — остались в компании и работают до сих пор.</li></ul></div><div class="t-redactor__text">На момент моего ухода мы заложили фундамент. Спустя год компания вышла на 70 млн. Я не связываю этот рост только с собой — там были и новые линейки кормов, и другие изменения. Но ключевые решения, которые мы приняли тогда, до сих пор работают.</div><h3  class="t-redactor__h3">Кому это полезно</h3><div class="t-redactor__text"><ul><li data-list="bullet">Владельцам e‑commerce, где повторные продажи определяют прибыль.</li><li data-list="bullet">Тем, кто тратит на привлечение, но не видит роста лояльности.</li><li data-list="bullet">Тем, кто боится экспериментировать с маржой ради проверки гипотез.</li><li data-list="bullet">Собственникам, которые привыкли искать проблемы в рекламе, а не в том, что происходит после заказа.</li><li data-list="bullet">Компаниям с нишевым продуктом, где каждый клиент на вес золота.</li><li data-list="bullet">Тем, кто думает, что «рынок маленький» — а на самом деле у них просто сломана воронка.</li></ul></div><h3  class="t-redactor__h3">Что с этим делать?</h3><div class="t-redactor__text">Не гадайте, где ломается ваша воронка. Возможно все кабинеты работают как надо, а успешный результат скрыт за пределами стандартных метрик.</div>]]></turbo:content>
    </item>
  </channel>
</rss>
