Настройка cookies и отслеживание поддоменов в Universal Analytics
19
988

Междоменное отслеживание стало весьма обсуждаемым и актуальным вопросом в Universal Analytics. Честно говоря, я никогда не разбирал этот вопрос, ведь есть огромное количество отличных статей по этой теме. Но зато я углублялся в такие темы, как отслеживание плавающих (встроенных) фреймов и поддоменов.

Я хочу начать с того момента, на котором остановился в своей статье про поддомены, и уделить внимание интересному, но сложному вопросу – настройкам cookie.  

О cookies в Universal Analytics лучше всего почитать в официальном руководстве для разработчиков.

Я хочу поговорить о последствиях несогласованных настроек полей, а также о том, что будет, если вообще не задать поле cookieDomain в настройках трекера.

Как создать новый трекер, тег

А теперь давайте протестируем cookie!

Что нам известно

Начнем с начала (этот подход всегда отлично работает). Вот что мы уже знаем о  cookies в Universal Analytics.

  1. Universal Analytics использует единый _ga cookie для создания измерения user.
  2. В двух своих последних сегментах (GA1.2.12345.23456) этот cookie содержит уникальный Клиентский ID (Client ID).
  3. По умолчанию, т.е. без каких-либо настроек, cookie написан на текущем поддомене и всех его вложенных поддоменах (.sub.domain.com, .www.sub.domain.com, .simo.rules.ok.sub.domain.com  - у всех них будет общий cookie, написанный на .sub.domain.com, за исключением www.domain.com или domain.com).
  4. Если для cookieDomain вы указываете опцию auto или вручную настраиваете его на самый высокий доменный уровень(т.е .domain.com), то все поддомены могут использовать этот cookie.

Вот почему «фрагмент отслеживания» в Universal Analytics всегда сопровождается рекомендацией включать 'auto' в качестве третьего параметра команды 'create'. Это то же самое, что добавить поле  cookieDomain : 'auto' в объект трекера:

 

ga('create', 'UA-12345-1', 'auto');
// is the same as
ga('create', 'UA-12345-1', {'cookieDomain' : 'auto'});

ВНИМАНИЕ!  Тег Universal Analytics из Google Tag Manager не добавляет это поле по умолчанию! В ходе этого теста мы как раз и выявим что, будет, если не добавить это поле.

 

Тест

Я хочу проверить следующее:

  1. Что будет, если в вашем трекере отсутствует 'cookieDomain' : 'auto' и вы перемещаетесь с поддомена на поддомен?
  2. Что будет, если  у вас есть множество _ga cookies, написанных на разных доменах?
  3. С какой скоростью летит ненагруженная ласточка?

Начнем с первого вопроса.

1. 'cookieDomain' : 'auto' не задан

Я захожу на test.simoahava.com, чтобы убедиться в отсутствии предсуществующих _ga cookies, и ввожу следующую команду:

ga('create', 'UA-12345-1', {'name' : 'test1'});

Итак, cookieDomain не обнаружено. На .test.simoahava.com пишется новый _ga cookie.

Вы видите, где пишется cookie:

Понятно, да?

Затем я захожу на www.simoahava.com и выполняю следующую команду:

ga('create', 'UA-12345-1', {'name' : 'test1'});

И вот что я вижу:

Cookie настроен на родительском домене (без www.):

Теперь вернемся на test.simoahava.com и посмотрим, что происходит там:

Ничего неожиданного. В первом шаге мы видим cookie, написанный на поддомене, а во втором шаге  - cookie, написанный на главном домене. Этот последний cookie также доступен и здесь, поскольку раз cookie был написан на родительском домене, все поддомены могут его использовать.

На основании этого можно сделать один важный вывод. Если у вас не задан 'cookieDomain' : 'auto' и трафик идет от родительского домена к поддоменам, то ничего страшного. На поддомене по-прежнему будут два разных _ga cookies, поскольку они имеют разные доменные настройки, но один и тот же  Клиентский ID – и это благодаря одной из основых характеристик библиотеки Universal Analytics, которая копирует Клиентский ID как из предсуществующих _ga cookies, так и из унаследованных __utma cookies. Вот пример, в котором я сначала зашел на родительский домен, а потом – на поддомен:

Но если трафик сначала оказывается на поддомене, а потом перемещается на родительский домен, то на обоих доменах у вас будут разные _ga cookies и разные Клиентские ID, следовательно, и пользователь будет разный.

Это очень важно. Я вернусь к выводам чуть позже.

2. Что будет, если имеется множество  _ga cookies?

Если у вас окажется множество _ga cookies, возможны два варианта:

  1. У них один и тот же Клиентский ID, т.е. трафик перемещался с домена более высокого уровня на поддомен, и проблем нет.
  2. У них разные Клиентские ID, т.е. трафик шел от поддмена на домен более высокого уровня (или того же уровня).  

В первом случае волноваться не о чем. У всех ваших Тегов будет один и тот же Клиентский ID, и не будет такого, что активация некоторых Тегов будет запускать новые сеансы или создавать новых пользователей. Можете спать спокойно.

Второй вариант не такой радужный. Допустим, у вас оказались два разных _ga cookies, причем вы сделали это намеренно (по крайней мере, вы так утверждаете). Как вы поймете, какой cookie будет взаимодействовать с вашими трекерами?

Но вообще-то здесь все просто. Когда вы создаете трекер, он будет использовать _ga  с настройкой  cookieDomain трекера.

Сейчас поясню.

Допустим, у вас два разных _ga cookies – один написан на .simoahava.com, а другой – на .test.simoahava.com. Сейчас вы находитесь на test.simoahava.com, и хотите использовать Клиентский ID того cookie, который написан на этом поддомене. Вам нужно создать трекер, который сможет написать cookie на .test.simoahava.com , если вы хотите взаимодействовать с cookie. Другими словами:

ga('create', 'UA-12345-1', {'name' : 'test1'});

Это сработает, потому что без 'cookieDomain' : 'auto' cookie будет написан на .test.simoahava.com. Поскольку  _ga cookie уже существует на .test.simoahava.com, он используется во всех взаимодействиях с трекером под именем test1.

Если вы хотите взаимодействовать с cookie, написанном на .simoahava.com, то вам нужно добавить параметр cookieDomain и убедиться, что он может написать cookie на домене самого высокого уровня:

ga('create', 'UA-12345-1', {'name' : 'test2', 'cookieDomain' : 'auto'});
// OR
ga('create', 'UA-12345-1', {'name' : 'test2', 'cookieDomain' : '.simoahava.com'});

В обоих случаях мы видим попытку написать _ga cookie на .simoahava.com. Но поскольку этот cookie уже существует, то для взаимодействия с этим конкретным cookie  можно использовать трекер с именем test2.

Выводы

Теперь давайте посмотрим, что все это значит. Я представлю результаты в виде вопросов и ответов.

В: Нужно ли мне настраивать 'cookieDomain' : 'auto' на всех своих Тегах и трекерах?
О: Я бы сказал, что да. Если эта настройка задана для всех Тегов, это гарантирует, что на всех ваших поддоменах будет использоваться  один и тот же Клиентский ID. Даже если Теги собирают данные в разные свойства UA-XXXXX-Y, то неважно, что они используют один и тот же Клиентский ID, поскольку это просто метка, используемая каждым свойством для присвоения посещений одному и тому же пользователю.

В: Что будет, если только для одного из моих Тегов задана настройка'cookieDomain' : 'auto', а для других нет?
О: Все нормально при условии, что этот Тег активируется на каждой странице. По сути, когда на странице активируется Тег, он первым делом проверяет наличие предсуществующего _ga cookie. Если он находит его, то затем он проверяет домен, на котором написан этот cookie, вне зависимости от того, совпадает ли это с настройками трекера. Если настройки совпадают, то тогда Тег просто использует этот cookie. Если настройки не совпадают, на текущем домене пишется новый _ga, но Клиентский ID по-прежнему копируется из первого cookie.

Таким образом, пока на странице активируется один Тег с настройкой 'cookieDomain' : 'auto', механизм копирования Клиентского ID обеспечивает доступность одного и того же Клиентского ID для ваших доменов.

В: А что если у меня вообще не задана настройка 'cookieDomain' : 'auto'?
О: В лучшем случае, не будет ничего. Для этого нужно, чтобы трафик всегда шел с домена более высокого уровня на поддомен. Таким образом поддомен может скопировать Клиентский ID из cookie домена более высокого уровня.

Но если трафик идет с низа доменной структуры наверх (или параллельно), то у вас проблемы.  У вас будут разные Клиентские ID, поскольку домены не используют одни и те же cookies.

Я ненавижу раздавать рекомендации, поскольку я не верю в их существование, но в данном случае мы говорим о технологической реальности. Так что я настоятельно рекомендую вам всегда добавлять поле 'cookieDomain' : 'auto' для всех ваших Тегов и трекеров.  Если это затруднительно, то позаботьтесь о том, чтобы эта настройка была задана хотя бы для одного тега, который гарантированно активируется на всех страницах. В этом случае домены будут копировать и передавать друг другу Клиентский ID.