Заявки с сайта в CRM: формы, UTM и сквозная аналитика
АйТи Фреш
IT-аутсорсинг и бизнес

Заявки с сайта в CRM: формы, UTM-метки и сквозная аналитика по источникам

Автор: , директор ООО «АйТи-Фреш» · · ~15 мин чтения
Рекламная стрела с метками, пролетающая через сайт в карточку лида: заявки с сайта в CRM и UTM
Метка должна дойти от клика до карточки лида.

Заявка с сайта попадает в CRM через форму или виджет, а UTM-метки и идентификатор Метрики передаются в скрытых полях и сохраняются в карточке лида. Источник считается по правилам, а отчёт «источник — сделка» строится по этим полям. Ниже: схема, код, правила и типичные ошибки.

Как заявка с сайта становится лидом: форма, виджет и вебхук

Путь заявки простой, но в каждом звене есть где потерять данные. Посетитель оставляет имя и телефон в форме на сайте, форма отправляет их в CRM, CRM создаёт клиента и лид в первой колонке воронки и уведомляет менеджера. Вариантов отправки три: готовый виджет или форма самой CRM, вебхук из конструктора сайта и собственный запрос с вашего сервера. В нашей CRM для сайта предусмотрен канал «веб-форма»: по данным страницы CRM с AI-отделом продаж, заявка с сайта попадает в колонку «Не обработан» в течение 5 секунд, клиент, контакт и диалог создаются автоматически.

Что требуется от формы. По проектной документации нашей CRM, она отправляет на публичный адрес канала JSON с именем, телефоном, почтой, сообщением и блоком utm; защита строится на ключе канала, списке разрешённых доменов сайта, скрытом поле-ловушке для роботов (honeypot) и ограничении частоты запросов с одного адреса; можно включить капчу. Повторная отправка с тем же ключом идемпотентности не создаёт второй лид. Точный состав полей и ограничения проверяйте на своей версии: это описание из проектной документации, а не из руководства пользователя.

Откуда берётся «идентификация клиента». Если телефон или почта уже есть в базе, новая заявка привязывается к существующему клиенту, а не создаёт дубль, что бережёт справочник. Об этом принципе мы подробно писали в статье про CRM для малого бизнеса и 1С. Если формы на сайте несколько (заказ расчёта, обратный звонок, заявка на сервис), у каждой должен быть свой идентификатор формы, чтобы потом видеть, какая работает лучше.

Минимум полей. Здесь работает то же правило, что и для внедрения CRM в целом: чем длиннее анкета, тем выше шанс, что человек её бросит. Для заявки хватит имени, телефона и короткого комментария, остальное менеджер уточнит по телефону. Согласие на обработку персональных данных обычно ставится отдельным чекбоксом со ссылкой на политику; текст согласия согласуйте с юристом, в этой статье мы его не разбираем.

Какие UTM-метки сохранять в карточке лида и как не потерять их по дороге

UTM-метки это параметры адреса, которыми помечают рекламную ссылку: utm_source (откуда), utm_medium (канал), utm_campaign (кампания), при желании utm_content (объявление) и utm_term (ключевая фраза). Минимум, который я прошу хранить в лиде: источник, канал и кампанию. Остальные два нужны, если вы действительно разбираете эффективность по объявлениям и фразам; иначе они только загромождают карточку.

Главная ловушка: метки приходят в адресе первой страницы, а форма отправляется, как правило, на другой. Если посетитель прошёл с главной на страницу расчёта, параметры из адреса исчезли. Поэтому их запоминают при первом заходе (в cookie или в localStorage браузера) и подставляют в скрытые поля формы при отправке. Пример кода ниже: он читает метки при входе, сохраняет их на 30 дней и заполняет скрытые поля; число дней и правила «первой» или «последней» метки вы определяете сами.

<script>
(function () {
  var keys = ['utm_source','utm_medium','utm_campaign','utm_content','utm_term'];
  var q = new URLSearchParams(location.search);
  var saved = {};
  try { saved = JSON.parse(localStorage.getItem('utm') || '{}'); } catch (e) {}
  // обновляем только если в адресе есть хотя бы одна метка
  if (keys.some(function (k) { return q.get(k); })) {
    saved = { ts: Date.now() };
    keys.forEach(function (k) { if (q.get(k)) saved[k] = q.get(k); });
    try { localStorage.setItem('utm', JSON.stringify(saved)); } catch (e) {}
  }
  document.addEventListener('DOMContentLoaded', function () {
    keys.forEach(function (k) {
      var el = document.querySelector('input[name="' + k + '"]');
      if (el && saved[k]) el.value = saved[k];
    });
  });
})();
</script>

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

В карточку лида метки должны попасть отдельными полями, а не в общий комментарий. Тогда по ним работают фильтры и отчёты. По проектной документации нашей CRM метки utm_* сохраняются в дополнительных полях лида; если вы используете другую систему, например ERPNext, учтите: в ветке version-16 у Lead есть поля utm_source, utm_medium, utm_campaign и utm_content, а в version-15 их нет, там есть только Source и Campaign Name, и метки нужно заводить своими полями.

Что считать источником: правила для рекламы, органики и «пришёл по звонку»

Метка в адресе это не источник, а подсказка. Источник это поле карточки, которое заполняется по правилам, и в правилах надо описать все каналы, а не только рекламу. Я использую такую схему: если есть utm_source, берём его вместе с каналом (например, yandex / cpc); если меток нет, но переход был с поисковой системы, источник «органика»; если пришёл на сайт напрямую, «прямой заход»; если заявка создана менеджером после телефонного звонка, источник проставляет менеджер из выпадающего списка, и поле «откуда узнали» обязательное.

Для мессенджеров и почты работает то же правило: канал, по которому пришёл первый контакт, и есть источник, если рекламной метки нет. В нашей CRM лента «Диалоги» объединяет Telegram, почту и сайт, и источник лида определяется по каналу, из которого он создан; у лида из веб-формы это «Форма сайта». Без таких правил в отчёте набирается доля «неизвестно», и она растёт, потому что ручные лиды никто не размечает.

Что делать с повторными обращениями. Клиент пришёл по рекламе, не купил, через месяц позвонил. Какой источник у сделки? Договоритесь заранее: либо первый (кто привёл), либо последний (кто довёл), и не смешивайте. Мне ближе хранить и тот и другой в отдельных полях, а в отчёте выбирать модель. Но для небольшого бизнеса достаточно одного правила, главное, чтобы оно было записано и одинаково применялось. | Канал | Как определяем источник | Кто заполняет | |---|---|---| | Реклама | utm_source и utm_medium из скрытых полей | Автоматически | | Органика | Нет меток, реферер поисковая система | Автоматически по правилу | | Прямой заход | Нет меток и реферера | Автоматически | | Звонок | Список «откуда узнали» | Менеджер, поле обязательное | | Мессенджер или почта | Канал первого контакта | Автоматически | | Рекомендация | Список «откуда узнали» с пометкой кого | Менеджер |

Цели Яндекс Метрики и связка с CRM: что можно сверить, а что нет

В Метрике фиксируется не заявка, а достижение цели: например, отправку формы вы отмечаете JavaScript-целью. Чтобы связать цель и лид, в форму передаётся идентификатор посетителя ClientID. По документации Метрики его получают вызовом ym(<номер счётчика>, 'getClientID', function (clientID) {...}), и результат кладут в скрытое поле формы. Тогда у лида в CRM есть идентификатор, по которому видно, с какого визита он пришёл.

ym(12345678, 'getClientID', function (clientID) {
  var el = document.querySelector('input[name="ym_client_id"]');
  if (el) el.value = clientID;
});
// после успешной отправки формы
ym(12345678, 'reachGoal', 'lead_form');

Номер счётчика и название цели в примере условные.

Что при этом можно сверить: количество достижений цели в Метрике и число лидов в CRM за период. Расхождение в пределах нескольких процентов нормально: часть посетителей блокирует счётчик, часть отправляет форму повторно. Если расхождение в десятки процентов, значит либо цель срабатывает на нажатие кнопки без реальной отправки, либо запросы в CRM теряются. Это первая проверка при настройке: отправьте пять тестовых заявок и сверьте цифры в обоих местах.

Чего сверить нельзя без дополнительной работы: выручку и договоры. Метрика видит только то, что происходит на сайте. Чтобы она узнала, что заявка стала договором, офлайн-конверсии загружаются в Метрику отдельно: по документации, их связывают с визитом по ClientId, Yclid или UserId, а в отчёте «Офлайн-конверсии» виден статус загрузки и причины, по которым конверсия не нашла визит. Это отдельный проект: нужно настроить регулярную выгрузку из CRM, проверять совпадение идентификаторов и следить за сроком, в который Метрика принимает данные (его проверьте в актуальной справке).

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

Разбор случая: «Сторож-Сервис» на 22 рабочих места

Условный пример, все цифры вымышленные. Компания по установке систем безопасности «Сторож-Сервис», 22 рабочих места: монтажники, два замерщика, три менеджера, бухгалтерия и руководитель. Основные услуги: видеонаблюдение, охранная сигнализация, контроль доступа. Рекламируются в Яндексе, часть клиентов приходит из поиска и по рекомендации, а часть просто звонит. До внедрения лидов с сайта не считали: заявки приходили на почту, а источник «в голове» менеджера.

Мы подключили веб-форму «Заказать расчёт» к CRM, добавили в неё скрытые поля utm_source, utm_medium, utm_campaign, идентификатор формы и ClientID Метрики, а для звонков сделали обязательное поле «откуда узнали». Заявка в 10:02 с utm_source=yandex создаёт лид «Не обработан» и диалог; менеджер берёт его в работу в 10:15; замерщик выезжает в 14:00; на следующий день уходит коммерческое предложение. Лид, на который никто не ответил больше 30 минут (условный порог), подсвечивается красным на канбане, и это быстро изменило привычки менеджеров.

Через месяц у компании появился первый свод по источникам (условные данные). Видно, что реклама приносит больше всего лидов, но конверсия в договор у неё ниже, чем у звонков и рекомендаций, а доля «неизвестно» не нулевая. Это не повод сразу срезать рекламу: нужно понять, не теряются ли метки у части лидов, и сколько стоит лид, а не только договор. Но впервые решение принимается по цифрам, а не по ощущениям. Цифры мы приведём в следующем разделе.

Что пришлось исправить на пилоте. Две формы на сайте отправляли заявку с одинаковым идентификатором, и разделить их было нельзя. Метки терялись на странице-посреднике с редиректом, и мы убрали лишний редирект. Несколько заявок пришло дважды из-за повторного нажатия кнопки, и защита от повторов по ключу идемпотентности это закрыла. Живую цепочку «форма, лид, источник» покажем на демостенде по запросу.

Отчёт «источник — сделка» и типичные ошибки в цифрах

Отчёт строится из трёх чисел по каждому источнику: лиды, коммерческие предложения, договоры. Конверсия лид → договор это договоры, делённые на лиды. Доля «неизвестно» это лиды без источника, делённые на все лиды: если она выше 10–15 %, сначала чините разметку, а не принимайте решения по цифрам. В нашей CRM на канбане есть фильтр по источнику, а AI-РОП считает конверсии между этапами воронки; готовую сводку «источник → договор с выручкой» мы настраиваем под клиента, а не обещаем «из коробки». | Источник | Лидов | КП | Договоров | Конверсия лид → договор | |---|---|---|---|---| | Яндекс Директ | 42 | 14 | 4 | 9,5 % | | Органика | 30 | 9 | 4 | 13,3 % | | Звонок | 28 | 13 | 7 | 25,0 % | | Рекомендация | 12 | 6 | 4 | 33,3 % | | Неизвестно | 18 | 4 | 1 | 5,6 % | | Итого | 130 | 46 | 20 | 15,4 % | Все числа условные и не являются ориентиром рынка. Доля «неизвестно» здесь 18 из 130, то есть 13,8 %.

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

Как читать отчёт. Смотрите не на один процент, а на связку: сколько лидов, сколько дошло до коммерческого предложения, где обрыв. Низкая конверсия лид → КП говорит о скорости и качестве обработки заявки; низкая конверсия КП → договор говорит о цене и предложении. Решение по каналу принимается тогда, когда у вас достаточно данных за период и понятная доля «неизвестно».

Где такая связка не сработает

Сквозная аналитика на уровне форм и меток не видит то, что происходит вне сайта и вне CRM: звонки с рекламы без подмены номера, переписку в чатах, которая не ведётся в системе, оплату мимо учёта. Если половина клиентов приходит по телефону, без коллтрекинга и обязательного вопроса менеджера «откуда узнали» отчёт будет искажён. О звонках из карточки у нас есть отдельные материалы, а здесь мы говорим только о заявках с сайта.

Второе ограничение: законы и согласия. Форма с персональными данными сопровождается согласием и политикой; хранение меток в браузере тоже подпадает под правила работы с cookie вашего сайта. Юридическое оформление берите у юриста. Третье: если сайт сменился или переезжает, формы и метки ломаются первыми; общий порядок переноса сайта с сохранением интеграций описан в материале про миграцию на WordPress и интеграции. Четвёртое: наша CRM и описанные механизмы настраиваются под ваш сайт, и мы проверяем их на живой цепочке, а не по описанию.

Частые вопросы

Как передать заявку с сайта в CRM?

Через веб-форму или виджет самой CRM, через вебхук из конструктора сайта или запросом с вашего сервера. В нашей CRM заявка с сайта попадает в колонку «Не обработан» в течение 5 секунд: создаются клиент, контакт и диалог. Для защиты от роботов используют ключ канала, список доменов и поле-ловушку.

Какие UTM-метки нужно хранить в CRM?

Минимум utm_source, utm_medium и utm_campaign, при необходимости utm_content и utm_term. Метки запоминают при первом заходе в cookie или localStorage и подставляют в скрытые поля формы, иначе при переходе на другую страницу они теряются. В карточке лида метки хранят отдельными полями, чтобы работали фильтры.

Как связать Яндекс Метрику с CRM?

Отправляйте идентификатор посетителя ClientID в скрытом поле формы (его даёт вызов ym с параметром getClientID) и сверяйте число достижений цели с числом лидов. Выручку и договоры передают отдельно офлайн-конверсиями, где визит связывают по ClientId, Yclid или UserId. Это отдельный проект, который нужен не каждой компании.

Почему в отчёте по источникам много «неизвестно»?

Типичные причины: метки не сохранены в скрытых полях, заявка пришла по звонку или из мессенджера, ручные лиды не размечены, блокировщики очистили хранилище браузера. Помогают правила источника по каждому каналу и обязательное поле «откуда узнали» для ручных лидов. Норма для начала: доля неизвестного ниже 10–15 процентов.

Какой источник ставить, если клиент пришёл по рекламе, а договор заключил после звонка?

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

Нужно ли согласие на обработку данных в форме заявки?

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

Столкнулись с похожей задачей? Обращайтесь — решим

Если у вас происходит что-то из описанного в этой статье — или любая другая проблема с ИТ-инфраструктурой, — обращайтесь в любое время. Мои специалисты и я лично разберём ситуацию, найдём настоящую причину и доведём до решения.

Возьмёмся и за разовую задачу, и за постоянное обслуживание. Первичная консультация — бесплатно и без обязательств.

📞 +7 903 729-62-41 ✈ Telegram @ITfresh_Boss

С уважением, Семёнов Евгений Сергеевич, директор «АйТи Фреш» — IT-аутсорсинг для компаний до 50 рабочих мест, 15+ лет практики

Источники

© ООО «АйТи-Фреш» · Москва · Все статьи