Ваша аналитика говорит, что сайт заработал за месяц 42 180. Ваша база заказов говорит 39 650. Кто-то спрашивает, какое число верно, и честный ответ обычно «ни одно», по причинам, каждая из которых скучна, а вместе обходятся дорого.
Вот пять причин, примерно по порядку того, как часто каждая оказывается настоящей, и способ их различить.
1. Страница подтверждения срабатывает больше одного раза
Это самая частая причина, с большим отрывом, и она всегда завышает итог.
Событие покупки обычно находится на странице подтверждения заказа. Эта страница загружается заново каждый раз, когда её обновляют, нажимают «назад», а потом «вперёд», открывают из письма или когда её восстанавливает браузер, переоткрывающий вкладки при запуске. В каждом из этих случаев событие отправляется снова с той же суммой.
Узнать это можно по форме расхождения: аналитика выше базы заказов, разрыв ровно кратен суммам нескольких крупных заказов, а эффект сильнее на мобильных, где возврат назад случается чаще.
Лечится это номером заказа. Отправляйте номер заказа вместе с событием покупки, и пусть аналитика убирает дубли по нему. В GA4 это поле transaction_id; большинство инструментов использует это же имя, потому что победило соглашение GA. Если в шаблоне вашего диспетчера тегов есть поле для него, а вы оставили его пустым, вот ваша ошибка.
Стоит прямо сказать, во что обходится ошибка здесь. Страница оформления заказа, которая срабатывает повторно и считает одну продажу четыре раза, на панели не выглядит ошибкой. Она выглядит хорошим месяцем.
2. Две валюты, сложенные вместе
Если вы продаёте больше чем в одной валюте, а ваша аналитика показывает единый итог по выручке, выясните, что она делает, прежде чем ему верить.
Некоторые инструменты конвертируют в валюту отчёта по курсу, зафиксированному в момент прихода данных. Некоторые конвертируют по курсу того дня, когда вы смотрите, а значит, закончившийся месяц меняет стоимость в зависимости от того, когда вы его открываете. Некоторые попросту складывают числа и ставят перед ними знак валюты, давая величину, которая не является деньгами ни в одной валюте.
Признак — итог, лежащий между правильной сконвертированной цифрой и наивной суммой, или итог, который меняется, когда вы переоткрываете отчёт за месяц, закрывшийся давно.
Надёжнее всего, чтобы валюта проставлялась в событии в момент его записи и чтобы инструмент никогда не конвертировал. Отчёт со смешанными валютами тогда либо делится по валютам, либо отказывается дать один итог, и то и другое полезнее уверенного неверного числа.
3. Возвраты, отмены и несписанные платежи
Ваша база заказов всегда актуальна. Она знает, что заказ 8814 вернули 14-го. Ваша аналитика записала покупку 2-го и, если вы не послали ей событие возврата, по-прежнему в неё верит.
За месяц с обычной долей возвратов одно это может дать несколько процентов, и именно эта причина заставляет аналитику выглядеть завышенной по сравнению с финансовым отчётом, а не с таблицей заказов.
Похожий и менее заметный случай: заказ, который создали, но оплату по нему так и не списали. Если событие срабатывает на странице подтверждения, а платёж потом не проходит или заказ висит неоплаченным и отменяется по тайм-ауту, у аналитики есть продажа, которой в вашей бухгалтерии не было никогда.
4. Заблокированные, отброшенные и неотправленные события
Эта причина всегда занижает итог, и поэтому аналитика обычно ниже таблицы заказов, когда её не завышают причины выше.
Блокировщики содержимого останавливают запрос. Как и часть корпоративных сетей, часть фильтров на уровне DNS и часть браузеров с упором на приватность, причём по умолчанию. Если вашей аналитике нужно согласие, все отказавшиеся тоже отсутствуют. А событие покупки, срабатывающее при загрузке страницы, соревнуется с посетителем, закрывающим вкладку, что он очень часто делает в тот же миг, как заказ подтверждён.
Размер заблокированной доли очень сильно зависит от аудитории (сайт с инструментами для разработчиков теряет несопоставимо больше, чем цветочный магазин), так что любой опубликованный процент для вашего случая бесполезен. Измерьте свой: сопоставьте заказы, записанные вашей базой, с событиями покупки, записанными аналитикой, по номеру заказа, за одну чистую неделю.
Если сопоставить по номеру заказа нельзя, это опять причина номер один.
5. Две системы считают разные моменты
Наконец, скучная причина, которая объясняет небольшой остаток после того, как вы исправили всё остальное.
Аналитика ставит отметку времени в сессии посетителя, в том часовом поясе, на который настроен отчёт. Ваша база заказов ставит отметку в момент, когда платёжный провайдер подтвердил оплату, в UTC, возможно, минутами позже и иногда по ту сторону полуночи. Граница месяца превращает это в настоящую разницу: всегда в одну и ту же сторону, всегда небольшую.
Атрибуция добавляет своё. Аналитика относит выручку к той сессии, которая привела к конверсии (или к какой-то более ранней, в зависимости от модели атрибуции), а ваша таблица заказов не относит её ни к чему. Сравнивать итог выручки по последнему нажатию с сырым итогом заказов — значит сравнивать ответы на два разных вопроса.
Сверка, которую реально провести
- Возьмите одну закрывшуюся неделю.
- Выгрузите заказы: номер, отметку времени в UTC, валюту, чистую сумму после возвратов.
- Выгрузите события покупки с теми же полями.
- Соедините по номеру заказа.
Четыре группы, которые получатся, и есть диагноз. События без заказа — это двойные срабатывания или тестовый трафик. Заказы без события — блокировка или сломанный тег. Совпавшие пары с разными суммами — обработка валют или несовпадение цены с налогом и без налога. Совпавшие пары в разные дни — часовой пояс.
Сделайте это один раз, запишите остаток в процентах, и у вас будет нечто куда более ценное, чем совпавший итог: известная и устойчивая разница. Две системы, расходящиеся на устойчивые 4%, обе пригодны. Две системы, совпадающие случайно, — нет.
Где здесь Skomi
Skomi читает номер заказа из order_id, а также из transaction_id от GA, так что сайту, уже размеченному под GA4, менять ничего не надо. Событие с уже встречавшимся номером второй раз не считается.
Выручка помечается своей валютой в момент записи, и Skomi никогда не конвертирует между валютами: отчёт, покрывающий две валюты, показывает две цифры, потому что одна была бы выдумкой. Подробнее — на странице Analytics, а установка сниппета рассказывает об отправке события.
Бо́льшую часть работы здесь делают два определения: выручка относится к тому визиту, который её принёс, а не к странице, на которой заплатили, а валюта выручки фиксируется при приёме и не конвертируется никогда.