SocialHub.AI
Entwicklerzentrum · Web-Tracking

Verhalten auf Ihrer eigenen Website verfolgen.

Platzieren Sie einen First-Party-Beacon auf einer beliebigen Marketing- oder E-Commerce-Website. Die Seitenaufrufe werden in dieselbe Timeline des Kundenverhaltens () eingebunden wie E-Mails, das Treueportal und Ihre App. Kein Schlüssel, keine Abhängigkeiten – nur wenige Zeilen reines JavaScript, die an einen öffentlichen Endpunkt gesendet werden. (Flash) Geräte-, Geo- und Bot-Erkennung erfolgen serverseitig.

01 — Wie es funktioniert

Eine gehostete Zeile oder ein in sich abgeschlossener Codeabschnitt

Fügen Sie den gehosteten Tracker mit einem einzelnen Skript-Tag hinzu oder fügen Sie den eigenständigen Code-Schnipsel ein, wenn Sie keine externen Abhängigkeiten wünschen – in beiden Fällen werden die Kennungen generiert, Datenschutzsignale berücksichtigt und POSTs ein Seitenaufruf an einen Endpunkt:

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

Sie senden die Client-Bits

URL, Titel, Referrer, IDs, Bildschirm, Sprache, Zeitzone, UTM – das ist alles.

Flash bereichert serverseitig

Gerät, Betriebssystem und Browser werden vom User-Agent analysiert; Land aus der IP; Bots werden erkannt und gekennzeichnet. Dem Kunden muss hierfür niemals vertraut werden.

Es liefert immer 204 Ergebnisse.

Bot, GPC, fehlerhaft oder akzeptiert – der Endpunkt antwortet stillschweigend. Tracking erzeugt niemals einen Fehler auf Ihrer Seite.

Auf Ihrer eigenen Domain ist das Verhalten anonym. Auf Ihrer Website gibt es keinen Session-Cookie (Flash), daher werden Seitenaufrufe dem von Ihnen generierten Session-Cookie (anonymous_id) zugeordnet – nicht einem bekannten Mitglied. Die Mitgliederzuordnung erfolgt auf den von Ihnen betriebenen Plattformen (Flash) (dem Treueportal und dem In-App-Mitgliederbereich), wo die Session das Mitglied identifiziert. Verwenden Sie einen konsistenten Session-Cookie (anonymous_id), damit das Verhalten eines Besuchers auf Ihrer Website zumindest über seine eigenen Sessions hinweg einheitlich ist.

02 – Installation

Zwei Wege zum Ziel. Setzen Sie YOUR_TEAM_ID und Sie sind live.

Empfohlen

Option A · Gehostet — eine Zeile

Löschen Sie ein Skript-Tag vor </body>. Es verfolgt automatisch Änderungen an der Single-Page-App-Route und macht window.flashTrack() verfügbar – es muss nichts weiter verkabelt werden.

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>
↓ flash-tracker.js herunterladenQuelltext anzeigen ↗Keine Abhängigkeiten · Selbsthosting auf Ihrem eigenen Server möglich

Option B · Inline – kein externes Skript

Möchten Sie keine externen Anfragen (strikter CSP oder den Code in Ihrem eigenen Bundle)? Fügen Sie stattdessen dieses eigenständige Snippet ein. Es macht window.shTrack() verfügbar – rufen Sie es nach jeder Routenänderung in einer Single-Page-App auf:

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 – Payload-Vertrag

Der Beacon-Körper

Senden Sie application/json (oder ein einfaches string über sendBeacon). Alles über 4 KB oder mit Validierungsfehlern wird stillschweigend verworfen.

FeldTypNotizen
vnumberSchemaversion. Immer 1.
page_urlstringVollständige URL der Seite (≤ 2048). Erforderlich.
page_titlestring?Dokumenttitel (≤ 500 Zeichen).
referrerstring?document.referrer (≤ 2048).
anonymous_idstringStabile, browserspezifische ID, die Sie generieren (≤ 36). Erforderlich.
session_idstringVon Ihnen generierte Sitzungs-ID (≤ 36). Erforderlich.
team_idstringIhre SocialHub-Team-ID (≤ 36) – identifiziert die Marke. Erforderlich.
utmobject?{ Quelle, Medium, Kampagne, Begriff, Inhalt } aus der Abfrage string extrahiert.
screenstring?„1920x1080“.
languagestring?navigator.language.
timezonestring?IANA tz, z. B. America/Los_Angeles.
timestampnumberClient-Epoche ms. Erforderlich.
04 – Schutz

Entwickelt, um gefälschten Traffic zu verhindern

Ihre team_id befindet sich im Quelltext Ihrer Seite – wie jede Analytics-ID ist sie öffentlich. Der Endpunkt schützt sich daher serverseitig im Hintergrund (er antwortet immer mit 204, sodass ein Angreifer keine Rückmeldung erhält, anhand derer er Angriffe durchführen könnte):

Basisratenbegrenzung · immer eingeschaltet

Jedes Team ist standardmäßig ohne Konfiguration geschützt: Der Endpunkt begrenzt die Anzahl der Beacons, die eine Quelle senden kann, sodass ein gescrapter team_id Kann Ihre Analysedaten weder überlasten noch verfälschen. Es ist ausfallsicher – ein vorübergehender Ausfall beeinträchtigt Ihren eigentlichen Datenverkehr nicht.

Zulässige Herkunftsliste · optional

Unter Einstellungen → Tracking-Schutz können Sie die zulässigen Beacons auf Ihre eigenen Domains beschränken. Eine Überwachungsvorschau prüft auf positive Ergebnisse (false), bevor Sie die Einschränkung erzwingen. Dies verhindert, dass andere Websites Ihre SDK-Adresse im Browser verwenden.

Ehrlich bezüglich der Grenzen

Ratenbegrenzung und die Zulassungsliste erhöhen die Hürde und begrenzen den Schaden, aber kein Client ohne Schlüssel kann ein entschlossenes Skript vollständig daran hindern, Anfragen zu fälschen. Für hochsensible Datenerfassung senden Sie die Anfragen stattdessen Server-zu-Server über das authentifizierte API.

Saubere Datenverarbeitung

Der Missbrauchsschutz greift, bevor Daten gespeichert werden. So gelangt gefilterter Traffic niemals in die Timeline, Segmente oder Dashboards Ihrer Mitglieder. Die Seite „Tracking-Schutz“ zeigt Ihnen, wie viel Traffic zurückgehalten wurde.

05 – Datenschutz

Besucher durch Gestaltung respektieren

GPC & Do-Not-Track

Der Code-Schnipsel prüft navigator.globalPrivacyControl und navigator.doNotTrack und sendet keine Nachricht, wenn eine dieser Einstellungen gesetzt ist. Diese Sicherheitsmaßnahme sollte beibehalten werden.

Keine rohen personenbezogenen Daten

Senden Sie nur Kennungen und Seitenkontext – niemals Namen, E-Mails oder Formularinhalte im Beacon. Die Mitgliedsidentität wird auf Flash-Oberflächen aufgelöst, nicht auf Ihrer Website.

Ihre Einwilligung zuerst

Wenn Ihre Website einen Einwilligungsmanager verwendet, sperren Sie den Snippet hinter der Einwilligung ein – rufen Sie den Tracker erst auf, wenn der Besucher die Analyse akzeptiert hat.

Bot-gefiltert

Durch die serverseitige Bot-Erkennung wird nichtmenschlicher Datenverkehr gekennzeichnet, sodass die Chronik oder Statistiken Ihrer Mitglieder nicht beeinträchtigt werden.

Halten Sie den Rest der Reise fest

Das Web ist eine von vier Oberflächen. Sehen Sie, wie E-Mail, das Treueportal und Ihre App dieselbe Mitglieder-Timeline speisen.