Estoy usando Google Tag Manager con una sola etiqueta que hace referencia a un script predeterminado de Google Analytics. Mi solución se basa en la información de estos recursos:
El código es simple ( confirmar ):
index.html: defina gtag() y configure denegado como predeterminado para todos los almacenamientos
<script> window.dataLayer = window.dataLayer || []; function gtag() { window.dataLayer.push(arguments); } gtag('consent', 'default', { ad_storage: 'denied', analytics_storage: 'denied', personalization_storage: 'denied', functionality_storage: 'granted', security_storage: 'granted', wait_for_update: 400, }); Luego cargue una configuración de usuario desde localStorage y llame a la actualización:
handleCookies(preferences) { console.log('handleCookies callback'); gtag('consent', 'update', { ad_storage: preferences.ad, analytics_storage: preferences.analytics, personalization_storage: preferences.personalization, }); console.log(window.dataLayer); }, Hasta ahora todo bien porque veo que la cola de eventos se actualiza en dataLayer :
A medida que se establece el consentimiento, anticipo que las cookies se establecerán para Google Analytics ahora. Pero están desaparecidos. ¿Qué estúpido error he cometido?
Desde su captura de pantalla, gtm.js se ejecuta antes de la update del modo de consentimiento, por lo que la vista de página continúa enviándose a Google Analytics como denegada.
La actualización debe realizarse antes de gtm.js
Su comando de update ocurre después de que el navegador procesa el fragmento de contenedor GTM, por lo que el comando de actualización se procesa solo después de que el disparador de Todas las páginas ya se haya procesado.
Debe retrasar sus etiquetas para que se activen en un desencadenador posterior (por ejemplo, DOM Ready) o cambiar la forma en que funciona su secuencia de comandos para impulsar el comando 'update' antes.
Como alternativa, puede usar la plantilla de etiqueta de modo de consentimiento que se encuentra en la galería de plantillas para orquestar todo a través de GTM. La plantilla utiliza las API de consentimiento síncrono de GTM que garantizan que el estado de consentimiento se aplique inmediatamente en lugar de solo una vez que se dataLayer la cola de capa de datos.
Como una nota para mi tonto futuro, escribiré algunos hallazgos y notas allí.
gtag() y establecer la configuración predeterminada antes de la inicialización de gtagdenied para ad_storage , analytics_storage y personalization_storageupdate más tarde, incluso en el método mounted de un componente Vue. Un valor en wait_for_update podría ser útil porque desea inicializar Google Analytics con cookies en lugar de sin ellas.gcs: G100 se envía cuando falta el consentimiento de cookies.update . Los valores son denied / granted , no true / false , ¡tonto!collect se enviará nuevamente con gcs: G111 . Estoy un poco sorprendido de que ni la solicitud ni la respuesta contengan ninguna cookie. ¿Por qué?gcs: G111 todavía está presente en la recopilación de GA, pero las cookies existentes de la página no están presentes en la solicitud. ¿Por qué?