1. Requirements

  • Set-up accurate Visit-to-Sale tracking.
  • Set-up macro goal conversion funnels.
  • Set-up micro form field conversion funnels.
  • Display all relevant data on dashboards

2. Issues

  • Cross-domain tracking not working.
  • Transaction counts not matching CRM system.
  • Revenue not matching CRM system.
  • Goal funnel steps were broken.
  • Marketing Channel & cmpID not recording

3. Solutions

  • Audit and resolve GTM issues.
  • Audit and resolve GA issues .
  • Link Adwords .
  • Link GoogleWebmasterTools.
  • Add GA everywhere via Adobe DTM.

4. Next Steps

  • Phone Call Tracking.
  • SEO optimisation.
  • Adwords Optimisation.
  • CRO & A/B Testing.

40 hours of SEO Analysis Within Minutes!

Fast. Secure. Free.

GTM Fixes

This audit has 3 classifications…

Audit Score

Findings & recommendations…


Good stuff


Recommended Fixes


1.Process issues:

–No separation of DEV vs LIVE environments in GTM hence 59% of revenue and 18% of transactions are Test orders from in November
Tag Templates for GA & DC not used! (effects 92% of tags)
–Trigger naming conventions not clear.
–Tag & Version notes not being used.
ContainerVersion number not being stored in GA.
–No evidence of Tag Taint Testing or  Auto-QA testing.
2.Code issues:
–Direct Debit revenue showing as £0 as dataLayer.annualRevenue not populated(and patch for dataLayer.monthlyRevenue >> dataLayer.annualRevenue not present).
–annualRevenue is too high as -10% Loyalty bonus not removed
–ProductCategory script has a malformed JS statement on productVariations.match('Professionals')===true

–eFilling script has JS error when no value was set.
–Unstable method used for determining virtualPageview using {{PageTitle}}. Changed to {{quoteStep}} or {{pageName}} which is much more stable!
–{{Page URL}} used rather than {{quoteStep}} hence DEV ( will behave differently to LIVE ( as absolute hostname used
–Inline DataLayer reset, should be change to DataLayer append.
Unnecessary jQuery dependency used in customVariable - Native GTM CSS selector is safer.
–JS errors should never be disabled using Try {} Catch{}, unless the Catch also outputs to dataLayer error listener.
3.Human errors in Tool usage:
–Van Q&B funnel had double-pageview causing 0% Bounce rate & 0sec AvgTimeOnPage.
–DC tags were blocked on mobile version of Chrome - as document.write accidentally ticked on all 20 DC tags!
–[dl_startDate] entered rather than {{dl_startDate}}
–Safer method of using cross-domain not enabled.
–No script tags were loaded within a


Feature Usage


10.Critical DC & Adwords Conversion patch for Safari not enabled (called ConversionLinker).
11.Native GTM auto-events not enabled
–JS error tracking not enabled - hence parse error not detected
–PDF download, mailto, tap-to-call
–30sec heartbeat on landing pages
–Scroll tracking etc on blog/news pages

12.Not utilising   5 contentGrouping
13.Not utilising 20 customDimensions
14.Not utilising 20 customMetrics
15.Adwords Dynamic Remarketing not enabled.
16.Bing Conversion Tracking missing.
17.Facebook remarketing & SessionCam not enabled.


Missing Data Capture


Adobe cmpid / CampaignCode
Adobe Test & Target user-cohort versions
pageType (Adword required field)
quoteID (cartID)
annualQuote (cartTotal)
monthlyQuote (cartTotal)
annualRevenue (tranTotal)
monthlyRevenue (tranTotal)

GA clientId
CRM userId
CRM loginStatus
CRM insurerPolicyNumber
startDate (for Policy)
GTM event
GTM containerVersion
GTM containerID


Detail GTM usage

23 versions with 14 tags Edited 6 months ago on 6th June

GTM fix/change frequency...

Phils GTM changes...

1.Clean-up existing GTM container
2.Enabled JS error listener
3.Enabled Enhanced Bounce Rate
4.Enabled FormField tracking
5.Fixed _eFilling JS error with JSON.parse error
6.Fixed GTM bug with JS compiler on productVariation.match("Professionals").
7.Standardises cross-domain tracking.
8.Added transRevenue for DirectDebit
9.Added 15% interest to DirectDebit TotalRevenue
10.Added PaymentType=DirectDebit | Annual tracking
11.Added cmpid >> utm_id tracking
12.Added GA classic seamless migration event
13.Added QuoteID & startDate to CustomDimensions
14.Added QuoteValue CustomMetric

15.Updated formFields with sequential number to make reporting easier
16.Updated formFields tracking for ContactTitle (missing in first iteration)
17.Updated FormField trigger to also invoke on Trademen Form
18.Updated EE StepNo from CurrentStep to quoteStep
19.Updated Triggers to use quoteStep as primary method
20.Updated CurrentStep to fallback to quoteStep  or dl_pageName
21.Updated ProductTarget to fallback to  dl_productName
22.Updated File download trigger to copy method used by Adobe DTM
23.Deleted inactive tags
24.Deleted hash dependency

Native GTM auto-events enabled

Process safeguards

Why is it crucial to separate DEV  vs LIVE?

1.Impossible to accidently publish to LIVE(i.e DEV is sandboxed)
2.Allows for code peer review process, before to approve pushing from DEV >> LIVE.
3.Full control over user-access levels (e.g. marketing restricted access on LIVE)
4.Still allows the possibly of using workspaces in DEV container - for merging changes.
5.DEV  vs LIVE is same methodology as Adobe DTM

Example of DEV vs LIVE

Inline code change for separating DEV vs LIVE...

Recommended inline code change for DEV vs LIVE...

DataLayer Planning

Critical DataLayers Variable inconsistencies

Note: Javascript is CASE sensitive

1.Use camelCase for variable names:(e.g. productName NOT ProductName)
2.Ideally, try to use lowercase variable values:(e.g. xxxx not XXXX ) except currency which must be capitals "GBP"

Tags functioning... Variables effect Triggers & Tags

Existing Variables...

More DataLayers Variable inconsistencies

dataLayer = [{

    'quoteStep': 'Quote Summary',

    'areaCode': 'BR1 1DP'


dataLayer = [{

    'quoteStep': 'Quote Summary',

    'areaCode': 'BR1'


// Should be 'BR1' shortPostcode not fullPostcode

  • (correct)
  • (wrong)

Human Erorrrs

Fixed eFilling JS error within JSON.parse error

Fixed eFilling JS error within JSON.parse error

Fixed JS typo within product Variation.match

Fixed JS typo within product Variation.match

NO script tags wont work in Custom HTML tags...

USE templates for DoubleClick DONT use customHTML for these

USE templates for DoubleClick DONT use customHTML for these

NO script tags wont work in Custom HTML tags...

Adwords conversion revenue not enabled = ROAS bidding not possible

Bing conversion not enabled = CPA bidding not possible

Adwords Dynamic Remarketing not enabled


New Data insight

Enabled 5 Content Groups

Enabled 20 CustomDimensions

Thankyou & Questions

Existing Tags

Existing Triggers

Existing Variables

Standard data Layer names

Generic Developer Guide

Warning about CASE and "#" when using utm tags & cmpid

Be careful using...

Dont use "#" when you mean to use "&" or "/"

0117 3361103