Сопоставление файлов cookie

Сопоставление файлов cookie – это процесс, при котором рекламодатель или поставщик связывают файлы cookie из своего домена с файлами cookie из домена Google. Это позволяет объединять данные об отдельных пользователях из вашей CRM-системы с рекламными данными Google, собранными через Дисплей и Видео 360 и Менеджер кампаний 360, чтобы лучше понимать поведение аудитории. При подобном объединении не нарушается конфиденциальность пользователей, а вы можете:

  • Настраивать таргетинг на аудитории с учетом того, какие товары добавляли в корзину пользователи, взаимодействовавшие с вашей рекламой и доменом.
  • Узнавать, какие объявления приводят к более длинным сеансам в вашем домене.
  • Анализировать историю покупок в сочетании с данными, собранными после окончания кампании.

Ограничения и конфиденциальность конечных пользователей

Сопоставление файлов cookie дает большие возможности, но у него есть ряд ограничений:

  • Запрещено объединять таблицы *_match и таблицы других типов (не *_match).
  • Чтобы настроить сопоставление файлов cookie, требуются технические действия с вашей стороны и со стороны Google.
  • Скорее всего, вы не сможете сопоставить все имеющиеся у вас рекламные данные Google. Коэффициент соответствия зависит от ряда факторов, в том числе от настроек на стороне клиента. Он часто оказывается ниже ожидаемого. Файлы cookie сопоставляются только для тех пользователей, которые взаимодействовали с вашим доменом и вашей рекламой.
  • Таблица соответствий начинает заполняться сразу после настройки. В зависимости от частоты, с которой пользователи посещают ваш сайт и получают пиксель сопоставления, может пройти несколько месяцев, прежде чем в таблице накопятся полные и стабильные данные о пользователях.
  • Вы не можете сопоставить отдельного пользователя с несколькими устройствами, если у вас нет дополнительного способа идентификации этого пользователя.
  • Невозможно сопоставить одного пользователя по нескольким файлам cookie, например после удаления файлов cookie пользователем.
  • В отношении заданий, которые выполняются по таблицам соответствий, действуют те же требования к агрегированию, что и для обычных заданий в Ads Data Hub. Если у вас низкий коэффициент соответствия и мало посещений домена, из-за требований к агрегированию вам может быть сложно получать данные1.
  • В соответствии с правилами Google в отношении конфиденциальности конечных пользователей:
    • запрещено сопоставлять данные одного и того же пользователя, когда он вошел и не вошел в аккаунт;
    • не сопоставляются данные пользователей, которые отказались от персонализации рекламы;
  • для событий iOS вы можете сопоставлять только данные, полученные в приложениях для iOS версии 14.5 и более поздних от пользователей, давших согласие в рамках фреймворка App Tracking Transparency от Apple.

Чтобы использовать собственные данные в ADH, необходимо подтвердить, что для пользователей из ЕЭЗ вы получили согласие на передачу этих данных в Google в соответствии с правилами в отношении согласия пользователей из ЕС и правилами Ads Data Hub. Это требование применяется ко всем аккаунтам Ads Data Hub при каждой отправке новых пакетов собственных данных. Любой пользователь может предоставлять требуемое согласие для всего аккаунта.

Обратите внимание, что все правила запросов к сервисам Google, которые применимы к аналитическим запросам, действуют и для запросов на сопоставление файлов cookie. Например, при создании таблицы соответствий нельзя запрашивать данные о пользователях из ЕЭЗ сразу для нескольких сервисов.

Порядок подтверждения согласия в Ads Data Hub описан в требованиях к запросу согласия для Европейской Экономической Зоны.

Чтобы система могла заполнять таблицы соответствий, вам нужно добавить тег сопоставления на все страницы домена, для которых вы хотите сопоставлять данные. Размещение пикселя зависит от ваших рекламных целей. Например, если вам нужно сопоставлять всех посетителей вашего домена, пиксели следует добавить почти на все страницы, а чтобы сопоставлять тех, кто совершил конверсию, – только на страницу конверсии. В целом, чем больше страниц с пикселем, тем выше коэффициент соответствия.

Тег сопоставления – это прозрачный пиксель отслеживания, содержащий идентификатор профиля для сопоставления файлов cookie и закодированный идентификатор пользователя или файла cookie:

<img src="https://cm.g.doubleclick.net/pixel?google_nid=adh_customername&google_hm=Q29va2llIG51bWJlciAxIQ" />

Тег сопоставления используется для передачи данных между вами и сервисами Google для сопоставления файлов cookie.

Пошаговое описание процесса

  1. Пользователь открывает страницу, на которой размещен тег сопоставления.
  2. Тег инициирует последовательность переадресаций к сервисам сопоставлений Google Платформы для маркетинга, Google Рекламы и YouTube. Запросы содержат идентификатор пользователя или файл cookie с вашего сайта, а также файл cookie Google в области идентификации каждого из этих сервисов.
  3. Прозрачный пиксель отслеживания возвращается браузеру, чтобы подтвердить, что запрос выполнен.

Ниже показана схема процесса:

Изображение, на котором показана последовательность переадресаций между браузером и сервисами сопоставлений.

Настройка

Чтобы настроить сопоставление файлов cookie в Ads Data Hub, необходимо выполнить следующие шаги:

  1. Свяжитесь со специалистом по работе с вашим аккаунтом и сообщите, что вы хотели бы настроить сопоставление файлов cookie. Специалист обсудит с вами цели и объяснит, как развернуть пиксель отслеживания в домене.
  2. Специалисты Ads Data Hub свяжутся с вами, чтобы обсудить технические требования и варианты реализации.
  3. Вы развернете пиксель отслеживания и конечную точку ошибки, а Google создаст для вас таблицы соответствий.

Когда эти шаги будут выполнены, дальнейших действий не потребуется. Google будет ежедневно заполнять ваши таблицы соответствий2. Вам нужно подождать, пока в них накопится достаточно данных, чтобы вы могли получать полезные результаты без нарушения требований к агрегированию. Это зависит от того, с какой частотой пользователи посещают ваш сайт: при ежедневных посещениях данные накопятся намного быстрее, чем при ежемесячных. Когда новые соответствия начнут появляться реже, это будет означать, что таблицы содержат довольно полные данные.

Как отправлять запросы к таблицам соответствий

Вы можете запрашивать данные из таблиц, объем данных в которых соответствует нашим требованиям к защите конфиденциальности.

В схеме Ads Data Hub каждой таблице, содержащей поле user_id, сопутствует таблица *_match. Например, для таблицы adh.google_ads_impressions Ads Data Hub создает таблицу соответствий adh.google_ads_impressions_match, которая содержит идентификаторы пользователей. Для таблиц, которые должны быть изолированы в соответствии с действующими политиками, создаются отдельные таблицы соответствий. Например, для таблицы adh.google_ads_impressions_policy_isolated_youtube Ads Data Hub создает дополнительную таблицу соответствий adh.google_ads_impressions_policy_isolated_youtube_match, которая содержит идентификаторы пользователей.

Эти таблицы содержат подмножество пользователей, доступных в исходных таблицах, для которых есть сопоставление по user_id. Например, если в исходной таблице содержатся данные о пользователе А и пользователе Б, но был сопоставлен только пользователь А, то пользователям Б не будет в таблице соответствий.

Таблицы соответствий содержат дополнительный столбец "external_cookie" формата BYTES, в котором хранятся файлы cookie.

Составляя запросы, учитывайте тип поля. Операторы сравнения SQL подразумевают, что вы сравниваете литералы одного типа. В зависимости от того, в каком виде user_id сохраняется в вашей таблице собственных данных, может понадобиться закодировать все значения в таблице, прежде чем сравнивать их. Для успешного сопоставления ключ соединения необходимо привести к формату BYTES.

JOIN ON
  adh.google_ads_impressions_match.external_cookie = CAST(my_data.user_id AS BYTES)

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

Как закодировать идентификаторы пользователей

Как закодировать идентификаторы пользователей на стороне клиента

Чтобы идентификаторы разных форматов можно быть безопасно передавать в URL, они должны быть предварительно закодированы в формат Base64. Декодированные идентификаторы в формате Base64, подходящие для добавления в URL, можно получить в Ads Data Hub в поле external_cookie. Чтобы извлечь исходный идентификатор, вам нужно будет отменить все преобразования, примененные до кодирования.

Если ваш идентификатор содержит не более 24 символов (или байтов), вы можете включить подходящий для URL идентификатор, закодированный в формате Base64, в пиксель, как показано в примере 1. Если ваш идентификатор содержит более 24 символов (или байтов), вам нужно преобразовать его так, чтобы он содержал не более 24 байтов. В некоторых случаях, как с GUID в примере 2, можно конвертировать данные в байтовое представление. В других случаях может понадобиться передать в Google поднабор (хеш) идентификатора. В любом случае убедитесь, что вы можете написать на SQL запрос JOIN (объединение), который таким же образом преобразует идентификатор в таблице ваших собственных данных.

Пример 1

Значение идентификатора пользователя никогда не превышает 24 байта. Мы рекомендуем просто передавать идентификатор пользователя напрямую в Ads Data Hub, предварительно закодировав его в формате Base64, подходящем для URL.

var userId = 'abcdef123456789';
// Encode the string (or number) in normal base64.
var userIdBase64 = btoa(userId);

// Ensure that the uploaded user IDs use web-safe Base64 encoding.
userIdBase64 = userIdBase64.replace(/\+/g, '-').replace(/\//g, '_')
    .replace(/=+$/, '');

// After encoding the UUID correctly, you can create the request tag and
// insert it into the DOM.
var imgElement = Document.createElement('img');
imgElement.src =
    'https://cm.g.doubleclick.net/pixel?google_nid=adh_customername&google_hm='
    + userIdBase64;
document.body.appendChild(imgElement);
Пример 2

В качестве идентификатора пользователя вы присваиваете значение универсального уникального идентификатора (UUID): 123e4567-e89b-12d3-a456-426655440000.

При сопоставлении в Ads Data Hub рекомендуется применить следующие преобразования:

  1. Форматирование UUID в виде строки, содержащей 36 символов.
  2. Шестнадцатеричное декодирование UUID.
  3. Форматирование UUID в байтовом виде.
  4. Декодирование байтов в формате Base64, подходящем для URL.
  5. Форматирование UUID в виде строки.

Это можно реализовать с помощью следующего кода:

JavaScript

var userId = '123e4567-e89b-12d3-a456-426655440000';

// A helper function for converting a hex string to a byte array.
function strToBytes(str) {
        for (var bytes = [], i = 0; i < str.length; i += 2) {
          bytes.push(parseInt(str.substr(i, 2), 16));
        }
        return bytes;
}

// Remove the formatting dashes from the UUID.
userId = userId.replace(/-/g, '');

// Encode the hex string as a byte array.
var userIdBytes = strToBytes(userId);

// Encode the byte array in normal base64.
var userIdBase64 = btoa(String.fromCharCode(...new Uint8Array(userIdBytes)));

// Ensure that the uploaded user IDs use web-safe Base64 encoding.
userIdBase64 = userIdBase64.replace(/\+/g, '-').replace(/\//g, '_').replace(
    /=+$/, '');

// After encoding the UUID correctly, you can create the request tag and
// insert it into the DOM.
var imgElement = Document.createElement('img');
imgElement.src =
    'https://cm.g.doubleclick.net/pixel?google_nid=adh_customername&google_hm='
    + userIdBase64;
document.body.appendChild(imgElement);

Python

import base64

user_id = '123e4567-e89b-12d3-a456-426655440000'
user_id_as_bytes = bytes.fromhex(user_id.replace('-', ''))
base64.urlsafe_b64encode(user_id_as_bytes)

Если обнаружено соответствие с идентификатор пользователя Google, поле external_cookie будет содержать ваш идентификатор в виде байтового значения. Чтобы восстановить исходный идентификатор, выполните следующие преобразования:

  1. Форматирование external_cookie в байтовом виде.
  2. Шестнадцатеричное декодирование external_cookie.
  3. Форматирование external_cookie в виде строки.

Как закодировать идентификаторы пользователей в Ads Data Hub

Если вы сохраняете строку UUID в поле в ваших собственных данных, чтобы объединить данные, ее нужно преобразовать в байты, как показано в примере выше.

В примере ниже показано, как закодировать идентификатор UUID и выполнить объединение по полю внешнего файла cookie.

JOIN my_data ON imp.external_cookie = FROM_HEX(REPLACE(my_data.uuid, '-', ''))

Преобразовать численное значение в байты нельзя. Если ваш идентификатор пользователя имеет форму числа (как в примере 1), сначала нужно преобразовать его в строку.

JOIN my_data ON imp.external_cookie = CAST(CAST(my_data.user_id AS STRING) AS BYTES)

То, какое кодирование понадобится для сопоставления данных, зависит от того, как вы их храните и кодируете перед передачей в Ads Data Hub.

Подробнее о функциях в виде строки в BigQuery SQL

Пример запроса

Этот запрос объединяет собственные данные с google_ads_impressions_match, а во втором запросе результаты объединяются с adh_google_ads_impressions.

SELECT
  imp.campaign_id as campaign_id,
  sum(my_data.recent_orders) as orders,
  average(my_data.lifetime_value) as ltv
FROM
  adh.google_ads_impressions_match as imp
LEFT JOIN
  my_data ON imp.external_cookie = my_data.company_guest_id_bytes
GROUP BY
  campaign_id

Результаты предыдущего запроса сохраняются как previous_results. Затем их можно соединить с google_ads_impressions. При этом данные кампаний, в которых зарегистрировано 0 показов, объединяются с полученными результатами.

SELECT
  campaign_id,
  COALESCE(orders, 0) as orders,
  COALESCE(ltv, 0) as ltv,
FROM (SELECT DISTINCT campaign_id
   FROM adh.google_ads_impressions)
LEFT JOIN previous_results USING (campaign_id)

  1. Например, коэффициент соответствия 20 % означает, что для соблюдения порога агрегирования в 50 пользователей в каждой строке должно быть 250 пользователей (50 / 0,2 = 250). 

  2. Сопоставления, выполненные в определенный день, могут добавляться в ваши таблицы с задержкой до 48 часов.