Disclaimer: Este post habla del código js. desde Universal Analytics. Si bien ahora la herramienta ha cambiado y la conocemos como Google Analytics 4, todavía podemos aprender de aquí.
En Primeros Pasos con Universal Analytics, entre otras cosas, describíamos las nuevas funciones ga() que debemos usar ahora en Analytics al pasar de carga el antiguo código «ga.js» al nuevo «analytics.js». Si no sabes de qué hablo, por favor, lee antes dicho post.
Qué debes saber del código de analytics.js
Tras unas cuantas pruebas creo que ya voy entendiendo el nuevo código y las posibilidades que nos da son asombrosas. Realmente la gestión se va a volver mucho más sencilla y se nos abre la puerta a multitud de nuevos hacks que podremos realizar.
1. El funcionamiento básico.
Como describía en el anterior post, la nueva función tiene este formato básico:
1.1. Para crear nuestra cuenta:
ga('create', IdCuenta, Opciones);
Donde las opciones nos permitirían configurar los parámetros de siempre. Lo que pasa es que como Éstas pasan a poder configurarse también en el Admin de Analytics, pierde el sentido usarlas.
1.2. Para preparar los datos:
ga('set', NombreVariable, Valor);
Donde los nombres de variable podemos encontrarlos en las descripciones del measurement Protocol.
Estos valores una vez especificados con «set» se quedan guardados para enviarse en cada envió de datos que hagamos a partir de ese momento.
1.3. Para enviar los datos:
ga('send', TipoDeHit, Opciones);
Por ultimo usamos «send» con una de las opciones de «hit» que tenemos disponibles y realizamos el envío. Los tipos de hit son los siguientes: ‘pageview’, ‘appview’, ‘event’, ‘transaction’, ‘item’, ‘social’, ‘exception’ y ‘timing’. Pero fundamentalmente en nuestras webs usaremos «pageview» y «event», salvo que activemos ecommerce donde «transaction» e «item» también entrarán en juego.
«send» permite configurar variables enviadas directamente con la propia llamada, de forma que podemos manipular lo que se envía en un hit concreto sin tener porque afectar al resto al declararlo como «set».
¿Qué hacemos con todo esto?
Al final la lógica es sencilla: preparamos datos para enviar a Analytics y los enviamos con al «/collector» con la función ga(«send»)
Como decíamos, la forma de preparar los datos son dos:
Con la llamada ga(‘set’) que prepara esas variables para sumarlas a cualquier envió de datos que hagamos posteriormente. O bien, directamente en la llamada de envío de datos, que solo capturará los datos para esas llamadas concretas. Así tenemos la opción de crear variables globales con set o manipular llamadas concretas con el objeto de datos del envío.
Un ejemplo:
<script type="text/javascript">
window.ga = window.ga || function(){(ga.q=ga.q||[]).push(arguments);}; (function() { var e = document.createElement('script'); e.async = true; e.src = '//www.google-analytics.com/analytics.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(e, s); })();
ga('create', 'UA-1234567-89');
ga('set', 'dimension1', 'prueba');
ga('send', 'pageview', { page:'/fake'} );
ga('send', 'pageview');
</script>
Esto indicaría nuestra cuenta y prepararía el valor «prueba» para que se envié en todos los ga(«send») como valor de la dimensión personalizada 1.
También vemos que hacemos dos envíos de pageview (hacemos 2 páginas vistas con cada usuario): en la primera manipulamos la página a capturar para que se guarde como si el usuario hubiese visitado «/fake»; y en la segunda no lo hacemos. Como no hemos usado «send» para manipular la página, esta solo afectará a la primera llamada y no a la segunda.
2. Hacks antiguos traducidos.
Conocido esto, vamos a ver cómo traducir algunos de los hacks antiguos que solíamos crear con Analytics.
2.1. Anulación del rebote con eventos:
La famosa técnica para para marcar como rebote usuarios con solo una página vista. Podemos ahora realizarla así:
ga("send", "event", {
eventCategory: "NoBounce",
eventAction: "NoBounce"
});
De la misma forma, podemos desear crear un evento que no anule rebote de esta forma:
ga("send", "event", {
eventCategory: "my category",
eventAction: "my action",
eventLabel: "my label",
eventValue: "my label",
nonInteraction: true
});
2.2. Crear páginas vistas falsas:
Podemos también (como hemos visto antes) crear cuantos pageviews queramos indicando el valor «page» en la llamada.
ga('send', 'pageview');
// otras funciones
ga('send', 'pageview', { page:'/fake'} );
2.3. Identificar páginas de error:
Podemos también crear estructuras que nos faciliten detectar errores al crearlas dentro de carpetas falsas que nos permitan visualizar todos los errores en conjunto:
Ejemplo para un 404:
ga('send', 'pageview', { page:'/errors/404?realPage='+window.location } );
2.4. Enviar valores propios:
Y podemos enviar los valores que deseemos, sólo que usando dimensiones y métricas personalizadas en lugar de variables personalizadas. Lo único que tenemos que tener en cuenta es si queremos que éstas se guarden en todos los hits que hagamos o sólo en algunos.
Si es en todos los hits usaremos:
ga('set', 'dimensionXX', valorDimension);
ga('set', 'metricXX', valorMetrica);
y si es sólo en un hit concreto:
ga('send', 'pageview', {
dimension1:valorDimension,
metric1:valorMetrica
});
Recordemos aquí que estas variables tiene ámbito, por lo que no tiene sentido ponerlas en ámbito «sesión» y querer enviarlas solo en un hit.
3. Nuevos hacks que ahora se nos permiten.
El nuevo sistema es además mucho más versátil. Como decíamos, podemos manipular prácticamente cualquier valor en nuestros hits, lo que nos da pie a configuraciones muy a medida:
3.1. Manipular valores de las campañas:
Podemos desear indicar nosotros mismos las campañas sin que vengan de variables en la URL.
ga('create', 'UA-1234567-89');
ga('set', 'campaignName', 'foo');
ga('set', 'campaignSource', 'foo');
ga('set', 'campaignMedium', 'foo');
ga('send', 'pageview');
Enviará los valores de campaña como «foo».
3.2. Añadir un referrer cuando no ha sido detectado pero lo conocemos:
ga('create', 'UA-1234567-89');
ga('set', 'referrer', 'http://mireferrer.com');
ga('send', 'pageview');
3.3. Manipular el dominio del que viene la visita (no sólo la página):
Esto podría ser útil para crear entornos virtuales distintos: usuarios logados y no logados, secciones de la web, etc. Cuando no queremos que realmente se alteren las URLs recogidas, pero si tener mecanismos para separar tráficos globales.
ga('create', 'UA-1234567-89');
ga('set', 'hostname', 'otrodominio.midominio.com');
ga('send', 'pageview' );
3.4. Cambiar los títulos de nuestras páginas:
Muchas veces los títulos no nos terminan de ayudar a saber que es una página concreta. Ahora podremos manipularlos:
ga('create', 'UA-1234567-89');
ga('send', 'pageview', { title: "Mi Titulo cambiado" });
3.5. Manipular/corregir el idioma del usuario:
ga('create', 'UA-1234567-89');
ga('set', 'language', 'es-es');
ga('send', 'pageview' );
3.6. Y mil cosas más que irán saliendo…
Sólo hay que echar un vistazo a la lista de posibles variables para darnos cuenta de que la lista de posibles hacks va a ser muy larga.
Espero que con el tiempo no empiecen a poner restricciones a los datos que enviamos con analytics.js.
4. ¿Puede suponer esta libertad un problema de seguridad?
Las personas somos así. Cuando nos complican mucho la vida nos quejamos pero cuando nos la simplifican hasta este punto empezamos a preocuparnos. El nuevo sistema es tan abierto y permite una manipulación de los datos tan grande que nada me impide crear scripts o llamadas javascript que se dediquen a ensuciar los datos de Analytics de otras webs… en teoría podríamos hacer creer a la competencia lo que quisiésemos, pues controlamos incluso los dominios, referrers y campañas que enviamos…
Espero que Google tenga prevista una forma de asegurar la captura de datos porque si no algunos piratillas se lo van a pasar en grande.