Cross Domain Tracking in Google Analytics – Complete Guide

Table of Contents

  1. What is cross-domain tracking in Google Analytics?
  2. Why do you need cross-domain tracking?
  3. When do you need cross-domain tracking?
  4. Requirements for setting up cross-domain tracking
  5. Introduction to Google Analytics cookies
  6. Introduction to client ID
  7. Introduction to domains
  8. Introduction to domain levels
  9. Introduction to cookie domains
  10. Automatic cookie domain configuration
  11. Introduction to cookie path
  12. Introduction to cookie expires
  13. Referral exclusion list
  14. Implementing tracking across a primary domain and its sub-domains
  15. Requirements for setting up cross-domain tracking between primary domains
  16. Introduction to cross-domain links
  17. Introduction to ‘allowLinker’
  18. Introduction to ‘autoLink’ plugin
  19. Introduction to ‘linker:autoLink’ command
  20. Introduction to linker parameters
  21. Introduction to decorating links
  22. Cross-domain tracking code
  23. Implementing cross-domain tracking between two primary domains
  24. Implementing cross-domain tracking between three primary domains
  25. Tracking across top level domains
  26. Using the same Google Analytics tracking code on multiple primary domains for cross-domain tracking
  27. Cross-domain tracking and rollup reporting
  28. Code for tracking a primary domain
  29. Code for tracking across a primary domain and its sub-domains
  30. Code for tracking across a primary domain and its top-level domains
  31. Code for tracking across multiple primary domains
  32. What is _setDomainName() ?
  33. What is _setAllowLinker() ?
  34. What is_link() ?
  35. What is _linkBypost() ?
  36. When is traffic from a sub-domain treated as referral traffic by Google Analytics?
  37. Disadvantage of tracking across sub-domains using a single website profile
  38. Best practices for tracking across subdomains?
  39. When should you not add sub-domain Google Analytics tracking code to all the web pages of a sub-domain?
  40. Should you use _link() and _linkByPost() methods for links and forms between the main domain and its sub-domain?

What is cross-domain tracking in Google Analytics?

In the context of Google Analytics, cross-domain tracking is the tracking of website users and their activities across two or more domains.

By default, Google Analytics is not able to track website users and their activities across multiple domains. That is because Google Analytics uses first-party cookies which can be read by only that domain which issued it. You would need to manually set up cross-domain tracking.

Why do you need cross-domain tracking?

Without cross-domain tracking set-up, you won’t be able to understand and track a user’s journey which spans across multiple domains.

For example, consider the following scenario:

A user landed on your website say abc.com via the search term ‘top men shoes’ on Google.

He then navigated to another website say xyz.com/abc-cart to make a purchase as both your shopping cart and the order confirmation page are hosted on this website.

Now without cross-domain tracking set up, Google Analytics will report the same user as two different users (one user visited abc.com and a different user visited xyz.com/abc-cart.

And the user session that actually spans across the two domains will be counted as two different GA sessions instead of a single session.

So the GA report of abc.com may tell you that a user visited abc.com via the search term ‘top men shoes‘ on google but did not make a purchase.

The GA report of the website, xyz.com may tell you that a user visited xyz.com/abc-cart from abc.com and then made a purchase.

So without cross-domain tracking setup, abc.com (i.e. your own website) would end up getting all the credit for conversion instead of the search term ‘top men shoes‘ and google organic search traffic.

Get the E-book (52 Pages)

Get the E-Book (50 Pages)

 

Consider another scenario:

A user landed on your website abc.com via the search term ‘top men shoes’ on Google.

He then navigated to another website xyz.com/abc-cart because your shopping cart is hosted there.

After completing the purchase, he returned back to your website abc.com, as the order confirmation page is hosted on your website

In this case, GA may attribute sales to xyz.com/abc-cart instead of the organic search term ‘top men shoes‘.

Thus, without cross-domain tracking setup, you may have a hard time determining the original source of your goal conversion and/or ecommerce transaction.

Without a cross-domain tracking setup, most of your conversions could end up being attributed to direct traffic or to a wrong traffic source.

When do you need cross-domain tracking?

You need cross-domain tracking when your Google Analytics session spans across two or more domains and you want Google Analytics, to treat GA sessions spanned across different domains as a single session.

Your Google Analytics session can span across two or more domains in the following scenarios:

#1 When your checkout process occurs on a different domain (quite common, when you use a third-party shopping cart like Shopify)

#2 When your goal conversions or ecommerce transactions take place on a different domain (quite common in case of affiliate websites).

Requirements for setting up cross-domain tracking

In order to set up cross-domain tracking, you would first need to understand the following terms:

  1. Google Analytics Cookies
  2. Client ID
  3. Domains and subdomains
  4. Cookie’s configurations

In cross-domain tracking, we share cookie information between two or more domains. This domain can be a primary domain or subdomain.

The cookie information that we pass from one domain to another is the client ID.

This client ID is stored in the Google Analytics cookie _ga.

The client ID behaves according to the cookie’s configurations (cookie domain, cookie path and expiry date).

So before we are in the position to understand and implement cross-domain tracking, we would need to first understand Google Analytics cookies, client ID and the concept of domains and subdomains.

Note: Cross-domain tracking is highly technical in nature. Depending upon a website’s front end and/or back end configurations, implementing cross-domain tracking can be either a walk in the park or a tough nut to crack.

Introduction to Google Analytics cookies

In the context of Google Analytics, a cookie is a text file which is used to:

  1. Identify unique users
  2. Identify unique sessions
  3. Store information (like traffic source) about users’ GA sessions and campaigns.
  4. Throttle the request rate

There are two types of GA cookies:

#1 First-Party GA Cookies – It is the GA cookie issued by the website being visited and only the website which issued the cookie can read it. Examples of first-party GA cookies: _ga and _gat

#2 Third-Party GA Cookies – It is the GA cookie issued by the website other than the website being visited. Example of third party GA cookies: DoubleClick cookies.

Google Analytics uses cookies based on the JavaScript library being used.

#1 If you are using the classic Google Analytics, then you are using ga.js JavaScript library.

#1 If you are using the latest Google Analytics version (Universal Analytics) then, you are using analytics.js JavaScript library.

The ga.js JavaScript library sets the following first-party cookies:

  1. _utma (unique visitor cookie)
  2. _utmb (session cookie)
  3. _utmc (session cookie)
  4. _utmt
  5. _utmv (visitor segmentation cookie)
  6. _utmx (Google Analytics Content Experiment cookie)
  7. _utmz (Campaign cookie)

The analytics.js JavaScript library sets the following cookies:

#1  _ga cookie (it is used to identify unique users and it expires after 2 years).

#2  _gat cookie (it is used to throttle the request rate and it expires after 10 minutes).

#3 Doubleclick cookies (these are used when you use Google display advertising features like remarketing)

Google Analytics set up a cookie on your hard disk, as soon as you visit a webpage, on which a valid Google Analytics tracking code is installed.

Introduction to client ID

When a user visits your website (say website A) for the first time, a unique ID is assigned to him called the ‘client ID’. This client ID is stored in the Google Analytics cookie _ga.

This ‘client ID’ is used to identify the user as new and unique and to combine all of his hits (pageviews, screenviews, events, transactions etc) together to form a GA session.

When the same user later, again visit your website, Google Analytics is able to identify the user as returning user through his client ID.

When the same user visits another website say website ‘B’ (which also has got GA installed), the GA tag of the website ‘B’ sets a completely different ‘Client ID’ for the user and thus the same user is treated as a different user by website B.

Since _ga cookie is a first-party cookie, it can only be read by the website which issued it. Consequently,   _ga cookie set up by website ‘A’ can not (by default) be read/shared by website ‘B’ and vice versa.

Because of this reason, by default, cross-domain tracking between two or more primary domains is not possible.

Also worth noting, that by default, cross-web browsers tracking and cross-device tracking is also not possible.

The _ga cookie can exist only on the device and browser where it has been set. Since client ID is stored in a GA cookie, the client ID will also exist only on the device and browser where it has been set. Because of this reason, by default, GA can’t identify unique users across different web browsers and devices.

So by default, cross-web browsers tracking and cross-device tracking is not possible.

Note: Client ID can be used to differentiate one _ga cookie from another. So if two _ga cookies have got same client ID then they are ost likely the same cookie.

Introduction to domains

A Uniform Resource Locator (URL) is used to uniquely identify a web resource (like a web page) on the internet.

Consider the following URL:

https://www.optimizesmart.com/best-excel-charts

Here,

  • https:// is the internet protocol
  • www.optimizesmart.com is the hostname (also known as a domain name or domain)
  • /best-excel-charts is the request URI

Thus a URL is made up of internet protocol, hostname and request URI.

Note: By default, Google Analytics reports only the request URI in its reports.

 

A domain name is a string which is used to uniquely identify a website on the internet. It is made up of two or more substrings separated by the (dot) symbol ‘.’

For example, the domain name www.optimizesmart.com is made up of the following three sub-strings:

  • www
  • optimizesmart
  • com

Similarly, the domain name learn.optimizesmart.com is made up of the following three sub-strings:

  • learn
  • optimizesmart
  • com

Introduction to domain levels

A domain name is made up of at least two levels: a top-level domain and a primary domain.

For example, the domain name optimizesmart.com is made up of following two domain levels:

  • com (top-level domain)
  • optimizesmart (primary domain)

The domain name www.optimizesmart.com is made up of following three domain levels:

  • com (top-level domain)
  • optimizesmart (primary domain)
  • www (sub-domain)

Similarly, the domain name learn.optimizesmart.com is made up of following three domain levels:

  • com (top-level domain)
  • optimizesmart (primary domain)
  • learn (sub-domain)

The domain name js.learn.optimizesmart.com is made up of following four domain levels:

  • com (top-level domain)
  • optimizesmart (primary domain)
  • learn (sub-domain)
  • js (sub-sub-domain)

Technically there is no limit to the number of domain levels you can use. But I have not seen more than four domain levels being used in a URL.

The Top Level Domain (TLD)

The highest level domain is called the top-level domain (or TLD).

For example, in the domain name www.optimizesmart.com, the ‘.com’ part is the TLD.

The top-level domain can be generic, location-specific or business/industry-specific.

Examples of generic TLDs: .com, .net, .edu, .info etc.

Examples of location-specific TLDs: .uk, .fr, .de, .in etc.

Examples of business/industry-specific TLDs: .travel, .tv, .restaurant etc.

Primary Domain (or second level domain)

The second highest level domain is called the primary domain.

For example, in the domain name www.optimizesmart.com, ‘optimizesmart’ is the primary domain (without the www prefix).

Similarly, in the domain name www.google.com, ‘google’ is the primary domain.

Subdomain

The third highest level domain is called the subdomain.

For example, in the domain name www.optimizesmart.com, ‘www’ is the subdomain of the primary domain.

Similarly, in the domain name learn.optimizesmart.com, ‘learn’ is the subdomain of the primary domain.

Sub Subdomain

The fourth highest level domain is called the sub subdomain.

For example, in the domain name js.learn.optimizesmart.com, ‘js’ is the sub subdomain of the primary domain.

 

Introduction to cookie domains

In the context of Google Analytics, a cookie domain is the domain at which the Google Analytics cookie _ga is set up.

You can set up _ga cookie at a domain by simply installing Google Analytics tracking code on the domain.

Setting up Cookie domain

By default, Google Analytics cookie ‘_ga’ is set up at the second highest level domain of the current hostname of a web page.

The default Google Analytics tracking code (i.e. the code without any modification done to it), looks like the one below:

<script>

(function(i,s,o,g,r,a,m){i[‘GoogleAnalyticsObject’]=r;i[r]=i[r]||function(){

(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),

m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)

})(window,document,’script’,’https://www.google-analytics.com/analytics.js’,’ga’);

ga(‘create’, ‘UA-XXXXX-YY’, ‘auto’);

ga(‘send’, ‘pageview’);

</script>

If you place the aforementioned Google Analytics Tracking code on a web page whose URL is say: http://music.abc.com/jazz

Then Google Analytics will set up ‘_ga’ cookie at ‘.abc.com’

In the URL: http://music.abc.com/jazz

#1 The current hostname is: ‘music.abc.com

#2 The request URI is: /jazz

#3 Top-level domain (or TLD) is: ‘.com’. Google Analytics can not set up a cookie at the TLD level.

#4 The second highest level domain (also called the primary domain) is: ‘.abc.com’ (without the ‘www’ prefix). By default, Google Analytics setup cookie at this level.

#5 The third highest level domain (also called sub domain) is: ‘music.abc.com

Similarly, if you place the aforementioned Google Analytics Tracking code on a web page whose URL is say: http://asian.music.abc.com/

Then the second highest level domain of the current hostname (asian.music.abc.com) will still be ‘.abc.com’

Since by default, Google Analytics setup cookie at the second highest level domain of the current hostname, so the _ga cookie will be set at ‘.abc.com’

Now if you place the aforementioned Google Analytics Tracking code on a web page whose URL is say: http://www.abc.com/

Then also Google Analytics will set up ‘_ga’ cookie at ‘.abc.com’ as the second highest level domain of the current hostname (www.abc.com) is ‘abc.com

Automatic cookie domain configuration

Now let’s look at the default Google Analytics tracking code (i.e. the code without any modification done to it) once again:

<script>

  (function(i,s,o,g,r,a,m){i[‘GoogleAnalyticsObject’]=r;i[r]=i[r]||function(){

  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),

  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)

  })(window,document,’script’,’https://www.google-analytics.com/analytics.js’,’ga’);

  ga(‘create’, ‘UA-XXXXX-YY’, ‘auto‘);

  ga(‘send’, ‘pageview’);

</script>

Note that ‘auto’ configuration parameter used in the tracking code.

This configuration parameter tells Google Analytics to automatically find the second highest level domain and always set the _ga cookie at the second highest level domain.

The advantage of setting up the _ga cookie at the second highest level domain (aka primary domain) is that the client ID will always be shared among primary domain and its subdomains, whether a user navigates from primary domain to one of its subdomain or vice versa,  provided:

#1 both primary domain and its subdomains, use the same Google Analytics Tracking Code (in other words, use the same GA property ID)

#2 both primary domain and its subdomains use the ‘auto’ configuration parameter in their Google Analytics Tracking Code.

So by default, you don’t need to set up cross-domain tracking between primary domains and its subdomains as cookie information is automatically shared between them, provided both primary domain and its subdomains, use the same Google Analytics Tracking Code and use the ‘auto’ configuration parameter in their Google Analytics Tracking Code.

Now, if we remove the ‘auto’ configuration parameter from our Google Analytics Tracking Code (GATC), then the tracking code will look like the one below:

<script>

(function(i,s,o,g,r,a,m){i[‘GoogleAnalyticsObject’]=r;i[r]=i[r]||function(){

(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),

m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)

})(window,document,’script’,’https://www.google-analytics.com/analytics.js’,’ga’);

ga(‘create’, ‘UA-XXXXX-YY’);

ga(‘send’, ‘pageview’);

</script>

Now since the ‘auto’ configuration parameter is missing from the tracking code, Google Analytics will not automatically find the second highest level domain and may not always set the _ga cookie at the second highest level domain.

What Google Analytics will now do is, set the _ga cookie at the current level domain, which may or may not be the second highest level domain.

So if the current level domain is the second highest level domain, then only _ga cookie will be set at the second highest level domain, otherwise not.

Without ‘auto’ configuration parameter there is no guarantee that the cookie information will always be shared among the primary domain and its subdomains.

For example, if you use the Google Analytics tracking code without ‘auto’ configuration parameter on a web page whose URL is say: http://music.abc.com/jazz

Then Google Analytics will set up ‘_ga’ cookie at the current domain level which is  ‘.music.abc.com’ (instead of ‘.abc.com’, the second highest level domain).

You can share this _ga cookie with subdomains of ‘.music.abc.com’ like ‘asian.music.abc.com’

However, you won’t able to share the ‘_ga’ cookie set up at  ‘music.abc.com’ with a higher level domain like ‘abc.com

So what will happen, when a user navigates from ‘music.abc.com’ to a higher level domain like ‘abc.com’, the client ID won’t pass from ‘music.abc.com’ to ‘abc.com’ and hence a new GA session will start and the same user will be counted as a different user on the ‘abc.com’ website. In other words, cross-domain tracking won’t work.

Now, when you use the Google Analytics tracking code without ‘auto’ configuration parameter on a web page whose URL is: http://www.abc.com/

Then Google Analytics will set up ‘_ga’ cookie at the current domain level which is now ‘.abc.com’ and you can share this cookie with all of the subdomains like music.abc.com.

So what will happen, when a user navigates from ‘abc.com’ to a lower level domain like ‘music.abc.com’, the client ID will pass from ‘abc.com’ to ‘music.abc.com’ and hence no new GA session will start and the same user will not be counted as a different user on the ‘music.abc.com’ website. In other words, cross-domain tracking will work.

So what we can conclude that, if the ‘auto’ configuration parameter is missing from the Google Analytics tracking code, the client ID will be shared among primary domain and its subdomains, only when a user navigates from primary domain to one of its subdomain and both primary domain and its subdomain, use the same Google Analytics Tracking Code.

But when the same user navigates back from the subdomain to its primary domain, the client ID will not be shared and hence new GA session will start and the same user will be counted as two different users.

Similarly, if you use the Google Analytics tracking code without ‘auto’ configuration parameter on a web page whose URL is say: http://games.abc.com/

Then Google Analytics will set up ‘_ga’ cookie at the current domain level which is now ‘.games.abc.com’.

You can share the ‘_ga’ cookie set up at  ‘.games.abc.com’ with its subdomain like ‘a1.games.abc.com’ but not with any higher level domain like ‘.abc.com’ or same level domain like ‘music.abc.com

So what will happen, when a user navigates from ‘games.abc.com’ to the same level domain like ‘music.abc.com’, the client ID will not pass from ‘games.abc.com’ to ‘music.abc.com’ and hence new GA session will start and the same user will be counted as a different user on the ‘music.abc.com’ website. In other words, cross-domain tracking will not work between the two subdomains.

So if you want to make sure that cookie information is always passed whether a user navigates from primary domain to its subdomain and vice versa or whether a user navigates back and forth between two or more subdomains, then use the ‘auto’ configuration parameter in your Google Analytics Tracking Code.

Cookie domain needs to be the ancestor of the destination domain(s)

Cookie domain is the domain at which a Google Analytics cookie is set up.

Destination domain(s) is the domain to which you want to pass the client ID.

If you wish to set up cross-domain tracking in Google Analytics, then always make sure that the cookie domain is the ancestor of the destination domain(s).

A primary domain is always the ancestor of its subdomain(s).

So, if you wish to set up cross-domain tracking between a primary domain like www.abc.com and its subdomain like music.abc.com then set up _ga cookie at the ‘.abc.com’ domain as it is the ancestor of ‘music.abc.com’ subdomain.

You can set up _ga cookie at the ‘.abc.com’ domain by adding the following line of code in the Google Analytics tracking code meant for www.abc.com and music.abc.com:

ga(‘create’, ‘UA-12345-1’, {‘cookieDomain’: ‘.abc.com’});

Similarly, if you wish to set up cross-domain tracking between music.abc.com and asian.music.abc.com then set up _ga cookie either at the ‘music.abc.com’ domain or ‘.abc.com’ domain as both are the ancestor of ‘asian.music.abc.com’ subdomain.

If you wish to set up cross-domain tracking between two subdomains like music.abc.com and games.abc.com then set up _ga cookie at the primary domain ‘.abc.com’ as it is the ancestor of both ‘music.abc.com’ and games.abc.com subdomains.

Introduction to cookie path

Cookie Path is the path at which the cookie is set up.

By default the _ga cookie is set on the second highest level domain with the root level (/) path. Because of that reason, the cookie set up at the primary domain level , can be shared with all of its web pages and subdirectories.

But if for some reason, you want the _ga cookie set up at the primary domain level to be shared only with a particular subdirectory, then you can do that, by using the ‘cookiePath’ configuration parameter.

For example, let us suppose you want the _ga cookie set up at www.abc.com to be shared only with one of its subdirectory named ‘gin’. To do that, set the ‘cookiePath‘ field to ‘/gin/’:

ga(‘create’, ‘UA-XXXX-Y’, {‘cookiePath’: ‘/gin/’});

Then add this line of code in the Google Analytics Tracking Code meant for www.abc.com:

<script>

  (function(i,s,o,g,r,a,m){i[‘GoogleAnalyticsObject’]=r;i[r]=i[r]||function(){

  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),

  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)

  })(window,document,’script’,’https://www.google-analytics.com/analytics.js’,’ga’);

  ga(‘create’, ‘UA-XXXX-Y’, {‘cookiePath’: ‘/gin/’});

  ga(‘send’, ‘pageview’);

</script>

Introduction to cookie expires

Cookie Expires is the time in seconds, after which the _ga cookie will expire.

By default, _ga cookie expires after 2 years from the date it was last refreshed.

Every time a new hit is sent to google analytics, the _ga cookie is refreshed.

You can set your own cookie expiration time by using the cookieExpires field:

ga(‘create’, ‘UA-XXXX-Y’, {‘cookieExpires’: 180});

Here we set the _ga cookie to expire after 2 minutes.

The cookie expires, play an important role in cross-domain tracking.

For example, if the _ga cookie expires after 2 minutes, then the same user can be treated as a new user by Google Analytics even before he navigates to a different domain.

Referral exclusion list

A referral exclusion list is the list of domains whose incoming traffic will be treated as direct traffic (instead of referral traffic) by Google Analytics.

SourceHow to correctly use the referral exclusion list in Google Analytics

Direct traffic is a web session (or visit) which starts without a referrer being passed by a user’s browser.

By default, all referrals trigger a new web session in Google Analytics.

This can affect the total number of web sessions in your analytics reports.

For example: let us suppose a user started his journey (GA session) on www.xyz.com website.

He then navigates to www.abc.com website from xyz website. As soon as the user arrived on the abc website, he will be treated as a new user (as client ID is not shared across domains by default) and his existing GA session (with xyz website) will continue but a new GA session (with abc website) will start.

When the user navigates back to xyz website from abc website, his existing GA session (with abc website) will continue and a new GA session (with xyz website) will start.

Now, if you do not want the new GA session to be triggered for abc website, when the user navigates from xyz website to abc website then you need to add the domain xyz.com in the referral exclusion list of the GA view meant for abc website.

Similarly, if you do not want the new GA session to be triggered for xyz website when the user navigates from abc website to xyz website then you need to add the domain abc.com in the referral exclusion list of the GA view meant for xyz website.

Implementing tracking across a primary domain and its sub-domains

Follow the steps below to track across primary domain (say abc.com) and its sub-domains (say music.abc.com and games.abc.com):

Step-1: Use the Google Analytics tracking code meant for the primary domain on all of the web pages of the sub-domains.

Step-2: In the Google Analytics view of the primary domain (abc.com) add ‘abc.com’ in the referral exclusion list so that it automatically puts all the subdomains of abc.com in the referral exclusion list.

Step-3: In the Google Analytics view of the sub-domain: ‘music.abc.com’, add ‘abc.com’ in the referral exclusion list.

Step-4: In the Google Analytics view of the sub-domain: ‘games.abc.com’, add ‘abc.com’ in the referral exclusion list.

Requirements for setting up cross-domain tracking between primary domains

Before you can implement cross-domain tracking between two or more primary domains, you need to get familiar with the following concepts:

  1. Cross-Domain Links
  2. allowLinker
  3. autoLink plugin
  4. linker:autoLink Command
  5. Linker Parameter
  6. Decorating links

Introduction to cross-domain links

Cross-domain link is the hyperlink which can move the traffic from one domain to another.

In cross-domain tracking, a user’s client ID is passed from one domain to another via cross-domain links and/or via form submission.

For example, if you have set up cross-domain tracking between abc.com and xyz.com then all the links on abc.com that go to xyz.com and all the links on xyz.com that go to abc.com, are called cross-domain links.

Cross-domain traffic is the traffic which moves back and forth between different domains via cross-domain links.

The cookie information (Client ID) is attached to the query string of the cross-domain links which you can see in the browser window:

client id

Google Analytics tag is designed to look for client ID in the query string and use it if it exists. So if a user has got the same client ID across two or more domains than Google Analytics can identify the user across multiple domains.

In order to track a user across domains, you need to share users’ cookie information (Client ID) among domains. The easiest way to do that is by using the autoLink plugin

Introduction to ‘allowLinker’

‘allowLinker’ is a tracker configuration parameter which must be set to true to allow a domain to pass/accept client ID.

In case of cross-domain tracking we have got two categories of primary domains:

1) Source domain

2) Destination domain(s)

The default value for allowLinker is ‘false’. So by default:

#1 A source domain is not allowed to pass the client ID to the destination domain.

#2 A destination domain is not allowed to accept the client ID from the source domain.

You can set up cross-domain tracking between a source domain and a destination domain only when the following two conditions are met:

#1 The source domain is allowed to pass the client ID to the destination domain.

#2 The destination domain is allowed to accept the client ID from the source domain.

 

#FAQ: How you can allow the source domain to pass client ID to the destination domain?

Add the following line of code in the GATC (Google Analytics Tracking Code) of the source domain:

ga(‘create’, ‘UA-XXXXX-YY’, ‘auto’,{‘allowLinker’: true }); // allow source domain to pass cookie information

So the final code may look like the one below:

 <script>

(function(i,s,o,g,r,a,m){i[‘GoogleAnalyticsObject’]=r;i[r]=i[r]||function(){

(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),

m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)

})(window,document,’script’,’//www.google-analytics.com/analytics.js’,’ga’);

ga(‘create’, ‘UA-1556844-26‘, ‘auto’,{‘allowLinker’: true }); // set allowLinker to true

.

.

ga(‘send’, ‘pageview’);

</script>

 

#FAQ: How you can allow the destination domain to accept client ID from the source domain?

Add following line of code in the GATC of the destination domain:

ga(‘create’, ‘UA-XXXX-YY’, ‘auto’,{‘allowLinker’: true }); // allow destination domain to accept cookie information.

 So final code may look like the one below:

<script>

(function(i,s,o,g,r,a,m){i[‘GoogleAnalyticsObject’]=r;i[r]=i[r]||function(){

(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),

m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)

})(window,document,’script’,’//www.google-analytics.com/analytics.js’,’ga’);

ga(‘create’, ‘UA-1556844-27‘, ‘auto’,{‘allowLinker’: true }); // set allowLinker to true

.

.

ga(‘send’, ‘pageview’);

</script>

Introduction to ‘autoLink’ plugin

autoLink plugin is a Google Analytics plugin which is used to share client ID among two or more primary domains.

This plugin provides the easiest way to implement cross-domain tracking in Google Analytics. Google recommends implementing cross-domain tracking via autoLink plugin.

You can also implement cross-domain tracking without using this plugin i.e. manually, but it is more prone to errors.

The word ‘autoLink’ means ‘automatic linking’.

This plugin automatically implements cross-domain linking (not to be confused with the word ‘cross-domain tracking’) between two or more primary domains.

In order to set up this plugin, you need to add the plugin code to your Google Analytics tracking code.

Following the line of code is used to load the ‘autoLink’ plugin:

 ga(‘require’, ‘linker’);

You need to add this line of code to the Google Analytics tracking code of both your source and destination domains.

So final Google Analytics tracking code for the source domain may look like the one below:

<script>

(function(i,s,o,g,r,a,m){i[‘GoogleAnalyticsObject’]=r;i[r]=i[r]||function(){

(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),

m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)

})(window,document,’script’,’//www.google-analytics.com/analytics.js’,’ga’);

ga(‘create’, ‘UA-1556844-26‘, ‘auto’,{‘allowLinker’: true }); // set allowLinker to true

 ga(‘require’, ‘linker’); // setup autoLink plugin

.

ga(‘send’, ‘pageview’);

</script>

Similarly, the final Google Analytics tracking code for the destination domain may look like the one below:

<script>

(function(i,s,o,g,r,a,m){i[‘GoogleAnalyticsObject’]=r;i[r]=i[r]||function(){

(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),

m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)

})(window,document,’script’,’//www.google-analytics.com/analytics.js’,’ga’);

ga(‘create’, ‘UA-1556844-27‘, ‘auto’,{‘allowLinker’: true }); // set allowLinker to true

 ga(‘require’, ‘linker’); // setup autoLink plugin

.

ga(‘send’, ‘pageview’);

</script>

#FAQ: Is it required to setup the autolink plugin on the destination domain(s)?

No, it is not required but you should, in order to implement bi-directional cross-domain tracking. So that you can track traffic from Website A going to Website B and vice versa.

Note: It is possible for your website pages to block the ‘autoLink plugin’ from working or working correctly. So test the plugin on one page before implementing it sitewide.

Introduction to ‘linker:autoLink’ command

The purpose of linker:autoLink command is to define the domain(s) that need to be automatically cross-linked.

In GA lingo, ‘automatically cross-linked’ is known as ‘auto-linked’.

There are two methods through which you can define the domains that need to be automatically cross-linked, while setting up the autoLink plugin:

1) by using an array of domain substrings.

2) by using an array of domain regular expressions.

 

Array of domain substrings

Following are examples of array of domain substrings:

#1 [‘destination.com’]

#2 [‘destination1.com’, ‘destination2.com’]

#3 [‘destination1.com’, ‘destination2.com’,’destination3.com’]

Here ‘destination.com’, ‘destination1.com’, ‘destination2.com’, ‘destination3.com’ are the domains that need to be auto-linked.

For example:

ga(‘linker:autoLink’, [‘xyz.com’]); => autolink the source domain with ‘xyz.com’ destination domain.

ga(‘linker:autoLink’, [‘xyz.com’, ‘pqr.com’]); => autolink the source domain with ‘xyz.com’ and ‘pqr.com’ destination domains.

ga(‘linker:autoLink’, [‘xyz.com’, ‘pqr.com’,’drt.net’]); => autolink the source domain with ‘xyz.com’, ‘pqr.com’ and ‘drt.net’ destination domains.

The array of domain regular expressions

Following is an example of an array of domain regular expression:

[/^example\.(com|net)$/]

Here example.com and example.net are the domains that need to be auto-linked.

For example:

ga(‘linker:autoLink’, [/^example\.(com|net)$/]);

If www.xyz.com is your source domain and www.pqr.com is your destination domain and you want to set up cross-domain tracking between the two domains, then your Google Analytics tracking code for the source domain may look like the one below:

<script>

(function(i,s,o,g,r,a,m){i[‘GoogleAnalyticsObject’]=r;i[r]=i[r]||function(){

(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),

m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)

})(window,document,’script’,’//www.google-analytics.com/analytics.js’,’ga’);

ga(‘create’, ‘UA-1556844-26‘, ‘auto’,{‘allowLinker’: true }); // set allowLinker to true

 ga(‘require’, ‘linker’); // setup autoLink plugin

ga(‘linker:autoLink’, [‘pqr.com’]);

ga(‘send’, ‘pageview’);

</script>

Similarly, your Google Analytics tracking code for the destination domain (pqr.com) may look like the one below:

<script>

(function(i,s,o,g,r,a,m){i[‘GoogleAnalyticsObject’]=r;i[r]=i[r]||function(){

(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),

m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)

})(window,document,’script’,’//www.google-analytics.com/analytics.js’,’ga’);

ga(‘create’, ‘UA-1556844-27‘, ‘auto’,{‘allowLinker’: true }); // set allowLinker to true

 ga(‘require’, ‘linker’); // setup autoLink plugin

ga(‘linker:autoLink’, [‘xyz.com’]);

ga(‘send’, ‘pageview’);

</script>

Introduction to linker parameters

A linker parameter is a query parameter which is attached to a cross-domain link, once it is clicked.

For example in the following destination domain URL:

https://www.destination-1.com/productA.php?_ga=1.153530484435.69385205830.8479429413352

Here the linker parameter is: _ga=1.153530484435.69385205830.8479429413352

Introduction to decorating links

Decorating a link means adding linker parameter to the link.

Following is an example of an undecorated link:

https://www.destination-1.com/productA.php

Following is an example of a decorated link:

https://www.destination-1.com/productA.php?_ga=1.153530484435.69385205830.8479429413352

Note: You can decorate links manually or through autolink plugin. 

Cross-domain tracking code

The cross-domain tracking code in Google Analytics is made up of:

#1 ‘allowLinker’ tracker configuration parameter

#2  ‘autoLink’ Plugin

#3 ‘linker:autoLink’ Command

Following is an example of a cross-domain tracking code in GA:

ga(‘create’, ‘UA-1556844-27’, ‘auto’,{‘allowLinker’: true }); // set allowLinker to true

 ga(‘require’, ‘linker’); // setup autoLink plugin

ga(‘linker:autoLink’, [‘xyz.com’]);

This cross-domain tracking code is added to the Google Analytics tracking code of the source and destination domains.

Implementing cross-domain tracking between two primary domains

The fundamental requirement for tracking across primary domains is that you need to share client ID with the destination domain and the destination domain must give permission to do that.

For the purpose of giving an example, let us suppose, we need to set up cross-domain tracking between xyz.com and pqr.com, where xyz.com is the source domain and pqr.com is the destination domain.

Follow the steps below, to track across two primary domains:

Step-1: In the GA view of xyz.com, go to Admin > Property > Tracking Info > Referral exclusion list. Add ‘xyz.com’ and ‘pqr.com’ in the ‘referral exclusion’ list. xyz.com is added to avoid self-referral issues

Step-2: In the GA view of pqr.com, go to Admin > Property > Tracking Info > Referral exclusion list. Add ‘pqr.com’  and ‘xyz.com’ in the ‘referral exclusion’ list. pqr.com is added to avoid self-referral issues.

Step-3: Create a cross-domain tracking code for your source domain (xyz.com) according to your understanding of:

#1 ‘allowLinker’ tracker configuration parameter

#2  ‘autoLink’ Plugin

#3 ‘linker:autoLink’ Command

The cross-domain tracking code for your source domain (xyz.com), may look like the one below:

ga(‘create’, ‘UA-1556844-26’, ‘auto’,{‘allowLinker’: true }); // set allowLinker to true

 ga(‘require’, ‘linker’); // setup autoLink plugin

 ga(‘linker:autoLink’, [‘pqr.com’]); // auto link to pqr website

Step-4: Create a cross-domain tracking code for your destination domain (pqr.com)

ga(‘create’, ‘UA-1556844-76’, ‘auto’,{‘allowLinker’: true }); // set allowLinker to true

 ga(‘require’, ‘linker’); // setup linker plugin

 ga(‘linker:autoLink’, [‘xyz.com’]); // link to xyz website

Step-5: Add the cross-domain tracking code meant for your source domain (xyz.com) to the Google Analytics tracking code of your source domain (xyz.com). For example:

<script>

(function(i,s,o,g,r,a,m){i[‘GoogleAnalyticsObject’]=r;i[r]=i[r]||function(){

(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),

m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)

})(window,document,’script’,’//www.google-analytics.com/analytics.js’,’ga’);

ga(‘create’, ‘UA-1556844-26’, ‘auto’,{‘allowLinker’: true }); // set allowLinker to true

 ga(‘require’, ‘linker’); // setup autoLink plugin

 ga(‘linker:autoLink’, [‘pqr.com’]); // auto link to pqr website

ga(‘send’, ‘pageview’);

</script>

Step-6: Add the cross-domain tracking code meant for your destination domain (pqr.com) to the Google Analytics tracking code of your destination domain (pqr.com).

For example:

<script>

(function(i,s,o,g,r,a,m){i[‘GoogleAnalyticsObject’]=r;i[r]=i[r]||function(){

(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),

m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)

})(window,document,’script’,’//www.google-analytics.com/analytics.js’,’ga’);

ga(‘create’, ‘UA-1556844-76’, ‘auto’,{‘allowLinker’: true }); // set allowLinker to true

 ga(‘require’, ‘linker’); // setup linker plugin

 ga(‘linker:autoLink’, [‘xyz.com’]); // link to xyz website

ga(‘send’, ‘pageview’);

</script>

Implementing cross-domain tracking between three primary domains

If you want to set up cross-domain tracking between 3 primary domains say: abc.com, xyz.com and pqr.com then follow the steps below:

Step-1: In the GA view of abc.com, go to Admin > Property > Tracking Info > Referral exclusion list. Add ‘abc.com’, ‘xyz.com’ and ‘pqr.com’ in the ‘referral exclusion’ list.

Step-2: In the GA view of xyz.com, go to Admin > Property > Tracking Info > Referral exclusion list. Add ‘abc.com’, ‘xyz.com’ and ‘pqr.com’ in the ‘referral exclusion’ list.

Step-3: In the GA view of pqr.com, go to Admin > Property > Tracking Info > Referral exclusion list. Add ‘abc.com’, ‘xyz.com’ and ‘pqr.com’ in the ‘referral exclusion’ list.

Step-4: Create a cross-domain tracking code for the domain abc.com.This code may look like the one below:

ga(‘create’, ‘UA-1556844-25’, ‘auto’,{‘allowLinker’: true }); // set allowLinker to true

 ga(‘require’, ‘linker’); // setup autoLink plugin

 ga(‘linker:autoLink’, [‘xyz.com’,’pqr.com’]); // auto link to ‘xyz’ and ‘pqr’ websites.

 

Step-5: Create a cross-domain tracking code for the domain xyz.com. This code may look like the one below:

ga(‘create’, ‘UA-1556844-26’, ‘auto’,{‘allowLinker’: true }); // set allowLinker to true

 ga(‘require’, ‘linker’); // setup autoLink plugin

 ga(‘linker:autoLink’, [‘abc.com’,’pqr.com’]); // auto link to ‘abc’ and ‘pqr’ websites.

 

Step-6: Create cross-domain tracking for the domain pqr.com. This code may look like the one below:

ga(‘create’, ‘UA-1556844-27’, ‘auto’,{‘allowLinker’: true }); // set allowLinker to true

 ga(‘require’, ‘linker’); // setup autoLink plugin

 ga(‘linker:autoLink’, [‘abc.com’,’xyz.com’]); // auto link to ‘abc’ and ‘xyz’ websites.

 

Step-7: Add the cross-domain tracking code meant for the domain abc.com to the Google Analytics tracking code of the domain abc.com. For example:

<script>

(function(i,s,o,g,r,a,m){i[‘GoogleAnalyticsObject’]=r;i[r]=i[r]||function(){

(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),

m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)

})(window,document,’script’,’//www.google-analytics.com/analytics.js’,’ga’);

ga(‘create’, ‘UA-1556844-25’, ‘auto’,{‘allowLinker’: true }); // set allowLinker to true

 ga(‘require’, ‘linker’); // setup autoLink plugin

 ga(‘linker:autoLink’, [‘xyz.com’,’pqr.com’]); // auto link to ‘xyz’ and ‘pqr’ websites.

ga(‘send’, ‘pageview’);

</script>

 

Step-8: Add the cross-domain tracking code meant for the domain xyz.com to the Google Analytics tracking code of the domain xyz.com. For example:

<script>

(function(i,s,o,g,r,a,m){i[‘GoogleAnalyticsObject’]=r;i[r]=i[r]||function(){

(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),

m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)

})(window,document,’script’,’//www.google-analytics.com/analytics.js’,’ga’);

ga(‘create’, ‘UA-1556844-26’, ‘auto’,{‘allowLinker’: true }); // set allowLinker to true

 ga(‘require’, ‘linker’); // setup autoLink plugin

 ga(‘linker:autoLink’, [‘abc.com’,’pqr.com’]); // auto link to ‘abc’ and ‘pqr’ websites.

ga(‘send’, ‘pageview’);

</script>

 

Step-9: Add the cross-domain tracking code meant for the domain pqr.com to the Google Analytics tracking code of the domain pqr.com. For example:

<script>

(function(i,s,o,g,r,a,m){i[‘GoogleAnalyticsObject’]=r;i[r]=i[r]||function(){

(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),

m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)

})(window,document,’script’,’//www.google-analytics.com/analytics.js’,’ga’);

ga(‘create’, ‘UA-1556844-27’, ‘auto’,{‘allowLinker’: true }); // set allowLinker to true

 ga(‘require’, ‘linker’); // setup autoLink plugin

 ga(‘linker:autoLink’, [‘abc.com’,’xyz.com’]); // auto link to ‘abc’ and ‘xyz’ websites.

ga(‘send’, ‘pageview’);

</script>

 

Tracking across top level domains

Top-level domain (or TLD) is the last part of the domain name. For example, in the domain name www.abc.com, the top-level domain is ‘com’. Similarly, in the domain name www.abc.org, the top-level domain is ‘org’

Tracking across top-level domains is similar to tracking across different primary domains.

Using the same Google Analytics tracking code on multiple primary domains for cross-domain tracking

Wouldn’t it be easy to track across multiple primary domains, just by using the same GA tracking code on all of the primary domains?

Yes that would be the easiest solution but it comes with its own set of critical issues which can not be fixed:

Issue #1: Self-referrals – expect a significant level of self-referral issues in your GA reports if you used the same GA tracking code on multiple websites. Even if you exclude all of the domains that are part of the cross-domain tracking set up, from referral traffic (via referral exclusion list), it will still not fix your problem.

Then Google Analytics will treat the self-referral traffic as direct traffic. So you could then end up, with an abnormally large amount of direct traffic in your GA reports.

Issue #2: Inaccurate data – a significant level of self-referral issues would greatly skew your analytics data and any decision based on inaccurate data can not produce optimum results. Since by default all referrals trigger a new web session in Google analytics, expect inflated sessions data.

Issues #3: Attribution issues – you may have a hard time determining the original source of your conversions and/or ecommerce transaction. Majority of your conversions could end up being attributed to direct traffic or your own website (self-referral).

Cross-domain tracking and rollup reporting

Cross-domain tracking and rollup reporting are not the same thing. Just because you have implemented cross-domain tracking, does not mean that you will automatically see the cross-domain traffic data in your GA reports.

Rollup reporting is the reporting of data in an aggregated form from multiple digital properties (websites, mobile apps).

For example, if you have set up separate websites for each country then through rollup reporting, you can aggregate all of your website’s data in one view and see aggregated global performance metrics and/or compare the performance of various country-specific websites to each other.

In Google Analytics, a website or mobile application is called a property (also known as web property or digital property). Each property is identified by a unique ID known as property ID (or tracking ID).

This tracking ID is in the format: UA-XXXX-YY

For example: UA-1235-21

Each property contains one or more views and each view contain multiple reports:

properties and views

A rollup property is the web property whose hit data comes from other Google Analytics properties.

google-analytics-rollup-property

If you have implemented rollup reporting then with the help of multiple trackers you can get cross-domain traffic in your rollup property:

crossDomainTracking

This is a bit advanced cross-domain tracking set up, which I explained in great detail in this article: Understanding trackers in Google Analytics

To learn more about rollup reporting, read this article: Implementing rollup reporting in Google Analytics

This post is second in the series of frequently asked questions about various issues in Google Analytics.

The first post in the series was How Google Analytics Uses Cookies which talks about Google Analytics cookies in great detail.

 

Google Analytics Cross-Domain Tracking (ga.js)

In order to track across domains, you would need to share cookie information among domains. You can do that by using one or all of the following methods in your tracking code:

_setDomainName() – This method is called in Google Analytics Tracking Code
_setAllowLinker()– This method is called in Google Analytics Tracking Code
_Link() – This method is called through javascript handler
_LinkByPost() – This method is called through javascript handler

Code for tracking a primary domain

<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-XXXXX-Y']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>

This is the default Google Analytics tracking code. Replace ‘UA-XXXX-Y’ by your account number and then copy-paste this code in the head section (<head> ….</head> of all the web pages of your primary domain.

Note: You can also get this tracking code by clicking on Admin > Tracking Info in your Google Analytics account.

Code for tracking across a primary domain and its sub-domains

<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-XXXXX-Y']);
  _gaq.push(['_setDomainName', 'yourwebsite.com']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>

This code is also known as the sub-domain tracking code. Replace ‘UA-XXXX-Y’  by your account number and ‘yourwebsite.com’ by your primary domain name. Now copy-paste this code in the head section (<head> ….</head> of all the web pages of your primary domain and all the web pages of your sub-domains.

Note: You can also get this tracking code by clicking on Admin > Tracking Info in your Google Analytics account and then clicking on the ‘on’ button next to the ‘subdomains’ row:

subdomains-tracking

Code for tracking across a primary domain and its top-level domains

<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-XXXXX-Y']);
  _gaq.push(['_setDomainName', 'yourwebsite.com']);
  _gaq.push(['_setAllowLinker', true]);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>

This code is also known as the top-level domain tracking code. Replace ‘UA-XXXX-Y’  by your account number and ‘yourwebsite.com’ by your primary domain name. Now copy-paste this code in the head section (<head> ….</head> of all the web pages of your primary domain and all the web pages of your top-level domains.

Note: You can also get this tracking code by clicking on Admin > Tracking Info in your Google Analytics account and then clicking on the ‘on’ button next to the ‘top-level domains’ row:

tld-tracking

Code for tracking across multiple primary domains

The first thing that you need to remember is that Google Analytics doesn’t provide any tracking code to track across multiple domains through its interface.

You need to manually modify the Google Analytics Tracking code of all the web pages of each domain. If you are using template files then it will take only a couple of minutes. If you are not using template files then you need to manually modify the tracking code of all the web pages of each domain.

<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-XXXXX-Y']);
  _gaq.push(['_setDomainName', 'none']);
  _gaq.push(['_setAllowLinker', true]);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>

Replace ‘UA-XXXX-Y’  by your account number. Now copy-paste this code in the head section (<head> ….</head> of all the web pages of each of your primary domain.

Note: You also need to use the _link() or _linkByPost() method (as described later in this post) to enable tracking across multiple primary domains.

What is _setDomainName() ?

This method is used to share cookie information among:

  1. Multiple domains
  2. Multiple domains with multiple sub-domains
  3. Primary domains and its sub-domains
  4. Primary domains and its top-level domains

Syntax:

When you want to share cookie information among multiple domains or primary domain and its top-level domains, then the syntax of _setDomainName() is:

_gaq.push([‘_setDomainName’,’none’]);

When you want to share cookie information among multiple domains with multiple sub-domains or primary domain and its sub-domains, then the syntax of _setDomainName() is:

_gaq.push([‘_setDomainName’,’.yourwebsite.com’]);

Here ‘yourwebsite.com’ is the name of your website and the _setDomainName() is used to set the primary domain name.  For example:

_gaq.push([‘_setDomainName’,’.optimizesmart.com’]);

Here I am setting the primary domain name to optimizesmart.com

What is _setAllowLinker() ?

This method is used to share cookie information among:

  1. Multiple domains
  2. Multiple domains with multiple sub-domains
  3. Primary domains and its top-level domains

Syntax: _gaq.push([‘_setAllowLinker’,true]);

What is_link() ?

This method is used to share cookie information among:

  1. Multiple domains
  2. Multiple domains with multiple sub-domains

If you transfer visitors from one domain to another via links then add the _link() method to all the links between the domains.

Syntax: _gaq.push([‘_link’,’URL parameter’]);

Example:

<a href=”https://www.eventplannigforum.net” onClick=”_ gaq.push([‘_link’, ‘https://www.eventplanningforum.net’]); return false;”>Event Planning Forum</a>

<a href=”https://www.eventeducation.com” onClick=”_ gaq.push([‘_link’, ‘https://www.eventeducation.com’]); return false;”>Event Education</a>

How exactly does the _link() method send cookie information to other domains?

The _link() method sends cookie information via ‘URL parameter’

What is _linkBypost() ?

This method is used to share cookie information among:

  1. Multiple domains
  2. Multiple domains with multiple sub-domains

If you are transferring visitors from one domain to another via forms, then add the _linkByPost() method to all the forms between the domains.

Syntax: _ gaq.push([‘_linkByPost’,this]);

Example:

<form action=”processing.php” name=”lead-form” method=”post” onSubmit=”_ gaq.push([‘_linkByPost’,this]);”>

….

</form>

How exactly does the _linkByPost() method send cookie information to other domains?

The _linkByPost() method sends cookie information via form action.

When is traffic from a sub-domain treated as referral traffic by Google Analytics?

When the web pages of the sub-domain contain the Basic Google Analytics tracking code (GATC) instead of the ‘sub-domain Google Analytics tracking code’

 When my main website profile also includes traffic from its sub-domains (which is not treated as referral traffic)?

This happens when you add ‘sub-domain GATC’ to all the web pages of the sub-domains.

What is the disadvantage of tracking across sub-domains using a single website profile and how can this disadvantage be overcome?

Google Analytics may consolidate the visits from identically named pages of different sub-domains and show it as one in its reports. For example:

Let’s say visits from https://fun.abc.com/home.html  is              20

Let’s say visits from https://music.abc.com/home.html is           70

Google Analytics may consolidate the visits from home.html of the two sub-domains and show it like

/home.html            90

This disadvantage can be overcome by appending hostname to the request URI using Google Advanced filters:

Note: In Request URI, the URI stands for universal resource indicator. It is the path part of a URL. For example: in the URL: https://www.abc.com/fun/music/index.php the request URI is ‘/fun/music/index.php’

Once you applied this filter to the main website profile, Google analytics will show the report as:

Fun.abc.com/home.html         20

Music.abc.com/home.html      70

Note: By default, Google Analytics displays only the request URI.

What are the best practices for tracking across subdomains?

If you want to track all the sub-domains through a single website profile

Append hostname to the request URI by applying an advanced filter to the main website profile.

If you want to track each sub-domain through a different website profile

Duplicate your main website profile for each sub-domain and then apply ‘include the only filter’ to include only the traffic from a particular sub-domain. For example:

Note: All the profiles have the same profile number (the number after the second hyphen) that is ‘1’ which shows they all are basically the same profile. But the last two profiles are using filters, so they are getting only the filtered data.

When should you not add sub-domain Google Analytics tracking code to all the web pages of a sub-domain?

When you want to treat sub-domain as a different website or do not want to include the sub-domain traffic in your main website profile.

Should you use _link() and _linkByPost() methods for links and forms between the main domain and its sub-domain?

No. These methods are required only in the case of tracking across multiple primary domains or multiple primary domains with multiple sub-domains.

Other articles on specialized tracking in Google Analytics

  1. Ecommerce Tracking in Google Analytics – Tutorial
  2. Event Tracking via Google Tag Manager – Tutorial
  3. Event Tracking in Google Analytics – Tutorial
  4. Guide to Google Analytics Store Visits Tracking
  5. Offline Conversion Tracking in Google Analytics – Tutorial
  6. Implementing E-Commerce Tracking via Google Tag Manager
  7. Tracking Virtual Pageviews in Google Tag Manager – Tutorial
  8. YouTube Video tracking via Google Tag Manager
  9. How to Use Keyword Hero to Reveal Not Provided Keywords in Google Analytics
  10. Virtual pageviews in Google Analytics – Tutorial
  11. Google Analytics and YouTube Integration Tutorial
  12. Google Analytics for Facebook Tutorial
  13. Google Analytics Cross Domain Tracking Explained Like Never Before
  14. Using multiple Google Analytics tracking codes on web pages
  15. The one thing that you don’t know about PayPal.com and the referral exclusion list
  16. Calculated Metrics in Google Analytics – Tutorial
  17. Creating your own Google Analytics Tag Auditing System
  18. Tracking Site Search without Query Parameter in Google Tag Manager
  19. Tracking true referrals in Google Analytics when using PayPal and other payment gateways
  20. Phone Call Tracking in Google Analytics and Beyond
  21. Learn to Track Qualified and Won Leads in Google Analytics
  22. Introduction to Postbacks in Google Analytics
  23. Google Analytics Recurring Revenue and Subscriptions Tracking Tutorial
  24. How to track the impact of cookie consent on website traffic in Google Analytics
  25. Tracking Offline Conversions in Google Ads
  26. Implementing Scroll Tracking via Google Tag Manager
  27. Scroll Tracking via Scroll Depth Trigger in Google Tag Manager
  28. Site Search Tracking In Google Analytics Without Query Parameters
  29. Video Tracking via YouTube Video Trigger In Google Tag Manager
  30. How to Correctly Measure Conversion Date & Time in Google Analytics
  31. Google Analytics Social Tracking – Twitter, Facebook, Google Plus and LinkedIn
  32. Tracking Twitter and Linkedin Social Interactions in Google Analytics
  33. Creating Content Group in Google Analytics via tracking code using gtag.js
  34. Tracking Site Search in Google Analytics with Query Parameters
  35. Understanding site search tracking in Google Analytics
  36. Creating and Using Site Search Funnel in Google Analytics
  37. Learn to Setup Facebook Pixel Tracking via Google Tag Manager
  38. Setting up & Tracking AMP Pages in Google Analytics
  39. Setting up Sales Funnel across websites in Google Analytics
  40. Regular Expressions (Regex) for Google Analytics & Google Tag Manager – Tutorial

Register for the FREE TRAINING...

"How to use Digital Analytics to generate floods of new Sales and Customers without spending years figuring everything out on your own."



Here’s what we’re going to cover in this training…

#1 Why digital analytics is the key to online business success.

​#2 The number 1 reason why most marketers are not able to scale their advertising and maximize sales.

#3 Why Google and Facebook ads don’t work for most businesses & how to make them work.

#4 ​Why you won’t get any competitive advantage in the marketplace just by knowing Google Analytics.

#5 The number 1 reason why conversion optimization is not working for your business.

#6 How to advertise on any marketing platform for FREE with an unlimited budget.

​#7 How to learn and master digital analytics and conversion optimization in record time.



   

My best selling books on Digital Analytics and Conversion Optimization

Maths and Stats for Web Analytics and Conversion Optimization
This expert guide will teach you how to leverage the knowledge of maths and statistics in order to accurately interpret data and take actions, which can quickly improve the bottom-line of your online business.

Master the Essentials of Email Marketing Analytics
This book focuses solely on the ‘analytics’ that power your email marketing optimization program and will help you dramatically reduce your cost per acquisition and increase marketing ROI by tracking the performance of the various KPIs and metrics used for email marketing.

Attribution Modelling in Google Analytics and Beyond
Attribution modelling is the process of determining the most effective marketing channels for investment. This book has been written to help you implement attribution modelling. It will teach you how to leverage the knowledge of attribution modelling in order to allocate marketing budget and understand buying behaviour.

Attribution Modelling in Google Ads and Facebook
This book has been written to help you implement attribution modelling in Google Ads (Google AdWords) and Facebook. It will teach you, how to leverage the knowledge of attribution modelling in order to understand the customer purchasing journey and determine the most effective marketing channels for investment.

Himanshu Sharma

Digital Marketing Consultant and Founder of Optimizesmart.com

Himanshu helps business owners and marketing professionals in generating more sales and ROI by fixing their website tracking issues, helping them understand their true customers' purchase journey and helping them determine the most effective marketing channels for investment.

He has over 12 years of experience in digital analytics and digital marketing.

He was nominated for the Digital Analytics Association's Awards for Excellence. The Digital Analytics Association is a world-renowned not-for-profit association that helps organisations overcome the challenges of data acquisition and application.

He is the author of four best-selling books on analytics and conversion optimization:

error: Alert: Content is protected !!