Cross-Domain Tracking for Third-Party Booking Engines

Many hospitality and service businesses do not take bookings on their own website. A restaurant sends diners to a reservation platform. An inn sends guests to a booking engine connected to its property management system. A tour operator, a boat rental, or a cooking class sends customers to a ticketing platform to pick a time and pay. These platforms handle availability, payments, and confirmations well, and for most small businesses they are the right choice.

The tradeoff shows up in analytics. When a visitor clicks "Book Now" and lands on a booking platform's domain, Google Analytics 4 (GA4) often loses track of who they are and how they arrived. The booking still happens, but the connection between the ad, search result, or email that brought the visitor to the website and the revenue they produced gets broken. Reports end up crediting the booking platform as the source of the sale, or miss the sale entirely. This post explains why that happens, what cross-domain tracking does to fix it, and what to check when setting it up.

Why Bookings Go Missing

GA4 identifies visitors using a first-party cookie, a small file stored in the browser that belongs to the website being visited. That cookie carries an ID that ties together everything a visitor does on the site, along with information about where the visit came from, such as a Google Ads click or an email campaign.

Cookies are tied to a single domain. A cookie set on a business's website cannot be read by a booking platform on a different domain. When a visitor moves from the website to the booking engine, the booking engine sees what looks like a brand new visitor with no history. If the booking platform has GA4 installed, it records a new session. The source of that session is often recorded as a referral from the business's own website, since that is the last page the visitor came from.

The result shows up in reports in a few recognizable ways:

  • The business's own domain appearing as a top referral source for purchases

  • Paid search and social campaigns showing far fewer conversions than bookings suggest they produced

  • Purchases recorded with a source of "direct" or attributed to a payment processor like PayPal or Stripe

  • A large gap between the booking count in GA4 and the booking count in the reservation system

Each of these makes it harder to judge which marketing is working. The problem also carries into ad platforms. When Google Ads or Meta cannot see bookings tied to their clicks, automated bidding has less data to optimize toward, and campaigns that are producing revenue can look like they are underperforming.

How Cross-Domain Tracking Works

Cross-domain tracking tells GA4 that two or more domains should be treated as one website for measurement purposes. When it is configured, GA4 adds a short parameter to links that point from one listed domain to another. The parameter, which appears in the URL as "_gl" followed by a string of characters, carries the visitor's ID and session information across to the second domain. The GA4 tag on the booking platform reads that parameter and continues the same session instead of starting a new one.

In GA4, cross-domain tracking is configured in the admin settings for the website's data stream, under the tag settings, where each domain involved is added to a list. From that point, links between the listed domains are decorated with the parameter automatically.

This only works when both sides are measured by the same GA4 property. The website and the booking platform both need to send data to the same GA4 measurement ID. That requirement is where most of the complexity lives, because it depends entirely on what the booking platform allows.

What the Booking Platform Allows

Booking and reservation platforms handle analytics in very different ways, and the options available shape what is possible:

  • Native GA4 integration. Some platforms provide a field in their settings where a GA4 measurement ID can be entered. The platform then sends page views and purchase events to that property directly, sometimes with cross-domain support built in.

  • Custom tag support. Some platforms allow a Google Tag Manager (GTM) container or custom tracking code to be added to booking pages. This offers the most control, including the ability to send a purchase event with the booking value.

  • Limited or no support. Some platforms, particularly large consumer-facing reservation networks, do not allow outside tracking code on their booking pages. In these cases, full cross-domain tracking is not possible, and measurement relies on tracking the booking click on the website and on any reporting the platform provides.

Before configuring anything, it is worth confirming exactly what a booking platform supports, which version of GA4 integration it offers, and whether it passes booking values and confirmation details. Support documentation for these features is not always current, so testing the integration directly is the most dependable way to know how it behaves.

Embedded Booking Widgets

Some booking platforms do not send visitors to a separate site at all. Instead, they place a booking widget on the business's website inside an iframe, a window that loads content from another domain within the page. To the visitor, it looks like part of the site. To GA4, it is still a different domain.

Iframes add their own complications. Browsers increasingly restrict cookies set inside iframes from other domains, which can prevent the booking platform's tracking from working correctly. GA4 does not decorate iframe content with the cross-domain parameter automatically. Some booking platforms solve this by sending a message from the widget to the parent page when a booking completes, which GTM can listen for and send to GA4 as a purchase event. Others provide no signal at all. Understanding which approach a widget uses determines whether a completed booking can be recorded on the business's own website.

Referral Exclusions and Payment Processors

Even with cross-domain tracking configured, GA4 can still misattribute bookings when visitors pass through a third domain during checkout. Payment processors are the most common example. When a visitor is sent to PayPal or a bank verification page and then returned to the booking confirmation page, GA4 can record the payment processor as the source of a new session, erasing the original source of the visit.

GA4 addresses this with a setting called unwanted referrals, found in the same tag settings area as cross-domain configuration. Adding payment processors and any other intermediate domains to this list tells GA4 not to start a new session when a visitor returns from them. This keeps the original source, such as a Google Ads campaign or an organic search, attached to the booking.

Sending Bookings to Ad Platforms

Once bookings are recorded correctly in GA4, they can be shared with advertising platforms. Google Ads can import GA4 key events as conversions, bringing the booking and its value into the account for reporting and automated bidding. A Google Ads conversion tag placed directly on the booking confirmation page, where the platform allows it, can provide more precise attribution for Google Ads clicks.

Meta relies on its own tracking, the Meta Pixel and the Conversions API, which sends event data from a server instead of the visitor's browser. If the booking platform supports the Meta Pixel, purchase events on the confirmation page give Meta the conversion data it needs to optimize campaigns. If it does not, Meta campaigns may need to optimize toward the booking click on the website, which is a less precise signal but a usable one.

Including the booking value with each purchase event makes all of this more useful. A campaign that produces three weekend stays is worth more than one that produces three single-night stays, and value-based reporting and bidding can only account for that difference when the value is recorded.

Testing the Setup

Cross-domain tracking has several points where it can quietly fail, so testing is essential before relying on the data. A few checks confirm that it works:

  • Click a booking link on the website and confirm that the booking platform URL includes the "_gl" parameter

  • Use GTM preview mode and GA4 DebugView to confirm that the session continues on the booking platform without a new session starting

  • Complete a test booking where the platform allows it, and confirm that the purchase appears in GA4 with the correct source and value

  • Check the traffic acquisition report for the business's own domain or payment processors appearing as referral sources, which signals a gap

Redirects are a common cause of failure. If a booking link passes through a redirect or a link shortener before reaching the booking platform, the parameter can be stripped from the URL along the way. Linking directly to the booking platform's final URL avoids this.

Setting Expectations

Even a well-configured setup will not match the reservation system exactly. Visitors who decline cookies, use browsers with strict privacy settings, or book by phone after visiting the website will not appear in GA4 as tracked bookings. Some visitors switch devices between researching and booking. A gap of some size between GA4 and the reservation system is normal.

The goal of cross-domain tracking is attribution that is accurate enough to make decisions with. When the gap between GA4 and the reservation system is small and stable, the data can be trusted to compare channels and campaigns. When the gap is large or erratic, it usually points to a configuration problem worth investigating.

Key Takeaways

  1. Booking platforms on separate domains break the connection between marketing sources and bookings unless cross-domain tracking is configured

  2. Cross-domain tracking passes a visitor's ID between domains through a URL parameter, and it requires both domains to send data to the same GA4 property

  3. What is possible depends on the booking platform, which may offer native GA4 integration, custom tag support, or no outside tracking at all

  4. Embedded iframe widgets need their own approach, often a message from the widget to the parent page

  5. Add payment processors and intermediate domains to GA4's unwanted referrals list

  6. Send bookings with their values to Google Ads and Meta so bidding can optimize toward revenue

  7. Test after setup and after any booking platform change, and expect a small, stable gap between GA4 and the reservation system

Previous
Previous

How to Pace Ad Spend Around Seasonal Demand

Next
Next

Consolidating Brands Without Losing Search Equity