javascript - Google Tag Manager: Seguimiento del valor de etiqueta "Opción" del menú desplegable "Seleccionar"
Estoy teniendo problemas para rastrear el valor de la etiqueta "option" en la etiqueta "select". Actualmente tengo un menú desplegable para el Widget de Traductor de Google donde el usuario puede hacer clic y seleccionar el idioma. Cuando haces clic en el menú desplegable "Seleccionar idioma", podrás ver alemán como opción. Mira las capturas de pantalla adjuntas. He creado un Macro llamado "JS - Google Translate - Select Option" en Google Tag Manager.
Aquí está el código para "JS - Google Translate - Seleccionar opción":
function() {
var list = document.querySelector('select.goog-te-combo');
return list ? list.options[list.selectedIndex].value : undefined;
}
El código anterior encontrará el menú desplegable, que tiene "goog-te-combo" como nombre de clase para la etiqueta "select". Luego, verificará si las etiquetas option están disponibles en la etiqueta select y obtendrá el valor de la etiqueta option seleccionada.
También he creado una etiqueta llamada "GA - Event - Google Translate Clicks" y un activador llamado "Click - Google Translate".
Cuando pruebo esto, veo que mi "GA - Evento - Clics de Google Translate" se activa cuando hago clic en el menú desplegable en mi página. Sin embargo, cuando reviso la pestaña "variables" en Google Tag Manager y verifico la variable "JS - Google Translate - Seleccionar Opción", la veo vacía.
Opción de menú desplegable del widget de Google Translator
Google Tag Manager "JS - Google Translate - Seleccionar opción" vacío
Respuesta #1
El problema es que necesitas activar la etiqueta cuando ocurre el evento onchange.
Guía completa sobre cómo rastrear traducciones de páginas, si estás usando el traductor de sitios web de Google
Primero que nada, necesitas configurar un disparador de evento personalizado para el evento onchange (el artículo original sobre eso lo puedes encontrar aquí):
Configurar un oyente de eventos personalizado
Ir a Disparadores-> Nuevo -> Evento Personalizado
- Nombre del evento: gtm.js
- Nombre del activador: gtm.js
Configurar variable JS del controlador de eventos
Ir a Variable -> Variables definidas por el usuario -> Nuevo -> Tipo -> JavaScript personalizado
function() {
return function(e) {
window.dataLayer.push({
'event': 'gtm.'+e.type,
'gtm.element': e.target,
'gtm.elementClasses': e.target.className || '',
'gtm.elementId': e.target.id || '',
'gtm.elementTarget': e.target.target || '',
'gtm.elementUrl': e.target.href || e.target.action || '',
'gtm.originalEvent': e
});
}
}
Nombre de la variable: manejador de eventos genérico
Etiqueta de configuración
Ve a Etiquetas-> Nuevo -> Tipo -> HTML personalizado
HTML :
<script>
var eventType = 'change'; // Modify this to reflect the event type you want to listen for
if (document.addEventListener) {
document.addEventListener(eventType, {{generic event handler}}, false);
} else if (document.attachEvent) {
document.attachEvent('on' + eventType, {{generic event handler}});
}
</script>
Nombre de la etiqueta: escuchador onchange
Disparador: gtm.js
Ahora, has creado todo lo que necesitas para rastrear los eventos onchange. El siguiente paso es para tu caso exacto, cuando quieras activar una etiqueta cuando alguien traduzca la página
Habilitar variable integrada para hacer clic en el elemento
Ve a Variables-> Variables incorporadas-> Configurar -> Hacer clic en Elemento
Crear variable para el idioma seleccionado
Ir a Variables -> Variables definidas por el usuario -> Nuevo -> JavaScript personalizado
function() {
var list = document.querySelector('select.goog-te-combo');
return list ? list.options[list.selectedIndex].value : undefined;
}
Nombre de la variable: Idioma seleccionado
Crear disparador para tu etiqueta
Ir a Disparadores -> Nuevo -> Tipo -> Evento Personalizado
Tipo de evento: gtm.change
Se dispara en: Algunos eventos personalizados
Hacer clic en elemento - Coincide con el selector CSS - select.goog-te-combo
Nombre del desencadenante: Página traducida
Crear etiqueta final, que activará un evento cuando alguien traduzca la página
Este paso podría ser diferente. Depende, qué tipo de etiqueta quieres activar. En este ejemplo enviaré un evento a GA
Ve a Etiquetas-> Nuevo -> Tipo -> Universal Analytics
Tipo: Evento
Categoría: Traducir
Acción: Traducir
Etiqueta: {{Selected language}}
Disparador: Página traducida
HECHO
Después de estos pasos tendrás una solución funcionando
Respuesta #2
Creo que lo que puede estar ocurriendo es que su disparador se activa antes de que la variable haya tenido tiempo de evaluarse.
Una forma más ordenada de hacer esto sería definir el uso del manejador onchange de la etiqueta <select> para enviar un evento al dataLayer de GTM junto con el valor que se seleccionó. Esto puede verse algo así:
<select id="language" onChange="languageSelected(this.selectedIndex);>
Tu función languageSelected podría verse algo así:
function languageSelected(index) {
dataLayer = dataLayer || [];
dataLayer.push({'event' : 'languageSelected', 'language' : 'German'});
}
Luego definirías una variable dataLayer en GTM que lea el atributo language del dataLayer y luego definirías un activador de tipo Evento Personalizado donde el nombre del evento sea languageSelected.