Могу ли я выполнить несколько нажатий слоев данных для одной транзакции в диспетчере тегов Google?

#google-tag-manager #google-datalayer

Вопрос:

Я настроил отслеживание, когда пользователь завершает покупку. Прямо сейчас я выполняю несколько нажатий на слой данных-я нажимаю на общую сумму заказа, а затем отдельно нажимаю на каждый товар в корзине:

 dataLayer.push({
    'total': total
});

for(let i = 0; i < data.length; i  ) {
    const product = data[i];

    dataLayer.push({
        'name': product.name,
        'price': product.price,
        'quantity': product.quantity,
        'sku': product.sku
    });
}
 

Приемлемо ли это? Я вижу в некоторых примерах, как вся покупка продвигается как один толчок (т. Е. Набор продуктов). Ведет ли GTM себя одинаково в обоих случаях?

Ответ №1:

Вы не следуете синтаксису. https://developers.google.com/tag-manager/enhanced-ecommerce#purchases продукты предназначены для аккуратного хранения в очень специфической структуре. Не просто втолкнули в DL в надежде, что GTM волшебным образом справится с отсутствием строгой структуры.

Ответ №2:

Ваш пример не сработает.

GTM обновляет внутреннее состояние переменных только тогда, когда вы нажимаете клавишу «событие» на слой данных. В вашем примере нет ключа «событие», поэтому GTM даже не заметит, что вы что-то нажали, по крайней мере, до тех пор, пока позже не произойдет какое-то другое событие.

Даже если вы добавили событие, ваш пример все равно будет работать не так, как ожидалось.

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

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

 var products = [];
for(i = 0; i < data.length; i  ) {
    const product = data[i];
    products.push({
        'name': product.name,
        'price': product.price,
        'quantity': product.quantity,
        'sku': product.sku
    });
};

dataLayer.push({
  "products":products,
  "event":"updateProductData"
});
 

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

Комментарии:

1. Понял. Но почему в документации на уровне данных ничего не говорится о структуре данных, в то время как документы электронной коммерции это делают? Вот что сбивает с толку.