To track two websites with Google Analytics 4, you either put both sites in one GA4 property as two web data streams, or you create a separate property for each site. One property is right when the two sites belong to the same business and you want combined totals; separate properties are right when the sites serve different audiences, teams or clients. If users move between the two sites during a single visit, you also need cross domain measurement so GA4 does not count the same person twice.
This guide explains how GA4 organizes accounts, properties and streams, when to choose each setup, how to configure cross domain tracking and subdomains, how to filter reports by hostname, and what to do when you need a single roll up across many sites. The steps use the GA4 interface as it appears in the Admin panel in 2026, plus the equivalent gtag.js and Google Tag Manager settings.
How GA4 organizes multiple sites
Google Analytics has three layers. An account is the top level container, usually one per company. A property is where data lives and where reports are built. A data stream is a source of data feeding a property: a website, an iOS app or an Android app. One property can hold several web streams, and each web stream gets its own measurement ID that starts with G-.
In GA4 a single property can collect from as many websites as you want, and every event carries a hostname, so you can slice a combined property back into per site views at report time.
Option 1: one property, two data streams
This is the setup Google recommends when the sites are part of the same user journey or the same business, for example a marketing site and a separate checkout domain, or a main brand site and a support site.
Add the second stream
- Open Google Analytics and click Admin (the gear icon at bottom left).
- Under the Property column, click Data streams.
- Click Add stream, then Web.
- Enter the second site’s URL and a stream name, leave Enhanced measurement on, and click Create stream.
- Copy the new measurement ID and install it on the second site.
If you paste the tag by hand, the snippet for the second site looks like this. Replace the ID with the one from the new stream.
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XXXXXXXXXX');
</script>On WordPress you can drop the snippet into a header injection plugin or use a dedicated analytics plugin. Our guide to adding Google Analytics to WordPress covers the options.
Set up cross domain measurement
When a visitor clicks from site A to site B, the browser treats them as different origins, so the GA4 client ID cookie set on A is not readable on B. Without help, GA4 starts a new session and a new user on B, and the referral source becomes site A instead of the campaign that actually brought the visitor. Cross domain measurement fixes this by appending a linker parameter (_gl) to links between the domains.
- In Admin, then Data streams, click the first web stream.
- Scroll to Google tag and click Configure tag settings.
- Click Configure your domains.
- Under Include domains that match ANY of the following conditions, add each domain. Use the Contains match type with a value like
example.comso subdomains are included too. - Click Save.
Because the setting lives on the Google tag rather than on the stream, it applies to every stream that shares that tag. Google’s cross domain measurement documentation lists the exact conditions and notes that both domains must use the same Google tag, or tags in the same property, for the linker to work.
If you manage tags with gtag.js by hand, the equivalent configuration is the linker parameter:
gtag('config', 'G-XXXXXXXXXX', {
'linker': {
'domains': ['example.com', 'example-store.com']
}
});In Google Tag Manager, open the Google tag, expand Configuration settings, and add linker with the domains.
Add both domains to the referral exclusion list
Even with the linker in place, tell GA4 not to treat traffic between the two sites as a referral. In the same Configure tag settings screen, click Show more, then List unwanted referrals, and add both domains.
Option 2: separate properties
Create a second property when the sites are genuinely separate: different clients, different business units with their own budgets, or a site whose data should not be visible to people who administer the other one. Property level permissions are the cleanest way to enforce that separation.
- In Admin, click Create, then Property.
- Name it, set the time zone and currency, and click Next.
- Complete the business details, then create a web data stream for the second site.
- Install that stream’s measurement ID on the second site.
Separate properties give each site its own limits, key events, audiences and Google Ads links. The cost is that there is no native combined report across properties in standard GA4; the roll up options are below.
Which setup should you choose?
| Situation | One property, two streams | Two properties |
|---|---|---|
| Users move between the sites | Yes, with cross domain measurement | No, users are counted twice |
| Same business, combined totals wanted | Yes | Only via Looker Studio or exports |
| Different clients or strict access separation | No, everyone sees everything | Yes, property level permissions |
| Different currencies or time zones | No, one setting per property | Yes |
| Per site conversions and audiences | Shared limits, filter by hostname | Independent |
| Subdomains of one site | One stream is enough | Overkill |
Subdomains are simpler than separate domains
If the second “website” is really blog.example.com next to www.example.com, you do not need a second stream and you do not need cross domain measurement. GA4 sets its cookie on the root domain by default (cookie_domain is auto), so the same client ID is readable on every subdomain. Install the same measurement ID on both and the sessions stitch together automatically. You only need Configure your domains when the sites sit on different registered domains.
Splitting reports by site inside one property
With both sites in one property, every standard report shows combined totals. To see one site at a time, use the Hostname dimension.
- Quick filter: In any report, click Add filter at the top, choose the Hostname dimension, and select the host you want. The filter applies until you leave the report.
- Comparison: Click Add comparison, build one comparison per hostname, and the report shows both sites side by side.
- Explorations: In Explore, add Hostname as a row dimension to break any metric down by site in a single table.
- Custom reports for one site: In the Library, save a report with a Hostname filter baked in, then add it to a collection so non technical users land on the right numbers.
Hostname is also available as a condition when you create key events and audiences, so a purchase on the store domain can be its own key event even though it lives in a shared property. If you need to confirm which hostname a tag is sending, the Google Analytics debugger and GA4’s DebugView show the page_location on every event.
Roll up options for separate properties
If you went with separate properties and still need combined numbers, you have three practical routes.
- Looker Studio. Add each GA4 property as a data source, then use Blend data or simply place two scorecards side by side. This is free and handles most executive dashboards.
- BigQuery export. Every GA4 property can export raw events to BigQuery at no charge for the standard tier. Point both exports at the same project and write a
UNION ALLquery across the two event tables for a true combined dataset. - Roll up properties. GA4 has a native roll up property type, but it is limited to Analytics 360 accounts. If you are on the paid tier, a roll up property aggregates several source properties automatically.
Search Console linking is per property too, so if you use the search query reports in Google Analytics, link each Search Console property to its matching GA4 property.
Troubleshooting
The second site shows as a referral source
Cross domain measurement is not active or the domain list does not match. Open a link from site A to site B and check that the URL on B contains _gl=. If it does not, recheck Configure your domains and make sure both sites load the same Google tag. If it does, add both domains under List unwanted referrals.
Users double after adding the second stream
This is expected when users visit both sites and cross domain measurement is off, because each domain generates its own client ID. Enable the linker. Also confirm that you have not installed both measurement IDs on the same page, which sends every event twice.
Hostname shows (not set) or an unexpected host
Events sent from a staging environment, a tag preview or a scraper carry whatever hostname the page had. Add a filter under Admin, then Data settings, then Data filters, to exclude internal and developer traffic, and check your tag is not firing on localhost or a staging domain.
Looker Studio totals do not match the GA4 interface
Looker Studio applies its own sampling and date handling, and user counts cannot be summed across properties because the same person appears in both. Treat blended user counts as approximate and rely on sessions or events for cross property totals.
Frequently asked questions
Can I use the same GA4 measurement ID on two different websites?
Yes. GA4 records the hostname on every event, so one measurement ID on two domains produces a combined property you can split by Hostname. You still need cross domain measurement if users travel between the sites, and a second stream is cleaner if you want separate Enhanced measurement settings for each site.
Is there a limit to how many data streams a property can have?
A GA4 property can hold up to 50 data streams, with a cap of 30 app streams among them, which leaves plenty of room for two websites. The more important limits are per property: custom dimensions, key events and audiences are shared by every stream, so very large multi site setups sometimes split into several properties.
Do I need cross domain tracking for subdomains?
No. GA4 sets its cookie at the top level domain, so shop.example.com and www.example.com share a client ID without any configuration. Cross domain measurement is only for different registered domains, such as example.com and example-store.com, where browsers block the cookie from being shared.
What happens to historical data if I merge two properties later?
Nothing moves. GA4 has no tool to merge or migrate historical data between properties. If you start with separate properties and later switch to one shared property, the old data stays in the old properties and only new events land in the shared one. Decide on the structure early for that reason.
The bottom line
Tracking two websites in GA4 is mostly a structural decision. Put related sites in one property with a stream per site, turn on cross domain measurement under Configure your domains, exclude the domains from referrals, and use Hostname filters to split reports. Give unrelated sites their own properties and lean on Looker Studio or BigQuery when you need a combined view.
Whichever route you pick, verify it the same way: click from one site to the other, confirm the _gl parameter appears, and watch the session continue in DebugView. Five minutes of testing on day one saves months of arguing about why your user counts do not add up.

