1
votes

I am trying to send e-commerce events to google analytics using gtm (Google Analytics : Universal Analytics), this is my code

const loadGa = (next, retry) => {
    if (!retry) retry = 0;
    if (typeof ga === 'function') {
        return next(null);
    }
    if (retry > 10) return next(new Error('Can not load google analytics'));
    retry++;
    setTimeout(() => loadGa(next, retry), 500);
}

const addProductGa = product => {
    loadGa((err) => {
        if (err) return console.error(err);
        dataLayer.push({
            event: 'addToCart',
            ecommerce: {
                currencyCode: 'EUR',
                add: {
                    products: [{
                        name: product.name,
                        id: product.id,
                        price: product.acquisitionAmount / 100,
                        quantity: 1
                    }]
                }
            }
        });
    })
}

const purchaseGa = (charge, product) => {
    loadGa((err) => {
        if (err) return console.error(err);
        dataLayer.push({
            ecommerce: {
                currencyCode: 'EUR',
                purchase: {
                    actionField: {
                        id: charge.id,
                        revenue: charge.amount
                    },
                    products: [{
                        name: product.name,
                        id: product.id,
                        price: product.acquisitionAmount / 100,
                        quantity: 1
                    }]
                }
            }
        });
    })
}

For the example if I call the addProductGa

  1. call to GTM
  2. call to analytics
  3. send basic tracking data

It seems that my e-commerce data are not sent, I can not see them in the network call to analytics server and I have no data on Google Analytics

1

1 Answers

2
votes

What I can say:

  • By default dataLayer.push doesn't send data anywhere, it just feeds the dataLayer. You need GTM triggers and tags to send the data, which brings me to the next point
  • Missing event key in some of your dataLayer.push calls (eg purchase): I know you're following examples given in the GTM ecom spec but IMO it's confusing: some of them show an event-based collections (with the event key set), others pageview-based collection (without the event key set). To simplify your setup you should:
  • Full setup: once you have an event property on all your dataLayer calls, you can generically track them all using a setup similar to the one shown below (you should change the trigger to be a regex matching all your ecommerce events, also don't forget to enable Enhanced Ecommerce in the GA settings).

    enter image description here

  • If the issue persists you should enable the GTM preview/debug which will tell you why certain tags aren't firing and will show you the debug of the dataLayer values it contains

  • If GTM confirms tags are firing but you don't see GA tracking on the network, you want to use the Chrome GA debugger which will show you in details what's happening and potentially why hits are not sent.

  • Don't forget to publish GTM once you have it all troubleshooted and working