
Maintenant que vous savez segmenter votre trafic et vos visiteurs, je vous propose de revenir sur une notion que nous avons abordée lors de mon précédent billet : les « objets métiers ». Si comme beaucoup de ceux qui m'ont envoyé des mails — pourquoi tant de difficultés à laisser un commentaire ? Ne me dites pas que c'est à cause des liens en « nofollow » ;-) — vous avez implémenté la méthode que je vous proposais, vous avez déjà pu constater qu'utiliser cette notion permettait :
-
d'obtenir une vision décorrélée de l'aspect purement « technique » d'un réseau (URL, page, section,...) ;
-
de commencer à aborder l'activité des membres d'un réseau d'un point de vue fonctionnel ;
-
et surtout, d'offrir un « regard décalé » sur cette activité, une manière différente d'envisager votre réseau.
Pour mémoire, un objet métier est un élément fonctionnel avec lequel interagit le visiteur. Il permet de donner un sens à cette interaction et d'apporter une certaine visibilité sur l'intention du visiteur.
Pour reprendre l'exemple que j'avais précédemment employé : dans un forum, le visiteur manipule (création, suppression, commentaire, lecture,...) un objet que nous pouvons appeler une discussion. Il en va de même dans le forum d'un groupe : le visiteur manipule une discussion, pourtant nous sommes dans une section de type groupe. Ainsi, on peut en déduire que l'intention du visiteur était de participer, d'une manière ou d'une autre, à cette discussion et non « d'être » dans le groupe en question.
Sentir battre le pouls d'un réseau.
Pour tout vous avouer, depuis le jour où j'ai commencé à regarder l'activité du réseau Voile-RC par le prisme de ces objets métiers, j'accorde une importance beaucoup plus relative aux autres formes de statistiques. Prendre connaissance de ces objets et de l'interaction qui se produit entre ces objets et le visiteur, c'est un peu comme prendre le pouls de mon réseau. Cela me permet de « sentir » ce qui se passe sur le réseau. Connaitre les tendances, ce qui marche, ce qui ne marche pas,...
Malheureusement, si mettre en place une segmentation avancée permet de définir des indicateurs quantitatifs de l'utilisation de ces objets, cela n'est pas suffisant pour qualifier les interactions qui se produisent.
Ce que je vous propose ici est une méthode permettant de partir à la découverte de ces interactions et de comprendre enfin comment vos visiteurs utilisent votre réseau.
Méthodologie.
Dans l'arsenal d'outils que nous propose Google Analytics, un seul a la capacité à fournir les informations que nous cherchons à mesurer : les évènements.
Comme leur nom l'indique, les évènements permettent d'enregistrer des interactions ponctuelles entre l'utilisateur et le site web. Une collection d'évènements sur un objet permet donc de se faire une idée assez précise de la manipulation de cet objet.
La méthode utilisée ici consiste donc à associer à chaque action de l'utilisateur un évènement. Il faut pour cela plonger dans le code généré par Ning pour décrypter toutes les actions possibles sur un objet et y associer un envoi de données vers Google Analytics.
Déclenchement de l'envoi de données.
Si la collecte de données de segmentation présentée dans le précédent article est relativement simple, il n'en va pas de même, cette fois-ci, de l'envoi de données d'évènement. En effet, le déclenchement de l'envoi devant s'effectuer quand l'action réelle de l'utilisateur est avérée, il n'est plus possible de passer par un simple script s'exécutant au chargement de la page.
Pour pouvoir capturer toutes les actions effectuées sur un même objet (parfois sans changement de section ou page), il est nécessaire d'associer l'action (ce que fait l'utilisateur, par exemple en cliquant sur un bouton « publier ») au déclenchement de l'envoi de données (« dire » à Google Analytics ce que vient de faire l'utilisateur).
Pour réussir à faire cela, il faut écrire un script qui, lui, va s'exécuter juste quand la page sera totalement chargée et prête. Ce script aura pour objectif de modifier chacun des liens générant l'action en y ajoutant une petite fonction JavaScript permettant l'envoi de données vers Google Analytics. La plupart du temps, nous associerons ces fonctions aux events JavaScript suivant : onClick() et onSubmit().
Pour parcourir l'ensemble du source HTML et ainsi détecter les liens à « habiller » de cette petite fonction évènementielle, j'ai décidé d'utiliser JQuery qui me parait le plus adapté aux exigences de compacité du code (maximum 20000 caractères). Le début de ce nouveau script (à placer juste après les scripts de collecte et d'envoi de données de segmentation) est donc le suivant :
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js">
</script>
Notez que j'ai préféré charger la librairie JQuery directement depuis chez Google, mais vous avez désormais la possibilité d'héberger sur votre réseau tout ce qu'il faut grâce au nouveau gestionnaire de fichiers.
Vient ensuite la longue litanie de sélection de liens, formulaires ou boutons et des fonctions d'envoi de données qui doivent leur être associées. Nous réutilisons d'ailleurs les fonctions de détection d'objet et de groupe précédemment écrites.
<script type="text/javascript">
jQuery(document).ready(function(){ var businessObject = getBusinessObject();
var groupName = getGroupName();
jQuery("form[id*='comment_form']").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Ajout de commentaire',groupName]);
});
jQuery("form[id*='xg_profiles_chatterwall_post']").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Ajout de commentaire',groupName]);
});
jQuery("a.delete").bind('click',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Suppression de commentaire',groupName]);
});
jQuery("a.delete_link").bind('click',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Suppression de commentaire',groupName]);
});
jQuery("a.chatter-remove").bind('click',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Suppression de commentaire',groupName]);
});
jQuery("form[id*='add_group_form']").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Creation',groupName]);
});
jQuery("form[id*='add_topic_form']").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Creation',groupName]);
});
jQuery("form[id*='add_video_form']").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Creation',groupName]);
});
jQuery("form[id*='event_form']").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Creation',groupName]);
});
jQuery("form[id*='profile_form']").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Initialisation',groupName]);
});
jQuery("form[id*='add_photos_form']").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Creation',groupName]);
});
jQuery("a.xj_uploadStartButton").bind('click',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Creation',groupName]);
});
jQuery("input[id*='xj_uploadStartButton']").bind('click',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Creation',groupName]);
});
jQuery("input[id*='post_publish']").bind('click',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Creation',groupName]);
});
jQuery("input[id*='post_draft']").bind('click',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Brouillon',groupName]);
});
jQuery("input[id*='post_preview']").bind('click',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Apercu',groupName]);
});
jQuery("form[id*='xg_mail_compose']").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Envoi de message',groupName]);
});
jQuery("a.xg_sprite-feature-add").bind('click',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Mise a la une',groupName]);
});
jQuery("a.xg_sprite-feature-remove").bind('click',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Annulation de mise a la une',groupName]);
});
jQuery("a.xg_sprite-edit").bind('click',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Modification',groupName]);
});
jQuery("a.xg_sprite-discussion-close").bind('click',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Fermeture',groupName]);
});
jQuery("a.xg_sprite-add").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Creation',groupName]);
});
jQuery("a.xg_sprite-add").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Creation',groupName]);
});
jQuery("a.xg_sprite-add-small","div.xg_module_body").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Ajout de balise',groupName]);
});
jQuery("a.xg_sprite-close").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Suppression',groupName]);
});
jQuery("a.xg_sprite-delete").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Suppression',groupName]);
});
jQuery("a.xg_sprite-view").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Visualisation',groupName]);
});
jQuery("a.xg_sprite-share").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Partage',groupName]);
});
jQuery("a.post_to_twitter").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Partage Twitter',groupName]);
});
jQuery("a.post_to_facebook").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Partage FaceBook',groupName]);
});
jQuery("a.xg_sprite-flag").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Signalement',groupName]);
});
jQuery("a.xg_sprite-embed").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Incrustation',groupName]);
});
jQuery("a.xg_sprite-favorite-add").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Ajout aux favoris',groupName]);
});
jQuery("a.xg_sprite-view-fullsize").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Visualisation pleine taille',groupName]);
});
jQuery("a.xg_sprite-play").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Affichage diaporama',groupName]);
});
jQuery("a.xg_sprite-download").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Exportation iCal',groupName]);
});
jQuery("a.xg_sprite-friend-add").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Ajout comme ami',groupName]);
});
jQuery("a.xg_sprite-friend-remove").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Suppression comme ami',groupName]);
});
jQuery("a.xj_block_messages").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Blocage membre',groupName]);
});
jQuery("a.xj_unblock_messages").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Déblocage membre',groupName]);
});
jQuery("a.xg_sprite-check").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Signalement - autorisation',groupName]);
});
jQuery("a.xg_sprite-ban-member").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Bannissement du site',groupName]);
});
jQuery("a.ban_button").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Bannissement du groupe',groupName]);
});
jQuery("a.xg_sprite-profile-photo-reset").bind('submit',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Suppression avatar',groupName]);
});
jQuery("a.xg_sprite-friend").bind('click',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Gestion des amis',groupName]);
});
jQuery("a.xg_sprite-message").bind('click',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Envoi de message',groupName]);
});
jQuery("a.xg_sprite-message-reply").bind('click',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Reponse a message',groupName]);
});
jQuery("a.xg_sprite-message-reply-all").bind('click',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Reponse a message',groupName]);
});
jQuery("a.xg_sprite-message-forward").bind('click',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Transfert de message',groupName]);
});
jQuery("a.xg_sprite-folder").bind('click',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'(Des)Archivage de message',groupName]);
});
jQuery("a.xg_sprite-message-block").bind('click',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Blocage membre',groupName]);
});
jQuery("a.xg_sprite-message-unblock").bind('click',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Deblocage membre',groupName]);
});
jQuery("a.xg_icon-rss").bind('click',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Abonnement RSS',groupName]);
});
jQuery("a.xg_sprite-friend","div.account-links").bind('click',function(e){ _gaq.push(['_vrc._trackEvent','Profil','Gestion des amis',groupName]);
});
jQuery("a.xg_sprite-inbox","div.account-links").bind('click',function(e){ _gaq.push(['_vrc._trackEvent','Profil','Acces aux messages',groupName]);
});
jQuery("a.xg_sprite-setting","div.account-links").bind('click',function(e){ _gaq.push(['_vrc._trackEvent','Profil','Modification des parametres',groupName]);
});
jQuery("a[href*='http://']:not([href*='"+window.location.hostname+"'],[href*='api.ning.com'])").bind('click',function(e){ _gaq.push(['_vrc._trackEvent',businessObject,'Saut vers '+jQuery(this).context.hostname,jQuery(this).attr('href')]); });
});
</script>
Avec pour finir, je suis sûr que vous aurez noté cette cerise sur le gâteau, une fonction permettant de détecter le suivi d'un lien externe par le visiteur...
Utilisation des données d'évènements.
L'utilisation des données d'évènements dans Google Analytics est beaucoup plus simple (mais pas simpliste) que l'élaboration d'une segmentation avancée. Après quelques heures de collecte, vous commencerez à voir apparaitre ces données dans l'item Contenu / Suivi des évènements.

Comme vous le savez, les évènements pour Google Analytics peuvent être décomposés en catégories, actions, libellés et valeurs. J'ai décidé de modifier légèrement la sémantique de ces propriétés imbriquées pour qu'elles correspondent à ce que je voulais observer. Ainsi, les évènements générés par le script présenté ici se décomposent comme suit :
-
Catégorie : il s'agit ici du nom de l'objet métier concerné
-
Action : l'action sur cet objet métier. On pourra trouver des « Ajouts de commentaire », « Création », « Suppression », mais aussi des « Saut vers xxx » ou xxx est le domaine du lien externe suivi par l'utilisateur.
-
Libellé : il n'est utilisé que pour l'objet « Groupe » — auquel cas le libellé est le nom du groupe — et pour les actions « Saut vers xxx » — auquel cas le libellé est l'URL complète...
-
Valeur : j'ai décidé de ne pas utiliser cette notion, n'y voyant pas d'intérêt dans l'immédiat. Ceci dit, rien ne vous empêche de les utiliser en suivant les recommandations de Google à ce sujet.
Vous pouvez donc maintenant plonger dans vos évènements soit par les actions pour analyser de manière globale les interactions visiteur/réseau :

Soit par les catégories pour observer les interactions visiteur/objet :

Et vous pouvez bien sûr suivre vos liens sortants :

Comme pour la segmentation, je vous laisse le soin d'analyser, expliquer et vous projeter...
Les articles de la série :