Website Tracking & Analytics Audit
Free SEO + tracking audit — see exactly what's broken in under 60 seconds
Your website's tracking setup shows a few areas that need attention. The Google Tag Manager (GTM) is functioning well, but there are some warnings: the <noscript> fallback is missing, which could affect users with JavaScript disabled, and the dataLayer wasn't initialized before the GTM container, which might impact data accuracy. Google Analytics 4 (GA4) is firing correctly, but there are conflicting GA4 IDs that could lead to data discrepancies. Since your site is not on Shopify, there are no concerns about Shopify-native analytics or duplicate pixel risks. The 'view_item_list' event, which should fire on the homepage, is missing, indicating a gap in tracking. Next, consider auditing your product pages, cart, and checkout to ensure comprehensive tracking. Given these issues, I recommend connecting your store to PayHelm AI for a more detailed analysis and guidance.
GTM container installed and loading.
GA4 is installed and sending data.
4 of 4 key funnel stages look healthy.
No data-quality issues found in tracked events.
Consent Mode v2 configured.
Tags load quickly.
Conflicting or deprecated analytics IDs detected.
Consent Mode v2 is configured via Osano. The default and update calls and the v2 signals (ad_user_data, ad_personalization) are all present.
Tags loaded quickly (GTM in 0.54s) — no performance concern.
No cross-domain (linker) tracking was detected. If your checkout or other steps live on a different domain, set up linker tracking so visits aren't split into separate sessions.
Google Ads Enhanced Conversions were not detected. They send hashed first-party data (email/phone) to recover conversions lost to cookie restrictions — worth enabling if you run Google Ads.
GA4 User-ID tracking was not detected. If you have logged-in users, setting a User-ID lets GA4 join their activity across devices and sessions.
We couldn't reach the checkout or order-confirmation page during this audit, so purchase tracking is unverified. Purchase is the single most important event to get right — test it with a real or test order and confirm the 'purchase' event fires once on the thank-you page.
Multiple GA4 measurement IDs were found (G-T2YCW3K1C0, G-R7FQND1N34). Sending the same events to more than one GA4 property is sometimes intentional, but is often an accident that doubles event counts or splits data — confirm each ID is meant to be here.
Marketing & analytics tags observed sending data while the page loaded.
Every dataLayer push observed during page load — with full payload and configuration analysis.
›GTM lifecycle events (3)— gtm.js, gtm.dom, gtm.load, etc.
Data points present in the dataLayer that your tags can read (the values pushed alongside each event).
The actual tracking requests your browser sent — the ground-truth proof that a tag fired.
GTM-MQ42F32
A Google Tag Manager container is installed on this page.
1/1 container(s) returned a successful gtm.js response.
The container's JavaScript downloaded successfully, so GTM can run.
No <noscript> fallback found in the HTML source.
The recommended <noscript> fallback is missing. It's minor, but Google's standard install includes it.
Fix this issueGTM snippet appears inside <head>.
The container is loaded early, as Google recommends, so tags fire as soon as possible.
dataLayer was not clearly initialised before the container snippet.
If the container loads before dataLayer is ready, early values (like ecommerce data) can be lost.
Fix this issueG-T2YCW3K1C0, G-R7FQND1N34 — collect hit observed.
Google Analytics 4 is actively sending pageview/event data.
default=true, update=true, signals=[ad_storage, analytics_storage, ad_user_data, ad_personalization, personalization_storage, functionality_storage, security_storage, wait_for_update], CMP=Osano
Consent Mode v2 is configured via Osano. The default and update calls and the v2 signals (ad_user_data, ad_personalization) are all present.
GTM 535ms, GA4 first hit 4805ms, DOMContentLoaded 1195ms
Tags loaded quickly (GTM in 0.54s) — no performance concern.
No linker configuration observed
No cross-domain (linker) tracking was detected. If your checkout or other steps live on a different domain, set up linker tracking so visits aren't split into separate sessions.
Not detected
Google Ads Enhanced Conversions were not detected. They send hashed first-party data (email/phone) to recover conversions lost to cookie restrictions — worth enabling if you run Google Ads.
Not detected
GA4 User-ID tracking was not detected. If you have logged-in users, setting a User-ID lets GA4 join their activity across devices and sessions.
G-T2YCW3K1C0, G-R7FQND1N34
Multiple GA4 measurement IDs were found (G-T2YCW3K1C0, G-R7FQND1N34). Sending the same events to more than one GA4 property is sometimes intentional, but is often an accident that doubles event counts or splits data — confirm each ID is meant to be here.
Fix this issuepurchase observed=false, checkout page audited=false
We couldn't reach the checkout or order-confirmation page during this audit, so purchase tracking is unverified. Purchase is the single most important event to get right — test it with a real or test order and confirm the 'purchase' event fires once on the thank-you page.
Fix this issueFunnel events are page-specific: purchase only fires on order confirmation, add_to_cart requires a user click. Events shown as are not observable on this page type — audit each page separately for full coverage.
Discovery
Not observed on this page. Set up 'view_item_list' on your collection/category/search pages for funnel visibility.
Fix this gapNot observed during this load — 'select_item' requires user interaction on collection/category pages. Verify by manually testing the action on that page.
Consideration
Not observable on home pages — 'view_item' only fires on product detail pages. Audit that page type to verify coverage.
Cart Activity
Not observable on home pages — 'add_to_cart' only fires on product pages and cart. Audit that page type to verify coverage.
Not observable on home pages — 'remove_from_cart' only fires on cart page. Audit that page type to verify coverage.
Not observable on home pages — 'view_cart' only fires on cart page. Audit that page type to verify coverage.
Checkout Funnel
Not observable on home pages — 'begin_checkout' only fires on checkout entry page. Audit that page type to verify coverage.
Not observable on home pages — 'add_shipping_info' only fires on checkout shipping step. Audit that page type to verify coverage.
Not observable on home pages — 'add_payment_info' only fires on checkout payment step. Audit that page type to verify coverage.
Not observable on home pages — 'purchase' only fires on order confirmation / thank-you page. Audit that page type to verify coverage.
Post-Purchase
This event fires server-side (server-side or order management system) and cannot be observed by a browser-based audit.
These tracking scripts are hardcoded directly in your page HTML. Moving them into GTM makes them easier to update, pause, version, and conditionally fire — without touching your code.
HubSpot tracking snippet or forms embed hardcoded in the page HTML.
Fix: Load the HubSpot script via a GTM Custom HTML tag and initialise forms only after the script has loaded.
Risk: Calling hbspt before the HubSpot loader has executed causes 'hbspt is not defined' errors and broken form embeds. Centralising in GTM also enables conditional loading.
Your tracking has gaps — PayHelm can fix this.
Broken tags mean lost attribution and bad decisions. PayHelm unifies your ecommerce, ad, and analytics data so every number is trustworthy — no guesswork.