Convertir cookies de Google Analytics Local / Session de stockage
-
12-10-2019 - |
Question
UPDATE http://jsfiddle.net/musicisair/rsKtp/embedded/result/
Google Analytics définit 4 les cookies qui seront envoyés à toutes les demandes à ce domaine (et Ofset ses sous-domaines). D'après ce que je peux dire aucun serveur les utilise en fait directement ; ils sont envoyés uniquement avec __utm.gif
comme param de requête.
Maintenant, il est évident lit Google Analytics, écrit et agit sur leurs valeurs et ils devront être disponibles pour le script de suivi GA.
Alors, ce que je me demande est s'il est possible de:
- réécrire les cookies
__utm*
sur le stockage local aprèsga.js
leur a écrit - les supprimer après
ga.js
a couru - récrire les cookies de retour de stockage local sous forme de biscuits juste avant
ga.js
les lit - recommencer
Ou, Patch singe ga.js
à utiliser le stockage local avant qu'il ne commence le cookie de lecture / écriture partie.
Il est évident que si nous allons si loin de la façon de supprimer les cookies de __utm*
nous voudrons aussi utiliser la variante Async de Google Analytics.
Je devine que le vote était bas parce que je ne l'ai pas poser une question. DOH!
Mes questions sont les suivantes:
Peut-il être fait comme décrit ci-dessus?
Si oui, pourquoi ne l'a pas été fait?
J'ai un modèle de HTML/CSS/JS
par défaut boilerplate qui passe YSlow, PageSpeed, et la vérification de Chrome avec des scores presque parfait. Je suis vraiment un moyen de presser les cookies restants octets de Google Analytics dans les navigateurs qui prennent en charge le stockage local.
La solution
Utilisez ceci:
(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');
Tout d'abord, je vérifie si localStorage
est pris en charge. Si elle est prise en charge alors l'option 'storage': 'none'
désactive les cookies. Maintenant, nous pouvons régler le clientId de localStorage. Si elle est vide, Google Analytics généreront un nouveau pour nous. Nous sauvegardons le nouveau (ou existant) clientid dans localStorage après le chargement tracker.
Si localStorage
est pas pris en charge, je viens d'utiliser la méthode d'analyse régulière. Après l'initialisation j'envoyer un pageView via ga('send', 'pageView')
.
En outre, consultez cette Plunk: http://plnkr.co/MwH6xwGK00u3CFOTzepK
Autres conseils
Quelques essais en chrome montre qu'il peut être possible d'utiliser des accesseurs de correctif document.cookie
pour cela, quelque chose comme:
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 (ou tout autre javascript) pourrait fonctionner et les cookies d'accès comme d'habitude, ils ne seraient jamais être transmis au serveur.
Il est évident que cela ne fonctionnera que dans certains navigateurs. Browsers où il ne fonctionne pas devra retomber aux cookies normaux.
Il y a quelques idées liées à cette question: Est-il possible à document.cookie maquette en JavaScript?
Oui il peut être fait. Il vous suffit de demander au __utm.gif
avec les paramètres. Le reste des données est juste utilisé pour garder une trace de la source, l'heure de début de session et / ou des visites précédentes.
Vous pouvez facilement transférer les biscuits dans les deux sens, de sorte que votre première approche devrait fonctionner correctement.
Si votre deuxième approche fonctionne ... pas sûr. Je ne sais pas le code ga.js
assez de bon pour estimer wheter qui serait ou ne serait pas facilement possible.
Il y a aussi une troisième option, exécutez votre propre version de ga.js
. Vous n'êtes pas obligé d'utiliser la version Google.
Peut-on faire comme décrit ci-dessus? Oui
Pourquoi pas été fait?
- les cookies sont de petits, il n'y a pas beaucoup d'avantages si vous utilisez des domaines pour cookieless tout votre contenu statique
- il est moins pratique car beaucoup de navigateurs ne supportent pas encore