ABCDEFGHIJKLMNOPQRSTUVWXYZAA
1
Updated 17/04/26Here is an offer for my CXL Institute GA4 Audit course: Use this link to enrol: http://cxl.com/institute/#_r_neal72
Get a10% discount by entering the coupon code: 10INSTRUCTOR in the checkout by reloading the checkout page with the coupon slug. ?coupons=yes to enable the coupons field.
Now updated with with dedicated section on Shopify stores
2
OptionalNoItemStatusNotesRecommendationImpactImpact ReportingConsole Config or TrackingGTMRequires DevRquires ClientLinks
3
1.0Planning and Performance Marketing
4
Yes1.1What are the business goals?In progressCombined templateHYNNNY
5
Yes1.2Has a measurement plan been created?In progressCombined templateHYNNNY
6
Yes1.3Is there a tag implementation plan?In progressCombined templateHYNNNY
7
Yes1.4What is their North Star Metric?Not startedHaving an agreed North Star metric helps companies ensure everyone is aiming for the same goalMYNNNY
https://datmark.gumroad.com/l/metric-algorithm?utm_campaign=viral-post&utm_medium=message&utm_source=linkedin
8
No1.5Has the GA4 event structure been documented?Not startedDocumenting the events and custom parameters makes it easier for users to create custom reportsMYNNNY
9
No1.6How is GA4 installed? gtag.js, GTM or Measurement ID?Not startedCheck how GA4 or Firebase (for Apps) is installed and that the implementation is site wide. HNTrackingYNYhttps://juliana-jackson.com/gtagjs-ga4-implementation-guide/
10
No1.7Has the site been scanned to measure GTM/GA4 coverage on the site?Not startedUse custom search in Screaming Frog to check for GTM code on every pageHYTrackingNNNhttps://www.tayloreddata.com/blog/how-to-use-screaming-frog-to-check-for-missing-google-analytics-tags
11
No1.8Have Core Web Vitals been checked using Google PageSpeed Insights?Not StartedReview PageSpeed Insights to understand if need to measure loadspeed metrics HYConfigurationNNNhttps://pagespeed.web.dev/
12
Yes1.9Optional: Has the website been reviewed for accessibility?Not StartedTo decide if user experience metrics need to be monitored, check for accessibility issuesNNConfigurationNNNhttps://chromewebstore.google.com/detail/silktide-accessibility-ch/mpobacholfblmnpnfbiomjkecoojakah
13
No1.10For benchmarking, in Account details, has Modelling contributions and business insights been enabled? An industry category must also been selectedNot StartedBenchmarking is available in the Overview report for one metric at a time. Select the medal icon to enable benchmarking.LYConfigurationNNNhttps://www.wix.com/seo/learn/resource/ga4-benchmarking
14
No1.11Is there a concern that GTM is slowing the website load speed ?Not StartedIt is possible to implement a script to delay some non-critical GTM tag events LNTrackingNYN
15
No1.12Check website set up using Stape's free website evaluaiton toolNot StartedProvides a score out of 10 and includes server-side GTMHYStapeNNNhttps://stape.io/website-tracking-checker
16
2.0Data Privacy & Controls
17
No2.1Does the website have a cookie consent banner and is it compliant with local or international laws (e.g. GDPR or data protection legislation)?Not startedIn the UK, the ICO requires all websites to give equal prominence to Accept and Reject cookies in their cookie consent bannersHHTrackingYNY
18
No2.2What level of cookie consent is required before tracking users in GA4? Google Consent Mode basic or advanced (v2) need to be implemented for all GA4 properties which use Google advertising platformsNot startedGTM consent mode communicates your users' cookie or app identifier consent status to Google. Consent Mode is required by Google for any websites in Europe which use any Google advertising platform, such as Google Ads or Google Ad Manager.MYTrackingYNY
19
No2.3Are there any consent related errors in the Chrome console, such as "Refused to frame domainname.com because it violates the Consent Security Policy"Not startedThis can be caused by the Google Tag firing before or at the same time as the Conent mechanism tagLYTrackingYNN
20
No2.4If using Microsoft Ads, Microsoft Consent Mode also needs to be implementedNot startedNeeded for EU and is in addition to Google Consent Mode. Parameter in Chrome called ASC, with D = DeniedLYTrackingYNNhttps://www.youtube.com/watch?v=XsxEa43sltE
21
No2.5Has Google Signls been enabled?Not startedWhen Google Signals is enbled this allows GA4 to collect more data for ad personalisation, including demogrphic data, which is required for ad retargeting via Google Ads. LYConsole configNNN
22
No2.6Have advanced Ad Personalisation settings been configured to exclude certain countries?Not startedAdvanced settings, are ad personalisation disabled in certain countries?LNConsole configNNY
23
No2.7Do we need to block personalised advertising for certain events/audiences (NPA)?Not startedGA4 audiences/events can have NPA (non-personlised ads) enabled in Admin to prevent certain events and audiences using those events for being included in Google Ads campaigns.LNConsole configNNY
24
No2.8Has Data Retention been changed from the default setting for Exploration reports?Not startedMaximum of 14 months for GA4 Free and 50 months for 360HYConsole configNNN
25
No2.9Is the data retention period re-set every time a user visits the site? Not startedThe default is to enable this settingLYConsole configNNN
26
No2.10Is User-provided data collection turned on? DO NOT TURN THIS ON
Not startedIf you intend to export raw data to BigQuery and collect UserId, turning this on will prevent the UserId dimension from being exported to BigQuery. In addition, this feature has a tendency to think that company email addresses on a website are user email addresses, allocate it to all/most users and then traffic will collapse as GA4 thinks they are all the same usersGenerally recommend not turning this onLNConsole configNNN
27
No2.11Redact most email information from event dataNot startedEnable in GA4 consoleLYConsole configNNN
28
No2.12Redact URL query parameters from specific event parametersNot startedEnable in GA4 console and specify individual query parameters such as gtm_debug and fbclidLYConsole configNNY
29
3.0Property Settings:
30
No3.1Does the Property structure meet the needs of the business?Not startedRecommend separate GA4 property is created for staging sites if GTM has been implemented on it.LNNNNN
31
No3.2Has a test GA4 Property been created to test changes in console before they are implemented in GA4 Live Property?Not startedCreate new property and then add the Measurement ID as a new destination in Configure Tag Settings of Live Propery web data streamCreate test propertyMYConsole configNNNhttps://www.optimizesmart.com/using-the-ga4-test-property/
32
No3.2If you are on paid GA4, consider using subproperties as a replacement to views or create new collections for GA freeNot startedLYConsole configNNN
33
No3.3Verify time-zone settings in the propertyNot startedLYConsole configNNN
34
No3.4Verify currency settings in your propertyNot startedLYConsole configNNN
35
No3.4Review user permissionsNot startedKeep Admin to users who need itLNConsole configNNN
36
4.0Data Stream Settings
37
No4.1Review data stream(s)Not startedCheck only a single web data stream and separate streams for iOS and Android apps - For roll-up property see 12.0HYConsole configNNN
38
No4.2Is data being recieved by the GA4 property and use DebugView to testNot startedHYTrackingYYN
39
No4.3Configure site search event in Enhanced MeasurementNot startedSpecify up to 10 parameters in order of precedence, separated by commas. Only the first matching parameter will be used.LYConsole configNNN
40
No4.4Has "Page changes based upon browser history events" been enabled? Not startedThis is designed for single page application content changes, but is best turned off so that we can control when page views are fired using GTM/data layerMYConsole configNNN
41
No4.5Turn off duplicate Enhanced Measuement Events if configured in GTMNot startedForm interaction is not a useful event and video start will often not work with YouTube videosMYConsole configNNN
42
5.0Configure Tag Settings
43
5.1Manage Automatic Event DetectionNot startedThis controls the Enhanced Measurement events and will overide settings in the Data Stream.MYConsole configNNY
44
5.1Set domain and cross-domain trackingNot startedIf users are taken to another domain to complete purchase, it is wise to add this domain to the GA4 console and for booking engine domainsMYConsole configNNY
45
5.2Filter internal trafficNot startedSpecify IP addresses or create a landing page for staff. Check Test Data Filter dimensionLYConsole configNNY
46
5.3Filter developer trafficNot startedConfigure to prevent users using GA4 Debug view (from GTM) from appearing in pre-built reports - Not always worth it, but can check Test Dev FilterLYConsole configNNN
47
5.4Configure unwanted referralsNot startedReview referrals and check unwanted referral listLYConsole configNNY
48
5.5Review session-timeout settingsNot startedUsers often open a website and keep the tab open, returning after an hour or so. This would trigger a new session. Setting the session duration to something longer than 30 minutes would be a good idea, to the maximum of 7 hours 55 minutesLYConsole configNNY
49
5.6If needed, adjust timer for engaged sessionsNot startedHow many seconds should a visitor stay on a page to be considered as an engaged user. This should depend on the nature of the site and user behaviour. Normally set the timer to at least 30 seconds or 60 seconds. The default is just 10 seconds on a page does is not long enough for a user show much engagement.MYConsole configNNY
50
5.7Do not use "Collect Universal Analytics events" option in the data streamNot startedNot recommended as no control over set up and will replicate GA3 event structureHYConsole configNNN
51
5.8Disable the “ignore duplicate instances of on-page configuration” settingNot startedAdmin > Manage Google Tag - The slider is OFF for older properties, and ON by default for newer ones. If you're using the Google Tag in GTM to fire page_view events in a single page application, this will break your implementation and you'll need to change the setting.LYConsole configNNN
52
5.9Admin Tab - ChangesNot startedCheck history for any major changes to discuss with clientLYConsole configNNN
53
6.0Data Settings
54
6.1UseridNot startedConsider sending userid to data layer via GTM to improve attributionLYConsole configNNY
55
6.2Channel groups - Up to 2 custom channel groups can be created in GA4 free and 5 in GA 360 - Also see Data Quality section below.Not startedHave custom channel groups been created to adjust for source, medium, campaign ID and campaign name. Check for email clients in referrals and (not set). If the word "shop" appears in the utm_campaign parameter and the utm_medium includes the word "paid", the traffic is automatically classified as "Paid Shopping" — even if the source and medium would normally categorize it as "Paid Social.". As Paid Shopping is 3rd and so delete or move in your custom channel group.MYConsole configNNY
https://kpplaybook.com/resources/how-to-report-on-traffic-from-ai-tools-in-ga4/?utm_medium=social&utm_source=linkedin&utm_campaign=dana+post&utm_content=20250729
56
6.3Obtain a list of top affiliates or partner sites from client to compare against default channel groupingsNot startedOften UTMs are not fully utilised and some affiliates don't use them in links to websitesMYConsole configNNY
57
6.4Check UTM parameters are used for campaigns and links provided to other websites (.e.g. affiliates and Progressive Web App)Not startedReview source/medium in Traffic Acquisition report. UTM parameters are required to ensure accurate traffic attribution as custom channels can only be configured using source, medium, campaign ID and campaign name. For links from PWAs, add UTMs for attribution. MYTrackingNNY
58
6.5Check if UTM parameters are being sent correctly to GA4:Not startedUse Chrome extension to check for redirects as a) Server-side redirects can remove UTMs, b) JavaScript redirects may remove UTMs, c) GTM variables can be set to remove query parameters d) Not using the correct format "&"s and underscoresMYTrackingYYN
59
7.0Shopify Stores Only - GTM
60
7.1Do they use Shopify Plus or Shopify standard?Not startedIf on Shopify Plus: implement structured tracking in checkout.liquid or via controlled Web Pixel logic. If on Standard Shopify: use Customer Events and server-side tracking to compensate for limited checkout control. Document constraints clearly in architecture.LYTrackingNYN
61
7.2GTM installation method – Mixed installs (theme, additional scripts, checkout custom pixel) can cause duplication or missed events.Not startedSingle documented GTM install in theme.liquid + Customer Events for checkout (non-Plus). Remove legacy “Additional Scripts”. If have GTM in theme, there is no need for a loader in the Custom Pixel in checkoutLYTrackingNYYhttps://www.analyticsmania.com/post/install-google-tag-manager-and-ga4-on-shopify/
62
7.3Legacy Additional Scripts in checkout – Can duplicate purchase events or conflict with server-side trackingNot startedRemove entirely. Use Customer Events + Webhooks or server-side GTM (Stape server app and data layer in Custom Pixel). To identify how many loaders exist on the site use our script and paste into the Chrome console tab.MYTrackingYNYhttps://pastebin.com/9AMN2qiU
63
7.4Shopify Web Pixels behaviour – Sandbox iframe can overwrite page paths (e.g. /web-pixels@).Not startedThis happens when the Data Layer is enabled via Shopify Customer Events, but key parameters are not being sent to GA4; page_location, page_title and page_referer. Send page_location, pate_title and page_referer to GA4 in GTMLYTrackingYNNhttps://www.linkedin.com/feed/update/urn:li:activity:7382302311403999232/
64
7.5App-injected tracking (Elevar, Littledata, Trackify, Triple Whale, YouTube app etc.)Not startedCheck DevTools: Sources for injected JS; inspect Network tab for duplicate event senders. Disable app tracking unless the app is the single chosen ecommerce provider.
LYTrackingYNN
65
7.6How are events sent to GA4? What is the client vs server-side event split? – Mixed ownership causes duplication or attribution gaps.Not startedDefine clear responsibility: client-side for browse events, server-side for cart/checkout/purchase. Document architecture.LYTrackingYYN
66
7.7What is the purchase event integrity? Missing or duplicate transactions distort revenue and ROASNot startedUnique transaction_id, no duplicates, GA4 purchase count within 3–5% of ShopifyLYTrackingYYN
67
7.8What does the webhook reliability indicate (if using server-side/Littledata)? Failed webhooks will result in lost revenue events.Not startedMonitoring and replay capability enabled. Validate webhook success logs.LYTrackingYNN
68
7.9Has cross-domain tracking been configured. Checkout or myshopify domain can breaks sessions leading to Direct traffic inflation.Not startedConfigure cross-domain linking for storefront to myshopify and checkout domain.LYTrackingYNN
69
7.10How good is UTM persistence – Shopify navigation strips UTMs after landing page.Not startedStore UTMs in first-party cookie/local storage. Send via GTM or server-side to preserve attribution.LYTrackingYNN
70
7.11Single source of page_view – Dual page_view firing breaks session attribution.Not startedOne page_view source only. Ensure Google Tag loads before event tags.LYTrackingYYN
71
7.12AJAX cart behaviour – Add to cart events may not trigger if tied to page loads.Not startedFire add_to_cart on actual cart update event, not URL change.LYTrackingYYN
72
7.13Data layer structure – App-modified data layers cause fragile tagging.Not startedStandardised GA4 ecommerce schema. No GA3 category/action/label logic.LYTrackingYNN
73
7.14Are Item ID & SKU consistent? A mismatch breaks Ads, Merchant Center & attribution.Not startedUse SKU as item_id consistently across platforms.LYTrackingYNN
74
7.15Do they use app-injected pixels? Shopify apps may inject tracking outside GTM.Not startedCentralise control in GTM or server-side. Disable duplicate native tracking.LYTrackingYNN
75
7.16Have Google Ads and other pixel tags been tested?Not startedIn Network tab; check for: pagead/conversion, googleadservices (conversions and remarketing), ccm/collect (Conversion Linker support calls), g/collect (indirect path),. For Bing, search for bat.bing.com (tag fired), action/0 (conversion endpoint), and UET.MYTrackingYNN
76
7.20GTM
77
7.21Check for correct implementation, including multiple implementations and GTM on every page. Not startedMYTrackingYYN
78
7.22Has Google Tag been configured according to best practice to fire before any other GA4 event tag, including page_views? This will ensure the parameters in the Configuration variable are present on all tags and a separate page view event is fired immediately afterwards. Not startedThe Google Tag should fire on all page views and following a navigation evet/history change on SPAs. If user_id is required for analysis in Explore reports, ensure it is sent using a different name as a user property. HYTrackingYNNhttps://www.simoahava.com/analytics/google-tag-template-in-google-tag-manager/
79
7.23Are custom dimensions and metrics, such as event scoped, user scoped and session scoped parameters configured correctly?Not startedE.g. Time stamp, GTM container and version ID, login status, path clean, affiliate ID, userId and plan type.MYTrackingYYN
80
7.24For marketing Pixels (e.g. Google Ads, Facebook, TikTok) have base tags (page_view events) been configured? Not startedCheck pageview events have not been hard-coded onto site.MYTrackingYNY
81
7.25For Google Ads, has cross-domain tracking been enabled if required (e.g. where there is a booking engine which takes orders)?Not startedThe Conversion Linker tag has a checkbox for cross-domain tracking. This should be enabled if users are completing a purchcase event on another domain.MYTrackingYNN
82
7.25Have marketing pixels been created for specific events, such as lead generation or purchase and do they include dynamic variables (e.g. value and quantity)?Not startedCheck the standard events used by the vendorMYTrackingYNY
83
7.26Are single page applications configured for history changes or data layer pushes to accurately track content changesNot startedData layer page_view events are reliable than history changes and best avoid using a combination of bothMYTrackingYYN
84
7.27Are Lookup and RegEx tables set up to minimise the number of tags in GTM, especially for Google Ads ID and label?Not startedLNTrackingYNN
85
7.28Create a variable for the Measurement ID so that data from different environments can be sent to separate GA4 properties to prevent data pollution and it can easily be added to other tagsNot startedData from production and testing environments should be sent to different GA4 properties.LYTrackingYNY
86
7.29Is the data layer populated with required data (.e.g. user_id, Salesforce_id, author name, content category)?Not startedThe user_id needs to be pushed to the data layer every time the page refreshes. MYTrackingYYY
87
7.30Are data layer pushes used for events which are unable to track using GTM (e.g. iFrame form submissions)?Not startedMYTrackingYYY
88
7.31Login status - Is this needed?Not startedBecause session scoped dimensions don't exist in GA4, this needs pushed to the data layer on every page refresh, set up as an event scoped dimension and then added to every event tag in GTM. LYTrackingYYY
89
7.31Are there any obvious concerns about the GTM container?Not startedNumber of tags/size of container, too many auto-event listners or obsolete events?MNTrackingYNY
90
7.32Configure custom hour dimension for Looker Studio dashboardsNot startedLooker Studio does not have access to hour dimension and so it is necessary to create a custom dimension in GTMLYTrackingYNNhttps://twooctobers.com/blog/time-of-day-reporting-in-ga4-looker-studio/
91
7.33Are they capturing click IDs for paid advertising campaigns, incliuding GCLID and MSCLKID. GBRAID and WBRAID for Google Ads, ttclid for TikTok and FBCLID for Meta? Not startedPersisting click IDs and utms, and sending with all GA4 events can help prevent attribution from breakingMYTrackingYNN
92
7.34Capture UTM parameters to enable dynamic content or targeting based upon source, medium or campaign etcNot startedLNTrackingYNN
93
7.35Create site search zero results eventNot startedIf using JavaScript variable to capture search results, remember to disable search in Enhanced MeasurementMYTrackingYNN
94
7.36For page_view event, add path_clean and value {{page path}} Not startedRemember to register parameter in GA4MYTrackingYNN
95
7.37Are you tracking clicks from AI Overviews (AIO), Featured Snippets, or People Also Ask (PAA) features in GA4? Not startedCreate custom JavaScript variables and parmeters for capturing. Remember to register new parameters in GA4 console. Because ChatGPT and Bing also include #text in their results, filter this by eg "session source/medium = google/organic", in order to be sure you're just getting Google trafficMYTrackingYNN
https://kpplaybook.com/resources/how-to-track-traffic-from-aio-featured-snippets-paa-results-ga4/?utm_medium=social&utm_source=linkedin&utm_campaign=dana+post&utm_content=20250321
96
7.40Fred Pikes's GTM Practices
97
7.41Add tag name in settings for all tagsNot startedNow can be captured automatically in Advanced settings > Additional metadataLNTrackingYNN
98
7.42Add tag name in GA4 UI eventsNot startedIf you use the UI to create events, always include a parameter to indicate the source of the eventLNTrackingYNN
99
7.43Track GTM container and version in every event tagNot startedEnables easier tracking of when events stop workingLNTrackingYNN
100
7.44Track client and session ID as user activities. Client ID and Session ID are now built in variables you just need to enable if using GTMNot startedUseful if you ever need to send data via the Measurement Protocol. Enable in GTMMYTrackingYNN