7 Jun 2019
ID de cliente (y sesión) de Analytics con GTM y customTask
Lectura: 9 mins.
|
Dificultad:

ID de cliente (y sesión) de Analytics con GTM y customTask

Como ya sabemos, el funcionamiento base de Google Analytics consiste en recopilar datos en bruto de páginas vistas y otras interacciones (hits) y posteriormente utilizar ciertos identificadores internos para “coserlos” y darles significado, agrupándolos en sesiones y usuarios.

GLORY TO ARSTOTZKA
PAPERS, PLEASE

De entre estos indicadores, el más importante es el ID de cliente o Client ID: una ristra de números que Google Analytics genera y propaga mediante la cookie _ga y que utiliza para identificar “usuarios únicos” (combinaciones de dispositivos/navegadores/perfiles) y contabilizarlos como tales a lo largo del tiempo, incluso entre sesiones.

No hace falta decir que este dato nos puede resultar muy útil en múltiples casos, especialmente en aquellos que impliquen exportación, cruce o algún otro tipo de tratamiento externo de los datos. Sin embargo, GA no nos lo proporciona directamente, ni como dimensión predefinida consultable ni en la API.

La única excepción es el panel de Explorador de usuarios (Audience > User Explorer) en el que, ahí sí, podemos consultar el historial completo de un “usuario único” (libre de datos personalmente identificables, claro) con su correspondiente ID.

GA User Explorer
El User Explorer nos permite consultar el historial de actividad de usuarios individuales 👀

En cualquier otro caso, si queremos disponer de este dato habrá que recopilarlo manualmente de alguna forma y enviarlo como una dimensión personalizada separada, que, esta sí, podremos consultar sin restricciones.

Lo mismo ocurre con los identificadores de sesión, con el agravante de que en este caso Analytics los gestiona de forma 100% interna y no tendremos forma de consultar ni capturar; si queremos un ID de sesión, tendremos que generarlo nosotros.

Vamos a ver cómo recopilar ambos valores de forma automática y fiable; por supuesto, con la ayuda de Google Tag Manager. 😉

ID de cliente

Normalmente disponemos de dos fuentes de las que leer este dato:

De la cookie _ga

Es el método más sencillo (en GTM se puede hacer sin necesidad de Javascript, simplemente con una variable personalizada), pero con un inconveniente: No está disponible en la primera visita del usuario, puesto que la cookie no está creada aún. Además es menos fiable, ya que puede no siempre devolver un dato correcto y actualizado (cookie renombrada, parámetros multidominio…)

Del objeto de seguimiento (tracker) de GA

Mediante código Javascript que acceda a esta estructura interna creada por el script de Analytics. En teoría más fiable, pero más complejo y con otro problema: El objeto de seguimiento no está disponible hasta después del primer hit de cada página (normalmente, el propio pageview) dado que es el punto en el que se crea. Por tanto no se puede recopilar junto con el pageview sino que debe enviarse después en algún hit aparte, por ejemplo como un evento de no interacción.

Combinación de ambos métodos

Se puede hacer una implementación más compleja y optimizada (limitar el evento a uno por sesión, duplicar la información en una cookie propia, etc) pero incluso combinando ambas fuentes hay un obstáculo que no podemos superar: El ID de cliente no estará disponible en el primer hit de cada usuario, lo cual a su vez descartará todas las primeras sesiones con rebote (1 página y salir). Si queremos la información completa, o si queremos asegurar que esté directamente asociada a todos los hits, tendremos que hacerlo de otra forma.

Enter: customTask

customTask es un parámetro opcional de Google Analytics que nos permite acceder en tiempo real al modelo de datos de un hit en plena generación del mismo; más concretamente, cuando ya ha sido creado pero antes de ser enviado.

Toma como valor una función Javascript a ejecutar sobre los datos, la cual puede no solo leerlos, sino también modificarlos antes de enviar la información a Analytics.

No hace falta decir que esto nos abre la puerta a muchísimas posibles aplicaciones: filtros, control de errores, duplicación de tracking, depuración… O, como vamos a hacer en este caso, poder leer un dato autogenerado en el propio tracker (el mismo clientId) y duplicarlo como dimensión personalizada, todo ello dentro del mismo hit y a tiempo para que se envíe todo junto.

Paso 1: Crear dimensión

El primer paso será dar de alta la dimensión personalizada que vamos a utilizar.

En Analytics, Administrar > Propiedad > Definiciones personalizadas > Dimensiones personalizadas, creamos una nueva (o editamos una existente que no estemos usando), le damos un nombre apropiado como ID Cliente y marcamos ámbito Usuario.

Una vez creada, tomamos nota del índice numérico que se le ha asignado.

Dimension personalizada Client ID
Aquí, por ejemplo, vemos que es la número 4.

Paso 2: Crear función para customTask

En Google Tag Manager, damos de alta una nueva variable de tipo JavaScript personalizada / Custom JavaScript, le ponemos un nombre apropiado, ej. {{JS GA Custom Task}} y pegamos el siguiente código.

Por supuesto, cambiando el ‘4’ por el número de dimensión correspondiente.

function() {
  return function(model) {
    // dimension clientID
    var cdiClientId = '4';
    model.set('dimension' + cdiClientId, model.get('clientId'));
  }
}

 

Ejemplo variable customTask
Debería quedar algo parecido a esto.

Paso 3: Añadir a la configuración de Analytics

Finalmente, añadimos esta nueva variable como parámetro a todas las etiquetas de Google Analytics que tengamos dadas de alta en GTM.

Para ello, si ya tenemos una Variable de Configuración de Google Analytics (Google Analytics Settings) creada y asignada a todas las etiquetas, bastará con editarla y añadir un nuevo parámetro personalizado en la sección Campos para configurar:

Nombre: customTask
Valor: la nueva variable {{JS GA Custom Task}} que hemos creado.

Config GA con customTask
Talqueasín

Si no hay una variable de configuración común… bueno, entonces el setup de GTM está un poco desactualizado y este sería un buen momento para crearla. 😛

En cualquier caso, también es posible añadir el parámetro individualmente a etiquetas concretas de la misma forma que cualquier otro: marcando “Habilitar la anulación de configuración en esta etiqueta” e insertándolo a mano.

Etiqueta GA con customTask
Pero mejor usa una variable de configuración, en serio.

Guardamos, publicamos y listo.

A partir de este momento, ya podremos seleccionar ID de cliente como dimensión personalizada de usuario en cualquier búsqueda o informe de Analytics.

Informe GA con Client ID
Por si alguien tiene curiosidad, todos los IDs de estos pantallazos son falsos. 😛

ID de sesión

Para disponer también de un ID único para cada sesión, el proceso será similar, pero —como ya hemos comentado— con una dificultad adicional: no tenemos un sessionId interno autogenerado que leer del objeto de seguimiento de Analytics, así que no tenemos más remedio que generar uno nuevo desde nuestro lado.

Por suerte es más fácil de lo que parece, gracias al funcionamiento de las dimensiones de sesión de Analytics. 🙂

Explicado brevemente:

  • Siempre que dentro de una sesión de GA se rellene el valor de una dimensión personalizada de ámbito sesión, aunque sea solo una vez y en un único hit, todos los hits de la sesión se “pintan” con este valor.
  • Si se envía más de un valor durante una misma sesión, el último valor enviado sobreescribe automáticamente los demás.
  • Con las dimensiones de ámbito usuario ocurre igual, con un nivel adicional: una dimensión de usuario rellenada “pinta” la sesión actual y todas las futuras sesiones del mismo usuario (mismo ID de cliente), hasta que se sobreescriba.

¿Qué significa esto? Pues que cualquier dato suficientemente diferenciable nos vale (un número aleatorio, por ejemplo): incluso aunque enviemos valores arbitrarios en cada hit de cada sesión, todos los hits de una sesión quedarán retroactivamente identificados con el último valor enviado dentro de la misma.

Así que, ya que estamos, vamos a aprovechar para generar uno que tenga un cierto significado y proporcione mayor información, o mayor facilidad, para agrupar u ordenar en caso de exportación o consulta masiva de datos.

El formato elegido será concatenar el ID de cliente y una marca de tiempo (en formato timestamp ISO, por ejemplo, que es legible). Como se quedará siempre con el último ID enviado en cada sesión, el resultado final será que nuestros ID de sesión tendrán este formato:


{ID Cliente}_{Fecha/hora último hit de la sesión}

Lo cual nos asegura que será un dato único y fácilmente ordenable (en una hipotética exportación, ordenar por este campo pondrá automáticamente las sesiones en orden cronológico y agrupadas por usuario)

Decidido el formato, el proceso a seguir será similar:

1) Crear la nueva dimensión personalizada, de ámbito Sesión, y anotar su índice.

Dimension personalizada Session ID
En este otro ejemplo, la número 8.

2) Crear la variable {{JS GA Custom Task}} —o editarla, si ya la teníamos creada—, de tipo JavaScript personalizada y con el siguiente código:

function() {
  return function(model) {
    // dimension clientID + sessionID
    var cdiClientId = '4';
    var cdiSessionId = '8';
    model.set('dimension' + cdiClientId, model.get('clientId'));
    model.set('dimension' + cdiSessionId, model.get('clientId') + '_' + (new Date().toISOString()));
  }
}

 

De nuevo, sustituyendo el ‘4’ y ‘8’ por los índices que tengamos en nuestro Analytics.

3) Añadirla a la configuración de las etiquetas de Google Analytics en Campos para configurar como parámetro customTask:

Configuracion GA con customTask
Otro pantallazo repe? Otro pantallazo repe.

¡Guardar, testear y publicar!

Informe GA con Session ID
Y ya podemos agrupar por ID de usuario y sesión.

Como veis, customTask es una herramienta muy potente con muchos posibles usos, así que probaremos más ideas en un próximo artículo. 😎