diff --git a/exampleSite/content/docs/guide/configuration.md b/exampleSite/content/docs/guide/configuration.md
index da5b428..c8da6b3 100644
--- a/exampleSite/content/docs/guide/configuration.md
+++ b/exampleSite/content/docs/guide/configuration.md
@@ -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/).
> 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
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`:
diff --git a/layouts/_partials/components/analytics/analytics.html b/layouts/_partials/components/analytics/analytics.html
new file mode 100644
index 0000000..adbb981
--- /dev/null
+++ b/layouts/_partials/components/analytics/analytics.html
@@ -0,0 +1,19 @@
+{{- if hugo.IsProduction -}}
+
+
+{{- if .Site.Config.Services.GoogleAnalytics.ID }}
+
+ {{ partial "google-analytics.html" . -}}
+{{- end }}
+
+
+{{- if .Site.Params.analytics.umami -}}
+ {{ partial "components/analytics/umami.html" . }}
+{{- end }}
+
+
+{{- if .Site.Params.analytics.matomo -}}
+ {{ partial "components/analytics/matomo.html" . }}
+{{- end }}
+
+{{- end }}
diff --git a/layouts/_partials/components/analytics/google-analytics.html b/layouts/_partials/components/analytics/google-analytics.html
new file mode 100644
index 0000000..62e9d42
--- /dev/null
+++ b/layouts/_partials/components/analytics/google-analytics.html
@@ -0,0 +1,13 @@
+{{- with site.Config.Services.GoogleAnalytics.ID }}
+
+
+
+{{ end -}}
diff --git a/layouts/_partials/components/analytics/matomo.html b/layouts/_partials/components/analytics/matomo.html
new file mode 100644
index 0000000..ac91651
--- /dev/null
+++ b/layouts/_partials/components/analytics/matomo.html
@@ -0,0 +1,19 @@
+{{- /*
+Matomo Analytics.
+https://developer.matomo.org/guides/tracking-javascript-guide
+*/ -}}
+
+
+
+
diff --git a/layouts/_partials/components/analytics/umami.html b/layouts/_partials/components/analytics/umami.html
new file mode 100644
index 0000000..814dd55
--- /dev/null
+++ b/layouts/_partials/components/analytics/umami.html
@@ -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 -}}
+
+
+{{- end -}}
diff --git a/layouts/_partials/google-analytics.html b/layouts/_partials/google-analytics.html
index 02b0e61..16ab488 100644
--- a/layouts/_partials/google-analytics.html
+++ b/layouts/_partials/google-analytics.html
@@ -1,13 +1,2 @@
-{{- with site.Config.Services.GoogleAnalytics.ID }}
-
-
-
-{{ end -}}
+{{- /* Only for compatibility. */ -}}
+{{- partial "components/analytics/google-analytics.html" . -}}
diff --git a/layouts/_partials/head.html b/layouts/_partials/head.html
index 99b24d5..f9f688c 100644
--- a/layouts/_partials/head.html
+++ b/layouts/_partials/head.html
@@ -53,11 +53,7 @@
{{- end }}
-
- {{- if and hugo.IsProduction .Site.Config.Services.GoogleAnalytics.ID }}
-
- {{ partial "google-analytics.html" . -}}
- {{- end }}
+ {{ partial "components/analytics/analytics.html" . }}