Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[DSFR] Ajouter matomo #6119

Closed
carolineBda opened this issue Sep 12, 2024 · 5 comments
Closed

[DSFR] Ajouter matomo #6119

carolineBda opened this issue Sep 12, 2024 · 5 comments
Assignees
Labels

Comments

@carolineBda
Copy link
Contributor

carolineBda commented Sep 12, 2024

  • installer matomo sur les pages DSFR
  • vérifier que les page views fonctionnent
  • vérifier qu'on est pas obligé d'avoir un 'use client' au niveau du layout
@maxgfr
Copy link
Member

maxgfr commented Sep 12, 2024

Pourquoi pas creuser l'approche server side pour éviter que les calls soient bloquer par les clients : https://github.com/matomo-org/matomo-nodejs-tracker

@maxgfr
Copy link
Member

maxgfr commented Sep 12, 2024

@maxgfr
Copy link
Member

maxgfr commented Sep 12, 2024

@m-maillot
Copy link
Contributor

Bonnes pratiques sur les events : https://fr.matomo.org/faq/reports/the-anatomy-of-an-event/

@maxgfr
Copy link
Member

maxgfr commented Sep 20, 2024

Hello,

L'ajout de matomo fonctionne bien, j'ai utilisé un composant use client dans le layout.

Cela ne pose pas de soucis pour plusieurs raisons.

La première est qu'on utilise déjà des composants use client dans le layout

<html {...getHtmlAttributes({ defaultColorScheme, lang })}>
      <head>
        <StartDsfr />
        <DsfrHead
          Link={Link}
          preloadFonts={[
            //"Marianne-Light",
            //"Marianne-Light_Italic",
            "Marianne-Regular",
            //"Marianne-Regular_Italic",
            "Marianne-Medium",
            //"Marianne-Medium_Italic",
            "Marianne-Bold",
            //"Marianne-Bold_Italic",
            //"Spectral-Regular",
            //"Spectral-ExtraBold"
          ]}
        />
      </head>
      <body>
        <DsfrProvider lang={lang}>{children}</DsfrProvider>
        <MatomoAnalytics />
      </body>
    </html>

Le StartDsfr est comme ceci :

"use client";

import { startReactDsfr } from "@codegouvfr/react-dsfr/next-appdir";
import { defaultColorScheme } from "./defaultColorScheme";
import Link from "next/link";

declare module "@codegouvfr/react-dsfr/next-appdir" {
  interface RegisterLink {
    Link: typeof Link;
  }
}

startReactDsfr({ defaultColorScheme, Link, doCheckNonce: true });

export function StartDsfr() {
  return null;
}

Donc notre Matomo est comme ceci :

"use client";

import { init, push } from "@socialgouv/matomo-next";
import { usePathname } from "next/navigation";
import { useEffect } from "react";
import { PIWIK_SITE_ID, PIWIK_URL, SITE_URL, WIDGETS_PATH } from "../../config";
import { getSourceUrlFromPath } from "../../lib";

export function MatomoAnalytics() {
  const pathname = usePathname();

  useEffect(() => {
    init({
      siteId: PIWIK_SITE_ID,
      url: PIWIK_URL,
      onInitialization: () => {
        const referrerUrl =
          document?.referrer || getSourceUrlFromPath(SITE_URL + pathname);
        if (referrerUrl) {
          push(["setReferrerUrl", referrerUrl]);
        }
        if (pathname && pathname.match(WIDGETS_PATH)) {
          push(["setCookieSameSite", "None"]);
        }
      },
      excludeUrlsPatterns: [WIDGETS_PATH],
    });
  }, []);

  return null;
}

Donc, dans tous les cas, dans le layout on est obligé d'avoir des composants managés par le client. Ce qui n'est pas déconnant au final. Cela n'est pas lié au problématique de page statique ou dynamique. C'est juste que ces composants ne sont pas des server side composants.

Cela veut dire qu'à chaque load, c'est le client qui va loder le code de matomo, ce qui est logique, et cela même si on le passe avec un Script car c'est le code du navigateur qui doit envoyer cela au serveur matomo.

Concernant l'autre tâche matomo pour le server-side, si on la réalise, cela ne changera rien car on devra toujours laisser le client envoyer les events. La seule chose qui change est la destination : notre api code.travail.gouv.fr/api ou matomo.fabrique.social.gouv.fr

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants