Le WordPress d'aujourd'hui, décodé pour les développeurs

Blocs Gutenberg

Umami et un bloc de défilement : mesurer un scroll sans cookie

Une équipe qui héberge sa propre instance Umami veut mesurer la profondeur de lecture depuis un bloc interactif, sans cookie ni script tiers additionnel.

Par WordPress Développement • 24 août 2024 • 4 min de lecture • Aucun commentaire
Umami et un bloc de défilement : mesurer un scroll sans cookie

umami.track('scroll_75', { page: location.pathname }) — cette seule ligne, une fois l’instance auto-hébergée en place, remplace tout un tunnel de mesure habituellement confié à Google Analytics ou Plausible. Une coopérative éditoriale qui héberge déjà son propre Umami sur son infrastructure voulait savoir à quel point ses lecteurs descendaient dans ses longs articles, sans ajouter un second outil de mesure.

Le choix d’Umami plutôt que Plausible tenait à une contrainte simple : l’équipe voulait tout héberger elle-même, base de données comprise, sans dépendre d’un service cloud tiers même respectueux de la vie privée. Umami, écrit en Node.js avec une base PostgreSQL ou MySQL, correspond à ce cahier des charges — à condition de bien câbler l’événement de scroll depuis le bloc concerné.

Où placer la mesure : le bloc, pas le thème

Mesurer le scroll globalement, sur toutes les pages, donne des chiffres peu exploitables : un lecteur qui descend jusqu’en bas d’une page d’accueil courte n’a pas le même comportement qu’un lecteur qui abandonne à 20 % d’un article de fond. L’équipe a donc choisi de rattacher la mesure à un bloc spécifique, cooperative/article-long, inséré uniquement dans le gabarit des articles longs et exposant un viewScript dédié.

Le block.json du bloc déclare ce script au niveau du front uniquement :

{
  "name": "cooperative/article-long",
  "viewScript": "file:./view.js",
  "supports": { "interactivity": false }
}

Pas besoin de l’Interactivity API ici : le comportement est purement déclaratif au chargement de la page, un IntersectionObserver classique suffit et reste plus léger.

Calculer les seuils de scroll sans librairie

L'essentiel à retenir : Umami expose une API JavaScript simple à appeler depuis un bloc ; Le seuil de scroll se calcule côté client sans dépendance externe ; Aucun cookie, conforme sans bandeau de consentement

Le script observe la position du bloc dans la fenêtre et déclenche un événement Umami à chaque seuil franchi — 25, 50, 75 et 100 % — une seule fois par seuil et par visite, pour éviter de saturer les statistiques :

document.querySelectorAll('.wp-block-cooperative-article-long').forEach((bloc) => {
    const seuils = [25, 50, 75, 100];
    const franchis = new Set();
    const hauteur = bloc.offsetHeight;

    window.addEventListener('scroll', () => {
        const rect = bloc.getBoundingClientRect();
        const visible = Math.max(0, window.innerHeight - rect.top);
        const pourcentage = Math.min(100, Math.round((visible / hauteur) * 100));

        seuils.forEach((seuil) => {
            if (pourcentage >= seuil && !franchis.has(seuil)) {
                franchis.add(seuil);
                if (window.umami) {
                    window.umami.track(`scroll_${seuil}`, { page: location.pathname });
                }
            }
        });
    }, { passive: true });
});

Le test if (window.umami) évite une erreur JavaScript si le script de suivi n’a pas encore fini de se charger — ou s’il est bloqué par un bloqueur de contenu, ce qui reste rare pour un outil auto-hébergé mais pas impossible.

Umami ne pose pas de cookie et ne génère pas d’identifiant persistant par visiteur : chaque session est recalculée à partir d’un hash journalier combinant l’adresse IP, le user-agent et un sel de configuration, sans jamais stocker cette valeur côté client. Le tracking de scroll décrit ici hérite donc de cette conformité par construction — aucune case à cocher supplémentaire à ajouter dans une politique de consentement, puisque aucune donnée identifiante n’est déposée dans le navigateur.

Un événement personnalisé Umami vaut ce que vaut son nom : mieux vaut un nom stable dès le départ, scroll_75, que de le renommer trois mois plus tard et perdre la continuité des courbes.

Lire les résultats côté tableau de bord

Umami expose ces événements personnalisés dans l’onglet dédié de son interface, avec un comptage par nom d’événement et par période. Sur le premier mois de mesure, la coopérative a constaté que 61 % des lecteurs franchissaient le seuil de 50 %, mais seulement 19 % atteignaient 100 % — un chiffre qui a directement motivé une refonte de la mise en page des articles les plus longs, en insérant des intertitres supplémentaires.

Limites de cette approche

Ce dispositif mesure une profondeur de défilement, pas un temps de lecture réel : un visiteur peut faire défiler rapidement jusqu’en bas sans avoir lu une ligne. Umami ne propose pas non plus de segmentation avancée par défaut — pour croiser la profondeur de scroll avec la source de trafic, il faut exploiter l’API de requête d’Umami en dehors de son tableau de bord standard, ce qui dépasse le cadre d’un simple bloc de mesure.

En résumé

Brancher un événement Umami sur un bloc de défilement tient en quelques lignes de JavaScript vanille et un viewScript ciblé : pas de librairie de scroll-tracking, pas de cookie, pas de dépendance à un service cloud. Pour une équipe qui a déjà fait le choix d’auto-héberger ses statistiques, c’est la suite logique plutôt qu’un outil de mesure supplémentaire à intégrer.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi