GA4 was tracking asquaresolution.com, lab.asquaresolution.com, trustseal.asquaresolution.com, and scamcheck.asquaresolution.com as separate sessions when users crossed subdomains. Caused inflated session counts and broken user journeys.
Impact
User journeys across the A Square Solutions property ecosystem were fragmented in GA4. A user who visited asquaresolution.com and then navigated to scamcheck.asquaresolution.com appeared as two separate users in two separate sessions. Session counts were inflated, direct traffic attribution was overstated, and funnel analysis across properties was unreliable.
Root Cause
GA4 treats different hostnames as different domains by default, even when they share a parent domain. The GA4 cookie is set for the specific hostname, not the parent domain. Navigating from asquaresolution.com to lab.asquaresolution.com causes the browser to make a fresh request with no GA4 session cookie, starting a new session attributed to direct traffic.
Resolution
Configured cross-domain measurement in GA4 Admin → Data Streams → Configure Tag Settings → Configure your domains. Added asquaresolution.com as a cross-domain target (which covers all subdomains). Updated the gtag configuration on all four properties to set cookie_domain: 'asquaresolution.com'. Verified in Realtime that subdomain navigation shows as one continuous session.
Prevention Pattern
Configure cross-domain measurement as part of the initial GA4 setup — before any property in the ecosystem goes live. Never launch a multi-subdomain product without verifying that GA4 treats navigation between subdomains as a single session.
Recovery
Complex (hours)
Deploy risk
low
Detectable
Noticed in GA4 reports — unusually high new session rate for direct traffic
Repeat risk
medium
Prevention patterns
Ecosystem impact
Related failures
All four A Square Solutions properties share one GA4 property (G-MPQVF41ZYM) and had the tracking tag installed correctly on each:
The GA4 tag was working — pageviews were being recorded on every property. The problem was identified while reviewing the Acquisition report: direct traffic numbers were unusually high relative to expected referral patterns. The session count per page was also higher than the pageview-to-session ratio should be.
The signal that revealed the issue: a test navigation from asquaresolution.com to scamcheck.asquaresolution.com, checked in GA4 Realtime, showed two separate active users — not one.
GA4 sets a first-party cookie (_ga) on the user's browser to maintain session and user identity. By default, this cookie is scoped to the exact hostname — asquaresolution.com sets a cookie for asquaresolution.com, and scamcheck.asquaresolution.com sets a different cookie for scamcheck.asquaresolution.com.
When a user navigates from one subdomain to another:
The result: one user journey appears as two or more sessions, each starting from "direct."
ℹThis is a configuration issue, not a data quality guarantee
Fixing cross-domain tracking going forward does not retroactively correct historical data. Sessions recorded before the fix are already fragmented in GA4. Plan for a 2-4 week window after the fix before cross-property analysis is reliable.
Step 1: Configure cross-domain measurement in GA4
GA4 Admin → Data Streams → Web stream → Configure Tag Settings → Configure your domains.
Add: asquaresolution.com
GA4 automatically includes all subdomains when the parent domain is configured. This tells GA4 to pass session information via URL parameters when navigating between these domains.
Step 2: Update gtag configuration on all properties
For each property's GA4 tag installation, add cookie_domain:
gtag('config', 'G-MPQVF41ZYM', {
cookie_domain: 'asquaresolution.com'
});
Setting cookie_domain to the parent domain means the _ga cookie is set at asquaresolution.com level — accessible to all subdomains. A user's identity persists as they navigate across the ecosystem.
For the WordPress main site (asquaresolution.com), the gtag config is managed through the GA4 WordPress plugin settings or directly in the theme's header template. For the React/Vite apps (TrustSeal, ScamCheck), the gtag snippet is in index.html.
Two verification steps:
Realtime check: Open GA4 → Reports → Realtime. Open a browser and navigate from asquaresolution.com to scamcheck.asquaresolution.com. The Realtime report should show one active user, not two. The session should continue without a gap.
Acquisition report: Check the Acquisition → Traffic Acquisition report after a week of normal traffic. Cross-subdomain navigation should appear as an internal referral or — better — not appear as a new session at all. If direct traffic drops noticeably after the fix is applied, that confirms the previous inflation was caused by broken session stitching.
Using one GA4 property (G-MPQVF41ZYM) across all four subdomains is the correct architecture for measuring ecosystem-wide behavior. Each subdomain is configured as a separate data stream within the same property, which means:
The alternative — separate GA4 properties per subdomain — would make cross-property analysis permanently difficult and require data blending to reconstruct user journeys.
For any future multi-subdomain product:
cookie_domain to the parent domain in every gtag config callThe fix takes under 30 minutes to configure. The inflated data it prevents is worth far more than that in reliable analysis.
Fix Confidence
Recovery Complexity
Pattern Family
This failure belongs to a named recurring pattern. Other failures in this family share the same root cause structure — understanding the pattern prevents multiple failure types simultaneously.
Related Failures in Same Pattern
Demonstrated In
This failure occurred in a real production context. These case studies show the full arc from incident to resolution.