skip to Main Content

I have been updating our various websites to Google Analytics 4 over the past couple of months, and I’ve started working on the Shopify store. I’ve added an ecommerce dataLayer push in a liquid file within the Sections folder, but the dataLayer doesn’t get updated. It’s a simple view_item event, and I’ve checked and double-checked for typos. As a test, I replaced the ecommerce dataLayer push with a test_event with dummy data, which fired as expected.

Is there something I’m missing here? Why won’t Shopify allow my ecommerce push to the dataLayer?

    dataLayer.push({ ecommerce: null });
    dataLayer.push({
        event: "view_item",
        ecommerce: {
            currency: {{ shop.currency }},
            value: {{ product.price | minus: discount.amount | money_without_currency }},
            items: [
                {
                    item_id: {{ product.id }},
                    item_name: {{ product.title }},
                    affiliation: "Shopify",
                    coupon: {{ discount.title }},
                    discount: {{ discount.amount | money_without_currency }},
                    index: 0,
                    item_category: "Products",
                    item_category2: {{ product.type }},
                    item_list_id: "related_products",
                    item_list_name: "Related Products",
                    price: {{ product.price | money_without_currency }},
                    quantity: 1
                }
            ]
        }
    });

I am using Google Tag Manager, but I can’t get the dataLayer to update with the ecommerce event.

2

Answers


  1. Chosen as BEST ANSWER

    For anyone who might stumble onto this question, I believe I've found the issue. It's a simple case of syntax. The liquid variables which output strings need to be enclosed in quotes.

    I also added conditional statements to prevent some name-value pairs from appearing with no values.

    dataLayer.push({ ecommerce: null });
    dataLayer.push({
        event: 'view_item',
        ecommerce: {
            currency: '{{ shop.currency }}',
            value: {{ product.price | minus: discount.amount | money_without_currency }},
            items: [{
                item_id: '{{ product.id }}',
                item_name: '{{ product.title }}',
                affiliation: 'Shopify',
                {% if discount %}
                    coupon: '{{ discount.title }}',
                    discount: {{ discount.amount | money_without_currency }},
                {% endif %}
                index: 0,
                item_category: 'Products',
                {% if product.type %}
                    item_category2: '{{ product.type }}',
                {% endif %}
                price: {{ product.price | money_without_currency }},
                quantity: 1
            }]
        }
    });
    

  2. dataLayer.push({ ecommerce: null });
    

    That word, "null", means you’re cancelling the dataLayer; so, that’s why it won’t work. You need to remove that line to get it to work.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search