SocialHub.AI
Centre de développement · Suivi Web

Suivez le comportement sur votre site.

Déposez un simple bean propriétaire sur n'importe quel site marketing ou e-commerce : les pages vues sont automatiquement intégrées à la même chronologie de comportement des membres que les e-mails, le portail de fidélité et votre application. Aucune clé, aucune dépendance : quelques lignes de JavaScript pur envoyées à un point de terminaison public suffisent. Flash analyse côté serveur les données relatives à l'appareil, la géolocalisation et la détection des bots.

01 — Comment ça marche

Une ligne hébergée ou un extrait de code autonome

Ajoutez le traqueur hébergé avec une simple balise script, ou collez l'extrait de code autonome si vous préférez aucune dépendance externe. Dans les deux cas, il génère les identifiants, respecte les signaux de confidentialité et POSTs enregistre une page vue vers un point de terminaison :

POST https://flash.socialhub.ai/api/v1/tracking/pageview

Vous envoyez les bits client

URL, titre, référent, identifiants, écran, langue, fuseau horaire, UTM, c'est tout.

Flash enrichit côté serveur

L'appareil, le système d'exploitation et le navigateur sont analysés à partir de l'agent utilisateur ; pays de la PI ; les robots sont détectés et signalés. Il ne faut jamais faire confiance au client pour cela.

Le résultat est toujours 204.

Qu'il s'agisse d'un bot, d'une requête GPC, d'une requête malformée ou acceptée, le point de terminaison répond silencieusement. Le suivi ne génère jamais d'erreur sur votre page.

Sur votre domaine, le comportement est anonyme. Aucun cookie de session Flash n'est présent sur votre site ; les pages vues sont donc associées au anonymous_id que vous générez, et non à un membre connu. L'attribution des membres se fait sur les interfaces Flash (le portail de fidélité et l'espace membre intégré à l'application), où la session permet d'identifier le membre. Utilisez un anonymous_id cohérent afin que le comportement d'un visiteur sur votre site soit au moins unifié d'une session à l'autre.

02 — Installation

Deux options d'accès. Configurez YOUR_TEAM_ID et c'est parti !

Recommandé

Option A · Hébergé — une ligne

Supprimez une balise de script avant </body>. Il suit automatiquement les modifications d'itinéraire d'une application sur une seule page et expose window.flashTrack() — rien d'autre à câbler.

index.html
<!-- SocialHub web tracking — one line, before </body> -->
<script src="https://flash.socialhub.ai/sdk/flash-tracker.js"
        data-team-id="YOUR_TEAM_ID" defer></script>
↓ Télécharger flash-tracker.jsVoir la source ↗Aucune dépendance ; hébergement sur votre propre serveur si vous le souhaitez

Option B · Intégrée — aucun script externe

Vous ne voulez aucune requête externe (CSP strict ou code contenu dans votre propre bundle) ? Collez plutôt cet extrait autonome. Il expose window.shTrack() — appelez-le après chaque changement d'itinéraire dans une application monopage :

index.html
<!-- SocialHub web tracking — paste before </body> on every page -->
<script>
(function () {
  var TEAM_ID = "YOUR_TEAM_ID";                                  // Settings → API
  var ENDPOINT = "https://flash.socialhub.ai/api/v1/tracking/pageview";

  // Honor Global Privacy Control / Do Not Track — no signal sent.
  if (navigator.globalPrivacyControl === true || navigator.doNotTrack === "1") return;

  function uid() {
    return (window.crypto && crypto.randomUUID)
      ? crypto.randomUUID()
      : (Date.now() + "-" + Math.random().toString(16).slice(2));
  }
  function persist(store, key) {
    try { var v = store.getItem(key); if (!v) { v = uid(); store.setItem(key, v); } return v; }
    catch (e) { return uid(); }
  }
  function utm() {
    var p = new URLSearchParams(location.search), o = {};
    ["source", "medium", "campaign", "term", "content"].forEach(function (n) {
      var val = p.get("utm_" + n); if (val) o[n] = val;
    });
    return Object.keys(o).length ? o : undefined;
  }
  function track() {
    var body = JSON.stringify({
      v: 1,
      page_url: location.href,
      page_title: document.title,
      referrer: document.referrer || undefined,
      anonymous_id: persist(localStorage, "sh_anon"),       // stable per browser
      session_id: persist(sessionStorage, "sh_session"),    // resets per tab session
      team_id: TEAM_ID,
      utm: utm(),
      screen: screen.width + "x" + screen.height,
      language: navigator.language,
      timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
      timestamp: Date.now()
    });
    try {
      if (navigator.sendBeacon) navigator.sendBeacon(ENDPOINT, body);
      else fetch(ENDPOINT, { method: "POST", body: body, keepalive: true }).catch(function () {});
    } catch (e) { /* never break the page */ }
  }

  window.shTrack = track;   // for SPAs: call window.shTrack() after each route change
  track();                  // initial page view
})();
</script>
spa-router.js
// Single-page apps: after each client-side route change
router.afterEach(function () { window.shTrack && window.shTrack(); });
03 — Contrat de charge utile

Le corps de la balise

Envoi de application/json (ou d'un simple string via sendBeacon). Tout fichier de plus de 4 Ko ou dont la validation échoue est ignoré.

ChampSaisirRemarques
vnumberVersion du schéma. Toujours 1.
page_urlstringURL complète de la page (≤ 2048). Requis.
page_titlestring?Titre du document (≤ 500).
referrerstring?document.referrer (≤ 2048).
anonymous_idstringIdentifiant stable par navigateur que vous générez (≤ ​​36). Obligatoire.
session_idstringIdentifiant par session généré (≤ 36). Obligatoire.
team_idstringIdentifiant de votre équipe SocialHub (≤ 36) : identifie la marque. Obligatoire.
utmobject?{ source, medium, campaign, term, content } extraits de la requête string.
screenstring?"1920x1080".
languagestring?navigator.language.
timezonestring?Fuseau horaire IANA, par exemple : Amérique/Los_Angeles.
timestampnumberÉpoque client ms. Requis.
04 — Protections

Conçu pour résister au trafic falsifié

Votre team_id se trouve dans le code source de votre page ; comme tout identifiant analytique, il est public. Le point de terminaison se protège donc côté serveur, silencieusement (il répond toujours à 204, empêchant ainsi un attaquant d'obtenir des informations à exploiter) :

Limitation du débit de base · toujours activé

Chaque équipe est protégée par défaut sans aucune configuration : le point de terminaison limite le nombre de balises qu’une source peut envoyer, de sorte qu’une balise récupérée team_id Impossible de saturer ou de corrompre vos données analytiques. La solution est à tolérance de panne : une interruption temporaire n’affecte jamais votre trafic réel.

Liste blanche d’origine · optionnel

Dans Paramètres → Protection contre le suivi, vous pouvez limiter les balises acceptées à vos propres domaines, avec un aperçu de la surveillance pour vérifier les éléments positifs false avant l'application. Cela empêche les autres sites d'utiliser votre SDK dans un navigateur.

Transparence quant aux limites

La limitation du débit et la liste blanche renforcent le contrôle et limitent les dégâts, mais aucun client sans clé ne peut empêcher un script déterminé de falsifier des requêtes. Pour une ingestion à haute sensibilité, envoyez plutôt des requêtes serveur à serveur via l'interface authentifiée API.

Données propres en aval

La protection anti-abus s'exécute avant tout enregistrement, garantissant ainsi que le trafic filtré n'atteint jamais le fil d'actualité, les segments ou les tableaux de bord de vos membres. La page Protection contre le suivi vous indique le volume de données bloquées.

05 — Confidentialité

Respect du visiteur dès la conception

GPC et « Ne pas suivre »

Ce fragment de code vérifie les propriétés navigator.globalPrivacyControl et navigator.doNotTrack et n'envoie aucune donnée si l'une ou l'autre est activée. Maintenez cette vigilance.

Pas de données personnelles brutes

Envoyez uniquement les identifiants et le contexte de la page – jamais de noms, d’e-mails ou de contenu de formulaire dans la balise. L’identité des membres est résolue sur les surfaces Flash, pas sur votre site.

Votre bandeau de consentement s’affiche en premier

Si votre site utilise un gestionnaire de consentement, contrôlez l'extrait derrière le consentement : n'appelez le tracker qu'une fois que le visiteur a accepté l'analyse.

Filtré par les robots

La détection des robots côté serveur signale le trafic non humain afin qu'il ne pollue pas la chronologie ou les statistiques de vos membres.

Capturez le reste du voyage

Le Web est l'une des quatre surfaces d'interaction. Découvrez comment les e-mails, le portail de fidélité et votre application alimentent le même fil d'actualité des membres.