Как измерить ROI от сайта: считаем прибыль, а не клики.

Как рассчитать возврат инвестиций (ROI) от сайта. Формулы, метрики, примеры расчётов для разных типов бизнеса. Как понять, окупается ли сайт и маркетинг.

ROI - это единственная метрика, которая имеет значение

Вы потратили 500 000 рублей на сайт. Маркетолог показывает красивые графики: "Трафик вырос на 200%! CTR рекламы 3.5%! Показатель отказов снизился на 15%!" Звучит отлично. Но главный вопрос: эти 500 000 вернулись?

ROI (Return on Investment) - возврат на инвестиции. Самая важная метрика для бизнеса. Не клики, не трафик, не позиции в Яндексе - а деньги. Сколько рублей вы вложили и сколько получили обратно.

Формула ROI проста:

ROI = (Доход - Затраты) / Затраты * 100%

Вложили 100 000, заработали 300 000: ROI = (300 000 - 100 000) / 100 000 * 100% = 200%. Каждый вложенный рубль принёс 2 рубля прибыли.

Вложили 100 000, заработали 80 000: ROI = (80 000 - 100 000) / 100 000 * 100% = -20%. Убыток. Каждый рубль потерял 20 копеек.

Проблема в том, что большинство бизнесов не считают ROI от сайта и маркетинга. Они платят за рекламу, за SEO, за доработки сайта - и не знают, окупаются ли эти вложения. Это как вести бизнес не считая прибыль.

Что именно считать: три уровня ROI

ROI можно считать на трёх уровнях:

1. ROI от сайта целиком - окупился ли сайт как вложение?

Затраты: разработка + хостинг + поддержка + контент. Доход: все продажи/заявки, пришедшие через сайт.

2. ROI от рекламного канала - какой канал прибыльнее?

Отдельно считаем ROI от Яндекс Директа, SEO, email-рассылок, социальных сетей. Это показывает, куда вкладывать больше, а что отключить.

3. ROI от конкретной кампании - сработала ли акция?

Запустили "Чёрную пятницу" - потратили 50 000 на рекламу, заработали 200 000. ROI = 300%.

// Расчёт ROI на трёх уровнях
// Все расчёты можно делать в Excel или Google Sheets
// Но автоматизация через код - точнее и быстрее

// === Уровень 1: ROI от сайта целиком ===

function calculateWebsiteROI(period) {
  // Затраты за период (месяц, квартал, год)
  const costs = {
    development: 500000,   // Разработка сайта (разовая, делим на 36 месяцев)
    hosting: 2000,         // Хостинг в месяц
    maintenance: 15000,    // Поддержка и доработки в месяц
    content: 10000,        // Написание контента в месяц
    // Итого: 500000/36 + 2000 + 15000 + 10000 = ~41 000 руб/мес
  }
  const totalCosts = costs.development / 36 + costs.hosting
    + costs.maintenance + costs.content

  // Доход от сайта за период
  // Все заказы/заявки, пришедшие через сайт
  const revenue = {
    onlineOrders: 850000,  // Заказы через сайт (прямые продажи)
    phoneFromSite: 120000, // Звонки с сайта (отслеживаем через коллтрекинг)
    formSubmissions: 200000, // Заявки с форм (конвертированные в продажи)
    // Итого: 1 170 000 руб/мес
  }
  const totalRevenue = revenue.onlineOrders
    + revenue.phoneFromSite + revenue.formSubmissions

  // ROI
  const roi = ((totalRevenue - totalCosts) / totalCosts) * 100
  // (1 170 000 - 41 000) / 41 000 * 100 = 2 753%
  // Каждый рубль, вложенный в сайт, приносит 27 рублей!

  return {
    costs: totalCosts,
    revenue: totalRevenue,
    profit: totalRevenue - totalCosts,
    roi: roi.toFixed(0) + '%'
  }
}

// === Уровень 2: ROI по каналам ===

function calculateChannelROI() {
  const channels = [
    {
      name: 'Яндекс Директ',
      costs: 80000,        // Бюджет на рекламу + услуги настройки
      revenue: 320000,     // Продажи с рекламного трафика
      // ROI = (320000 - 80000) / 80000 * 100 = 300%
    },
    {
      name: 'SEO (органический трафик)',
      costs: 40000,        // SEO-специалист + контент
      revenue: 450000,     // Продажи с органического трафика
      // ROI = (450000 - 40000) / 40000 * 100 = 1025%
      // SEO - самый рентабельный канал!
    },
    {
      name: 'Email-рассылки',
      costs: 5000,         // Сервис рассылок + время на письма
      revenue: 180000,     // Продажи из рассылок
      // ROI = (180000 - 5000) / 5000 * 100 = 3500%
      // Email - самый дешёвый канал
    },
    {
      name: 'Социальные сети',
      costs: 60000,        // Таргетированная реклама + SMM
      revenue: 95000,      // Продажи из соцсетей
      // ROI = (95000 - 60000) / 60000 * 100 = 58%
      // Работает, но хуже других каналов
    },
  ]

  // Считаем ROI для каждого канала
  return channels.map(channel => ({
    ...channel,
    profit: channel.revenue - channel.costs,
    roi: (((channel.revenue - channel.costs) / channel.costs) * 100).toFixed(0) + '%'
  }))

  // Вывод: перераспределить бюджет!
  // Уменьшить расходы на соцсети (ROI 58%)
  // Увеличить бюджет на SEO (ROI 1025%) и email (ROI 3500%)
}

Ключевые метрики: что считать кроме ROI

ROI - это итоговая метрика. Но чтобы понять, ПОЧЕМУ ROI такой и как его улучшить, нужны промежуточные метрики:

МетрикаФормулаЧто показываетПример
CAC (стоимость привлечения клиента)Расходы на маркетинг / Кол-во клиентовСколько стоит один покупатель80 000 руб / 40 клиентов = 2 000 руб/клиент
LTV (пожизненная ценность клиента)Средний чек * Частота покупок * ВремяСколько клиент принесёт за всё время5 000 * 4 раза/год * 3 года = 60 000 руб
CPA (стоимость целевого действия)Расходы / Кол-во действийСтоимость заявки/звонка80 000 / 200 заявок = 400 руб/заявка
CR (конверсия)Покупатели / Посетители * 100%Процент посетителей, которые купили40 / 2000 * 100% = 2%
AOV (средний чек)Выручка / Кол-во заказовСредняя сумма одного заказа320 000 / 40 = 8 000 руб
ROAS (возврат рекламных расходов)Доход от рекламы / Расходы на рекламуСколько рублей приносит 1 рубль рекламы320 000 / 80 000 = 4x

Главное соотношение: LTV должно быть минимум в 3 раза больше CAC. Если привлечение клиента стоит 2 000 руб, а он приносит 6 000+ руб за всё время - бизнес здоров. Если LTV < CAC - вы теряете деньги на каждом клиенте.

Атрибуция: как понять, откуда пришёл клиент

Самая сложная задача в расчёте ROI - понять, какой канал привёл клиента к покупке. Человек может увидеть вашу рекламу в Яндексе, потом зайти на сайт из поиска, потом получить email-рассылку, и только потом купить. Какой канал "виноват" в продаже?

Модели атрибуции:

  • Последний клик - продажа засчитывается каналу, по которому клиент пришёл последним. Простая модель, но несправедливая (реклама привела клиента, а "победителем" стал email)
  • Первый клик - продажа засчитывается каналу, через который клиент узнал о вас впервые. Тоже не идеально
  • Линейная - продажа равномерно распределяется между всеми каналами. Справедливее, но не точнее
  • С учётом позиции - первый и последний каналы получают по 40%, остальные делят 20%. Самая популярная модель в 2026
// Отслеживание источников трафика
// UTM-метки - способ пометить каждую ссылку

// UTM-метки добавляются к URL:
// https://myshop.ru/products?utm_source=yandex&utm_medium=cpc&utm_campaign=spring_sale

// utm_source  - откуда пришёл (yandex, vk, telegram, email)
// utm_medium  - тип трафика (cpc = реклама, organic = поиск, email = рассылка)
// utm_campaign - название кампании (spring_sale, black_friday)

// Яндекс Метрика автоматически собирает UTM-метки
// и показывает в отчёте "Метки UTM"

// Для звонков используйте коллтрекинг
// (Calltouch, Callibri, CoMagic)
// Каждому каналу присваивается свой номер телефона:
// Яндекс Директ: +7 (495) 123-01-01
// SEO (поиск): +7 (495) 123-02-02
// Соцсети: +7 (495) 123-03-03
// Когда клиент звонит - система знает, откуда он пришёл

// Для формы на сайте сохраняем UTM-метки:
function saveFormSubmission(formData) {
  // Получаем UTM-метки из URL
  const urlParams = new URLSearchParams(window.location.search)

  const submission = {
    name: formData.name,
    phone: formData.phone,
    message: formData.message,
    // Сохраняем источник трафика
    utmSource: urlParams.get('utm_source') || 'direct',
    utmMedium: urlParams.get('utm_medium') || 'none',
    utmCampaign: urlParams.get('utm_campaign') || 'none',
    // Сохраняем страницу, с которой отправлена форма
    pageUrl: window.location.pathname,
    // Время отправки
    createdAt: new Date(),
  }

  // Отправляем на сервер
  fetch('/api/forms', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify(submission)
  })
}

// Теперь каждая заявка привязана к источнику
// и вы можете посчитать ROI по каналам

LTV: почему один клиент стоит больше, чем кажется

LTV (Lifetime Value) - пожизненная ценность клиента. Это сумма, которую клиент принесёт за всё время работы с вами. LTV - самая недооценённая метрика в бизнесе.

Пример:

Клиент интернет-магазина обуви покупает в среднем 2 пары в год, средний чек 8 000 руб. Средний срок "жизни" клиента - 4 года (потом уходит к конкуренту или перестаёт покупать онлайн).

LTV = 8 000 * 2 * 4 = 64 000 руб

Это значит, что привлечение этого клиента за 5 000 руб - отличная инвестиция (ROI = 64 000 / 5 000 = 1 180%). Но если смотреть только на первую покупку (8 000 руб при CAC 5 000 руб), кажется, что маржа маленькая.

Как увеличить LTV:

  • Бонусная программа - клиенты с бонусами покупают на 40% чаще
  • Email-рассылки - персональные предложения возвращают клиентов
  • Личный кабинет - удобство повторных покупок
  • Качественный сервис - довольный клиент рекомендует друзьям (бесплатное привлечение!)

Реальные примеры расчёта ROI

Вот три реальных примера из нашей практики (цифры округлены):

Пример 1: Интернет-магазин одежды

ПоказательЗначение
Стоимость разработки сайта400 000 руб
Ежемесячные расходы (хостинг + поддержка)20 000 руб
Яндекс Директ60 000 руб/мес
SEO30 000 руб/мес
Итого расходы за первый год400 000 + (20 000 + 60 000 + 30 000) * 12 = 1 720 000 руб
Выручка с сайта за первый год4 800 000 руб
Маржа (30%)1 440 000 руб
ROI первого года(1 440 000 - 1 720 000) / 1 720 000 = -16%
Выручка за второй год (SEO + повторные клиенты)8 400 000 руб
Расходы за второй год (без разработки)1 320 000 руб
ROI второго года(2 520 000 - 1 320 000) / 1 320 000 = 91%

Первый год - небольшой убыток (нормально, сайт ещё набирает трафик). Второй год - прибыль 91%. С третьего года ROI растёт экспоненциально, потому что SEO-трафик бесплатный и растёт, а расходы на рекламу можно снижать.

Пример 2: Сервисная компания (ремонт техники)

ПоказательЗначение
Стоимость лендинга100 000 руб
Яндекс Директ40 000 руб/мес
Заявок с сайта120 шт/мес
Конверсия заявки в клиента30%
Клиентов в месяц36
Средний чек5 000 руб
Выручка180 000 руб/мес
CPA (стоимость заявки)40 000 / 120 = 333 руб
CAC (стоимость клиента)40 000 / 36 = 1 111 руб
ROAS180 000 / 40 000 = 4.5x

Каждый рубль рекламы приносит 4.5 рубля выручки. При марже 50% прибыль = 90 000 - 40 000 = 50 000 руб/мес чистой прибыли только с рекламы.

Пример 3: B2B-компания (оптовые продажи)

ПоказательЗначение
Стоимость сайта600 000 руб
SEO-продвижение50 000 руб/мес
Заявок с сайта15 шт/мес
Конверсия в клиента20% (3 клиента/мес)
Средний чек первого заказа150 000 руб
LTV клиента (3 года)1 800 000 руб
CAC50 000 / 3 = 16 667 руб
LTV / CAC1 800 000 / 16 667 = 108x

В B2B один клиент может окупить год SEO-продвижения. LTV/CAC = 108 - фантастический показатель. Это потому что B2B-клиенты покупают регулярно на большие суммы.

Дашборд ROI: что отслеживать каждый месяц

Создайте простую таблицу (Excel, Google Sheets), которую заполняете каждый месяц:

// Ежемесячный дашборд ROI
// Заполняйте каждый первый день месяца

const monthlyReport = {
  month: 'Март 2026',

  // === РАСХОДЫ ===
  costs: {
    yandexDirect: 60000,     // Бюджет Яндекс Директа
    seo: 30000,              // SEO-продвижение
    hosting: 2000,           // Хостинг
    maintenance: 15000,      // Поддержка сайта
    email: 3000,             // Сервис рассылок
    total: 110000,           // Итого расходов
  },

  // === ДОХОДЫ ===
  revenue: {
    fromDirect: 280000,      // Продажи с Яндекс Директа
    fromSEO: 350000,         // Продажи с органического трафика
    fromEmail: 120000,       // Продажи из email-рассылок
    fromDirect_visits: 80000, // Прямые заходы (клиенты, которые знают адрес)
    total: 830000,           // Итого выручки
  },

  // === КЛЮЧЕВЫЕ МЕТРИКИ ===
  metrics: {
    visitors: 12500,         // Посетителей на сайте
    leads: 180,              // Заявок/заказов
    customers: 65,           // Покупателей
    conversion: '1.44%',     // CR = 180 / 12500
    avgOrderValue: 12769,    // Средний чек = 830000 / 65
    cac: 1692,               // CAC = 110000 / 65
  },

  // === ROI ===
  roi: {
    overall: '654%',         // (830000 - 110000) / 110000
    yandexDirect: '367%',    // (280000 - 60000) / 60000
    seo: '1067%',            // (350000 - 30000) / 30000
    email: '3900%',          // (120000 - 3000) / 3000
  }
}

// Сравнивайте с предыдущими месяцами:
// Если ROI падает 3 месяца подряд - нужно искать причину
// Если один канал стабильно убыточен - перераспределяйте бюджет
// Если CAC растёт - либо конкуренция выросла, либо реклама "устала"

Как мы помогаем отслеживать ROI

В Enot Software мы не просто "делаем сайт и уходим". Мы встраиваем систему измерения ROI прямо в проект:

  • Аналитика с первого дня - Яндекс Метрика с целями, e-commerce модуль, UTM-разметка всех рекламных каналов. Вы видите результат с первого заказа
  • Коллтрекинг - помогаем подключить отслеживание звонков, чтобы знать, какой канал привёл звонящего клиента
  • CRM-аналитика - если у вас наша кастомная CRM, ROI считается автоматически: по каналам, по менеджерам, по товарным группам. AI подсказывает, куда перераспределить бюджет
  • Дашборд руководителя - ключевые метрики (выручка, ROI, CAC, LTV, конверсия) на одном экране. Обновляется в реальном времени
  • Ежемесячный отчёт - не "отчёт ради отчёта", а анализ с рекомендациями: "Яндекс Директ: ROI упал на 15%, причина - выросла конкуренция по запросу X. Рекомендуем: перераспределить 20К с этой кампании на email-рассылки (ROI 3500%)"

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

Ошибки при расчёте ROI

1. Не учитывают все расходы

Считают только рекламу, забывая про хостинг, поддержку сайта, зарплату менеджеров, комиссию платёжных систем. Реальный ROI ниже, чем кажется.

2. Не учитывают LTV

Смотрят только на первую покупку. "CAC = 3 000, средний чек = 4 000, маржа 30% = 1 200 руб. Убыток!" Но если клиент купит 10 раз за 3 года - это 40 000 выручки с одного клиента.

3. Не разделяют каналы

Считают общий ROI, не понимая, что Яндекс Директ убыточен, а SEO сверхприбыльный. В итоге продолжают вкладывать в убыточный канал.

4. Ждут мгновенного ROI от SEO

SEO окупается через 6-12 месяцев. Если измерять ROI от SEO за первый месяц - он будет отрицательным (расходы есть, трафик ещё нет). Это нормально.

5. Игнорируют "невидимые" конверсии

Клиент увидел сайт в поиске, запомнил название, и через неделю позвонил по телефону с визитки. В аналитике эта продажа не привязана к сайту. Но сайт сыграл ключевую роль. Используйте промокоды, коллтрекинг и опросы "Откуда вы о нас узнали?" чтобы отслеживать такие конверсии.

Как увеличить ROI от сайта

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

Увеличить доход:

  • Улучшить конверсию сайта - увеличение конверсии с 1% до 2% удваивает доход при том же трафике. Тестируйте: кнопки, заголовки, формы, фото
  • Увеличить средний чек - блоки "С этим покупают", "Апгрейд", бесплатная доставка от определённой суммы
  • Увеличить LTV - бонусная программа, email-рассылки, личный кабинет, повторные продажи
  • Масштабировать работающие каналы - если SEO даёт ROI 1000%, вложите больше в контент и оптимизацию

Снизить расходы:

  • Отключить убыточные каналы - если соцсети дают ROI 10%, а SEO 500% - перераспределите бюджет
  • Оптимизировать рекламу - минус-слова, точный таргетинг, A/B-тесты объявлений
  • Автоматизировать - автоматические email вместо ручных звонков, чат-бот вместо менеджера для типовых вопросов
  • Инвестировать в SEO - органический трафик бесплатный. Чем больше доля SEO в общем трафике, тем ниже средняя стоимость клиента

Итого: считайте деньги, а не клики

ROI - это язык, на котором должен говорить каждый бизнес. Не "у нас 10 000 посетителей" (бесполезная метрика), а "сайт принёс 830 000 руб при расходах 110 000, ROI = 654%".

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

Мы в Enot Software не просто делаем сайты - мы делаем сайты, которые приносят деньги. Встраиваем аналитику, настраиваем отслеживание конверсий, помогаем считать ROI и оптимизировать маркетинговые расходы. Наши клиенты точно знают, сколько приносит каждый вложенный рубль. Свяжитесь с нами - мы покажем, как превратить ваш сайт из "расхода" в самую прибыльную инвестицию в бизнесе.

Все статьи
Как измерить ROI от сайта: считаем прибыль, а не клики | Enot Software