diff --git a/config/privacy/privacyConfig.go b/config/privacy/privacyConfig.go
index c93137da4..0241b5704 100644
--- a/config/privacy/privacyConfig.go
+++ b/config/privacy/privacyConfig.go
@@ -44,6 +44,10 @@ type Disqus struct {
// GoogleAnalytics holds the privacy configuration settings related to the Google Analytics template.
type GoogleAnalytics struct {
Service `mapstructure:",squash"`
+
+ // Enabling this will make the GA templates respect the
+ // "Do Not Track" HTTP header. See https://www.paulfurley.com/google-analytics-dnt/.
+ RespectDoNotTrack bool
}
// Instagram holds the privacy configuration settings related to the Instagram shortcode.
diff --git a/config/privacy/privacyConfig_test.go b/config/privacy/privacyConfig_test.go
index 9b0d75e31..f8e2ebbd1 100644
--- a/config/privacy/privacyConfig_test.go
+++ b/config/privacy/privacyConfig_test.go
@@ -33,6 +33,7 @@ someOtherValue = "foo"
disable = true
[privacy.googleAnalytics]
disable = true
+respectDoNotTrack = true
[privacy.instagram]
disable = true
[privacy.speakerDeck]
@@ -54,6 +55,7 @@ noCookie = true
assert.True(pc.Disqus.Disable)
assert.True(pc.GoogleAnalytics.Disable)
+ assert.True(pc.GoogleAnalytics.RespectDoNotTrack)
assert.True(pc.Instagram.Disable)
assert.True(pc.SpeakerDeck.Disable)
assert.True(pc.Tweet.Disable)
diff --git a/tpl/tplimpl/embedded/templates.autogen.go b/tpl/tplimpl/embedded/templates.autogen.go
index 8556c32c7..71a1fd14f 100644
--- a/tpl/tplimpl/embedded/templates.autogen.go
+++ b/tpl/tplimpl/embedded/templates.autogen.go
@@ -103,23 +103,37 @@ var EmbeddedTemplates = [][2]string{
{{- if not $pc.Disable -}}
{{ with .Site.GoogleAnalytics }}
{{ end }}
+{{- end -}}
+{{- define "__ga_js_set_doNotTrack" -}}{{/* This is also used in the async version. */}}
+{{- $pc := .Site.PrivacyConfig.GoogleAnalytics -}}
+{{- if not $pc.RespectDoNotTrack -}}
+var doNotTrack = false;
+{{- else -}}
+var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
+var doNotTrack = (dnt == "1" || dnt == "yes");
+{{- end -}}
{{- end -}}`},
{`google_analytics_async.html`, `{{- $pc := .Site.PrivacyConfig.GoogleAnalytics -}}
{{- if not $pc.Disable -}}
{{ with .Site.GoogleAnalytics }}
{{ end }}
diff --git a/tpl/tplimpl/embedded/templates/google_analytics.html b/tpl/tplimpl/embedded/templates/google_analytics.html
index 89c193240..8c7951b58 100755
--- a/tpl/tplimpl/embedded/templates/google_analytics.html
+++ b/tpl/tplimpl/embedded/templates/google_analytics.html
@@ -2,13 +2,24 @@
{{- if not $pc.Disable -}}
{{ with .Site.GoogleAnalytics }}
{{ end }}
+{{- end -}}
+{{- define "__ga_js_set_doNotTrack" -}}{{/* This is also used in the async version. */}}
+{{- $pc := .Site.PrivacyConfig.GoogleAnalytics -}}
+{{- if not $pc.RespectDoNotTrack -}}
+var doNotTrack = false;
+{{- else -}}
+var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
+var doNotTrack = (dnt == "1" || dnt == "yes");
+{{- end -}}
{{- end -}}
\ No newline at end of file
diff --git a/tpl/tplimpl/embedded/templates/google_analytics_async.html b/tpl/tplimpl/embedded/templates/google_analytics_async.html
index eb4fe9b88..48a24c1c0 100755
--- a/tpl/tplimpl/embedded/templates/google_analytics_async.html
+++ b/tpl/tplimpl/embedded/templates/google_analytics_async.html
@@ -2,9 +2,12 @@
{{- if not $pc.Disable -}}
{{ with .Site.GoogleAnalytics }}
{{ end }}