Blog

Evitar las transacciones repetidas vía GTM

Carlos Rabadán

Carlos Rabadán en Analítica Web 11 diciembre, 2015

Un problema muy común al que solemos enfrentarnos en la analítica web es el de las transacciones y/o conversiones repetidas. Fáciles de detectar, pero evitar que se midan no lo es tanto, y pueden llegar a distorsionar bastante cifras tan relevantes como son las de comercio, conversiones realizadas, formularios enviados, etc.

Para ver más claro el problema que nos ocupa se presenta el siguiente escenario:

“Un usuario, después de atravesar un proceso de compra y puede que una pasarela de pago (o TPV), llega a la página de confirmación de compra realizada donde, generalmente, se lanzan la inmensa mayoría de los pixels de conversión y parte del tracking de comercio de Analytics.”

Hasta ahí todo correcto, ahora viene cuando la matan. Se presentan dos posibilidades:

El primer escenario es la traza de comportamiento natural de un cliente: navega y mira, compra, paga, llega a la página de gracias y se marcha. Sin problemas.

Receipt page

El segundo escenario es el problemático. La mayoría de las webs no implementan un sistema nativo que impida a un usuario recargar ciertas URLs que son el resultado final de un proceso más largo, sin lanzar un error de página caducada o redireccionando al usuario a otra página. También existen otros portales donde directamente redirigen al usuario a la página de “gracias” cuando este decide ver los detalles de un pedido realizado.

En cualquier caso, es necesario asegurarse que la información de tracking asociada a esta clase de páginas solo se envíe una vez.

 

El Método

La solución propuesta pasa por usar un nuevo tipo de cookie. Es importante subrayar este punto puesto que será necesario actualizar la política de cookies del portal web, una vez implementado esta solución. Toda la implementación está basada en el uso de Google Tag Manager (el administrador de etiquetas de Google), el cual entre otras cosas, nos permite hacer virguerías como esta sin recurrir para nada a los programadores de la web.

En resumidas cuentas, así es como funciona el método propuesto:

  1. 1. El usuario llega a la página de “gracias”
  2. 2. La etiqueta de transacción mira dentro de la nueva cookie si está el ID de la transacción que acaba de realizar el usuario.
  3. 3. Si el ID está en la cookie no se lanza la etiqueta.
  4. 4. Si el ID no está en la cookie, la etiqueta se lanza y el ID se añade a la cookie, actualizando la longevidad de ésta.

Para poder llevar a cabo este método necesitaremos 4 elementos nuevos, además de la etiqueta de tracking de transacciones y su correspondiente trigger (previamente existentes).

 

Implementación

Vamos a explicar paso a paso cada uno de los elementos que hay que ir creando y configurando en Google Tag Manager.

El ID de la transacción

Datalayer variable transactionId

Necesitamos crear una variable de tipo Data Layer que apunte al nombre de la variable que recoge el ID. Normalmente esta variable se llamará transactionId.
En el caso de estar usando una implementación estándar de Comercio Electrónico Mejorado, accederemos a esta variable de la siguiente manera:

ecommerce.purchase.actionField.id
 

La nueva cookie

Cookie User transactions

Necesitamos una cookie que se encargue de ir acumulando los distintos IDs de las transacciones que lleve a cabo el cliente. A esta nueva cookie la bautizaremos con el nombre de: ga_tids (aunque se puede cambiar en cualquier momento).

 

Javascript: Es transacción repetida

JS es transaccion repetida

Se trata de una sencilla función javascript que nos dirá si el ID de la transacción de la página de “gracias” en la que se encuentra el usuario es repetida.

function() {
  var a={{DL-EEC-Purchase-Transaction ID}};
  var b={{Cookie-User transactions}};
  return (new RegExp("(,|^)"+a,"g")).test(b);
}

Donde:

Llamaremos a esta variable {{JS-EEC-Transaccion repetida}}

 

Javascript: Cookie set

JS set cookie

Por último creamos otro Custom Javascript con el siguiente código fuente:

function() {
 return function() {
	var cname = "ga_tids"; //cookie name
	var d, expires;
	var cvalue = '';
	// Run the code only if a transaction is found in the data layer
	if ({{DL-EEC-Purchase-Transaction ID}}) {
		d = new Date();
		d.setTime(d.getTime() + (24*60*60*1000)); // 1 day lifespan
		expires = 'expires='+d.toUTCString();
		// If the cookie already exists, append not overwrite
		if ({{Cookie-User transactions}}) {
			cvalue = {{Cookie-User transactions}} + ',';
		}
		document.cookie = cname+'=' +
		cvalue + {{DL-EEC-Purchase-Transaction ID}} + '; ' +
		expires + '; path=/';
	}
 };
}

En la primera línea daremos nombre e nuestra nueva cookie, en este caso ga_tids. Luego, lo que hace el script es comprobar lo primero que el ID de la transacción es visible y accesible. En tal caso, actualiza el tiempo de vida de la cookie y la crea con el formato adecuado y el valor del ID, o simplemente añade el ID al final si ésta ya existía.

El tiempo de vida configurado para la cookie en este ejemplo es de 24h, aunque se puede seleccionar cualquier otro intervalo que se desee.
Llamaremos a esta variable {{JS-EEC-Set user transactions cookie}}.

 

Configurando la etiqueta

Por último nos queda simplemente hacer un par de cambios en la etiqueta que envía los datos de comercio a analytics, y en su respectivo disparador.
Dentro de la configuración avanzada de la etiqueta de Google Analytics, en Fields to Set, añadiremos uno nuevo para el campo hitCallback con el valor devuelto por nuestra función javascript {{JS-EEC-Set user transactions cookie}}.

hitCallback en etiqueta

Lo que le estamos diciendo a GTM con esta configuración es que ejecute el javascript especificado inmediatamente después de que se envíe el hit a Analytics, con lo que ya quedará registrado el ID de la transacción a partir de ese momento.

 

Configurando el disparador

Dentro de la configuración del trigger encargado de disparar tanto la etiqueta de tracking de comercio, como otro tipo de etiquetas de conversión o pixels (tipo Adwords por ejemplo), añadiremos la siguiente condición:

{{JS-EEC-Transaccion repetida}} does not equal true

Es decir, solo se disparará este trigger si la transacción de la página actual no está registrada dentro de nuestra nueva cookie.

Trigger sin repeticiones

Y con esto y un bizcocho…

Si quieres estar al día de cursos y novedades suscríbete a nuestro blog.