commit ede580c5f7be8c9a122da627da9420839fc7934e
parent 79e557555e13a4728a2bc58761df623a9e7720e8
Author: Konstantin Tarkus <koistya@gmail.com>
Date: Sat, 20 Feb 2016 22:45:59 +0300
Merge pull request #449 from koistya/ga
Update Google Analytics tracking code
Diffstat:
2 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/src/client.js b/src/client.js
@@ -35,6 +35,10 @@ const context = {
},
};
+// Google Analytics tracking. Don't send 'pageview' event after the first
+// rendering, as it was already sent by the Html component.
+let trackPageview = () => trackPageview = () => window.ga('send', 'pageview');
+
function render(state) {
Router.dispatch(state, (newState, component) => {
ReactDOM.render(component, appContainer, () => {
@@ -45,6 +49,8 @@ function render(state) {
window.scrollTo(0, 0);
}
+ trackPageview();
+
// Remove the pre-rendered CSS because it's no longer used
// after the React app is launched
if (cssContainer) {
diff --git a/src/components/Html/Html.js b/src/components/Html/Html.js
@@ -10,6 +10,11 @@
import React, { Component, PropTypes } from 'react';
import { analytics } from '../../config';
+// https://analytics.google.com/
+const trackingCode =
+ `window.ga=function(){ga.q.push(arguments)};ga.q=[];ga.l=+new Date;` +
+ `ga('create','${analytics.google.trackingId}','auto');ga('send','pageview')`;
+
class Html extends Component {
static propTypes = {
@@ -25,17 +30,6 @@ class Html extends Component {
description: '',
};
- trackingCode() {
- return ({ __html:
- `(function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=` +
- `function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;` +
- `e=o.createElement(i);r=o.getElementsByTagName(i)[0];` +
- `e.src='https://www.google-analytics.com/analytics.js';` +
- `r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));` +
- `ga('create','${analytics.google.trackingId}','auto');ga('send','pageview');`,
- });
- }
-
render() {
return (
<html className="no-js" lang="">
@@ -51,7 +45,8 @@ class Html extends Component {
<body>
<div id="app" dangerouslySetInnerHTML={{ __html: this.props.body }} />
<script src={this.props.entry}></script>
- <script dangerouslySetInnerHTML={this.trackingCode()} />
+ <script dangerouslySetInnerHTML={{ __html: trackingCode }} />
+ <script src="https://www.google-analytics.com/analytics.js" async defer />
</body>
</html>
);