Universal Analytics: Funcionamiento y Hacks para nuevo código de Google Analytics (analytics.js)


Este post es la continuación del anterior de primeros pasos con Universal Analytics. En el anterior describía entre otras cosas 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 que hablo, por favor, lee antes dicho post.

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.

El funcionamiento básico

Como describia en el anterior post, la nueva función tiene este formato básico:

1) Para crear nuestra cuenta:

ga('create', IdCuenta, Opciones);

Donde las opciones nos permitirían configurar los parametros de siempre. Lo que pasa es que como estas pasan a poder configurarse también en el Admin de analytics, pierde el sentido usarlas.

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 envio de datos que hagamos a partir de ese momento.

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 directametne 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 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:


Esto indicaría nuestra cuenta y prepararía el valor «prueba» para que se envie en todos los ga(«send») como valor de la dimension personalizada 1.

También vemos que hacemos dos envios 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.

Hacks antiguos traducidos

Conocido esto, vamos a ver como traducir algunos de los hacks antiguos que soliamos crear con analytics.

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
});

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'} );

Identificar páginas de error

Podemos también crear estructuras que nos faciliten detecar 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 } );

Enviar valores propios

Y podemos enviar los valores que deseemos, solo que usando dimensiones y métricas personalizadas en lugar de variables personalizadas. Lo único que tenemos que tener en cuenta es si queremos que estas se guarden en todos los hits que hagamos o solo en algunos.

Si es en todos los hits usaremos:

ga('set', 'dimensionXX', valorDimension);
ga('set', 'metricXX', valorMetrica);

y si es solo en un hit concreto:

ga('send', 'pageview', {
  dimension1:valorDimension,
  metric1:valorMetrica
});

Recordemos aqui que estas variables tiene ámbito, por lo que no tiene sentido ponerlas en ámbito «sesión» y querer enviarlas solo en un hit.

Nuevos hacks aque ahora se nos permiten

El nuevo sistema es además mucho más versatil. Como decíamos podemos manipular prácticamente cualquier valor en nuestros hits lo que nos da pie a configuraciones muy a medida:

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».

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');

Manipular el dominio del que viene la visita (no solo la página)

Esto podría ser últil 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' );

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" });

Manipular/corregir el idioma del usuario

ga('create', 'UA-1234567-89');
ga('set', 'language', 'es-es');
ga('send', 'pageview' );

Y mil cosas más que irán saliendo

Solo 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.

Solo espero que con el tiempo no empiecen a poner restricciones a los datos que enviamos con analytics.js.

¿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 quisiesemos, 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.

¿Te animas con un nuevo hack?

Viendo como va a funcionar toda la nueva captación de datos. Te animas a proponer algún nuevo posible hack? (si lo haces acuerdate de indicar tu código entre etiquetas «<pre>»


2 respuestas a “Universal Analytics: Funcionamiento y Hacks para nuevo código de Google Analytics (analytics.js)”

  1. Hola Iñaki, muy buen post. Una duda, probaste trabajar GA Universal con Tag Manager?

    De ser así tus comentarios sobre el tema serían interesantes 🙂

    Un saludo desde Perú!

    • De momento no hay opción automática para incluirlo con GTM (incluso mucho de lo que indico a día de hoy aun no está documentado).

      Sin embargo es tan simple como crear un tag custom HTML en GTM y copiar lo mismo que pondrías en la web.

Responder a Carlo Rodriguez Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *