mirror of
https://github.com/imfing/hextra.git
synced 2025-08-25 20:56:44 -04:00
feat(analytics): add Umami and Matomo (#784)
This commit is contained in:

committed by
GitHub

parent
524af14bd1
commit
c149af0f74
@@ -394,6 +394,45 @@ To exclude an entire directory, use the [`cascade`](https://gohugo.io/configurat
|
|||||||
> To block search crawlers, you can make a [`robots.txt` template](https://gohugo.io/templates/robots/).
|
> To block search crawlers, you can make a [`robots.txt` template](https://gohugo.io/templates/robots/).
|
||||||
> However, `robots.txt` instructions do not necessarily keep a page out of Google search results.
|
> However, `robots.txt` instructions do not necessarily keep a page out of Google search results.
|
||||||
|
|
||||||
|
### Umami Analytics
|
||||||
|
|
||||||
|
To enable [Umami](https://umami.is/docs/), set `params.analytics.umami.serverURL` and `params.analytics.umami.websiteID` flag in `hugo.yaml`:
|
||||||
|
|
||||||
|
```yaml {filename="hugo.yaml"}
|
||||||
|
params:
|
||||||
|
analytics:
|
||||||
|
umami:
|
||||||
|
serverURL: "https://example.com"
|
||||||
|
websiteID: "94db1cb1-74f4-4a40-ad6c-962362670409"
|
||||||
|
# scriptName: "umami.js" # optional (default: umami.js)
|
||||||
|
# https://umami.is/docs/tracker-configuration#data-host-url
|
||||||
|
# hostURL: "http://stats.example.org" # optional
|
||||||
|
# https://umami.is/docs/tracker-configuration#data-auto-track
|
||||||
|
# autoTrack: "false" # optional
|
||||||
|
# https://umami.is/docs/tracker-configuration#data-tag
|
||||||
|
# domains: "example.net,example.org" # optional
|
||||||
|
# https://umami.is/docs/tracker-configuration#data-exclude-search
|
||||||
|
# tag: "umami-eu" # optional
|
||||||
|
# https://umami.is/docs/tracker-configuration#data-exclude-hash
|
||||||
|
# excludeSearch: "true" # optional
|
||||||
|
# https://umami.is/docs/tracker-configuration#data-do-not-track
|
||||||
|
# excludeHash: "true" # optional
|
||||||
|
# https://umami.is/docs/tracker-configuration#data-domains
|
||||||
|
# doNotTrack: "true" # optional
|
||||||
|
```
|
||||||
|
|
||||||
|
### Matomo Analytics
|
||||||
|
|
||||||
|
To enable [Matomo](https://matomo.org/), set `params.analytics.matomo.URL` and `params.analytics.matomo.ID` flag in `hugo.yaml`:
|
||||||
|
|
||||||
|
```yaml {filename="hugo.yaml"}
|
||||||
|
params:
|
||||||
|
analytics:
|
||||||
|
matomo:
|
||||||
|
serverURL: "https://example.com"
|
||||||
|
websiteID: "94db1cb1-74f4-4a40-ad6c-962362670409"
|
||||||
|
```
|
||||||
|
|
||||||
### LLMS.txt Support
|
### LLMS.txt Support
|
||||||
|
|
||||||
To enable [llms.txt](https://llmstxt.org/) output format for your site, which provides a structured text outline for [large language models](https://en.wikipedia.org/wiki/Large_language_model) and AI agents, add the `llms` output format to your site's `hugo.yaml`:
|
To enable [llms.txt](https://llmstxt.org/) output format for your site, which provides a structured text outline for [large language models](https://en.wikipedia.org/wiki/Large_language_model) and AI agents, add the `llms` output format to your site's `hugo.yaml`:
|
||||||
|
19
layouts/_partials/components/analytics/analytics.html
Normal file
19
layouts/_partials/components/analytics/analytics.html
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{{- if hugo.IsProduction -}}
|
||||||
|
|
||||||
|
<!-- Google Analytics -->
|
||||||
|
{{- if .Site.Config.Services.GoogleAnalytics.ID }}
|
||||||
|
<link rel="preconnect" href="https://www.googletagmanager.com" crossorigin />
|
||||||
|
{{ partial "google-analytics.html" . -}}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
<!-- Umami -->
|
||||||
|
{{- if .Site.Params.analytics.umami -}}
|
||||||
|
{{ partial "components/analytics/umami.html" . }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
<!-- Matomo -->
|
||||||
|
{{- if .Site.Params.analytics.matomo -}}
|
||||||
|
{{ partial "components/analytics/matomo.html" . }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- end }}
|
13
layouts/_partials/components/analytics/google-analytics.html
Normal file
13
layouts/_partials/components/analytics/google-analytics.html
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{{- with site.Config.Services.GoogleAnalytics.ID }}
|
||||||
|
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||||
|
<script async src="https://www.googletagmanager.com/gtag/js?id={{ . }}"></script>
|
||||||
|
<script>
|
||||||
|
window.dataLayer = window.dataLayer || [];
|
||||||
|
function gtag() {
|
||||||
|
dataLayer.push(arguments);
|
||||||
|
}
|
||||||
|
gtag("js", new Date());
|
||||||
|
|
||||||
|
gtag("config", "{{ . }}");
|
||||||
|
</script>
|
||||||
|
{{ end -}}
|
19
layouts/_partials/components/analytics/matomo.html
Normal file
19
layouts/_partials/components/analytics/matomo.html
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{{- /*
|
||||||
|
Matomo Analytics.
|
||||||
|
https://developer.matomo.org/guides/tracking-javascript-guide
|
||||||
|
*/ -}}
|
||||||
|
|
||||||
|
<!-- Matomo -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
var _paq = window._paq = window._paq || [];
|
||||||
|
_paq.push(['trackPageView']);
|
||||||
|
_paq.push(['enableLinkTracking']);
|
||||||
|
(function() {
|
||||||
|
var u="//{{ .serverURL }}/";
|
||||||
|
_paq.push(['setTrackerUrl', u+'matomo.php']);
|
||||||
|
_paq.push(['setSiteId', {{ .websiteID }}]);
|
||||||
|
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
||||||
|
g.type='text/javascript'; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
<!-- End Matomo Code -->
|
57
layouts/_partials/components/analytics/umami.html
Normal file
57
layouts/_partials/components/analytics/umami.html
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
{{- /*
|
||||||
|
Umami Analytics
|
||||||
|
https://umami.is/docs/tracker-configuration
|
||||||
|
*/ -}}
|
||||||
|
|
||||||
|
{{- with .Site.Params.analytics.umami -}}
|
||||||
|
|
||||||
|
{{- if not .serverURL }}
|
||||||
|
{{- errorf "Missing Umami 'serverURL' configuration. See TODO" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if not .websiteID }}
|
||||||
|
{{- errorf "Missing Umami 'websiteID' configuration. See TODO" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $attributes := newScratch -}}
|
||||||
|
|
||||||
|
{{- $attributes.SetInMap "umami" "src" (printf "%s/%s" .serverURL (.scriptName | default "umami.js")) -}}
|
||||||
|
{{- $attributes.SetInMap "umami" "data-website-id" .websiteID -}}
|
||||||
|
|
||||||
|
{{- if .hostURL -}}
|
||||||
|
{{- /* https://umami.is/docs/tracker-configuration#data-host-url */ -}}
|
||||||
|
{{- $attributes.SetInMap "umami" "data-host-url" .hostURL -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if .autoTrack -}}
|
||||||
|
{{- /* https://umami.is/docs/tracker-configuration#data-auto-track */ -}}
|
||||||
|
{{- $attributes.SetInMap "umami" "data-auto-track" .autoTrack -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if .tag -}}
|
||||||
|
{{- /* https://umami.is/docs/tracker-configuration#data-tag */ -}}
|
||||||
|
{{- $attributes.SetInMap "umami" "data-tag" .tag -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if .excludeSearch -}}
|
||||||
|
{{- /* https://umami.is/docs/tracker-configuration#data-exclude-search */ -}}
|
||||||
|
{{- $attributes.SetInMap "umami" "data-exclude-search" .excludeSearch -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if .excludeHash -}}
|
||||||
|
{{- /* https://umami.is/docs/tracker-configuration#data-exclude-hash */ -}}
|
||||||
|
{{- $attributes.SetInMap "umami" "data-exclude-hash" .excludeHash -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if .doNotTrack -}}
|
||||||
|
{{- /* https://umami.is/docs/tracker-configuration#data-do-not-track */ -}}
|
||||||
|
{{- $attributes.SetInMap "umami" "data-do-not-track" .doNotTrack -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if .domains -}}
|
||||||
|
{{- /* https://umami.is/docs/tracker-configuration#data-domains */ -}}
|
||||||
|
{{- $attributes.SetInMap "umami" "data-domains" .domains -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
<script async defer {{ range $k, $v := ($attributes.Get "umami" ) }} {{ (printf `%s=%q` $k $v) | safeHTMLAttr }}{{- end -}}></script>
|
||||||
|
{{- end -}}
|
@@ -1,13 +1,2 @@
|
|||||||
{{- with site.Config.Services.GoogleAnalytics.ID }}
|
{{- /* Only for compatibility. */ -}}
|
||||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
{{- partial "components/analytics/google-analytics.html" . -}}
|
||||||
<script async src="https://www.googletagmanager.com/gtag/js?id={{ . }}"></script>
|
|
||||||
<script>
|
|
||||||
window.dataLayer = window.dataLayer || [];
|
|
||||||
function gtag() {
|
|
||||||
dataLayer.push(arguments);
|
|
||||||
}
|
|
||||||
gtag("js", new Date());
|
|
||||||
|
|
||||||
gtag("config", "{{ . }}");
|
|
||||||
</script>
|
|
||||||
{{ end -}}
|
|
||||||
|
@@ -53,11 +53,7 @@
|
|||||||
<link href="{{ $customCss.RelPermalink }}" rel="stylesheet" />
|
<link href="{{ $customCss.RelPermalink }}" rel="stylesheet" />
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
||||||
<!-- Google Analytics -->
|
{{ partial "components/analytics/analytics.html" . }}
|
||||||
{{- if and hugo.IsProduction .Site.Config.Services.GoogleAnalytics.ID }}
|
|
||||||
<link rel="preconnect" href="https://www.googletagmanager.com" crossorigin />
|
|
||||||
{{ partial "google-analytics.html" . -}}
|
|
||||||
{{- end }}
|
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
// The section must not be in the theme.js file because it can create a quick flash (switch between light and dark).
|
// The section must not be in the theme.js file because it can create a quick flash (switch between light and dark).
|
||||||
|
Reference in New Issue
Block a user