17 Oct 2018
Seguimiento de enlaces externos con Google Tag Manager
Lectura: 9 mins.

Seguimiento de enlaces externos con Google Tag Manager: el método sencillo

Si quieres ir directamente a la solución y saltarte la explicación previa, aquí la tienes. ¡Ay, que ansias! 😝
LINKS!
LINKS!

El seguimiento de clics en enlaces externos o outbound links es probablemente la acción no trivial a medir más común, popular y masivamente implementada en un setup de analítica web.

Desde el mismo momento en que se sobrepasa el umbral de la instalación más básica de Google Analytics —el código de seguimiento de cortapega y las visitas a páginas— y se empiezan a considerar otras interacciones del usuario a medir, esta aparece entre las primeras necesidades o recomendaciones casi inmediatamente. Es fácil ver por qué: no solo los puntos de salida de un sitio web son información potencialmente interesante casi universalmente, sino que los clics en esos enlaces de salida son la última oportunidad de medirlos antes de que el usuario abandone nuestros dominios y entre en otros sobre los que no tenemos control… ni posibilidad ya de saber dónde han ido ni si se han ido siquiera. 😯

Por ello, es normal que este sea un tema muy habitual en artículos y tutoriales. Prácticamente cualquier documentación o formación sobre Analytics y especialmente sobre Tag Manager incluirá en algún punto este ejemplo como uno de los primeros ejercicios o aplicaciones prácticas. Sí, nosotros tampoco nos libramos. Pantallazos, chuletas, descargables, lo que haga falta.

Y también es normal que Google Tag Manager, en una de esas actualizaciones de tapadillo que hace de vez en cuando, lo haya considerado suficientemente importante como para proporcionarnos una nueva forma de medirlos más sencilla aún que la habitual. Si lo que te interesa es saber cómo, aquí puedes ir directamente a la solución. Si no tienes tanta prisa, ¡sigue leyendo!

¿Y qué tiene de malo la de siempre?

Vale, pregunta trampa. Si tú, hipotética persona humana lectora, realmente te acabas de preguntar exactamente esto, palabras exactas “la de siempre” incluidas, probablemente ya conoces la respuesta. Pero usted sígame la corriente y continúe leyendo, oiga. 🤭

Cómo medir clics en enlaces externos con Google Tag Manager: ‘La De Siempre’ edition

Si ya disponemos de Google Tag Manager en nuestro sitio web, medir los enlaces externos es relativamente sencillo. Bastará con crear la etiqueta de Evento de Google Analytics correspondiente con los datos de evento que queramos enviar, por ejemplo:

Ejemplo etiqueta GA enlaces externos
Tal que así.

Y crear para ella un activador que detecte automáticamente clics en enlaces…

Activador enlaces externos clásico

… con condiciones adicionales para que, de entre todos los enlaces, solo detecte aquellos que vayan fuera. O lo que es lo mismo en la mayoría de casos (multidominios, multisites y otras multicosas quedan fuera del ejemplo para no extendernos demasiado), que el URL de destino del enlace vaya a un dominio o nombre de host distinto al nuestro.

Hay muchas formas de hacerlo, por ejemplo, comparando directamente el URL de destino normalmente ya disponible en la variable predefinida {{Click URL}}:

Activador enlaces externos clásico - Condición

U otra más específica, acotando previamente el hostname en una variable separada, para evitar posibles errores en la comparación.

Variable Click Hostname

Pero esto tiene un pequeño inconveniente: aunque es fácil de implementar, hay que configurarlo siempre a mano y a medida para cada web e instalación. No tenemos de salida la opción de crear un activador “genérico” que podamos luego exportar e importar fácilmente o que siga funcionando si la web cambia de dominio.

¿Por qué? Es fácil comparar el URL con un valor fijo (el hostname de nuestro sitio concreto), pero no tanto con un valor dinámico (“el hostname actual”), dado que las condiciones de los triggers permiten utilizar {{Variables}} en uno de los lados de las comparaciones, pero no en el otro.

no, no funciona
La idea no es mala…
ni lo intenteis
… pero no, no va a funcionar.

Puede parecer una tontería —y en la mayoría de casos lo será—, pero el hecho de que no podamos abstraerlo, ni siquiera sacarlo fuera a una variable de configuración tipo Constant, además de importunar a los más maniáticos, nos podría acabar llevando a errores: no vale duplicar/importar un contenedor donde tengamos esto ya resuelto sin modificarlo posteriormente, se convierte en otra cosa a revisar si hacemos una migración, etc.

Por supuesto, podemos arreglarlo y obtener una solución más genérica y reutilizable con un poco más de trabajo, por ejemplo, utilizando una tabla de consulta que sí nos permite comparar con variables.

Enlaces externos - deteccion alternativa via tabla

O por supuesto, con Javascript a medida.

Enlaces externos - deteccion alternativa via javascript

Pero entonces ya estamos perdiendo la simplicidad inicial y abriendo la puerta a otros posibles errores.

¡Básta de cháchara! ¡Me has convencido! ¡Ilumíname, oh, gurú de cosas escandalosamente simples semiescondidas en un desplegable que podrías haber explicado en un par de minutos!

¿De verdad he gastado un H3 en esto? Bueno, vale, ya va…

Cómo medir clics en enlaces externos con Google Tag Manager: ‘The 2018 Way’

Para ello, Tag Manager ha añadido un tipo de variable que nos dice específicamente (valores true/false) si el URL de destino del elemento actual —normalmente, un enlace clicado— es externo.

Bastará crear una variable de tipo Variable de evento automático o Auto-event Variable, ahí seleccionar el atributo URL de elemento o Element URL y, de entre las opciones disponibles, la de Vínculo saliente o Is Outbound:

Variable para enlaces externos - base

Opcionalmente, también podemos incluir en el campo Dominios afiliados o Affiliated Domains una lista de hostnames, separada por comas, que sean los que expresamente no queramos considerar como externos. Esto solo será necesario en el caso de un seguimiento multidominio —en el que el setup de analítica abarca varios dominios y no queremos considerar los enlaces entre ellos como externos— o en otros casos concretos en los que queramos excluir determinados destinos. NO es necesario poner nada si solo hay un dominio principal, en general, si se deja en blanco la comprobación la hará con el dominio actual.

Variable para enlaces externos - otros dominios

Una vez creada, esta nueva variable nos devolverá el valor true si el elemento actual (el directamente afectado por el evento en curso: clic en un enlace, envío de formulario…) tiene un URL de destino asociado y este corresponde a un dominio externo (distinto del actual y distinto de los indicados en el campo Dominios afiliados).

En cualquier otro caso —incluidos aquellos donde no proceda, por ejemplo, eventos o elementos sin un URL de destino válido— devuelve el valor false.

Así, solo quedará utilizar la nueva variable en el activador correspondiente:

Activador enlaces externos clásico

Y añadirlo a la etiqueta de evento de Analytics o de cualquier otro servicio al que queramos informar:

Ejemplo etiqueta GA enlaces externos
Sí, es la misma imagen de antes, dejadme en paz.

¡Listo! Si esto es todo lo que necesitabas, ya puedes dejar de leer. Gracias por su atención, haga scroll hacia abajo, deje un comentario con algo como, pongamos, “Maravilloso! Este post me ha cambiado la vida! Gracias mil, Aitor!” y salga ordenadamente por el —adecuadamente medido, claro— enlace externo más cercano 😁.

Si, por el contrario, quieres saber un poco más sobre como funciona internamente este nuevo tipo de variable (y, sobre todo, en que casos exactos devuelve true o false), sigue leyendo.

¿Cómo funciona exactamente ‘Is Outbound’?

Después de experimentar un poco con la variable para ver como se comporta exactamente y detectar posibles gotchas y casos raros, estas son las conclusiones:

  • Siempre devuelve true o false, incluso en los casos en los que no tenga sentido consultarla (en caso de duda, en general, devuelve false). Por tanto, se pueden hacer comparaciones directas de forma segura, sin preocuparse por otros posibles valores como vacío, null o undefined.
  • Funciona con formularios, además de con enlaces (según el campo action o destino del form).
  • NO funcionará (devolverá siempre false) con falsos enlaces, como botones con onclick="...", formularios no estándar, redirecciones Javascript, etc. En general, valdrá cualquier evento/elemento siempre que devuelva correctamente un {{Click URL}} o {{Form URL}} válidos. En cualquier otro caso, devolverá siempre false.
  • Devuelve siempre false para enlaces que no sean http:// o https:// como mailto:, tel:, ftp:, etc.
  • No tiene en cuenta cambios de http:// a https:// y viceversa. Un enlace de http://ejemplo.com/tal a https://ejemplo.com/cual no contará como externo y devuelve false.
  • No tiene en cuenta “www.” al principio del dominio. Un enlace entre ejemplo.com y www.ejemplo.com los considerará como el mismo hostname y devuelve false. Esto incluye el campo Dominios afiliados, en el que, de hecho, las www se ignoran por completo: lo mismo da poner www.dominio.com que dominio.com
  • No cuenta subdominios como dominios externos. Un enlace de https://aukera.es/ a https://ogt.aukera.es/ devuelve false.
  • Si pensabais que no iba a incluir una referencia de estas...
    Se nos pone farruco, el link
  • ¡Ojo! En el caso de los dominios del campo Dominios afiliados, las comprobaciones se hacen mediante match parcial por la derecha, de forma similar a, por ejemplo, la exclusión de referencias en Analytics. ¿Qué significa esto? Pues que si incluimos destino.com en la lista, entonces cualquier enlace que vaya a:
    • www.destino.com
    • subdominio.destino.com
    • estonotienenadaquevercondestino.com 😓

    … lo contará como interno y devolverá false. ¡Cuidado con esto!

Esto último es un problema que nos puede resultar familiar, dado que tambien ocurre en otros campos de seguimiento multidominio.

Curiosamente, en este caso hay un pequeño truco que nos permite evitarlo, así que lo dejo como consejo antes de terminar:

En el ejemplo anterior, si en el campo Dominios Afiliados ponemos www.destino.com en vez de destino.com, actuará igual (ya que ignora los www, eso ya lo sabemos) pero ya solo coge destino.com y posibles subdominios, no coincidencias parciales tipo clandestino.com.

¡Esperamos que os sea útil!