Я нашел этот предыдущий вопрос, но мне было интересно, есть ли другие способы отсрочить установку файлов cookie GA? Этот код был мне совсем не ясен, поэтому я подозреваю его. Насколько чувствителен код аналитики к взлому? Google предлагает, чтобы код был первым в теге head, поэтому мне интересно, не повлияют ли его модификации на его функциональность?
Код выглядит следующим образом:
<!-- Google tag (gtag.js) -->
<script async src = "https://www.googletagmanager.com/gtag/js?id=G-**********"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-**********');
</script>
Код для Adwords аналогичен:
<script async src = "https://www.googletagmanager.com/gtag/js?id=AW-1068746090"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'AW-1068746090');
</script>
@BNazaruk что такое GTM? Я просто скопировал код в соответствии с инструкциями Google, я предположил, что он обновлен.
Ух ты. Хорошо. Вы наверняка можете реализовать отслеживание и управление согласием через код, работая напрямую с gtag. Но это определенно не лучшая практика, особенно для веб-приложений. Лучше всего загрузить Диспетчер тегов Google вместо установки gtag и позволить GTM обрабатывать все библиотеки именно тогда, когда они необходимы. Разверните всю свою логику в GTM через его пользовательский интерфейс, а не в коде. Это значительно упрощает обслуживание, масштабирование и поддержку во времени. Управление согласием в GTM тоже намного проще, чем в gtag. GTM имеет гораздо больше возможностей для этого.

Google предлагает, чтобы код был первым в теге head, поэтому мне интересно, не повлияют ли его модификации на его функциональность?
На самом деле не имеет значения, куда вы поместите код. Чем раньше/выше вы его поместите, тем раньше браузер его загрузит, выполнит и отправит просмотр страницы.
Если вы предпочитаете производительность страницы (например, жизненно важные функции веб-ядра) вводящему в заблуждение отслеживанию, вы можете заменить атрибут async атрибутом defer, который заставит GA загружаться позже (например, после того, как ваша страница будет «готова»).
Я предпочитаю отложить GA. Для нас нет смысла измерять количество просмотров страниц, которые возвращаются еще до того, как страница «готова».
Учтите, что если вы используете и GA4, и AW, код будет выглядеть так:
<script async src = "https://www.googletagmanager.com/gtag/js?id=G-XXX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XXX');
gtag('config', 'AW-00');
</script>
Вы не включаете его дважды.
Есть документация от Google по Режиму согласия и по Конфиденциальности
Ваш код будет выглядеть так:
<script async src = "https://www.googletagmanager.com/gtag/js?id=G-XXX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('consent', 'default', {
'ad_storage': 'denied',
'analytics_storage': 'denied'
});
gtag('js', new Date());
gtag('config', 'G-XXX');
gtag('config', 'AW-00');
</script>
И вот краткое прохождение:
<script async src = "https://www.googletagmanager.com/gtag/js?id=G-XXX"></script>
Это загружает код отслеживания/библиотеку. После загрузки он переопределит метод dataLayer.push и обработает все записи массива dataLayer (если они есть). Если бы у вас была только эта строка разметки, ничего бы не произошло. Нет файлов cookie, нет отслеживания.
window.dataLayer = window.dataLayer || [];
Это некоторая предосторожность. Мы не можем быть уверены, что код/библиотека отслеживания были загружены и выполнены (и объявлена переменная dataLayer), поэтому мы проверяем, не определен ли dataLayer. Если он не определен, мы инициализируем его как пустой массив.
function gtag(){dataLayer.push(arguments);}
Для упрощения использования и/или брендинга мы оборачиваем вызов метода dataLayer.push() в функцию с именем gtag. Вместо этого вы можете использовать cl22 или timw, это не имеет значения.
gtag('consent', ...
Если бы вы проверили dataLayer сейчас, это выглядело бы так:
[
[
"consent",
"default",
{
"ad_storage": "denied",
"analytics_storage": "denied"
}
]
]
Если бы метод push уже был переопределен GA4, он уже был бы выполнен. В противном случае он будет сидеть и ждать, пока загрузится GA4.
gtag('js', new Date());
Это создает отметку времени.
gtag('config', 'G-XXX');
Это инициализирует отслеживание. В настройках по умолчанию это отправит событие page_view. Здесь GA4 установит свои файлы cookie, но из-за нашего предыдущего «входа» этого не произойдет.
gtag('config', 'AW-00');
Это приведет к инициализации AdWords.
Зачем возиться с gtag, когда есть GTM?