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.
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:
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.
Zwei Wege zum Ziel. Setzen Sie YOUR_TEAM_ID und Sie sind live.
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.
<!-- 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>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:
<!-- 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>// Single-page apps: after each client-side route change
router.afterEach(function () { window.shTrack && window.shTrack(); });Der Beacon-Körper
Senden Sie application/json (oder ein einfaches string über sendBeacon). Alles über 4 KB oder mit Validierungsfehlern wird stillschweigend verworfen.
| Feld | Typ | Notizen |
|---|---|---|
v | number | Schemaversion. Immer 1. |
page_url | string | Vollständige URL der Seite (≤ 2048). Erforderlich. |
page_title | string? | Dokumenttitel (≤ 500 Zeichen). |
referrer | string? | document.referrer (≤ 2048). |
anonymous_id | string | Stabile, browserspezifische ID, die Sie generieren (≤ 36). Erforderlich. |
session_id | string | Von Ihnen generierte Sitzungs-ID (≤ 36). Erforderlich. |
team_id | string | Ihre SocialHub-Team-ID (≤ 36) – identifiziert die Marke. Erforderlich. |
utm | object? | { Quelle, Medium, Kampagne, Begriff, Inhalt } aus der Abfrage string extrahiert. |
screen | string? | „1920x1080“. |
language | string? | navigator.language. |
timezone | string? | IANA tz, z. B. America/Los_Angeles. |
timestamp | number | Client-Epoche ms. Erforderlich. |
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.
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.