The number one reason for this happening is because the receipt page, where the ecommerce trackings runs, can be loaded more than once.
For example, a visitor completes a transaction and refreshes the receipt page or copies the receipt page URL and revisits this page at a later date.
Some users may take a note of the receipt page URL if it contains the order number or delivery information.
Unless your developer has built-in functionality to prevent the receipt page from running the ecommerce tracking everytime the page is loaded then you will almost certainly get duplicate transactions recorded in Google Analytics.
The problem is so common, the first thing I do when looking at a new Google Analytics account is to check for duplicate transactions if the site is an ecommerce site.
How do you check for duplicate transactions in Google Analytics? The easiest way is to make use of a pre-built duplicate transactions report from the Google Analytics solutions gallery.
This will give you a rough idea of how bad the problem is.
Another reason the revenue in Google Analytics could be too high is that the developer has placed the ecommerce tracking on a page or event before the user actually transacts. For example a ‘pay now’ button. This is usually nothing more than the developer cutting corners – the Google Analytics Ecommerce tracking should run on the order confirmation page or the receipt page.
Ok so now we know what causes the inflated revenue how do we fix it?
There are two things you can do and I usually do both:
- Implement a cookie that prevents Google Tag Manager from firing the Ecommerce Transaction Tag if it has already fired for that transaction. This significantly reduces the number of duplicate transactions but it does not work cross-device or cross-browser i.e if the user copies the receipt page URL and revisits that page on another device, the cookie which is device and browser specific will not prevent the transaction from being duplicated.
Here are a couple of guides explaining how to set this up in Google Tag Manager:
2. The second solution which solves the problem completely is to ask the developer to only publish the ecommerce dataLayer if the transactions has not been run before i.e. the table that holds the transaction data requires a new field that indicates whether the transaction has been published to the dataLayer on the receipt page; If it has then don’t populate the dataLayer.