Solución para conversiones duplicadas en GA4

Vicente Peris

Qué puede provocar que tengamos conversiones duplicadas

Existen distintas causas por las cuales se pueden generar conversiones duplicadas en nuestros informes de ecommerce y desde Datarmony queremos contarte cuáles son las más comunes:

  • Que al recargar la página se vuelva a lanzar la transacción.
  • Que desde un enlace del mail de confirmación se acceda a una página de resumen en la que se vuelva a lanzar el hit de transacción.
  • Compartir la página con alguien o añadirla a favoritos y al acceder de nuevo se lanza el hit de la transacción.

Comprobar si existen conversiones duplicadas

Para comprobar si en nuestros datos existen transacciones duplicadas, podemos crearnos un informe personalizado.

Para ello accedemos a la sección “explore” de nuestra interfaz de GA4 y creamos un informe seleccionando “Transaction ID” como dimensión y “Transactions” o “Purchase” como métrica, si existen identificadores de transacción con más de una transacción es que se están lanzando más de una vez.

Cómo solucionar algunas duplicidades

Cabe destacar que si implementamos la solución que se explica a continuación, habrá casos en los que no tendrá efecto. La solución parte de usar una cookie o el localStorage para almacenar las transacciones realizadas, si se accede con otro navegador u otro dispositivo estos datos no son accesibles.

Por ello, lo más recomendable es comentar el problema con el departamento de desarrollo que incluyó el código de la transacción y plantear una posible solución para evitar que el código salte cuando no debe.

Esta opción puede ser complicada de realizar por diferentes causas, en ese caso podemos aplicar la solución siguiente:

Guardar la transacción.

Para empezar debemos tener una variable que almacena el identificador de la transacción.
Este dato se recoge del dataLayer de la transacción.
Por lo tanto crearemos una variable de tipo dataLayer que recoja la información del dataLayer de GA4 ecommerce.transaction_id.

En el caso de que nuestro dataLayer siga con el formato de Universal Analytics, el dato estará en: ecommerce.purchase.actionField.id.

El siguiente paso será crear una etiqueta de tipo “Custom HTML” donde incluiremos el código que guarda el identificador de la transacción en el LocalStorage.

El código es el siguiente:

<script>
 if ({{DA. DL - ecommerce.transaction_id}}) {
	var transactionId = {{DA. DL - ecommerce.transaction_id}};
 	var transactions = localStorage.getItem('transactions');
	if (transactions) {
 		var trackedTransactions = transactions.split("|");
   		if (trackedTransactions.indexOf(transactionId)==-1) {         
          	 	    trackedTransactions.push(transactionId);
	                localStorage.setItem("transactions", trackedTransactions.join('|'));
        		}
	}else {
      		var trackedTransactions = [];
      		trackedTransactions.push(transactionId);
	            localStorage.setItem("transactions", trackedTransactions.join('|'));
		}
}
</script>

Para esta etiqueta no añadiremos un trigger porque se lanzará desde la etiqueta que lanza el ga4 event purchase.

Desde la sección “Tag sequencing” en “Advanced Settings” de la etiqueta de evento, indicaremos que queremos lanzar una etiqueta después del evento y seleccionaremos la etiqueta que acabamos de crear.

Esto se verá reflejado en la etiqueta “DA. Save Transaction”.

Verificar si existe la transacción.

Vamos a crear una variable de tipo Custom Javascript que compruebe si el identificador de transacción ya está almacenado en el LocalStorage JavaScript.

El código es el siguiente:

<script>
 if ({{DA. DL - ecommerce.transaction_id}}) {
	var transactionId = {{DA. DL - ecommerce.transaction_id}};
 	var transactions = localStorage.getItem('transactions');
	if (transactions) {
 		var trackedTransactions = transactions.split("|");
   		if (trackedTransactions.indexOf(transactionId)==-1) {         
          	 	    trackedTransactions.push(transactionId);
	                localStorage.setItem("transactions", trackedTransactions.join('|'));
        		}
	}else {
      		var trackedTransactions = [];
      		trackedTransactions.push(transactionId);
	            localStorage.setItem("transactions", trackedTransactions.join('|'));
		}
}
</script>

Para esta etiqueta no añadiremos un trigger porque se lanzará desde la etiqueta que lanza el ga4 event purchase.
Desde la sección “Tag sequencing” en “Advanced Settings” de la etiqueta de evento, indicaremos que queremos lanzar una etiqueta después del evento y seleccionaremos la etiqueta que acabamos de crear.

Esta excepción bloqueará el evento cuando exista la transacción en el LocalStorage.

Nota: Esta solución está basada en el post de Simo Ahava. para evitar transacciones duplicadas en Google Analytics Universal.

Suscríbete al blog de Datarmony.