Дублирующие транзакции в Google Analytics является одной из самых распространенных ошибок во внедрении электронной торговли в Google Analytics.

Ошибка приводит к завышение реальных доходов с рекламных каналов, что влечет за собой ошибочные выводы об их эффективности.

Из-за чего возникает дублирование данных? 

  1. Когда код отвечающий за отправку данных о транзакции отрабатывает большего одного раза.
    При повторной загрузки страницы с подробностями о заказе (thank you page). На которую пользователь может переходить несколько раз. Например, с email-a с подробностями об оформленном заказе или при обновлении страницы во время повторной загрузки браузера.

  2. Ошибка в логике ваше сайта присвоение номера транзакции (встречается намного реже). Необходимо исправлять на уровне backand-a.

Как выявить дублирующие транзакции?

 Для выявления дубликатов самый простой способ — это создать пользовательский отчет с двумя полями: transactionId and transactions.

Чтобы построить аналогичный отчет можете перейти по ссылке, чтобы автоматически добавить этот отчет в ваш аккаунт.

Исправление дублирующих транзакций при помощи Google Tag Manager

 В нашем кейсе дублирующие заказы поступали на уровне одного устройства.
Для решение проблемы мы решили доработать решение, которые встретили в блоге lunametrics. Оно нам понравилось идеей, но оттолкнуло необходимость привлечения разработчика.

Суть метода

 Мы подготовили скрипт, который активируется во время отправки данных электронной торговли, и выполняет две функции:

  1. Сохраняет id-транзакции в cookie браузера. Таким образом, в браузере пользователя всегда хранится его последний идентификатор транзакции.

  2. При сохранении id-транзакцию в cookie определяет является ли она уникальной. В зависимости от ответа, отправляется пользовательское событие: newTransaction или duplicateTransaction.

Логика проверки id-транзакции на уникальность происходит путем сравнения идентификатора транзакции, которую мы планируем записать в cookie, с id-транзакцией которая уже была сохранена в cookie.

Если транзакция уникальна, то в google tag manager-e должен активироваться тег, отвечающий за отправку данных о транзакции в Google Analytics.

Для этого необходимо создать:

  • transaction_id — переменная уровня данных,

  • Transaction Checker — custom html tag,

  • newTransaction — trigger — custom event.  

DataLayer TransactionId

 Возвращает номер транзакции о заказе.

Для её создание, перейдите в переменные и создайте новую перменную уровня datalayer:

В качетве значения укажите: ecommerce.purchase.actionField.id.

Данная переменная будет подставлять id-транзакции в javascript-код, отвечающий за запись данной транзакции в cookie пользователя.

Transaction Checker

 Создайте тег пользовательского типа.  Разместите в него следующий код (обратите внимание, что он ссылается на переменную transaction_id, которая была создана на первом шаге):

1

<script type="text/javascript">

2

function checkCookies() {

3

var cookievalue = "";

4

var cname = "_transactionId=";

5

var ca = document.cookie.split(';');

6

for(var i=0; i<ca.length; i++){

7

var ck = ca[i].trim().toString();

8

if (ck.indexOf(cname)==0) {

9

cookievalue = ck.substring(cname.length).toString();

10

break;

11

};

12

};

13

14

if ("{{transaction_id}}" != "") {

15

if (!cookievalue || cookievalue != "{{transaction_id}}") {

16

var d = new Date();

17

d.setTime(d.getTime() + (365 * 2 * 24 * 60 * 60 * 1000));

18

var expires = "expires=" + d.toGMTString();

19

document.cookie = cname + "{{transaction_id}}; " + expires;

20

dataLayer.push({ 'transactionType': 'new' });

21

dataLayer.push({'event':'newTransaction'});

22

} else {

23

dataLayer.push({ 'transactionType': 'duplicate' });

24

dataLayer.push({'event':'duplicateTransaction'});

25

26

}

27

dataLayer.push({ 'event': 'transaction' });

28

}

29

};

30

checkCookies();

31

</script>

В качестве триггера выполнения тега задайте условие, при котором данные об электронной торговле уже будут выведены на странице:

То есть datalayer, содержащий данные о заказе, в том числе transaction_id, должен быть инициализирован до тега Transaction Checker.

В нашем примере это страница thank you page.

NewTransaction trigger

В теге, отвечающем за отправку транзакций в Google Analytics, нужно обновить триггер срабатывания. Он должен выполняться только в случае, если тег Transaction Checker вернул ответ newTransaction.

Таким образом, в Google Analytics будут переданы только уникальные идентификаторы транзакции.

Для этого необходимо перейти в триггеры и создать новый:

В качестве типа триггера задайте Custom Event, в значении которого укажите newTransaction.

Также можно создать дополнительный триггер и в качестве значения использовать duplicateTransaction. Данный триггер в дальнейшем можно использовать для подсчета количества дублирующих транзакций, например, через события.

Вы должны помнить:

  1. Если пользователь очистит куки, после чего повторно сработает код отправляющий транзакции — транзакция продублируется.  

  2. Google Analytics фильтрует дублирующие транзакции, которые приходят в рамках одной сессии. Это значит, что если по каким-то причинам ваш код отрабатывает два раза подряд, это не приведет к дублированию транзакций.