commit 3f178329f69acbd4a317fa0d6995e068ef6bf89d
parent 7e8b4f2dac3aea84c9343bfb52021273705f377d
Author: Konstantin Tarkus <hello@tarkus.me>
Date: Sat, 20 Feb 2016 00:20:25 +0300
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>
);