16

ACTUALIZACIÓN http://jsfiddle.net/musicisair/rsKtp/embedded/result/Convierte cookies de Google Analytics en Local/Sesión de almacenamiento


Google Analytics instala 4 galletas que serán enviados con todas las peticiones a ese dominio (y Ofset sus subdominios). Por lo que puedo decir, ningún servidor realmente los usa directamente; solo se envían con __utm.gif como parámetro de consulta.

Ahora, obviamente, Google Analytics lee, escribe y actúa sobre sus valores y que tendrán que estar a disposición de la secuencia de comandos de seguimiento GA.

Por lo tanto, lo que me pregunto es si es posible:

  • reescribir la __utm* cookies para almacenamiento local después de ga.js ellos ha escrito
  • eliminarlos después ga.js ha corrido
  • reescribir las galletas DESDE el almacenamiento local a la forma de cookie justo antes de ga.js, los lee
  • comienza de nuevo

O parche mono ga.js de usar almacenamiento local antes de que comience la parte de lectura/escritura de la galleta.

Obviamente, si nos estamos yendo tan lejos del camino para eliminar las cookies __utm*, también querremos utilizar la variante Async de Analytics.

Supongo que el voto negativo fue porque no hice una pregunta. DOH!

Mis preguntas son:
¿Se puede hacer como se describe arriba?
Si es así, ¿por qué no se ha hecho?


que tienen una plantilla por defecto repetitivo HTML/CSS/JS que pasa YSlow, Page Speed ​​y Auditoría de Chrome con las puntuaciones perfecto en la zona. Realmente estoy buscando una forma de exprimir los bytes de cookies restantes de Google Analytics en los navegadores compatibles con el almacenamiento local.

+1

1 para el caso descrito bien – Wolph

+0

@WoLpH acordó ... – Webnet

+0

Esto parece una muy buena idea. Un caso de uso en el que puedo pensar es si tiene un proxy inverso/CDN frente a su sitio que retrocede (extracción de origen) si la página no es estática. Tal proxy puede ver una cookie única y, por lo tanto, extraer desde el origen, en lugar de usar la copia en caché de la página que ya tiene. – rjmunro

Respuesta

16

Utilice esta:

(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 
})(window,document,'script','//www.google-analytics.com/analytics.js','ga'); 

if(window.localStorage) { 
    ga('create', 'UA-98765432-1', 'www.example.com', { 
     'storage': 'none' 
     , 'clientId': window.localStorage.getItem('ga_clientId') 
    }); 
    ga(function(tracker) { 
     window.localStorage.setItem('ga_clientId', tracker.get('clientId')); 
    }); 
} 
else { 
    ga('create', 'UA-98765432-1', 'www.example.com'); 
} 
ga('send', 'pageview'); 

En primer lugar, comprobar si es compatible localStorage. Si es compatible, la opción 'storage': 'none' desactivará las cookies. Ahora podemos establecer el ID de cliente de localStorage. Si está vacío, Google Analytics generará uno nuevo para nosotros. Guardamos el clientid nuevo (o existente) en localStorage después de que se cargue el rastreador.

Si localStorage no es compatible, solo uso el método de análisis normal. Después de la inicialización, envío un pageView a través del ga('send', 'pageView').

Además, echa un vistazo a este golpe seco: http://plnkr.co/MwH6xwGK00u3CFOTzepK

+2

Buen trabajo. Para la mayoría de los casos, primero deseará realizar una prueba de características para localStorage (quizás utilizando Modernizr, volviendo al almacenamiento de cookies si no existe. –

+0

¿Podría explicarnos cuál es el propósito de este código? ¿Hay algún problema con las cookies de GA? ? –

+0

Lea más sobre esto aquí: http: // jsfiddle.net/musicisair/rsKtp/embedded/result/ –

0

Sí se puede hacer. Solo tiene que solicitar el __utm.gif con los parámetros. El resto de los datos se utilizan para realizar un seguimiento de la fuente, la hora de inicio de la sesión y/o visitas anteriores.

Puede transferir fácilmente las cookies en ambos sentidos, por lo que su primer enfoque debería funcionar bien.

Si su segundo enfoque funciona ... no estoy seguro. No conozco el código ga.js lo suficientemente bueno para estimar si eso sería o no sería posible.

También hay una tercera opción, ejecutar su propia versión de ga.js. No es necesario que use la versión de Google.

¿Se puede hacer como se describe arriba?

¿Por qué no se ha hecho?

  1. las galletas son pequeñas, no hay mucho beneficio si se utiliza dominios sin cookies para todo su contenido estático
  2. es menos conveniente ya que muchos de los navegadores no soportan todavía
2

cierta experimentación en cromo muestra que puede ser posible utilizar métodos get y set para parchear document.cookie para esto, algo como:

document.__defineGetter__('cookie', function() { 
    // Replace this with code to read from localstorage 
    return "hello"; 
}); 
document.__defineSetter__('cookie', function (value) { 
    // Replace this with code to save to localstorage 
    console.log(value); 
}); 

ga.js (o cualquier otro javascript) podría ejecutar y acceder a las cookies de forma normal, simplemente nunca pasarían al servidor.

Obviamente, esto solo funcionará en algunos navegadores. Los navegadores en los que no funciona tendrán que recurrir a las cookies normales.

Hay algunas ideas relacionadas en esta pregunta: Is it possible to mock document.cookie in JavaScript?

Cuestiones relacionadas