Код для отключения файлов cookie Google Analytics/Adwords, пока пользователь не подтвердит, что принимает файлы cookie?

Я нашел этот предыдущий вопрос, но мне было интересно, есть ли другие способы отсрочить установку файлов 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>

Зачем возиться с gtag, когда есть GTM?

BNazaruk 23.11.2022 21:42

@BNazaruk что такое GTM? Я просто скопировал код в соответствии с инструкциями Google, я предположил, что он обновлен.

CL22 25.11.2022 01:22

Ух ты. Хорошо. Вы наверняка можете реализовать отслеживание и управление согласием через код, работая напрямую с gtag. Но это определенно не лучшая практика, особенно для веб-приложений. Лучше всего загрузить Диспетчер тегов Google вместо установки gtag и позволить GTM обрабатывать все библиотеки именно тогда, когда они необходимы. Разверните всю свою логику в GTM через его пользовательский интерфейс, а не в коде. Это значительно упрощает обслуживание, масштабирование и поддержку во времени. Управление согласием в GTM тоже намного проще, чем в gtag. GTM имеет гораздо больше возможностей для этого.

BNazaruk 25.11.2022 01:35
Запись файлов cookie в файл с помощью XSS R
Запись файлов cookie в файл с помощью XSS R
Привет всем :), здесь я продемонстрирую получение cookies, которые будут сохранены в виде txt файла, используя дефект XSS Reflected.
0
3
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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.

Другие вопросы по теме