Analítica web
Reflexiones sobre madurez digital, datos y tecnología

Seguimiento de múltiples dominios con Google Analytics

Se lee en 3 minutos

Seguramente gran parte de todos los que utilicéis una herramienta como Google Analytics habréis tenido que etiquetar un sitio Web con más de un dominio. Un ejemplo típico es una web de comercio electrónico con un carrito de la compra ya implementado por terceros y alojado bajo un dominio diferente.

Aunque si instalamos el mismo código de seguimiento en ambos dominios recibiremos datos en nuestra cuenta de Google Analytics, hay un problema: Los visitantes. En una implantación estándar de Google Analytics, un visitante que va de un dominio a otro es considerado como un visitante diferente en cada uno de ellos. Pero como para todo hay solución, Google Analytics nos ofrece la posibilidad de realizar el seguimiento de usuarios correctamente.

A priori no debería de ser muy complicado siguiendo los pasos indicados en la documentación oficial de Google Analytics:

var _gaq = _gaq || [];
_gaq.push(["_setAccount", "UA-12345-1"]);
_gaq.push(["_setAllowLinker", true]);
_gaq.push(["_setDomainName", ".example.com"]);
_gaq.push(["_setAllowHash", false]);

...
<a href="www.blog-hosting-service.com/myBlog"
onclick="_gaq.push(["_link", "www.blog-hosting-service.com/myBlog"]); return false;">View My Blog</a>
...
<form name="f" method="post" onsubmit="_gaq.push(["_linkByPost", this]);">

Como vemos, tan sólo tendríamos que añadir unas líneas específicas al código de seguimiento incluir las líneas correspondientes y después incluir en cada enlace/formulario entre dominios la sentencia pertinente (_link() o _linkByPost()).
Aquí está el problema. En numerosas ocasiones esto es un trabajo demasiado tedioso, o sin más, es prácticamente imposible (por ejemplo, si nuestra web se construye bajo un CMS poco flexible). Imaginaos un sitio con 4 o 5 dominios diferentes y 10 enlaces entre ellos en cada página. Puede parecer demasiado, pero en la realidad muchas webs tienen estas características.

¡Ayuda por favor!

Para que no tiréis la toalla con el seguimiento de múltiples dominios, os ofrecemos  una posibilidad que puede facilitaros muchísimo el trabajo. Se trata de fichero javascript (con ayuda de la librería JQuery, por tanto también debemos incluir esta librería) que realiza el seguimiento entre dominios de una manera automática. Además, se trata de un script de muy pocas líneas de código, con lo cual no demorará prácticamente la carga de la página.

var listDomains = ["www.dominio1.es","www.dominio2.com", "www.dominio3.org"];
var flag = false;
$(function(){
    $("a").click(function(){
        setLinkDomains($(this).attr("href"), "link");
        if(flag) return false;
    });
    $("form").submit(function(){
        setLinkDomains($(this).attr("action"), "form", this);
    });
});
function setLinkDomains(url, type, formObject){
    var domain = url.split("/")[2];
    if(window.location.hostname!=domain && jQuery.inArray(domain, listDomains)>-1){
        if(type == "link"){_gaq.push(["_link",url]); flag = true;}
        else if(type == "form"){_gaq.push(["_linkByPost",formObject]);}
    }
}

Explicamos su contenido a “grosso modo”. El script está dividido en 3 partes diferentes. La primera es un array en el que indicaremos los dominios entre los cuales se podrá mover el usuario en nuestro sitio.

La segunda parte se trata de una función que se ejecutará siempre que se haga clic en un enlace o en el botón de envío de un formulario. Ésta, a su vez se ayuda de la tercera y última  parte del script, que no es más que una simple función que hace lo siguiente: si el enlace pulsado dirige al usuario a un dominio que es diferente del actual y además se encuentra en la lista de dominios que señalamos anteriormente, enviamos la sentencia correspondiente de Google Analytics según sea un enlace o un botón de formulario (_link() o _linkByPost()) permitiendo el seguimiento de visitantes y visitas entre los dominios.

¿Y esto funciona?

¿Cómo podemos comprobar que el “trasvase” de información de un dominio a otro se realiza correctamente? Tendremos que mirar que el valor que recibe la cookie es igual en ambos dominios. ¿Y cómo hacemos esto? Muy fácil.

Para ello debemos abrir la ventana de cookies de nuestro navegador o utilizar alguna extensión del mismo que nos sirva para este fin. Aprovecho la ocasión para hablaros de un plug-in para el navegador Mozilla Firefox llamado “Firecookie”. Firecookie es una extensión para el archiconocido “Firebug”, que nos añade una columna más en la interfaz permitiéndonos visualizar de forma detallada las cookies de nuestro navegador (nombre, valor, fecha de expiración…), así como gestionarlas (eliminar, exportar, etc).

Además, siempre que se clique en cada uno de los enlaces entre dominios, para que hacer posible que las cookies sean iguales entre dominios, las funciones _link() y _linkByPost() enviarán la información pertinente como parámetros url de la siguiente manera:

http://www.dominio2.com/index.html?__utma=1.1314806970.1288866913.1288951103.1289208389.5&__utmb=1.2.10.1289208389&__utmc=1&__utmx=-&__utmz=1.1288866913.1.1.utmcsr=(direct)|utmccn=(direct)|
utmcmd=(none)&__utmv=-&__utmk=101774209

Fijaros que cuando el método _setAllowLinker toma valor true, al hacer el cambio de dominio también viaja con el resto de parámetros uno nuevo llamado _utmk. Este parámetro es una clave que asegura que las variables se establecen con el mismo valor en ambos dominios.

Espero que esta pequeña aportación pueda ayudar a todos aquellos que de vez en cuando tienen que “pelearse” con las limitaciones de su gestor de contenidos.

21 Comentarios

  1. Hola,
    me parece muy interesante este post.. pero estoy teniendo problemas con el hecho de que no se exactamente que codigo incluir en las paginas de los dos dominios

    esto seria correcto?

    var _gaq = _gaq || [];
    _gaq.push([‘_setAccount’, ‘UA-12345-1’]);
    _gaq.push([‘_setAllowLinker’, true]);
    _gaq.push([‘_setDomainName’, ‘.dominio1.com’]);
    _gaq.push([‘_setAllowHash’, false]);

    y en la otra pagina que esta en otro dominio que tengo que poner en el setDomainName.. dominio1 o dominio2?

    var _gaq = _gaq || [];
    _gaq.push([‘_setAccount’, ‘UA-12345-1’]);
    _gaq.push([‘_setAllowLinker’, true]);
    _gaq.push([‘_setDomainName’, ‘.dominio2.com’]);
    _gaq.push([‘_setAllowHash’, false]);

    muchas gracias!

  2. Hola David,

    muchas gracias por el interés y tu comentario.

    Respondiendo a tu pregunta, el ejemplo que pones es totalmente correcto. Sí, en la “segunda parte”, correspondiente al segundo dominio, debes poner ‘dominio2.com’ en la función setDomainName tal y como lo tienes.

    Si no vas a utilizar subdominios en el dominio 2, también podrías sustituir:

    _gaq.push([‘_setAllowLinker’, true]);
    _gaq.push([‘_setDomainName’, ‘.dominio2.com’]);
    _gaq.push([‘_setAllowHash’, false]);

    por

    _gaq.push([‘_setAllowLinker’, true]);
    _gaq.push([‘_setDomainName’, ‘none’]);

    pero como te digo, tal y como lo tienes debería funcionar perfecto.

    Gracias y saludos!

  3. Pingback: Seguimiento automático de múltiples dominios

  4. Consulta. Entiendo que el código posteado que soluciona el cross domain tracking está incompleto. Me podrán facilitar una versión en la que simplemente yo cambie el UA y lo pueda utilizar?

    Muchas gracias

  5. Hola Federico,

    Gracias por tu comentario.

    En realidad el script no está incompleto, lo que ocurre es que está explicado de un modo genérico y con datos de ejemplo.

    Me temo que no vamos a poder prepararte el script para que sólo tengas que cambiar el “UA”, porque necesitaríamos una serie de datos que desconocemos.

    No obstante, el script lo podrías reutilizar en un 95% tal y como está, pero requeriría de una adaptación mínima a las características de tu sitio web. Me explico:

    * Tendrías que sustituir la lista de dominios de ejemplo que hemos puesto en la variable “listDomains” por la lista con tus propios dominios: var listDomains = [‘www.dominio1.es’,’www.dominio2.com’, ‘www.dominio3.org’];

    * Tanto en la línea “$(‘a’).click(function(){” como en esta otra “$(‘form’).submit(function(){” podrías intentar personalizar el acceso a los enlaces/formularios (vía JQuery) para adaptarlos a los de tu sitio web (normalmente por “id” o “class”).

    En definitiva, el script lo puedes copiar y pegar tal y como está, pero luego tendrás que aplicarle unos mínimos cambios para adaptarlo al código y dominios de tu website. Puedes pedirle ayuda a alguno de tus compañeros del equipo de desarrollo, que en cuanto lo vea comprenderá los cambios que debe aplicar.

    Esperamos que te sirva de ayuda.

    Un saludo!

  6. Hola, lo primero daros la enhorabuena por vuestro artículo. Aprovecho para plantearos una duda que me ha surgido a partir de una pregunta que me hacían sobre el tema del cruce de dominios. ¿Qué pasaría si alguien coge nuestro UA y lo pega en su página web?¿Recibiría el tráfico que se produce en nuestro dominio?¿Recibiremos nosotros el suyo con una configuración estándar? Y la pregunta del millón… Si esto sucediera, ¿cómo podríamos evitarlo?¿Filtros?¿Modificación del código?

    La verdad es que me hicieron la consulta y no supe qué responder.

    Muchas gracias y un saludo!!

    Sergio

  7. Buenos días Sergio,

    gracias por tu comentario. Pues puede suceder que alguien coge nuestro UA y lo pega en su página web (ya hemos visto casos…) pero por suerte esto tiene una solución muy fácil.

    Tan sólo tendríamos que incluir un filtro en nuestro/s perfil/es para que se incluya sólo tráfico proveniente de nuestro dominio o dominios.

    En resumen: si nuestro sitio web es “www.dominio.com” y creamos un filtro de inclusión en el que el host contenga “dominio.com” (sería una expresión regular en este ejemplo).

    Espero haberte ayudado.

    Saludos!

  8. Hola, muchas gracias por la información y por el sitio, soy bastante nuevo en esto, por eso queria consultarles, tengo una pregunta similar a la primera, pero ya paso un tiempo, quiza cambio el codigo :S

    tengo estos dos codigos (tomando el ejemplo de la primera pregunta)

    tengo dos dominios dominio1.com y dominio2.com

    //este es el codigo de dominio1.com

    var _gaq = _gaq || [];
    _gaq.push([‘_setAccount’, ‘UA-12345-1’]);
    _gaq.push([‘_setAllowLinker’, true]);
    _gaq.push([‘_setDomainName’, ‘.dominio1.com’]);
    _gaq.push([‘_setAllowHash’, false]);

    //este es el codigo de dominio2.com

    //estaria bien si uso la misma cuenta? UA-12345-1 para ambos, seria correcto?
    // no tendria que poner _gaq.push([‘_setDomainName’, ‘.dominio1.com’]); ?
    // de esta forma estaria bien?

    var _gaq = _gaq || [];
    _gaq.push([‘_setAccount’, ‘UA-12345-1’]);
    _gaq.push([‘_setAllowLinker’, true]);
    _gaq.push([‘_setAllowHash’, false]);

    Muhcas Gracias, espero que me puedan responder, gracias!

  9. Estimado,

    Muy interesantes y claras las respuestas y post aqui.

    Estoy casi comenzando con Analytics, y al probar el setup asincrónico de Analytics entre dos dominios diferentes (el mismo que indican en el Help), y hacer el setup correcto entre sus links, me sucede que en reporte de Analytics del primer dominio, en su sección de Contenidos, NO me aparecen las páginas navegadas en el otro dominio.

    En mi caso eso si, en cada dominio tengo un número Analytics (UA-xxxx-x) diferente, ya que el segundo dominio no me pertenece.

    Agradeceré su valiosa ayuda en esto.

    Saludos,
    Aldo Gilardino

  10. Hola Marcelo, Aldo,

    gracias por vuestros comentarios. Respecto a lo que me preguntáis, os comento:

    Marcelo: Debes utilizar la misma cuenta, ya que si no, no tiene sentido el realizar este tipo de seguimiento entre dominios. Date cuenta que se realiza así para que no se contabilice un nuevo usuario/visita al cambiar de dominio y ésto sólo tendría sentido si hablamos del mismo perfil.

    Como dices, el código ha cambiado un poco (ya no hace falta el allowHash) pero básicamente sería lo mismo. Tendrías que poner:

    Dominio 1:

    var _gaq = _gaq || [];
    _gaq.push([‘_setAccount’, ‘UA-12345-1’]);
    _gaq.push([‘_setAllowLinker’, true]);
    _gaq.push([‘_setDomainName’, ‘.dominio1.com’]);

    Dominio 2:

    var _gaq = _gaq || [];
    _gaq.push([‘_setAccount’, ‘UA-12345-1’]);
    _gaq.push([‘_setAllowLinker’, true]);
    _gaq.push([‘_setDomainName’, ‘.dominio2.com’]);

    Además, este código te permite trackear tanto los dominios principales como sus subdominios.

    Aldo: Respecto a tu pregunta, no puedes ver los datos ya que, como le comentaba a Marcelo, este código sólo tiene sentido si hablamos del mismo perfil (mismo UA-XXX). De hecho, sirve para que no se dupliquen los datos de usuario/visita para el perfil en concreto.

    Espero haberos ayudado!

  11. hola, me inhabilitaron una googlesite y cree otra, pero quiero que el analytic que me marcaba en la anterior sea el mismo para el sitio que hice ahora.
    Se podrá hacer eso? podrían ayudarme?
    Mil gracias

  12. Hola Sonia,

    si tienes acceso a Google Analytics donde se podían ver los datos de tu otro site, simplemente podrías utilizar el UA-XXXX-YY que ya estabas utilizando.

    Además, una buena práctica podría ser crear un perfil nuevo específico para tu nuevo sitio donde tengas los datos nuevos sin estar mezclados con los antiguos.

    Espero haberte ayudado.

    Saludos!

  13. Tengo 2 preguntas:
    1) Dónde ubicamos el script de jquery? Debajo del GATC?
    2) En mi caso particular tengo una web con un dominioA pero que si accedes a una parte de la web el dominioA redirecciona a dominioB con lo que, de momento tengo el setallowlinker(true) pero no controlado el tema de _link o _linkByPost, me está contando 2 sesiones diferentes. Además se añade que la web está en inglés y castellano. El script sirve para mi caso en particular?
    gracias por el post!

  14. Buenos días Xavi,

    En primer lugar, muchas gracias por el comentario. Respecto a tus preguntas, te comento:

    1) Para un correcto funcionamiento, lo mejor sería incluir la llamada al script (puedes incluir el trozo de código en un script aparte) lo más arriba posible en tu HTML (en el header, por ejemplo) para asegurarte de que se carga antes de que se haga una llamada. No obstante, como el click tiene carácter asíncrónico y suele estar todo cargado en el DOM una vez se produce, es probable que no tengas problema si lo incluyes un poco más abajo (en el body).

    2) A priori con la situación que comentas y, siguiendo las instrucciones de Google no deberías de tener problema. Aunque ten en cuenta que también influyen otros factores como la antigüedad del navegador, JavaScript activado, etc.

    Espero que te sirva de ayuda.

    Saludos!

  15. Una pregunta, Jorge, ¿te funciona también en internet explorer?

    Yo estoy haciendo algo similar, pero para IE7 no funciona 🙁

  16. Uy, me corrijo a mi mismo.
    No era un problema de ese código exactamente, sino de otro que me cargaba jquery dinámicamente y fallaba el puñetero IE al revisar el estado de la carga del script.
    Pero ampliándolo como pone aquí me valió perfectamente:
    http://unixpapa.com/js/dyna.html

    But in fact, states may be skipped. In my experience with IE 7, you get either a loaded event or a completed event, but not both. It may have something to do with whether you are loading from cache or not but there seem to be other factors that influence which events you get. Sometimes I get loading or interactive events too, and sometimes I don’t. It’s possible the test should be “this.readyState == ‘loaded’ || this.readyState == ‘complete'”, but that risks triggering twice.

  17. Hola Rafa,

    gracias por tu comentario. Veo que ya te has corregido a tí mismo 🙂

    La verdad es que es muy útil tu aportación, lo tendremos en cuenta si nos vemos en una situación parecida. Gracias!

    No dudes en consultarnos para cualquier duda que te pueda surgir.

    Saludos,

  18. Hola Jorge,
    Me guardo tu post en mis favoritos (con mayúscula), tengo un par de dudas, que ocurre para dos dominios con el mismo código de analytics pongo en la segunda parte en SetDomainName el nombre del primer dominio (el que considero el principal)? Ejemplo:
    var _gaq = _gaq || [];
    _gaq.push([‘_setAccount’, ‘UA-12345-1’]);
    _gaq.push([‘_setAllowLinker’, true]);
    _gaq.push([‘_setDomainName’, ‘.dominio1.com’]);
    _gaq.push([‘_setAllowHash’, false]);

    _________________________

    var _gaq = _gaq || [];
    _gaq.push([‘_setAccount’, ‘UA-12345-1’]);
    _gaq.push([‘_setAllowLinker’, true]);
    _gaq.push([‘_setDomainName’, ‘.dominio1.com’]);
    _gaq.push([‘_setAllowHash’, false]);

    Y otra duda, qué ocurre si al segundo le pongo “none”? Ejemplo:
    var _gaq = _gaq || [];
    _gaq.push([‘_setAccount’, ‘UA-12345-1’]);
    _gaq.push([‘_setAllowLinker’, true]);
    _gaq.push([‘_setDomainName’, ‘.dominio1.com’]);
    _gaq.push([‘_setAllowHash’, false]);

    _____________________________
    var _gaq = _gaq || [];
    _gaq.push([‘_setAccount’, ‘UA-12345-1’]);
    _gaq.push([‘_setAllowLinker’, true]);
    _gaq.push([‘_setDomainName’, ‘none’]);
    _gaq.push([‘_setAllowHash’, false]);

    Muchas gracias de antemano!

    Saludos,

    Laura

  19. Hola Laura,

    muchas gracias por tu comentario. Espero que te sea útil toda la información que encuentres en el blog 🙂

    Lo más correcto es utilizar lo siguiente (recuerda que el AllowHash ya no es necesario a partir de una de las actualizaciones de Google):

    var _gaq = _gaq || [];
    _gaq.push([‘_setAccount’, ‘UA-12345-1’]);
    _gaq.push([‘_setAllowLinker’, true]);
    _gaq.push([‘_setDomainName’, ‘.dominio1.com’]);

    Dominio 2:

    var _gaq = _gaq || [];
    _gaq.push([‘_setAccount’, ‘UA-12345-1’]);
    _gaq.push([‘_setAllowLinker’, true]);
    _gaq.push([‘_setDomainName’, ‘.dominio2.com’]);

    La primera opción que comentas: _gaq.push([‘_setDomainName’, ‘.dominio1.com’]); sería incorrecto ya que el dominio2 no enviaría nada al no corresponderse con el propio dominio provocandose error.

    Respecto a la segunda opción, aunque si bien es cierto que Google en un inicio albergaba la posibilidad de utilizar el ‘none’, no lo recomendamos. De hecho, si te fijas, no se encuentra esta opción en la documentación oficial.

    Espero haberte ayudado.

    Gracias y saludos!

  20. Claudio Espinoza Responder

    Estimado, Que pasa cuando tienes 2 dominios y un único código fuente?

    Tengo mis 2 dominios apuntando al mismo servidor y quiero tener las métricas cuando la gente ingrese por uno u otro dominio.

    Muchas gracias por la info!

    • Irene Ferreira Responder

      Hola Claudio, lo primero, muchas gracias por tu comentario 🙂

      Si el código fuente es el mismo, entiendo que un usuario no tiene posibilidad de ir de un sitio a otro no? En ese caso sería necesario algún tipo de enlace, que imagino que no hay, ya que comentas que solo hay un fuente. ¿nos das algo más de info?

      En todo caso, la forma en la que Google traza el cross domain, ha cambiado bastante, te recomiendo seguir este enlace del soporte:

      https://developers.google.com/analytics/devguides/collection/analyticsjs/linker?hl=es-419

      Espero haberte ayudado,
      Un saludo!

Responder a Claudio Espinoza Cancelar el comentario

10 + 2 =

Navegar