folder_open GA4

Cross-domain tracking when AU ads land on another host

Martin Marinov Martin Marinov
15 min read
Topics ga4-linkercross-host-sessionsgtm-australiaenquiry-eventsreferral-exclusion

You paid $3.80 a click from a Gold Coast Search campaign into offers.yoursite.com.au. The form, or the booking engine, sits on app.yoursite.io because product owns that host and marketing owns the landing subdomain. The click is real. The enquiry is real. GA4 still treats them as two people unless you stitch the hop.

That is the job. Not a definition of cookies. You need paid sessions in Australia to keep campaign, source, and medium when the visitor leaves the ad host and submits on another hostname. If they do not, Google Ads and Meta keep claiming conversions while GA4 shows Direct, Unassigned, or a fresh session with no UTM. Smart bidding then trains on a thinner, noisier signal, which is a painful place to sit when Search CPCs have been climbing and Google Ads average ROAS sits around 4.2x only in accounts that actually feed clean conversions.

This guide is for the person who owns the marketing number: how the linker works in GA4 and GTM, what a healthy Australian setup reports, what to ignore, and a compact proof pass before the next media invoice.

How GA4 actually keeps one session when the hostname changes

GA4 identifies a browser with a client ID stored in a first-party cookie on that hostname. Cross-domain tracking does not magically share cookies across registrable domains. It decorates the outbound URL with a linker parameter so the destination page can adopt the same client ID instead of minting a new one. In GTM that is the GA4 Configuration (or Google tag) with a Cross-domain measurement list, plus auto-linking on matching outbound clicks and form posts.

Walk a typical AU paid path. Ad lands on lp.brand.com.au with gclid and UTMs. The visitor hits Book a consult. That CTA posts or links to secure.brand.io or a Shopify, HubSpot, or custom app host. Without decoration, the second host starts a new GA4 session. First host keeps the paid attribution. Second host fires generate_lead as Direct. You then argue with finance about why Ads ROAS looks healthy at 4.2x while GA4 pipeline from paid looks thin.

The moving parts you actually configure: a single GA4 property (do not split brand.com.au and brand.io into two properties if you want one journey). One Google tag / GA4 Config in a GTM container that both hosts can fire, or two containers that share the same Measurement ID and the same linker settings. In Admin, list every hostname that participates in the enquiry path, including www, apex, lp, app, checkout, and booking. In the tag, enable linker, list those domains, and accept incoming linker parameters. Decorate forms as well as links; a lot of AU booking engines submit via POST, not a pretty .

Referral exclusion is the sibling setting people skip. If app.brand.io is not in the referral exclusion / unwanted referrals list, GA4 can overwrite the original Google / cpc source with a referral from lp.brand.com.au. You will think the linker failed when the real bug is a self-referral. Same story for payment gateways and calendar widgets that bounce the user back.

Consent Mode and ad blockers still eat 20%+ of conversion data in many AU accounts. The linker cannot recover a blocked tag. It only keeps identity when both pages actually run GA4. Enhanced Conversions and first-party enquiry payloads still matter for Ads; they do not replace a stitched GA4 session if you report channel contribution from Analytics.

If the hop is messy and you cannot tell whether people abandon the form or never arrive attributed, watch the second host with HeyLead Insights. Session behaviour on checkout.brand.io often shows the form never received the decorated query string, which is a tracking bug, not a copy problem.

What a healthy Australian linker stack reports in GA4

A healthy setup looks boring in Explore. One session. Hostname changes mid-session. Campaign stays google / cpc or meta / paid through the generate_lead (or whatever you mapped to a real enquiry). Page referrer on the second host is the first host, not (direct). Client ID is stable if you inspect the debug view or a BigQuery export.

You should see both hosts under Pages and screens, not two user counts for one click. Landing page is still lp.brand.com.au. The enquiry event fires on app.brand.io with the same session_id. In advertising reports, paid sessions that convert should not collapse into Unassigned at the same rate as last month. Unassigned never hits zero in 2026, but a sudden spike the week you launched a new booking subdomain is a linker or referral-exclusion miss, not seasonality.

Directionally, treat a split like this as broken: more than a small share of paid landing sessions on host A with zero subsequent events on host B, while CRM still logs form fills from that URL. If CRM volume and Ads conversions move together but GA4 paid enquiries do not, the hop is the first place to look. Mobile is the majority of paid search clicks globally; test the linker on iOS Safari and Chrome on Android, not only a Melbourne office desktop, because ITP and in-app browsers drop parameters more aggressively.

Good also means the conversion you care about is the enquiry, not a thank-you pageview. Align the GA4 event name with the Google Ads primary conversion and the Meta event you optimise to. Last-click will still double-count across tools. You are not chasing identical totals. You are chasing the same user journey so each platform is not inventing a new first touch when the hostname changes.

Core Web Vitals still sit in the same conversation. Only about 55.9% of origins pass all three in recent CrUX data. A slow second host (poor INP on the booking form) looks like a tracking gap because the tag never fires before bounce. Fix field INP on the form host; do not only stare at the linker parameter.

If you want a specialist to own the measurement architecture rather than a one-off GTM paste, the GA4 cross-domain funnel tracking work is the same problem: paid click, two hosts, one enquiry.

Not sure where your funnel leaks?
Get a free marketing audit - we review your search, ads, and landing pages and send back what to fix first.
Get a free audit

What to ignore when two hosts share one paid click

Ignore identical conversion counts between Google Ads, Meta, and GA4. They will not match. Consent, view-through, modelled conversions, and different windows guarantee drift. Ignore anyone who sells a single dashboard number as truth. Use GA4 to answer whether the session survived the hop; use Ads to bid; use CRM to count booked work in AUD after GST conversations with finance.

Ignore a second GA4 property “just for the app.” That guarantees a new client ID. Ignore decorating every outbound link on the site, including YouTube and LinkedIn. Linker lists should be the hosts you control that sit on the enquiry path, not the open web.

Ignore last-click theatre and “attribution is dead” as an excuse to skip the linker. Tactical channel reporting still needs a stitched session even if the CEO answer is incrementality or mix modelling. Ignore firing generate_lead on the landing host via a button click when the real submit happens on the app host. You will train bidding on intent clicks, not enquiries.

Ignore weekly container republishes that only rename tags. Constant GTM churn makes it harder to see whether yesterday’s linker change worked. Ignore treating gclid as optional because you use auto-tagging. If a redirect strips query strings between lp.brand.com.au and app.brand.io, both gclid and the GA linker parameter die together. That is a redirect and CDN problem, common on AU stacks that force trailing slashes or HTTP to HTTPS twice.

A Brisbane SaaS team we see in this pattern had Meta Instant Form traffic as a sideshow; Search still sent people to a Webflow subdomain then a Rails app. They kept adding UTM parameters on the second URL by hand. Manual UTMs on the destination do not preserve GA4 client ID. They only relabel the new session. Paid still looked like two visits. The fix was linker + stop stripping queries on the 301, not a prettier campaign name.

Cross-domain tracking for ads that land on a different host in Australia

Prove the enquiry still carries campaign after the hop

Do this as a proof pass, not a philosophy. You are checking one paid URL through to one form event on the other host.

DIY playbook

  1. List every hostname on the paid enquiry path (apex, www, lp, app, checkout, booking). Put the same list in GA4 Admin cross-domain measurement and in the Google tag’s linker domain list in GTM.

  2. Add those hosts to unwanted referrals so lp.brand.com.au cannot become the source of app.brand.io.

  3. Confirm form decoration is on. Click and POST targets must keep the _gl parameter. Watch a real submit in GTM preview on both hosts.

  4. Build a test URL with UTMs via a builder, plus a dummy gclid if you are not using a live ad. Land on host A, complete the form on host B, and confirm one session in DebugView with campaign intact on generate_lead.

  5. Check redirects and CDNs. If the 301 drops query strings, fix that before you blame GA4. Repeat on iPhone Safari and an in-app Instagram browser if Meta is in the mix.

  6. Map one enquiry event. Same name in GA4, Ads, and (if you use it) Meta. Do not mark the landing CTA as the conversion.

  7. Compare 14 days of CRM form fills on the booking host against GA4 paid generate_lead. A large gap with stable Ads conversions is a hop or consent issue, not “creative fatigue.”

If DebugView shows two client IDs, the destination tag is not accepting the linker, the domain is missing from the list, or a tag manager on host B is a different Measurement ID. If you see one client ID but Direct on the event, you still have a referral or UTM-strip problem. If INP on the form host is ugly, fix the page; the tag never gets a fair chance.

Prefer to just ask? Message Martin directly on WhatsApp: Chat with us on WhatsApp

What marketing leaders are seeing

“We launched the booking subdomain in Perth and GA4 paid enquiries fell off a cliff while HubSpot kept filling. It was the 301 eating _gl, not the ads.” - Head of Growth, Australian B2B SaaS

“Search still looked fine in Google Ads. Explore showed every convert as a new Direct session on app. We had linker on clicks and not on the POST.” - CMO, multi-location services group

Cross-domain tracking for ads that land on a different host in Australia

FAQs

Do I need cross-domain tracking if both hosts share .com.au?

Yes, if they are different hostnames. lp.brand.com.au and app.brand.com.au do not share the GA cookie. Subdomains still need linking unless you set the cookie on the parent domain deliberately and both tags agree. Different registrable domains (brand.com.au and brand.io) always need the linker.

Should Google Ads conversion tags fire on both hosts?

Fire the conversion once, on the thank-you or successful submit. Put the Google tag / gtag config on both hosts so gclid can be stored and sent with Enhanced Conversions. Dual primary conversions, one per host, will inflate bidding signals.

No. Consent Mode governs whether tags run and how they model. The linker only runs when analytics is allowed on both pages. Denied analytics on the second host still creates a hole in GA4 even if Ads records a conversion via Enhanced Conversions.

Why does Meta still disagree with GA4 after a clean linker?

Meta attributes on its own identity graph, including view-through. GA4 will not. Your job is a stitched GA4 session for the click path, not matching Meta’s CPA. Average Meta ROAS around 2.8x in 2026 benchmarks is not a reason to ignore the hop; it is a reason not to use Meta’s number as the GA4 audit.

Putting it to work

Execution sprint

This week

  1. Pull 30-90 days of performance for cross domain tracking for ads that land on a different host in (Search Console, ads, CRM, or call logs - whatever you have).
  2. Flag the top leak: wrong intent, weak page, slow response, or dirty conversion tracking.
  3. Ship one fix on the highest-traffic money path (page, campaign split, or response rule).
  4. Run the free tools below on that same URL or account and log the findings.

Next 30 days

  1. Expand the fix to the next one or two money paths only after the first one shows cleaner bookings.
  2. Align creative, keywords, or content with the same offer the page now states.
  3. Review booked outcomes weekly; cut anything that still only produces unqualified volume.

This week

  • Export last 14 days of generate_lead (or your enquiry event) by session campaign and hostname.

  • Spot paid campaigns that land on host A but convert only as Direct on host B.

  • Confirm the domain list in GA4 Admin matches live hosts, including any new booking subdomain.

  • Run one decorated test click through to submit in GTM preview on iPhone Safari.

  • Fix any redirect that drops query strings before you change bidding.

Next 30 days

  • Align one enquiry event across GA4 and Google Ads; retire button-click conversions.

  • Watch Unassigned and Direct share on paid landing paths after the linker change, not last-click ROAS alone.

  • If the form host is slow, improve INP so the tag and the submit both complete.

  • Re-check Meta and Search landing URLs whenever someone ships a new subdomain.

Start by pulling those 14 days of enquiry events split by hostname and campaign. If paid dies at the host change, the linker, referral list, or query-string strip is the mechanism, not the creative. HeyLead can take that exact hop (GTM linker, both hosts, enquiry event that still carries the click) off your plate so you are not debugging _gl between media invoices. Chat with us on WhatsApp

Work with HeyLead
Free marketing audit, or reach Martin directly:
Get a free audit Connect on WhatsApp · [email protected]