May 24, 2012




     GAS - Google Analytics
          on Steroids
                       Eduardo Cereto Carvalho



www.CardinalPath.com   © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.    1
May 24, 2012



            Implementing GA is
                easy, right?




www.CardinalPath.com   © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.    2
May 24, 2012



          What the basic
     implementation gives you?
      • One pageview every time a page loads
      • That doesn’t seem a lot but with just that
          GA can calculate everything you see on the
          reports




www.CardinalPath.com   © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.    3
May 24, 2012




          What else could you
                want?
      • E-commerce
      • Custom Vars
      • Page Interactions                     ⃪ Events




www.CardinalPath.com   © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.    4
May 24, 2012




www.CardinalPath.com   © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.    5
May 24, 2012




                                                                 L
                                                      I
                                         A
                             F


www.CardinalPath.com   © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.    5
May 24, 2012


    How to implement Event
          Tracking?




www.CardinalPath.com   © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.    6
May 24, 2012


    How to implement Event
          Tracking?
  <a href="#" onClick="_gaq.push(['_trackEvent', 'Videos',
  'Play', 'Baby's First Birthday']);">Play</a>




www.CardinalPath.com   © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.    6
May 24, 2012


    How to implement Event
          Tracking?
  <a href="#" onClick="_gaq.push(['_trackEvent', 'Videos',
  'Play', 'Baby's First Birthday']);">Play</a>




www.CardinalPath.com   © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.    6
May 24, 2012


      How to implement Event
            Tracking?
   <a href="#" onClick="_gaq.push(['_trackEvent', 'Videos',
   'Play', 'Baby's First Birthday']);">Play</a>




From: https://developers.google.com/analytics/devguides/collection/gajs/eventTrackerGuide


www.CardinalPath.com        © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.    6
May 24, 2012


          The documentation is not
                  perfect
      • There’s so much more you can do with
          events,Video usage is just one small example;
      • The docs are just examples, you should
          never implement events like that in the real
          world;
      • Videos don’t even have a play button most of
          the time.You probably use a player like
          youtube.

www.CardinalPath.com   © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.    7
May 24, 2012



                   What is GAS
               https://github.com/CardinalPath/gas
 •   A library to help you implement GA
 •   Implement a lot of events so you don’t have to
 •   Open Source
 •   Tested on large deployments
 •   Easy to get involved
 •   Regular bug-fixes and new features
 •   Spoiler: I’m the main developer

www.CardinalPath.com   © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.    8
May 24, 2012



     What GAS gives you for free?
     •   Outbound links
     •   Web Form usage
     •   Download links
     •   Video Usage
         •   Youtube
         •   Vimeo
         •   HTML5 <video />
     •   Email: links usage
     •   Scroll percentage


www.CardinalPath.com   © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.    9
May 24, 2012


         Just upload gas.js and
     implement GAS instead of GA
    <script type="text/javascript">
    var _gas = _gas || [];
    _gas.push(['_setAccount', 'UA-YYYYYY-Y']); // REPLACE WITH YOUR GA NUMBER
    _gas.push(['_setDomainName', '.mydomain.com']); // REPLACE WITH YOUR DOMAIN
    _gas.push(['_trackPageview']);
    _gas.push(['_gasTrackForms']);
    _gas.push(['_gasTrackOutboundLinks']);
    _gas.push(['_gasTrackMaxScroll']);
    _gas.push(['_gasTrackDownloads']);
    _gas.push(['_gasTrackYoutube']);
    _gas.push(['_gasTrackVimeo']);
    _gas.push(['_gasTrackMailto']);

    (function() {
    var ga = document.createElement('script');
    ga.type = 'text/javascript';
    ga.async = true;
    ga.src = '/gas.js';
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(ga, s);
    })();
    </script>




www.CardinalPath.com          © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.   10
May 24, 2012


         Just upload gas.js and
     implement GAS instead of GA
    <script type="text/javascript">
    var _gas = _gas || [];
    _gas.push(['_setAccount', 'UA-YYYYYY-Y']); // REPLACE WITH YOUR GA NUMBER
    _gas.push(['_setDomainName', '.mydomain.com']); // REPLACE WITH YOUR DOMAIN
    _gas.push(['_trackPageview']);
    _gas.push(['_gasTrackForms']);
    _gas.push(['_gasTrackOutboundLinks']);
    _gas.push(['_gasTrackMaxScroll']);
    _gas.push(['_gasTrackDownloads']);
    _gas.push(['_gasTrackYoutube']);
    _gas.push(['_gasTrackVimeo']);
    _gas.push(['_gasTrackMailto']);

    (function() {
    var ga = document.createElement('script');
    ga.type = 'text/javascript';
    ga.async = true;
    ga.src = '/gas.js';
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(ga, s);
    })();
    </script>




www.CardinalPath.com          © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.   10
May 24, 2012




www.CardinalPath.com   © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.   11
May 24, 2012




                                                            s s
                                               c e
                                   u c
                            S


www.CardinalPath.com   © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.   11
May 24, 2012

     Events are multidimensional. So
      you can drill-down into them




www.CardinalPath.com   © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.   12
May 24, 2012

     Events are multidimensional. So
      you can drill-down into them




www.CardinalPath.com   © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.   12
May 24, 2012

     Events are multidimensional. So
      you can drill-down into them




www.CardinalPath.com   © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.   12
May 24, 2012

     Events are multidimensional. So
      you can drill-down into them




www.CardinalPath.com   © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.   12
May 24, 2012



      Videos are even cooler




www.CardinalPath.com   © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.   13
May 24, 2012



      Videos are even cooler




www.CardinalPath.com   © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.   13
May 24, 2012



      Videos are even cooler




www.CardinalPath.com   © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.   13
May 24, 2012



    What do you do if your site has
          multiple domains?




www.CardinalPath.com   © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.   14
May 24, 2012



      What do you do if your site has
            multiple domains?
<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-XXXXX-X']);
  _gaq.push(['_setDomainName', 'mysite.com']);
  _gaq.push(['_setAllowLinker', true]);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/
ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>




www.CardinalPath.com              © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.   14
May 24, 2012



      What do you do if your site has
            multiple domains?
<script type="text/javascript">
  <script type="text/javascript">
  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-XXXXX-X']);
    var _gaq = _gaq || [];
  _gaq.push(['_setDomainName', 'mysite.com']);
    _gaq.push(['_setAccount', 'UA-XXXXX-X']);
  _gaq.push(['_setAllowLinker', true]);
    _gaq.push(['_setDomainName', 'myothersite.com']);
  _gaq.push(['_trackPageview']);
    _gaq.push(['_setAllowLinker', true]);
    _gaq.push(['_trackPageview']);
  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    (function() {
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/
      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.js';
      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  ga.js';
  })();
      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    })();
</script>
  </script>




www.CardinalPath.com              © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.   14
May 24, 2012



      What do you do if your site has
            multiple domains?
<script type="text/javascript">
  <script type="text/javascript">
  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-XXXXX-X']);
    var _gaq = _gaq || [];
  _gaq.push(['_setDomainName', 'mysite.com']);
    <a href="http://www.myothersite.com/intro"
    _gaq.push(['_setAccount', 'UA-XXXXX-X']);
  _gaq.push(['_setAllowLinker', true]);
    onclick="_gaq.push(['_link', 'http://www.myothersite.com/intro.html']); return false;">See my blog</a>
    _gaq.push(['_setDomainName', 'myothersite.com']);
  _gaq.push(['_trackPageview']);
    _gaq.push(['_setAllowLinker', true]);
    _gaq.push(['_trackPageview']);
  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    (function() {
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/
      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.js';
      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  ga.js';
  })();
      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    })();
</script>
  </script>




www.CardinalPath.com              © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.   14
May 24, 2012



      What do you do if your site has
            multiple domains?
<script type="text/javascript">
  <script type="text/javascript">
  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-XXXXX-X']);
    var _gaq = _gaq || [];
  _gaq.push(['_setDomainName', 'mysite.com']);
    <a href="http://www.myothersite.com/intro"
    _gaq.push(['_setAccount', 'UA-XXXXX-X']);
  _gaq.push(['_setAllowLinker', true]);
    onclick="_gaq.push(['_link', 'http://www.myothersite.com/intro.html']); return false;">See my blog</a>
      <a href="http://www.mysite.com/"
    _gaq.push(['_setDomainName', 'myothersite.com']);
  _gaq.push(['_trackPageview']);
      onclick="_gaq.push(['_link', 'http://www.mysite.com/']); return false;">Go back to my site</a>
    _gaq.push(['_setAllowLinker', true]);
    _gaq.push(['_trackPageview']);
  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    (function() {
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/
      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.js';
      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  ga.js';
  })();
      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    })();
</script>
  </script>




www.CardinalPath.com              © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.   14
May 24, 2012



      What do you do if your site has
            multiple domains?
<script type="text/javascript">
  <script type="text/javascript">
  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-XXXXX-X']);
    var _gaq = _gaq || [];
  _gaq.push(['_setDomainName', 'mysite.com']);
    <a href="http://www.myothersite.com/intro"
    _gaq.push(['_setAccount', 'UA-XXXXX-X']);
  _gaq.push(['_setAllowLinker', true]);
    onclick="_gaq.push(['_link', 'http://www.myothersite.com/intro.html']); return false;">See my blog</a>
      <a href="http://www.mysite.com/"
    _gaq.push(['_setDomainName', 'myothersite.com']);
  _gaq.push(['_trackPageview']);
      onclick="_gaq.push(['_link', 'http://www.mysite.com/']); return false;">Go back to my site</a>
    _gaq.push(['_setAllowLinker', true]);
         <form name="f" method="post" onsubmit="_gaq.push(['_linkByPost', this]);">
    _gaq.push(['_trackPageview']);
  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    (function() {
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/
      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.js';
      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  ga.js';
  })();
      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    })();
</script>
  </script>




www.CardinalPath.com              © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.   14
May 24, 2012



      What do you do if your site has
            multiple domains?
<script type="text/javascript">
  <script type="text/javascript">




                                                                           L
  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-XXXXX-X']);
    var _gaq = _gaq || [];




                                                                I
  _gaq.push(['_setDomainName', 'mysite.com']);
    <a href="http://www.myothersite.com/intro"
    _gaq.push(['_setAccount', 'UA-XXXXX-X']);
  _gaq.push(['_setAllowLinker', true]);
    onclick="_gaq.push(['_link', 'http://www.myothersite.com/intro.html']); return false;">See my blog</a>
      <a href="http://www.mysite.com/"
    _gaq.push(['_setDomainName', 'myothersite.com']);
  _gaq.push(['_trackPageview']);
      onclick="_gaq.push(['_link', 'http://www.mysite.com/']); return false;">Go back to my site</a>
    _gaq.push(['_setAllowLinker', true]);




                                                   A
         <form name="f" method="post" onsubmit="_gaq.push(['_linkByPost', this]);">
    _gaq.push(['_trackPageview']);
  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;




                                       F
    (function() {
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/
      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.js';
      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  ga.js';
  })();
      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    })();
</script>
  </script>




www.CardinalPath.com              © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.   14
May 24, 2012



     How to do it with GAS?

                _gas.push(['_setAccount', 'UA-XXXXX-1']);
                _gas.push(['_setAllowLinker', true]);
                _gas.push(['_setDomainName', 'mysite.com']);
                _gas.push(['_setDomainName', 'myothersite.com']);
                _gas.push(['_gasMultiDomain', 'click']);
                _gas.push(['_trackPageview']);




www.CardinalPath.com   © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.   15
May 24, 2012



     How to do it with GAS?

                _gas.push(['_setAccount', 'UA-XXXXX-1']);

                                                            s s
                                                 e
                _gas.push(['_setAllowLinker', true]);


                                               c
                _gas.push(['_setDomainName', 'mysite.com']);



                                     c
                _gas.push(['_setDomainName', 'myothersite.com']);



                                   u
                _gas.push(['_gasMultiDomain', 'click']);



                            S
                _gas.push(['_trackPageview']);




www.CardinalPath.com   © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.   15
May 24, 2012



    GAS can do a lot more for you

      • You can extend GAS by adding plugins
      • GAS helps you if you need to use
          _setAllowAnchor(true)
      • GAS fixes bad formatted events for you
      • GAS helps you if you want to send data to
          multiple accounts at the same time


www.CardinalPath.com   © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.   16
May 24, 2012



      What else can you expect from
           GAS in the future

      • Support for more video players
      • Support for tracking social widgets usage
      • More customization options if you are a
          developer



www.CardinalPath.com   © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.   17
May 24, 2012




             https://github.com/CardinalPath/gas




    Eduardo Cereto Carvalho
    @eduardocereto
    ecereto@cardinalpath.com

www.CardinalPath.com   © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential.   18

GAS - Google Analytics on Steroids

  • 1.
    May 24, 2012 GAS - Google Analytics on Steroids Eduardo Cereto Carvalho www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 1
  • 2.
    May 24, 2012 Implementing GA is easy, right? www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 2
  • 3.
    May 24, 2012 What the basic implementation gives you? • One pageview every time a page loads • That doesn’t seem a lot but with just that GA can calculate everything you see on the reports www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 3
  • 4.
    May 24, 2012 What else could you want? • E-commerce • Custom Vars • Page Interactions ⃪ Events www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 4
  • 5.
    May 24, 2012 www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 5
  • 6.
    May 24, 2012 L I A F www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 5
  • 7.
    May 24, 2012 How to implement Event Tracking? www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 6
  • 8.
    May 24, 2012 How to implement Event Tracking? <a href="#" onClick="_gaq.push(['_trackEvent', 'Videos', 'Play', 'Baby's First Birthday']);">Play</a> www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 6
  • 9.
    May 24, 2012 How to implement Event Tracking? <a href="#" onClick="_gaq.push(['_trackEvent', 'Videos', 'Play', 'Baby's First Birthday']);">Play</a> www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 6
  • 10.
    May 24, 2012 How to implement Event Tracking? <a href="#" onClick="_gaq.push(['_trackEvent', 'Videos', 'Play', 'Baby's First Birthday']);">Play</a> From: https://developers.google.com/analytics/devguides/collection/gajs/eventTrackerGuide www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 6
  • 11.
    May 24, 2012 The documentation is not perfect • There’s so much more you can do with events,Video usage is just one small example; • The docs are just examples, you should never implement events like that in the real world; • Videos don’t even have a play button most of the time.You probably use a player like youtube. www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 7
  • 12.
    May 24, 2012 What is GAS https://github.com/CardinalPath/gas • A library to help you implement GA • Implement a lot of events so you don’t have to • Open Source • Tested on large deployments • Easy to get involved • Regular bug-fixes and new features • Spoiler: I’m the main developer www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 8
  • 13.
    May 24, 2012 What GAS gives you for free? • Outbound links • Web Form usage • Download links • Video Usage • Youtube • Vimeo • HTML5 <video /> • Email: links usage • Scroll percentage www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 9
  • 14.
    May 24, 2012 Just upload gas.js and implement GAS instead of GA <script type="text/javascript"> var _gas = _gas || []; _gas.push(['_setAccount', 'UA-YYYYYY-Y']); // REPLACE WITH YOUR GA NUMBER _gas.push(['_setDomainName', '.mydomain.com']); // REPLACE WITH YOUR DOMAIN _gas.push(['_trackPageview']); _gas.push(['_gasTrackForms']); _gas.push(['_gasTrackOutboundLinks']); _gas.push(['_gasTrackMaxScroll']); _gas.push(['_gasTrackDownloads']); _gas.push(['_gasTrackYoutube']); _gas.push(['_gasTrackVimeo']); _gas.push(['_gasTrackMailto']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = '/gas.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 10
  • 15.
    May 24, 2012 Just upload gas.js and implement GAS instead of GA <script type="text/javascript"> var _gas = _gas || []; _gas.push(['_setAccount', 'UA-YYYYYY-Y']); // REPLACE WITH YOUR GA NUMBER _gas.push(['_setDomainName', '.mydomain.com']); // REPLACE WITH YOUR DOMAIN _gas.push(['_trackPageview']); _gas.push(['_gasTrackForms']); _gas.push(['_gasTrackOutboundLinks']); _gas.push(['_gasTrackMaxScroll']); _gas.push(['_gasTrackDownloads']); _gas.push(['_gasTrackYoutube']); _gas.push(['_gasTrackVimeo']); _gas.push(['_gasTrackMailto']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = '/gas.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 10
  • 16.
    May 24, 2012 www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 11
  • 17.
    May 24, 2012 s s c e u c S www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 11
  • 18.
    May 24, 2012 Events are multidimensional. So you can drill-down into them www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 12
  • 19.
    May 24, 2012 Events are multidimensional. So you can drill-down into them www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 12
  • 20.
    May 24, 2012 Events are multidimensional. So you can drill-down into them www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 12
  • 21.
    May 24, 2012 Events are multidimensional. So you can drill-down into them www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 12
  • 22.
    May 24, 2012 Videos are even cooler www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 13
  • 23.
    May 24, 2012 Videos are even cooler www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 13
  • 24.
    May 24, 2012 Videos are even cooler www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 13
  • 25.
    May 24, 2012 What do you do if your site has multiple domains? www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 14
  • 26.
    May 24, 2012 What do you do if your site has multiple domains? <script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-XXXXX-X']); _gaq.push(['_setDomainName', 'mysite.com']); _gaq.push(['_setAllowLinker', true]); _gaq.push(['_trackPageview']);   (function() {     var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;     ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ ga.js';     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);   })(); </script> www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 14
  • 27.
    May 24, 2012 What do you do if your site has multiple domains? <script type="text/javascript"> <script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-XXXXX-X']); var _gaq = _gaq || []; _gaq.push(['_setDomainName', 'mysite.com']); _gaq.push(['_setAccount', 'UA-XXXXX-X']); _gaq.push(['_setAllowLinker', true]); _gaq.push(['_setDomainName', 'myothersite.com']); _gaq.push(['_trackPageview']); _gaq.push(['_setAllowLinker', true]); _gaq.push(['_trackPageview']);   (function() {     var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;   (function() {     ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/     var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.js';     ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); ga.js';   })();     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);   })(); </script> </script> www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 14
  • 28.
    May 24, 2012 What do you do if your site has multiple domains? <script type="text/javascript"> <script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-XXXXX-X']); var _gaq = _gaq || []; _gaq.push(['_setDomainName', 'mysite.com']); <a href="http://www.myothersite.com/intro" _gaq.push(['_setAccount', 'UA-XXXXX-X']); _gaq.push(['_setAllowLinker', true]); onclick="_gaq.push(['_link', 'http://www.myothersite.com/intro.html']); return false;">See my blog</a> _gaq.push(['_setDomainName', 'myothersite.com']); _gaq.push(['_trackPageview']); _gaq.push(['_setAllowLinker', true]); _gaq.push(['_trackPageview']);   (function() {     var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;   (function() {     ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/     var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.js';     ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); ga.js';   })();     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);   })(); </script> </script> www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 14
  • 29.
    May 24, 2012 What do you do if your site has multiple domains? <script type="text/javascript"> <script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-XXXXX-X']); var _gaq = _gaq || []; _gaq.push(['_setDomainName', 'mysite.com']); <a href="http://www.myothersite.com/intro" _gaq.push(['_setAccount', 'UA-XXXXX-X']); _gaq.push(['_setAllowLinker', true]); onclick="_gaq.push(['_link', 'http://www.myothersite.com/intro.html']); return false;">See my blog</a> <a href="http://www.mysite.com/" _gaq.push(['_setDomainName', 'myothersite.com']); _gaq.push(['_trackPageview']); onclick="_gaq.push(['_link', 'http://www.mysite.com/']); return false;">Go back to my site</a> _gaq.push(['_setAllowLinker', true]); _gaq.push(['_trackPageview']);   (function() {     var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;   (function() {     ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/     var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.js';     ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); ga.js';   })();     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);   })(); </script> </script> www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 14
  • 30.
    May 24, 2012 What do you do if your site has multiple domains? <script type="text/javascript"> <script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-XXXXX-X']); var _gaq = _gaq || []; _gaq.push(['_setDomainName', 'mysite.com']); <a href="http://www.myothersite.com/intro" _gaq.push(['_setAccount', 'UA-XXXXX-X']); _gaq.push(['_setAllowLinker', true]); onclick="_gaq.push(['_link', 'http://www.myothersite.com/intro.html']); return false;">See my blog</a> <a href="http://www.mysite.com/" _gaq.push(['_setDomainName', 'myothersite.com']); _gaq.push(['_trackPageview']); onclick="_gaq.push(['_link', 'http://www.mysite.com/']); return false;">Go back to my site</a> _gaq.push(['_setAllowLinker', true]); <form name="f" method="post" onsubmit="_gaq.push(['_linkByPost', this]);"> _gaq.push(['_trackPageview']);   (function() {     var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;   (function() {     ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/     var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.js';     ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); ga.js';   })();     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);   })(); </script> </script> www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 14
  • 31.
    May 24, 2012 What do you do if your site has multiple domains? <script type="text/javascript"> <script type="text/javascript"> L var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-XXXXX-X']); var _gaq = _gaq || []; I _gaq.push(['_setDomainName', 'mysite.com']); <a href="http://www.myothersite.com/intro" _gaq.push(['_setAccount', 'UA-XXXXX-X']); _gaq.push(['_setAllowLinker', true]); onclick="_gaq.push(['_link', 'http://www.myothersite.com/intro.html']); return false;">See my blog</a> <a href="http://www.mysite.com/" _gaq.push(['_setDomainName', 'myothersite.com']); _gaq.push(['_trackPageview']); onclick="_gaq.push(['_link', 'http://www.mysite.com/']); return false;">Go back to my site</a> _gaq.push(['_setAllowLinker', true]); A <form name="f" method="post" onsubmit="_gaq.push(['_linkByPost', this]);"> _gaq.push(['_trackPageview']);   (function() {     var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; F   (function() {     ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/     var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.js';     ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); ga.js';   })();     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);   })(); </script> </script> www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 14
  • 32.
    May 24, 2012 How to do it with GAS? _gas.push(['_setAccount', 'UA-XXXXX-1']); _gas.push(['_setAllowLinker', true]); _gas.push(['_setDomainName', 'mysite.com']); _gas.push(['_setDomainName', 'myothersite.com']); _gas.push(['_gasMultiDomain', 'click']); _gas.push(['_trackPageview']); www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 15
  • 33.
    May 24, 2012 How to do it with GAS? _gas.push(['_setAccount', 'UA-XXXXX-1']); s s e _gas.push(['_setAllowLinker', true]); c _gas.push(['_setDomainName', 'mysite.com']); c _gas.push(['_setDomainName', 'myothersite.com']); u _gas.push(['_gasMultiDomain', 'click']); S _gas.push(['_trackPageview']); www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 15
  • 34.
    May 24, 2012 GAS can do a lot more for you • You can extend GAS by adding plugins • GAS helps you if you need to use _setAllowAnchor(true) • GAS fixes bad formatted events for you • GAS helps you if you want to send data to multiple accounts at the same time www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 16
  • 35.
    May 24, 2012 What else can you expect from GAS in the future • Support for more video players • Support for tracking social widgets usage • More customization options if you are a developer www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 17
  • 36.
    May 24, 2012 https://github.com/CardinalPath/gas Eduardo Cereto Carvalho @eduardocereto ecereto@cardinalpath.com www.CardinalPath.com © 2012 Cardinal Path, Inc, All Rights Reserved. Proprietary and Confidential. 18