Website Tracking & Analytics Audit
Free SEO + tracking audit — see exactly what's broken in under 60 seconds
Your website's tracking setup has some areas that need attention. Currently, Google Analytics 4 (GA4) is set up but did not fire on the home page, which is a concern as it means visitor data might not be captured. Additionally, there's no Google Tag Manager (GTM) container detected, which is typically used to manage and deploy marketing tags. There are also multiple console errors indicating server issues that might affect site performance. Since your store is not on Shopify, there's no need to worry about Trekkie or Web Pixels API. Next, it would be wise to audit other key pages like product, cart, and checkout to ensure analytics are properly firing there. Given these issues, I recommend connecting your store to PayHelm AI for a more detailed analysis and to help resolve these tracking gaps.
Tag setup present but not confirmed loading.
GA4 configured but no hits observed (may be consent-gated).
Not an ecommerce store — scored on basic analytics coverage.
No data-quality issues found in tracked events.
Consent Mode v2 configured.
Tag load timing not measured.
No conflicting analytics IDs.
Consent Mode v2 is configured. The default and update calls and the v2 signals (ad_user_data, ad_personalization) are all present.
No tag load timing was captured (the container may not have loaded, or timing was unavailable).
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.
3 SEO improvements identified — addressing them could meaningfully boost organic visibility.
Title is 71 characters. Google may truncate titles over ~70 chars in search results.
Estate & Letting Agents in West Midlands region and beyond - Skitts (71 chars)Meta description is 96 characters — within the ideal 70–160 character range.
Home - Skitts specialises in residential sales, lettings and property management. Find out more. (96 chars)2 H1 headings found. Most SEO guidance recommends a single H1 per page to signal the primary topic clearly.
2 H1 tags found.No noindex directive — the page is eligible to be indexed.
robots: index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1Canonical tag points to the page itself — no duplicate-content signals sent to search engines.
https://skitts.net/1 Open Graph tag(s) missing. Complete the set for consistent social link previews.
og:title ✓ og:description ✓ og:image ✗Structured data found — search engines can use it to generate rich results (star ratings, FAQs, products, breadcrumbs, etc.).
JSON-LD script foundViewport meta tag found — the page is set up for mobile-friendly rendering.
viewport meta tag presentNo GTM-XXXX container; gtag.js present instead.
Tags are loaded directly via gtag.js rather than through Tag Manager. That works, but you lose GTM's centralised management, versioning, and conditional firing controls.
Fix this issueG-RPEKFD74LV — no /g/collect hit observed.
GA4 is configured but we did not see it send data on this page — it may be gated behind cookie consent or misconfigured.
Fix this issue50 error(s) logged.
JavaScript errors were logged during page load. These don't necessarily affect tracking — only errors that directly interrupt pixel execution matter. See any vendor-specific errors below for actionable issues.
default=true, update=true, signals=[analytics_storage, ad_storage, ad_user_data, ad_personalization, functionality_storage, security_storage, wait_for_update]
Consent Mode v2 is configured. The default and update calls and the v2 signals (ad_user_data, ad_personalization) are all present.
DOMContentLoaded 2748ms
No tag load timing was captured (the container may not have loaded, or timing was unavailable).
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.
Ecommerce Funnel — Not Applicable
This site doesn't appear to be an online store, so the ecommerce funnel report has been skipped. GTM tag coverage, triggers, variables, and on-page scripts are still audited above.
If this site does sell products, try re-running the audit on a product page URL — that will surface add-to-cart, checkout, and purchase event coverage.
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.
GA4 gtag.js snippet installed directly in the page HTML (outside GTM).
Fix: Remove the hardcoded GA4 snippet and manage it via a GTM 'Google Analytics: GA4 Configuration' tag.
Risk: Running GA4 both directly and via GTM sends duplicate pageviews and inflates every metric in your reports.
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
Failed to load resource: the server responded with a status of 429 ()
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.