fix(analytics): normalise Matomo base URL trailing slash #26

Merged
Phil merged 1 commit from fix/matomo-url-normalisation into main 2026-08-12 21:01:56 +00:00
Owner

Der eigentliche Punkt ist nicht der lokale Konsolenfehler, sondern dass die .env.production im Repo von dem abweicht, was im laufenden Produktionscontainer steht. Produktion hat die URL mit Schrägstrich und trackt, das Repo hat sie ohne. Der nächste Deploy hätte das Tracking abgeschaltet, ohne eine Fehlermeldung zu erzeugen. Die Zahlen wären einfach ausgeblieben, und das ausgerechnet bei der Messgrundlage, an der die Wirkung des Website-Relaunches gemessen werden soll. Matomo wurde am 2026-08-12 gerade erst betriebsfähig gemacht.

Gelöst wurde es nicht durch Nachziehen des Wertes, sondern durch Entfernen der Fehlerklasse: Das Template normalisiert die URL und funktioniert mit und ohne Schrägstrich. Dazu die Härtung gegen ungeprüfte Interpolation und ein korrigierter Kommentar in config/custom.php, der bisher das Gegenteil behauptete.

Änderungen

  • templates/_system/analytics.twig: matomoBaseUrl wird einmal oben aus matomoUrl normalisiert (|trim('/', 'right') ~ '/'), danach überall diese Variable verwendet statt der rohen Config. Zusätzlich matomoBaseUrl und matomoSiteId mit |e('js') escaped, da beide in JS-String-Literale interpoliert werden.
  • config/custom.php: Kommentar korrigiert, der bisher einen abschließenden Schrägstrich verlangte, obwohl das nicht mehr nötig ist.

Verifikation

  • Twig-Cache geleert, Container neu gestartet.
  • curl gegen die Startseite zeigt HTTP 200 und genau einen abschließenden Schrägstrich in der erzeugten Matomo-URL.
  • Gegenprobe mit beiden Schreibweisen: einmal MATOMO_URL versuchsweise ohne Schrägstrich gesetzt, Template erzeugt weiterhin die korrekte URL. Danach mit Schrägstrich erneut geprüft, ebenfalls korrekt.
  • Nach dem Escaping-Nachzug erneut geprüft: die erzeugte URL und die Site-ID sind unverändert korrekt (JS-escaped, aber funktional identisch).
  • .env und .env.production wurden lokal ebenfalls korrigiert, sind aber über .gitignore ausgeschlossen und tauchen deshalb nicht im Diff auf. Keine Werte aus diesen Dateien werden hier genannt.

Closes #24

🤖 Generated with Claude Code

Der eigentliche Punkt ist nicht der lokale Konsolenfehler, sondern dass die `.env.production` im Repo von dem abweicht, was im laufenden Produktionscontainer steht. Produktion hat die URL mit Schrägstrich und trackt, das Repo hat sie ohne. Der nächste Deploy hätte das Tracking abgeschaltet, ohne eine Fehlermeldung zu erzeugen. Die Zahlen wären einfach ausgeblieben, und das ausgerechnet bei der Messgrundlage, an der die Wirkung des Website-Relaunches gemessen werden soll. Matomo wurde am 2026-08-12 gerade erst betriebsfähig gemacht. Gelöst wurde es nicht durch Nachziehen des Wertes, sondern durch Entfernen der Fehlerklasse: Das Template normalisiert die URL und funktioniert mit und ohne Schrägstrich. Dazu die Härtung gegen ungeprüfte Interpolation und ein korrigierter Kommentar in `config/custom.php`, der bisher das Gegenteil behauptete. ## Änderungen - `templates/_system/analytics.twig`: `matomoBaseUrl` wird einmal oben aus `matomoUrl` normalisiert (`|trim('/', 'right') ~ '/'`), danach überall diese Variable verwendet statt der rohen Config. Zusätzlich `matomoBaseUrl` und `matomoSiteId` mit `|e('js')` escaped, da beide in JS-String-Literale interpoliert werden. - `config/custom.php`: Kommentar korrigiert, der bisher einen abschließenden Schrägstrich verlangte, obwohl das nicht mehr nötig ist. ## Verifikation - Twig-Cache geleert, Container neu gestartet. - `curl` gegen die Startseite zeigt HTTP 200 und genau einen abschließenden Schrägstrich in der erzeugten Matomo-URL. - Gegenprobe mit beiden Schreibweisen: einmal `MATOMO_URL` versuchsweise ohne Schrägstrich gesetzt, Template erzeugt weiterhin die korrekte URL. Danach mit Schrägstrich erneut geprüft, ebenfalls korrekt. - Nach dem Escaping-Nachzug erneut geprüft: die erzeugte URL und die Site-ID sind unverändert korrekt (JS-escaped, aber funktional identisch). - `.env` und `.env.production` wurden lokal ebenfalls korrigiert, sind aber über `.gitignore` ausgeschlossen und tauchen deshalb nicht im Diff auf. Keine Werte aus diesen Dateien werden hier genannt. Closes #24 🤖 Generated with [Claude Code](https://claude.com/claude-code)
The Matomo snippet in analytics.twig concatenated matomoUrl directly
with 'matomo.php'/'matomo.js', which silently depends on the config
value ending in a slash. .env.production carried the value without
one, so the next deploy would have broken production tracking with
ERR_NAME_NOT_RESOLVED (matomoUrl was still masking the bug locally by
accident of custom.php's comment, not by design).

Normalise once in the template via trim + append instead of relying
on the raw env value's shape, so either form works from here on.

Also escape matomoBaseUrl and matomoSiteId with |e('js') before they
land in the inline script's string literals. Both come from env config
rather than user input today, but that boundary is not a reason to
skip the escaper Twig already ships for exactly this situation.

Refs #24
Phil merged commit bb48effb76 into main 2026-08-12 21:01:56 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Phil/philflow.io!26
No description provided.