Data Layers for Enhanced Ecommerce Guide

Colin Differ

June 24, 2020

When it comes to using Data Layers for Enhanced Ecommerce in Google Analytics, we felt it needed a whole separate guide so we can really get into the details of it. This guide is going to talk about what Data Layers you will need to enable Enhanced Ecommerce, what each Data Layer does, and where to use them.

What are Data Layers?

As we mentioned in the previous article, a Data Layer is a JavaScript object which stores particular information in a certain format; it’s a layer of data. The Data Layer cannot be seen by your users (unless looking at the source code or through a tool), but it can be read by Google Tag Manager and,if certain parameters are used, that same information can be pulled into Google Analytics and other tools.

Why are Data Layers important for Enhanced Ecommerce in Google Analytics?

Data Layers are vital in pushing the information into the individual Enhanced Ecommerce. You will probably need to create Data Layers for pretty much every single page on your website (most of the time) and in some cases, a page will have more than one on it. It’s important that the Data Layers are laid out exactly as Google tells us to, otherwise the information won’t be pushed into Google Analytics

The Product Impressions Data Layer

What is the Product Impressions Data Layer?

The Product Impression Data Layer measures how many times a product has been seen whilst in a list of other products, such as a category page or a listing page. Essentially, any time a product is shown BEFORE you click into the product page.

What Google Analytics Report is the Product Impression Data Layer used for?

The product impression Data Layer pushes data into the Product List report and a little bit into the Product Performance report in Google Analytics. This will push data into the following columns:

  • Product List Name
  • Product List View
  • Product List Position
  • Product Name
  • Product SKU

Where to Place the Product Impressions Data Layer?

The Impression Data Layer should be placed anywhere there is a list of products. It should be placed as high as possible in the <head> so it loads as soon as the page loads. If you have an infinite scrolling page, the Data Layer should load when the products do.

It doesn’t have to be more than one product, it’s just the part before your users click on to the product page:

What Variables does the Product Impression Data Layer need?

Variable NameVariable ValueRequired?Notes
NameName of the ProductYesEither the Name of ID is required
EventAnything to differentiate between other Data LayersNoWe call this prodImpr, but it can be called anything. Its not essential, but handy if you need to fire a tag when that Data Layer appears. Also, needed if the Data Layer does not fire when the page loads
Currency CodeCurrency of the productNoThis is not essential to have and can be left out. It may be handy for tracking things other than GA
IDSKU/ID of the ProductYesEither the Name of ID is required
PricePrice of the ProductNoDo not include the currency code
BrandBrand of the Product if applicableNoUsed if you sell different brands
CategoryCategory of the ProductNoIf your products can be categorised, use this
VariantAny differentiator of the product you wish to trackNoThis could be anything you want – size, colour etc
ListThe list that the Product Belongs toNoThis could be ‘Best Sellers’, the name of the page, anything that groups the products on that page together. Its not essential, but nothing will appear in the ‘Product List’ column if not used
PositionThe position on the page the product is in relation to other productsNoThis can be in whatever order you decide. Its not essential, but nothing will appear in the Product List performance report if not used

What does the Product Impression Data Layer Look Like?

The product Impression data should hold as many products as you have on that page. You may need to split this into a number of different Data Layers if you have too many products on the page (say over 40) or if you have a scrolling page. The main consistency has to be the Product Position. The data is as below:

<script>

dataLayer.push({

'event': 'prodImpr',      

  'ecommerce': {

    'currencyCode': 'GBP',                      

    'impressions': [

     {

       'name': 'Product 1',      

       'id': '345678',

       'price': '10.99',

       'brand': 'Propellernet',

       'category': 'Shorts',

       'variant': 'Blue',

       'list': 'Homepage',

       'position': 1

     },

     {

       'name': 'Product 2',

       'id': '456789',

       'price': '45.99',

       'brand': 'Propellernet',

       'category': 'Trousers',

       'variant': 'Red',

       'list': 'Homepage',

       'position': 2

     },

                 {

       'name': 'Product 3',

       'id': '567890',

       'price': '105.99',

       'brand': 'Propellernet',

       'category': 'Coat',

       'variant': 'Red',

       'list': 'Homepage',

       'position': 3

     }]

  }

});

</script>

The Product Click Data Layer

What is the Product Click Data Layer?

The Product Click Data Layer uses the same information as the Product Impressions Data Layer but informs Google Analytics that someone has clicked on one of the products (rather than just seen it). It is important that the same information that fires in the impression data layer is also used in the Click Data Layer

What Google Analytics Report is the Product Click Data Layer used for?

The product impression Data Layer pushes data into the Product List report in Google Analytics.

This will push data into the following columns:

  • Product List Name
  • Product List Click
  • Product List CTR
  • Product List Position
  • Product Name
  • Product SKU

Where to Place the Product Click Data Layer?

The Data Layer should fire whenever a user clicks to view a product page. It should fire on the list page, or category page, wherever the Product Impression Data Layer should fire.

What Variables does the Product Click Data Layer need?

The below information should be the same as what was presented in the product Impression Data Layer.

Variable NameVariable ValueRequired?Notes
EventAnything to differentiate between other Data LayersYesThis can be called anything you wish. It should be a different name than any other Data Layer Event
Currency CodeCurrency of the productNoThis is not essential to have and can be left out. It may be handy for tracking things other than GA
NameName of the ProductYesEither the Name of ID is required
IDSKU/ID of the ProductYesEither the Name of ID is required
PricePrice of the ProductNoDo not include the currency code
BrandBrand of the Product if applicableNoUsed if you sell different brands
CategoryCategory of the ProductNoIf your products can be categorised, use this
VariantAny differentiator of the product you wish to trackNoThis could be anything you want – size, colour etc
ListThe list that the Product Belongs toNoThis could be ‘Best Sellers’, the name of the page, anything that groups the products on that page together. It’s not essential, but nothing will appear in the ‘Product List’ column if not used
PositionThe position on the page the product is in relation to other productsNoThis can be in whatever order you decide. It’s not essential, but nothing will appear in the Product List performance report if not used

What does the Product Click Data Layer Look Like?

The Click Data Layer should only hold information about one product; the one that was clicked. It should have the same information as the Impression. If this doesn’t happen, a new product will be created in the report and your information will not join up. The ‘list’ variable in the action field, should be the same as that in the Impression Data Layer, it’s just in a different place

<script>

dataLayer.push({

'event': 'prodClick', 

  'ecommerce': {

   'currencyCode': 'GBP',                      

    'click': {

                'actionField': {'list': 'Homepage'},

     'products': [{

       'name': 'Product 1',      

       'id': '345678',

       'price': '10.99',

       'brand': 'Propellernet',

       'category': 'Shorts',

       'variant': 'Blue',

       'list': 'Homepage',

       'position': 1

          }]

  }

  },

});

</script>

The Product Detail Data Layer

What is the Product Detail Data Layer?

The Product Detail data layer informs Google Analytics that someone has visited a product page. It is an essential part of Enhanced Ecommerce.

What Google Analytics Report is the Product Detail Data Layer used for?

The Detail Data Layer passes information to the Shopping Behaviour Report and the Product Performance Report and the Shopping Behaviour section in the Product Performance report.

Where to Place the Product Detail Data Layer?

The Product Detail Data Layer should be placed on the main product page. It should be placed as high as possible in the <head> so it loads as soon as the page loads.

What Variables does the Product Detail Data Layer need?

Variable NameVariable ValueRequired?Notes
EventAnything to differentiate between other Data LayersNoThis can be called anything you wish. It should be a different name than any other Data Layer Event
Currency CodeCurrency of the productNoThis is not essential to have and can be left out. It may be handy for tracking things other than GA
NameName of the ProductYesEither the Name of ID is required
IDSKU/ID of the ProductYesEither the Name of ID is required
PricePrice of the ProductNoDo not include the currency code
BrandBrand of the Product if applicableNoUsed if you sell different brands
VariantAny differentiator of the product you wish to trackNoThis could be anything you want – size, colour etc
ListThe list that the Product Belongs to in the Impression and Click Data Layer – This can easily be left outNoThis could be ‘Best Sellers’, the name of the page, anything that groups the products on that page together. It’s not essential, but nothing will appear in the ‘Product List’ column if not used

What does the Product Detail Data Layer Look Like?

<script>

dataLayer.push({

'event': 'prodDetail', 

  'ecommerce': {

  'currencyCode': 'GBP',

    'detail': {

                'actionField': {'list': 'Homepage'},

     'products': [{

       'name': 'Product 1',      

       'id': '345678',

       'price': '10.99',

       'brand': 'Propellernet',

       'category': 'Shorts',

       'variant': 'Blue'   

          }]

  }

  },

});

</script>

The Add to Cart Data Layer

What is the Add To Cart Data Layer?

It may sound pretty self-explanatory but the Add To Cart Data Layer informs Google Analytics that a product has been added to the basket. It helps join up the Impressions, Click and Detail Data Layers to the checkout process

What Google Analytics Report is the Add To Cart Data Layer used for?

The Add To Cart Data Layer adds data to the Shopping Behaviour Report, the Product Performance Report and the Product Performance List Report.

Where to Place the Add To Cart Data Layer?

The Add To Cart Data Layer should fire whenever a product is added to the basket. This can be anywhere, for example, on the product page, checkout process, or anywhere where a product is added to the basket. It can fire as many times on a page as necessary.

What Variables does the Add To Cart Data Layer need?

Variable NameVariable ValueRequired?Notes
EventAnything to differentiate between other Data LayersYesThis can be called anything you wish. It should be a different name than any other Data Layer Event
Currency CodeCurrency of the productNoThis is not essential to have and can be left out. It may be handy for tracking things other than GA
NameName of the ProductYesEither the Name of ID is required
IDSKU/ID of the ProductYesEither the Name of ID is required
PricePrice of the ProductNoDo not include the currency code
BrandBrand of the Product if applicableNoUsed if you sell different brands
VariantAny differentiator of the product you wish to trackNoThis could be anything you want – size, colour etc
QuantityThe Quantity of the products added to the basketYes

What does the Add To Cart Data Layer Look Like?

<script>

dataLayer.push({

   'event':'addToCart',

   'ecommerce': {

     'currencyCode':'GBP',

     'add': {

       'products': [{

         'id':'345678',

         'name': 'Product 1',

         'price':'10.99',

         'brand':'Propellernet',

         'category':'Shorts',

         'variant':'Blue',

         'quantity': 1

      }]

    }

  }

});

</script>

The Remove from Cart Data Layer

What is the Remove from Cart Data Layer?

The Remove from Cart Data Layer is the same as the Add To Cart one, except it informs Google Analytics that a product has been removed from the basket

What Google Analytics Report is the Remove from Cart Data Layer used for?

The Remove from Cart Data Layer adds data to the Shopping Behaviour section of the Product Performance Report.

Where to Place the Remove from Cart Data Layer?

The Remove from Cart Data Layer should fire whenever a product is removed from the basket. This can be anywhere. On the product page, checkout process, anywhere where a product is removed to the basket. It can fire as many times on a page as necessary

What Variables does the Remove from Cart Data Layer need?

Variable NameVariable ValueRequired?Notes
EventAnything to differentiate between other Data LayersYesThis can be called anything you wish. It should be a different name than any other Data Layer Event
Currency CodeCurrency of the productNoThis is not essential to have and can be left out. It may be handy for tracking things other than GA
NameName of the ProductYesEither the Name of ID is required
IDSKU/ID of the ProductYesEither the Name of ID is required
PricePrice of the ProductNoDo not include the currency code
BrandBrand of the Product if applicableNoUsed if you sell different brands
VariantAny differentiator of the product you wish to trackNoThis could be anything you want – size, colour etc
QuantityThe Quantity of the products removed from the basketYes

What does the Remove from Cart Data Layer Look Like?

<script>

dataLayer.push({

   'event':'removeFromCart',

   'ecommerce': {

     'currencyCode':'GBP',

     'remove': {

       'products': [{

         'id':'345678',

         'name':'Product 1'',

         'price':'10.99',

         'brand':'Propellernet',

         'category':'Shorts',

         'variant':'Blue',

         'quantity': 1

      }]

    }

  }

});

</script>

The Promotion Impressions Data Layer

What is the Promotion Impressions Data Layer?

The Promotions Impressions Data Layer measures the use of banners or internal promotions on the site and is the first of two Data Layers in Enhanced Ecommerce which are not product-related. An example on Amazon would be:

What Google Analytics Report is the Promotion Impressions Data Layer used for?

The Promotions Impressions Data Layer push data into the Internal Promotion report which can be found under Marketing.

Where to Place the Promotion Impressions Data Layer?

The Promotion Impressions Data Layer should fire on any page where you want to track a banner or promotion. It should be placed as high as possible in the <head> so it loads as soon as the page loads.

What Variables does the Promotion Impressions Data Layer need?

Variable NameVariable ValueRequired?Notes
EventAnything to differentiate between other Data LayersNoThis can be called anything you wish. It should be a different name than any other Data Layer Event
IDThe ID you are giving this particular promotionYes
NameThe Name you are giving this particular promotionYes
CreativeA name for the creative where the promotion isNo
PositionThe position of the promotion in relation to other promotions. This does not need to be numericalNo

What does the Promotion Impressions Data Layer Look Like?

<script>

dataLayer.push({

  'ecommerce': {

    'promoView': {

      'promotions': [  

       {

         'id': 'GA-Train-Jun-20',

         'name': 'Google Analytics Training June 2020',

         'creative': 'Banner 1',

         'position': '1'

       },

       {

         'id': 'GTM-Train-Jun-20',

         'name': 'Google Tag Manager Training June 2020',

         'creative': 'Banner 1',

         'position': '2'

       }]

    }

  }

});

</script>

The Promotion Clicks Data Layer

What is the Promotion Click Data Layer?

The promotion click Data Layer sends promotion data when a user clicks on one of your banners or internal promotions.

The Promotion Click Data Layer uses the same information as the Promotion Impressions Data Layer but informs Google Analytics that someone has clicked on one of the banners (rather than just seen it). It is important that the same information that fires in the impression Data Layer is also used in the Click Data Layer

What Google Analytics Report is the Promotion Click Data Layer used for?

The Promotions Click Data Layer pushes data into the Internal Promotion report, which can be found under Marketing.

Where to Place the Promotion Click Data Layer?

The Data Layer should fire whenever a user clicks to view a banner.

What Variables does the Promotion Click Data Layer need?

Variable NameVariable ValueRequired?Notes
EventAnything to differentiate between other Data LayersNoThis can be called anything you wish. It should be a different name than any other Data Layer Event
IDThe ID you are giving this particular promotionYes
NameThe Name you are giving this particular promotionYes
CreativeA name for the creative where the promotion isNo
PositionThe position of the promotion in relation to other promotions. This does not need to be numericalNo

What does the Promotion Click Data Layer Look Like?

<script>

dataLayer.push({

'event': 'promoClick',

  'ecommerce': {

    'promoClick': {

      'promotions': [{

         'id': 'GA-Train-Jun-20',

         'name': 'Google Analytics Training June 2020',

         'creative': 'Banner 1',

         'position': '1'

       }]

    }

  },

});

</script>

The Checkout Data Layer

What is the Checkout Data Layer?

The Checkout Data Layer helps measure every step in your Checkout Process. This should start after a user has stopped adding products to the basket and starts the buying method. Steps are a number in the data layer which should correlate to your checkout process

What Google Analytics Report is the Checkout Data Layer used for?

This Data Layer sends data to most reports in Enhanced Ecommerce. The Product List Performance, Product Performance and Shopping Behaviour. More importantly, it sends the majority of data to the Checkout Behaviour Report, which is its main purpose.

Where to Place the Checkout Data Layer?

It should be fired on every page of the checkout process except the confirmation page. It should be placed as high as possible in the <head> so it loads as soon as the page loads.

What Variables does the Checkout Data Layer need?

Variable NameVariable ValueRequired?Notes
EventAnything to differentiate between other Data LayersYesThis can be called anything you wish. It should be a different name than any other Data Layer Event
StepThe step of the checkout VersionYesEach step of the checkout should be mapped out into individual steps
NameName of the ProductYesEither the Name of ID is required
IDSKU/ID of the ProductYesEither the Name of ID is required
PricePrice of the ProductNoDo not include the currency code
BrandBrand of the Product if applicableNoUsed if you sell different brands
VariantAny differentiator of the product you wish to trackNoThis could be anything you want – size, colour etc
QuantityThe Quantity of the products removed from the basketYes

What does the Checkout Data Layer Look Like?

<script>

  dataLayer.push({

    'event': 'checkout',

    'ecommerce': {
      'currencyCode': 'GBP',      

      'checkout': {

        'actionField': {'step': 1},

        'products': [{

          'name': 'Product 1',

          'id': '345678'',

          'price': '10.99',

          'brand': 'Propellernet',

          'category': 'Shorts',

          'variant': 'Blue',

          'quantity': 1

       }]

     }

   },

   });

</script>

The Checkout Option Data Layer

What is the Checkout Option Data Layer?

The Checkout Option Data Layer measures specific actions on any of the steps of the checkout journey that aren’t related to the simple product information that’s taken care of in the standard Checkout Data Layers. This is an optional Data Layer.

Examples would be:

  • Payment Type (Credit Card, PayPal, Google Pay etc)
  • Shipping Option (Free, Paid etc)
  • Gift Wrapping

These will be very specific to your website, and can be used to track anything that your customers are choosing in addition to normal products.

What Google Analytics Report is the Checkout Option Data Layer used for?

The Checkout Option Data Layer only sends information to the Checkout Behaviour Report, and only in a small part of that. In each step in GA, you will see a drop-down box where you can see the options you’ve chosen:

Where to Place the Checkout Option Data Layer?

The data layer should fire once as the user journeys onto the next step of the checkout process; for instance, when they click next.

What Variables does the Checkout Option Data Layer need?

Variable NameVariable ValueRequired?Notes
EventAnything to differentiate between other Data LayersYesThis can be called anything you wish. It should be a different name than any other Data Layer Event
StepThe step of the checkout VersionYesThe step given in the Check Out Data Layer
OptionValue of the optionYes

What does the Checkout Option Data Layer Look Like?

<script>

  dataLayer.push({

    'event': 'checkoutOption',

    'ecommerce': {
       'currencyCode': 'GBP',      

      'checkout_option': {

        'actionField': {'step': 1, 'option': 'gift wrapping'}

      }

    }

  });

</script>

The Purchase Data Layer

What is the Purchase Data Layer?

The Purchase Data Layer pushes all of the final transaction data into Google Analytics. This shows what people have bought, total revenue, price etc. For those of you who already have Standard Ecommerce set up, this is a different Data Layer than you currently have, and it will need to replace it.

What Google Analytics Report is the Purchase Data Layer used for?

This will be used to populate all of the Ecommerce Reports in some way, but mostly the Sales Performance report and the Product Performance report.

Where to Place the Purchase Data Layer?

The Purchase Data Layer should be fired on the confirmation page only. It should be placed as high as possible in the <head> so it loads as soon as the page loads.

What Variables does the Purchase Data Layer need?

Variable NameVariable ValueRequired?Notes
IDTransaction IDYesUnique string you give for each transaction
AffiliationStore name or affiliation nameNoDo not use if not applicable
RevenueTotal Revenue including tax and shippingYes
TaxTax of total revenueNo
ShippingShipping or Delivery feeNo
CouponName of Coupon that has been usedNo
EventAnything to differentiate between other Data LayersNoThis can be called anything you wish. It should be a different name than any other Data Layer Event
NameName of the ProductYesEither the Name of ID is required
IDSKU/ID of the ProductYesEither the Name of ID is required
PricePrice of the ProductNoDo not include the currency code
BrandBrand of the Product if applicableNoUsed if you sell different brands
VariantAny differentiator of the product you wish to trackNoThis could be anything you want – size, colour etc
QuantityThe Quantity of the products removed from the basketYes

What does the Purchase Data Layer Look Like?

<script>

dataLayer.push({

  'ecommerce': {
    'currencyCode': 'GBP',      

    'purchase': {

      'actionField': {

        'id': '123',   

        'affiliation': 'Online Store',

        'revenue': '22.99',   

        'tax':'4.60',

        'shipping': '2.00',

        'coupon': 'SUMMER_SALE'

      },

      'products': [{    

        'name': 'Product 1'

        'id': '345678',

        'price': '10.99',

        'brand': 'Propellernet',

        'category': 'Shorts',

        'variant': 'Blue',

        'quantity': 1

      

       },

       {

        'name': 'Product 2',

        'id': '32145',

        'price': '5',

        'brand': 'Propellernet',

        'category': 'Shirt',

        'variant': 'Red',

        'quantity': 2

       }]

    }

  }

});

</script>

The Refund Data Layer

What is the Refund Data Layer?

This pushes data if any refunds are made online. This is the most un-used Data Layer, as most stores don’t have the ability to process refunds online.

What Google Analytics Report is the Refund Data Layer used for?

This is only used on the Sales Performance Report and the Product Performance Report.

Where to Place the Refund Data Layer?

This should be placed on any confirmation page where a refund has been placed.

What Variables does Refund Data Layer need?

Variable NameVariable ValueRequired?Notes
IDTransaction IDYesUnique string you give for each transaction
IDProduct SkuYesDo not get confused with the Transaction ID
QuantityThe Quantity of the products refundedYes

What does Refund Layer Look Like?

For a full refund use:

<script>
dataLayer.push({
  'ecommerce': {
    'currencyCode': 'GBP',      
    'refund': {
      'actionField': {'id': 'T12345'}        
    }
  }
});
</script>

For a partial refund use:

<script>

dataLayer.push({

  'ecommerce': {

    'refund': {

      'actionField': {'id': 'T12345'},     

      'products': [

            {'id': 'P4567', 'quantity': 1}, 

            {'id': 'P8901','quantity': 2}

       ]

     }

  }

});

</script>

Please keep checking back where we will write an article about how to set up Enhanced Ecommerce with these Data Layers.

Need Some Help?

If you’d like to find out more about how to Ecommerce Tracking come and join us at our Google Analytics Training and Google Tag Manager Training sessions. We also offer a wide range of Analytics services and Google Tag Manager consultancy services