Wednesday, June 12, 2013

Intégration de Google Analytics avec LimeLight

Il est déjà possible d'intégrer Google Analytics dans LimeLight. Malheureusement, cette intégration pose un problème. LimeLight utilise son propre set de cookie et sauvegarde ceux-ci sur le domaine (s.delveplayer.com) et non pas votre domaine. Du coup, si vous tentez de mesurer l'impact de vos campagnes sur l'écoute de vos vidéos dans cette plateforme, vous n'aurez rien (les source/medium des ces events ne seront pas les mêmes que ceux de la visite réelle.)

Cependant, en utilisant l'API JavaScript de LimeLight, il est possible de contourner ce problème.



Voici un bout de code qui permet de mesurer ce qui suit :
  • buffering
  • playing
  • pausing
  • 10, 30, 50, 70 90 % du vidéo écouté
  • complete

De plus, si un autre vidéo est parti dans le même player (via le channel ou une autre action) ou si la fenêtre est fermée, je tente d'indiquer à quel pourcentage nous étions rendu.
window.onbeforeunload = function() { 
  if (gaLimeLightState != '' && gaLimeLightState != 'complete') {
    _gaq.push(['_trackEvent', 'LimeLight video', 'mediaTitle="' + gaLimeLightMediaTitle +'" mediaId="' + gaLimeLightMediaID + '"', '' + Math.round(gaLimeLightPlayTimeInMillis / gaLimeLightDuration * 100)]);
  }
};


Pour finir, si un erreur ce produit, je l'indique à Google Analytics.
function doOnError(e) {
  _gaq.push(['_trackEvent', 'LimeLight video', 'mediaTitle="' + gaLimeLightMediaTitle +'" mediaId="' + gaLimeLightMediaID + '"', 'errorMessage="' + e.message + '"', 0, true]);
}

Friday, March 2, 2012

Lancement de mon nouveau site

Lancement de mon nouveau site de photographie - http://un-photographe-de-montreal.com/.

Consultez mes services, vous pouvez maintenant acheter mes photos, soit uniqument l'image (que vous faites encadrer vous même) ou déjà encadrer.

Wednesday, January 18, 2012

Track KISSInsights (now Qualaroo) surveys with Google Analytics

[UPDATE - January, 19th 2012] I update the code so it is compatible with all question type.
[UPDATE - January, 25th 2012] I fix two bug. 1) Now the GA event is fire. 2) surveyId extraction is cleaner.
[UPDATE - February, 23th 2012] Added some screenshot from Google Analytics
[UPDATE - August, 16th 2012] More complete code

For a while, I searched a way to track KISSInsights with Google Analytics (GA). I wished to use the GA _trackEvent tag to capture the actual question/answer.
Here the code (using jQuery):
  1. Load Google Analytics. Make sure you use your UA.
  2. Load KISSInsights (now Qualaroo). Make sure you use your survey code.
  3. Check if jQuery is available, if not, load it
  4. Link Qualaroo with Goolge Analytics
Basically, this code is trigger when a user submit his answer. It will create a _trackEvent tag for each question/answer(s) pair. The beauty of the code is that it fetch the actual text value automatically and save it in a readable way into GA.

  • Event category: Always VOC (you can change it to any thing you like.)
  • Event action: The actual survey id (so if you have multiple survey running at the same time, each one would be save separately in GA.)
  • Event label: "Question text | Answer(s) text"
Doing so, I could then create segments and custom reports in Google Analytcs base on that Voice of Customer (VoC) data.
For example:
  • Which traffic source yield better satisfaction?
  • Does satisfaction impact goal completion rate?
  • Does satisfaction impact frequency/recency of visitor?

Here a example on how to create a custom report in Google Analytics to categorize outcome base on survey answer.
And here a example directly from the Google Analytics Events report.
Enjoy and feel free to let me know/share if you like :-)
[UPDATE - January, 20th 2012] You could easily modify the tracking to use an alternate version. Your choice.
if (question && anwser) _gaq.push(['_trackEvent', 'VOC-' + surveyId, question, anwser]);
  • Event category: VOC-surveyID (so if you have multiple survey running at the same time, each one would be save separately in GA.)
  • Event action: Question text
  • Event label: Answer(s) text


Saturday, February 5, 2011

How to use jQuery to automate page tagging

Hello,

Here a jQuery script to help you tag your pages. Here, I use Coremetrics Event tagging, but you could also easily modify this script to use Google Analytics or any other web analytics solution.

Basicly, this script scan the page for find link that must be tagged (as define in tagList array). If the link already contain a event tag, this link is skipped. Coremetrics have a system to initiate event tag, so once the tagging is added to the onclick and onkeypress DOM event, the event is then initiated once.

// Licensed under the GPL Version 2 licenses.
try {
  // Make sure JQuery doesn't conflict with other JavaScript libraries. (Should be use just after the libraries declaration.)
  jQuery.noConflict();
  
  // Array containing conversion event tag information.
  //   - URL to look for. (See note)
  //   - Conversion event name.
  //   - Conversion event categories name.
  //   - Conversion event point when initialized.
  //   - Conversion event point when completed.
  // Note: The order in the array is important.
  // For example, don't put "/stores/" before "/stores/locator.html".
  var tagList = [
    ['/contact-us/', 'Contact us', 'Call-to-action', '0', '10'],
    ['/online-application/', 'Apply online', 'Call-to-action', '0', '100']
  ];

  // List the detected tags that must be initiated.
  var tagDetected = [];

  // Check for link that need to be tagged. Make sure is not already tagged.
  jQuery(document).ready(function(){
    jQuery("a:not([onclick*='cmCreateConversionEventTag'])").each(function(index) {
      if (this.href != '') {
        var i = findConversionLink(this.href);
        if (i != -1) {
          // Check if that tag have been already detected (so we won't initialize the same tags multiple time.)
          if (jQuery.inArray(i, tagDetected) == -1) {
             tagDetected.push(i);
          }
        }
      }
    });

    // Founded some tag that need to be initiated?
    if (tagDetected.length > 0) {
      for (var i = 0; i < tagDetected.length; i++) {
        for (var j = 0; j < tagList.length; j++) {
          if (j == tagDetected[i]) {
              cmCreateConversionEventTag(tagList[j][1], "1", tagList[j][2], tagList[j][3]);
          }
        }
      }
    }

    // Add the conversion event tag to the onlick and onkeypress event of the link (if not already present)
    jQuery("a:not([onclick*='cmCreateConversionEventTag'])").live('click keypress', function() {
      var i = findConversionLink(this.href);
      if (i != -1) {
        cmCreateConversionEventTag(tagList[i][1], "2", tagList[j][2], tagList[i][4]);
      }
    });
  });

  // Check if a URL exsit in the array.  If so, return "first" founded index.
  // This is why we need to put "/stores/locator.html" before "/stores/" in the tagList array.
  function findConversionLink (a_sURL) {
    for (var i = 0; i < tagList.length; i++) {
      if (a_sURL.indexOf(tagList[i][0]) != -1) {
        return i;
      }
    }
    return -1;
  }

}
catch (err) {
  // Do nothing.
}

Let me know if you found this script useful.

Wednesday, February 2, 2011

Taggage automatique de liens d'événement avec jQuery

Imaginons que vous devez tagger un site de 20 000 pages et devez ajouter des tags d'évènemet sur celles-ci. Que de travail.

Voici un bout de code en jQuery que j'ai developper pour m'aider à faire exactement ça. Ici, le taggage est effectué avec Coremetrics, mais il serait très facile de modifer ce code pour n'importe quel autres tags.

// Licensed under the GPL Version 2 licenses.
try {
  // Make sure JQuery doesn't conflict with other JavaScript libraries. (Should be use just after the libraries declaration.)
  jQuery.noConflict();
  
  // Array containing conversion event tag information.
  //   - URL to look for. (See note)
  //   - Conversion event name.
  //   - Conversion event categories name.
  //   - Conversion event point when initialized.
  //   - Conversion event point when completed.
  // Note: The order in the array is important.
  // For example, don't put "/stores/" before "/stores/locator.html".
  var tagList = [
    ['/contact-us/', 'Contact us', 'Call-to-action', '0', '10'],
    ['/online-application/', 'Apply online', 'Call-to-action', '0', '100']
  ];

  // List the detected tags that must be initiated.
  var tagDetected = [];

  // Check for link that need to be tagged. Make sure is not already tagged.
  jQuery(document).ready(function(){
    jQuery("a:not([onclick*='cmCreateConversionEventTag'])").each(function(index) {
      if (this.href != '') {
        var i = findConversionLink(this.href);
        if (i != -1) {
          // Check if that tag have been already detected (so we won't initialize the same tags multiple time.)
          if (jQuery.inArray(i, tagDetected) == -1) {
             tagDetected.push(i);
          }
        }
      }
    });

    // Founded some tag that need to be initiated?
    if (tagDetected.length > 0) {
      for (var i = 0; i < tagDetected.length; i++) {
        for (var j = 0; j < tagList.length; j++) {
          if (j == tagDetected[i]) {
              cmCreateConversionEventTag(tagList[j][1], "1", tagList[j][2], tagList[j][3]);
          }
        }
      }
    }

    // Add the conversion event tag to the onlick and onkeypress event of the link (if not already present)
    jQuery("a:not([onclick*='cmCreateConversionEventTag'])").live('click keypress', function() {
      var i = findConversionLink(this.href);
      if (i != -1) {
        cmCreateConversionEventTag(tagList[i][1], "2", tagList[j][2], tagList[i][4]);
      }
    });
  });

  // Check if a URL exsit in the array.  If so, return "first" founded index.
  // This is why we need to put "/stores/locator.html" before "/stores/" in the tagList array.
  function findConversionLink (a_sURL) {
    for (var i = 0; i < tagList.length; i++) {
      if (a_sURL.indexOf(tagList[i][0]) != -1) {
        return i;
      }
    }
    return -1;
  }

}
catch (err) {
  // Do nothing.
}

Ce javascript inspecte chacun des liens dans une page et vérifie si celui-ci ne contient pas déjà un tag d'évènements mais devrais en contenir un. Si il en trouve, il l'ajoute au onclick et au onkeypress et initialise celui-ci ensuite.

Amusez-vous bien et laisser moi savoir ce que vous en pensez.

Friday, July 9, 2010

Profit net et analyse web

Mon billet d'aujourd'hui est inspiré d'un article d'Avinash Kaushik

Retour aux bases

D'abord, un petit retour aux bases des "affaires". L'objectifs des entreprises est d'augmenter ses profits nets. Ceux-ci sont calculés de la manière suivante : la marge de profit x le volume vendu. La marge de profit correspond aux profits moins les coûts et le volume peut être défini de la manière suivante, part de marché x la taille du marché. Assez simple.







Nous avons donc 4 dimensions sur lesquelles jouer. Les stratégies d'affaires doivent tourner autour de ces 4 points centraux. L'optimisation d'une seul de ces 4 dimensions aura un impact positif sur les profits nets.


Stratégies

Profit
  • Somme-nous compétitifs (prix et qualité de service)?
  • Offrons-nous des incitatifs financiers (rabais) pour pousser les gens vers les canaux les plus rentables?

Coût
  • Le coût unitaire est variable selon les canaux. Un produit acheté en ligne de manière autonome nous coûte moins cher qu'un produit acheté en magasin (réseau physique).
  • Optimiser nos campagnes marketing afin d'avoir la même performance avec un canal marketing pour une fraction du prix d'un autre (achat de mots-clés vs bannières par exemple). Bref, diminuer le coût d'acquisition.
  • Peut-ont améliorer nos processus pour les rendre plus efficaces?

Notre part de marché
  • Notre part de marché au Québec est très grande, peut-on l'élargir encore? L'apparition du virtuel va t'il faire disparaître notre plus gros avantage? (présence physique Au-Lac-À-la-Tortue par exemple)
  • Pouvons-nous cibler des gens ailleurs (via Facebook, Twitter, etc)
  • Augmentation de la satisfaction de nos clients (un client satisfait reviendra acheter, nous n'aurons pas à augmenter notre budget marketing pour aller chercher de nouveaux clients afin de remplacer cette business.)

Taille du marché
  • Notre marché est surtout au Québec. Qu'en est-il de nos offensives hors-Québec? Peut-on mesurer celles-ci?
  • Création de nouveaux produits/services.


Et l'analyse web dans tout ça?

Le rôle d'un analyste web est de mesurer et optimiser le canal web. Pour ce faire, nous nous mesurons à des objectifs d'affaires en lien avec les 4 dimensions nommées précédemment.

Par exemple :

Profit : Est-ce que le volume de vente généré par un rabais, éclipse le coût de celui-ci? (A/B testing de l'offre, 5% de rabais VS 10% de rabais, etc)
Coût : Calculer les coûts d'acquisition par canal. (achat de mots-clés VS bannières VS programmes affiliés)
Part de marché : Analyse de la part de marché dans les engins de recherche (SEO et PPC)
Taille du marché : Évaluation des performances des canaux sociaux (Facebook, Twitter, etc.)

Voila pourquoi il est important d'avoir des objectifs d'affaires précis et mesurables. Une fois ces objectifs identifiés, des indicateurs y correspondant doivent être suivis et utilisés par les bonnes personnes. La prise de décision s'en trouvera simplifiée.

Et vous, qu'en pensez-vous?

Thursday, June 24, 2010

Petite série sur Facebook

J'ai créer 4 petits billets concernant Facebook.


  1. Comment créer une page personnalisé dans votre Fan page Facebook

  2. Faites de la promotion directement dans Facebook

  3. Facebook Insights (le prochain Google Analytics?)

  4. Le nouveau Facebook Insights



Bonne lecture :-)

Faites de la promotion directement dans Facebook

Le modèle publicitaire de Facebook est CPC, un peu comme Google AdWords (il est aussi possible d'utiliser un modèle CPM, mais je le déconseilles.)




Étant sociaux, Facebook permet la création de promos qui cibles les gens selon leurs intérêts, localisation, études, démographie, etc. Donc, trafic hautement qualifié selon la campagne. Ce trafic peut être dirigé sur une fans page ou sur votre site principale (n'oubliez pas de mettre des codes de campagnes.)




N'essayer pas que votre trafic cible viennent à votre rencontre, allez à la rencontre de celui-ci.

Comment créer une page personnalisé dans votre Fan page Facebook

Si vous avez une fan page Facebook, il est possible d'y créer une page (onglet) entièrement personnalisé.







Pour ce faire, vous devrez utiliser une "application de page" appelé Static FBML. Il est possible d'inclure des tags HTML et des tags FBML. Le FBML est un peu comme le HTML mais permet de faire des trucs plus spécifique à Facebook, comme contrôler une partie de la page selon le type de visiteurs (fan VS non-fan, 18 ans et plus ou non, etc).




Veuillez noter que certaines restrictions s'appliquent. Par exemple, il est possible d'y inclure du Flash et du JavaScript, mais un intervention par le visiteur est nécessaire pour que le tout débute (habituellement un clic.) Par exemple, si vous ajouter un bandeau Flash, l'internaute devra cliquer sur une image avant de pouvoir afficher celui-ci (à la place de l'image.)

Le nouveau Facebook Insights

Facebook à créer une nouvelle version (encore beta) de son outil d'analyse web Insights. Cette nouvelle mouture est plus facile à lire visuellement et offre maintenant la possibilités de connaitre le nombre de page vues pour une page spécifique, ce qui n'est pas possible dans la version actuel (voir mon billet précédent.)

Encore une fois, pour les curieux, voici une capture d'écran.