diff --git a/example.env b/example.env
index 95ed0770f804269da76f8fe020457e8a611e36d4..6a5c600a44acf107854ce2df380d40521499726e 100644
--- a/example.env
+++ b/example.env
@@ -37,6 +37,10 @@ JSON_DIR="../openfisca-france-json"
 # Matomo analytics configuration
 # MATOMO_SITE_ID=123
 # MATOMO_URL="https://MATOMO_SERVER/"
+# Prepend the site domain to the page title when tracking (optional, default = false).
+# MATOMO_PREPEND_DOMAIN=true
+# Track visitors accross a domain (for example, example.com & its subdomains (optional).
+# MATOMO_SUBDOMAINS="*.DOMAIN"
 
 # OAuth2 configuration
 # OAUTH2_CLIENT_ID="OAUTH2_CLIENT_ID"
diff --git a/src/lib/auditors/config.ts b/src/lib/auditors/config.ts
index 990cea6ae8d5c59ce152bfb6ca178011acafa2c1..dc0c3d7244184a12b7d476b239874bd5d0e01037 100644
--- a/src/lib/auditors/config.ts
+++ b/src/lib/auditors/config.ts
@@ -132,6 +132,15 @@ function auditMatomo(audit: Audit, dataUnknown: unknown,
   const errors: { [key: string]: unknown } = {}
   const remainingKeys = new Set(Object.keys(data))
 
+  audit.attribute(
+    data,
+    "prependDomain",
+    true,
+    errors,
+    remainingKeys,
+    auditSwitch([auditTrimString, auditStringToBoolean], auditBoolean),
+    auditSetNullish(false),
+  )
   audit.attribute(
     data,
     "siteId",
@@ -142,6 +151,14 @@ function auditMatomo(audit: Audit, dataUnknown: unknown,
     auditInteger,
     auditRequire,
   )
+  audit.attribute(
+    data,
+    "subdomains",
+    true,
+    errors,
+    remainingKeys,
+    auditTrimString,
+  )
   audit.attribute(
     data,
     "url",
diff --git a/src/lib/server/config.ts b/src/lib/server/config.ts
index 31328536fddcb1c3d0b8000a9705286655aa84b5..63cf2751387b50b8b591e3a9f9dff92caaa995fb 100644
--- a/src/lib/server/config.ts
+++ b/src/lib/server/config.ts
@@ -14,7 +14,9 @@ export interface Config {
   hiddenEntitiesKeyPlural?: string[]
   jsonDir: string
   matomo?: {
+    prependDomain?: boolean
     siteId: number
+    subdomains?: string
     url: string
   }
   oauth2?: {
@@ -49,7 +51,9 @@ const [validConfig, error] = validateConfig({
   hiddenEntitiesKeyPlural: process.env["HIDDEN_ENTITIES"],
   jsonDir: process.env["JSON_DIR"],
   matomo: process.env["MATOMO_SITE_ID"] && process.env["MATOMO_URL"] ? {
+    prependDomain: process.env["MATOMO_PREPEND_DOMAIN"],
     siteId: process.env["MATOMO_SITE_ID"],
+    subdomains: process.env["MATOMO_SUBDOMAINS"],
     url: process.env["MATOMO_URL"],
   } : null,
   oauth2: process.env["OAUTH2_CLIENT_ID"]
diff --git a/src/lib/sessions.ts b/src/lib/sessions.ts
index 75fee124855765af76aed6a4c94fd8661f4770e9..bdc73f7f3d71cdf2b12e2cfa87d8396056dbd1ea 100644
--- a/src/lib/sessions.ts
+++ b/src/lib/sessions.ts
@@ -18,7 +18,9 @@ export interface Session {
   hiddenEntitiesKeyPlural?: string[]
   leafParametersName: Set<string>
   matomo?: {
+    prependDomain?: boolean
     siteId: number
+    subdomains?: string
     url: string
   }
   metadata: Metadata
diff --git a/src/routes/__layout.svelte b/src/routes/__layout.svelte
index bab05f426ea2d81e3f89af52da0da8912f90c75e..c0d4c5e1a5828e1ecf197763ba308b95a1844f7e 100644
--- a/src/routes/__layout.svelte
+++ b/src/routes/__layout.svelte
@@ -70,7 +70,6 @@
   setContext("inputInstantsByVariableName", inputInstantsByVariableName)
 
   const matomoConfig = $session.matomo
-  let matomoPaq = []
 
   const reform = writable({})
   setContext("reform", reform)
@@ -107,6 +106,16 @@
       // @ts-expect-error
       const _paq = window._paq
       /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
+      if (matomoConfig.subdomains !== undefined) {
+        _paq.push(["setCookieDomain", matomoConfig.subdomains])
+        _paq.push(["setDomains", matomoConfig.subdomains])
+      }
+      _paq.push([
+        "setDocumentTitle",
+        matomoConfig.prependDomain
+          ? document.domain + "/" + document.title
+          : document.title,
+      ])
       _paq.push(["trackPageView"])
       _paq.push(["enableLinkTracking"])
       ;(function () {
@@ -141,7 +150,12 @@
     // @ts-expect-error
     const _paq = window._paq
     _paq.push(["setCustomUrl", url])
-    _paq.push(["setDocumentTitle", document.title])
+    _paq.push([
+      "setDocumentTitle",
+      matomoConfig.prependDomain
+        ? document.domain + "/" + document.title
+        : document.title,
+    ])
     _paq.push(["trackPageView"])
   }