Journal GoatCounter 1.0 un Web analytique léger, libre et respectueux

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
20
18
jan.
2020

GoatCounter est un outil de statistiques Web avancées. La plupart des gens ou des entreprises n’ont pas besoin des monstres plus connus Google Analytics et son pendant libre Matomo (et tous les autres) qui sont difficiles à maîtriser, en plus d’avoir d’autres défauts : ils alourdissent les pages et collectent bien trop d’informations sur les visiteurs.
Goatcounter est facile à installer, une offre hébergée à prix accessible existe, il ajoute moins de 2 Kio à la page, il utilise SQLite ou PostgreSQL et il est écrit en Go. Surtout, il s’efforce de respecter les critères d’accessibilité et de respect de la vie privée. Une démo permet d’en découvrir la clarté d’affichage.

  • # Question con...

    Posté par  (Mastodon) . Évalué à 6.

    Je ne vois pas dans le README (ou ailleurs) comment on l'intègre à son site web. Quelle ligne mettre dans le HTML pour qu'il fasse son job.

    Je vais monter un petit blog (statique) et justement je me disais que je voudrais bien avoir 2 ou 3 stats de base, et GoatCounter semble correspondre à ce que je cherche.

    En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

    • [^] # Re: Question con...

      Posté par  (site web personnel) . Évalué à 5.

      Je me suis posé la même question en allant voir (alors on va dire que ce n'est pas une question con :). Par contre c'est du code à ajouter dans une page et pas de l'analyse de logs, ça m'intéresse moins pour LinuxFr.org.

      • [^] # Re: Question con...

        Posté par  . Évalué à 5.

        Si tu cherches quelque chose de plus light/simple que Matomo pour faire de l'analyse de logs, il y a goaccess.

    • [^] # Re: Question con...

      Posté par  (site web personnel) . Évalué à 5.

      Trouvé dans l'html du site goatcounter.com

      <script>
          (function() {
              var script = document.createElement('script');
              window.counter = 'https://goatcounter.goatcounter.com/count'
              script.async = 1;
              script.src = '//gc.zgo.at/count.js';
              var ins = document.getElementsByTagName('script')[0];
              ins.parentNode.insertBefore(script, ins)
          })();
      </script>

      Matthieu Gautier|irc:starmad

      • [^] # Re: Question con...

        Posté par  . Évalué à 5.

        Pour ma gouverne, est-ce quelqu'un peut m'expliquer l'intérêt pour un script de créer un autre script qu'il va exécuter ? Je suppose que ça a à voir avec l'ordre de chargement de la page ou autre connerie comme ça, mais ne connaissant pas toutes les subtilités du JS et des navigateurs modernes… Sans parler de la définition de fonction anonyme pour l'exécuter instantanément, j'ai oublié également son utilité mais j'ai cru comprendre que cette construction elle aussi idiomatique était soit-disant « logique »… Quelqu'un qui débarquerait sans connaître le web trouverait cette triple indirection complètement folle.

        • [^] # Re: Question con...

          Posté par  . Évalué à 5.

          Pour être plus clair, pourquoi n'écrit-t-on pas directement :

          <script src="//gc.zgo.at/count.js" async="1">

          • [^] # Re: Question con...

            Posté par  . Évalué à 4. Dernière modification le 20 janvier 2020 à 16:11.

            Il veut s'assurer que son script soit lancé en premier?

            Je trolle dès quand ça parle business, sécurité et sciences sociales

            • [^] # Re: Question con...

              Posté par  . Évalué à 2.

              Ah oui, parce que les script inline sont exécutés d'abord (de mémoire), et ainsi il place le script sourcé avant tous les autres ? Pourquoi pas, quand tu ne maîtrise pas totalement la manière dont ça va être templaté après. Mais quand même, qu'est-ce que c'est moche…

              Merci.

        • [^] # Re: Question con...

          Posté par  . Évalué à 6. Dernière modification le 20 janvier 2020 à 19:18.

          La fonction anonyme sert à scoper ses variables, sinon tu pollues tout l'espace global :-)

    • [^] # Re: Question con...

      Posté par  . Évalué à -2.

    • [^] # Re: Question con...

      Posté par  . Évalué à 3.

      J'ai un petit blog statique. Faut-il mettre le code dans toutes les pages ou juste index.html ?

      Merci.

      arnauld

      • [^] # Re: Question con...

        Posté par  (site web personnel) . Évalué à 6.

        Dans les pages dont tu veux avoir beaucoup de détails…

        L'intérêt de l'analyse des logs uniquement, c'est d'éviter ce genre de chose, et, de mieux respecter les visiteurs.

        Pourquoi bloquer la publicité et les traqueurs : https://greboca.com/Pourquoi-bloquer-la-publicite-et-les-traqueurs.html

        • [^] # Re: Question con...

          Posté par  . Évalué à 1.

          Merci. Je viens de l'insérer et ça marche très bien.

          arnauld

        • [^] # Re: Question con...

          Posté par  . Évalué à 1.

          L'intérêt de l'analyse des logs uniquement, c'est d'éviter ce genre de chose, et, de mieux respecter les visiteurs.

          L'analyse de logs n'est pas capable de détecter si l'utilisateur a activé Do Not Track (alors que la sonde javascript de Matamo le respecte par défaut et donc ne te track pas si tu active DNT). Il est même possible d'identifier les utilisateurs connectés à certains CMS (qui l'indiquent dans leur logs). La sonde javascript ne s'insère pas non plus dans toutes les pages (celles utilisées par des logiciels tiers par exemple) mais les logs eux vont quand même fournir toutes les infos.

          • [^] # Re: Question con...

            Posté par  (site web personnel) . Évalué à 3.

            Si tu te contentes d'analyser les logs, sans faire de corrélations entre tes visiteurs de différents sites via leur IP, tu ne les traques pas.
            L'IP dans les logs servant alors uniquement à des fins de contrôle de fonctionnements, de sécurité et autres mesures légales, c'est bien plus respectueux de l'utilisateur.

            Bien sur, il va te manquer la résolution de l'écran et la taille de la fenêtre du navigateur (encore qu'il y a des astuces).

            D'autre part, en se contentant des logs, tu ne ralentis pas le chargement des pages etc.

            Pourquoi bloquer la publicité et les traqueurs : https://greboca.com/Pourquoi-bloquer-la-publicite-et-les-traqueurs.html

            • [^] # Re: Question con...

              Posté par  . Évalué à 4. Dernière modification le 20 janvier 2020 à 16:08.

              Si tu te contentes d'analyser les logs, sans faire de corrélations entre tes visiteurs de différents sites via leur IP, tu ne les traques pas.

              C'est aussi du tracking en monosite (mais personne ne te critique, on parle techno 😉). Et comme dit précédemment, tu peux aussi tracker via l'identifiant (le pseudo qu'ils ont sur ton CMS) des utilisateurs s'ils sont connecté et que ce dernier le signal au serveur web.

              L'IP dans les logs servant alors uniquement à des fins de contrôle de fonctionnements, de sécurité et autres mesures légales, c'est bien plus respectueux de l'utilisateur.

              Tu récupères aussi les URL complète, paramètres GET y compris. Sur un cozy par exemple la sonde ne récupérerais que l'utilisation de la WEBUI alors que l'analyse des logs t'affiche toute utilisation.

              D'autre part, en se contentant des logs, tu ne ralentis pas le chargement des pages etc.

              Tu augmentes aussi le nombre de faux positif : les bots n'ayant pas javascript, beaucoup n'entrent pas dans les stats via la sonde. Par contre via les logs il n'y a que l'IP ou l'User-Agent pour les identifier.
              Typiquement un wget tonsite indiquera une lecture/visite via les logs mais rien via la sonde javascript (peut être certains via l'image fantôme mais pas sûr).

          • [^] # Re: Question con...

            Posté par  (site web personnel) . Évalué à 7.

            En faisant de l'analyse d'usage avec une sonde tu peux aussi comprendre comment est utilisé un site SPA. Et ça permet aussi d'avoir une information correcte même si le gros des requêtes utilisent du cache (classique, ou avec un service worker).

            C'est juste pas la même chose que de l'analyse de log.

            Et pour le côté "Respect des utilisateurs" dont parle Grégoire, il n'y a pas une méthode qui est forcement mieux qu'une autre… Utiliser une sonde ne signifie pas que tu vas tracer les utilisateurs (Matomo est d'ailleurs tamponné compatible RGPD sans consentement avec certains réglages), et tu peux tracer les utilisateurs avec de l'analyse de log ! Les identifiants fbclid que rajoute Facebook apparaissent dans les logs, alors que GoatCounter ne les remonte peut-être pas (je n'ai pas vérifié).

            Pour parler respectabilité on peut différentier plusieurs choses :
            - Les ressources consommées (taille, nombre de requête) : Il y a forcement une requête de plus avec une sonde, mais elle peut être toute petite. Il y a pleins d'autres leviers pour réduire les ressources utilisées par un site. Si on veux absolument garder des stat exactes alors une sonde peut permettre d'utiliser plus de cache de de faire de l'analyse de log :)
            - Ne pas tracer l'utilisateur : Il faut regarder ce que la sonde remonte. Mais dans tous les cas (sonde et logs) il faut faire confiance à l'hébergeur pour qu'il ne conserve pas plus que le nécessaire.
            - Ne pas envoyer les données de l'utilisateur à n'importe qui : Là forcement, avec une sonde qui pointe vers un tiers (si on n'héberge pas soi-même le serveur de suivi), ça paraît forcement moins bien que des logs. Mais bon avec cet argument, on considère aussi comme "non respectueux" les sites qui utilisent des hébergements mutualisés où des CDN… Dans ces deux cas, il faut également faire confiance à un tiers pour qu'il n'exploite trop les logs (en Europe la loi aide bien).

  • # 2 Ko et 1 requête réseau de trop

    Posté par  (site web personnel) . Évalué à -4. Dernière modification le 19 janvier 2020 à 20:42.

    il ajoute moins de 2 Ko à la page

    Ca fait 2 Ko de trop quand on ne cherche pas à avoir des trucs récupérables que par JavaScript.
    Matomo, par exemple, c'est 0 octets ajoutés à la page (analyse de logs) et aussi 0 octet ajouté sur le réseau, cet outil sait-il fait aussi bien?
    (parce que bon, parler de taille ajoutée en sous-entendant que c'est super mais sans comparer les fonctionnalités, c'est du marketing pas cher mais complètement inutile et qui amène à une comparaison jusqu'au bout de chaque solution)

    • [^] # Re: 2 Ko et 1 requête réseau de trop

      Posté par  (site web personnel) . Évalué à 9.

      Et lire trop vite pour dire ensuite n'importe quoi c'est permis ? :-)
      C'est un outil de web analytique, pas d'analyse de logs. Quand Matomo est utilisé en web analytique il ajoute presque 200 Ko de Javascript à la page.
      C'est un outil de web analytique simple, volontairement limité, qui se contente de compter les évènements, ce qui suffit à plein de gens.
      C'est donc mieux que Matomo pour le poids des pages, mieux pour la vie privée, moins bien sur l'analytique pointue, mais plus accessible.
      Tout ça est clairement expliqué dans le fichier en lien dans le journal que tu as du lire un peu vite…

      "La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay

      • [^] # Re: 2 Ko et 1 requête réseau de trop

        Posté par  (site web personnel) . Évalué à 4.

        200ko… c'est un peu exagéré tout de même.
        Dans les dernières versions il s'agit de moins de 69ko non compressé (≃ 23ko une fois compressé) !

        Ce n'est pas négligeable certes, mais comme dis plus haut le service rendu n'est pas le même qu'avec GoatCounter.

        Jérôme.

  • # Merci pour l'info.

    Posté par  (site web personnel) . Évalué à 4.

    Je cherchais justement un outils simple, avec hébergement gratuit pour les faibles trafics et qui permette d'avoir une page de reporting publique.

    Pour répondre à la question sur l'intégration, il suffit de rajouter le code suivant dans le body de ses pages :

    <script>
    (function() {
        window.counter = 'https://<monlogin>.goatcounter.com/count'
        var script = document.createElement('script');
        script.async = 1;
        script.src = '//gc.zgo.at/count.js';
        var ins = document.getElementsByTagName('script')[0];
        ins.parentNode.insertBefore(script, ins)
    })();
    </script>
    
  • # Pourquoi passer par ces horreurs alors qu'il y a déjà tout ce qu'il faut dans les logs ?

    Posté par  . Évalué à 4.

    Au temps jadis (il y a 20 ans), bien avant ces horreurs en, javascript et leurs légions de mouchards, on utilisait bêtement des logiciels de type Webalizer pour analyser les logs du serveur Web.

    C'était simple, fiable (pas possible de masquer une visite avec un ad/js-blocker), non-intrusif du point de vue de la vie privée et ne saccageait pas les performances de son site web.

    Mis à part "l'avantage" de pouvoir violer la vie privée de ses visiteurs avec les cookies tiers pernicieux du service d'analytics, quel peut bien être leur intérêt ?

    BeOS le faisait il y a 20 ans !

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.