SocialHub.AI
Pusat Pengembang · Pelacakan Web

Lacak perilaku di situs Anda sendiri.

Letakkan satu beacon pihak pertama di situs pemasaran atau e-commerce mana pun dan tampilan halamannya akan mengalir ke timeline perilaku anggota yang sama dengan email, portal loyalitas, dan aplikasi Anda. Tanpa kunci, tanpa ketergantungan — beberapa baris JavaScript murni yang mengirimkan data ke titik akhir publik. Flash mengurai perangkat, geo, dan deteksi bot di sisi server.

01 — Cara kerjanya

Satu baris yang dihosting, atau cuplikan mandiri

Tambahkan pelacak yang dihosting dengan satu tag skrip, atau tempel cuplikan mandiri jika Anda lebih suka tanpa ketergantungan eksternal — dengan cara apa pun, ini menghasilkan pengidentifikasi, menghormati sinyal privasi, dan POST menghasilkan tampilan halaman ke satu titik akhir:

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

Anda mengirimkan data kepada klien

URL, judul, perujuk, id, layar, bahasa, zona waktu, UTM — hanya itu.

Flash memperkaya sisi server

Perangkat, OS, dan browser diuraikan dari User-Agent; negara dari IP; bot dideteksi dan ditandai. Klien tidak perlu dipercaya untuk hal-hal ini.

Selalu mengembalikan 204

Bot, GPC, salah format, atau diterima — titik akhir menjawab secara diam-diam. Pelacakan tidak pernah menampilkan kesalahan di halaman Anda.

Di domain Anda sendiri, perilaku bersifat anonim. Tidak ada cookie sesi Flash di situs Anda, sehingga tampilan halaman dikaitkan dengan anonymous_id yang Anda hasilkan — bukan dengan anggota yang dikenal. Atribusi anggota terjadi pada permukaan yang dimiliki Flash (portal loyalitas dan pusat anggota dalam aplikasi), di mana sesi tersebut menyelesaikan identitas anggota. Gunakan anonymous_id yang konsisten agar perilaku pengunjung di situs setidaknya seragam di seluruh sesi mereka sendiri.

02 — Instalasi

Dua cara masuk. Atur YOUR_TEAM_ID dan Anda langsung aktif.

Direkomendasikan

Opsi A · Dihosting — satu baris

Lepaskan satu tag skrip sebelum </body>. Ini secara otomatis melacak perubahan rute aplikasi halaman tunggal dan mengekspos window.flashTrack() — tidak ada lagi yang perlu dihubungkan.

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>
↓ Unduh flash-tracker.jsLihat sumber ↗tanpa dependensi · hosting sendiri dari sumber Anda sendiri jika Anda mau

Opsi B · Inline — tanpa skrip eksternal

Ingin nol permintaan eksternal (CSP ketat, atau kode di dalam bundel Anda sendiri)? Tempelkan cuplikan mandiri ini sebagai gantinya. Ini mengekspos window.shTrack() — panggil setelah setiap perubahan rute di aplikasi satu halaman:

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 — Kontrak muatan

Badan beacon

Kirim application/json (atau string biasa melalui sendBeacon). Apa pun yang melebihi 4 KB atau gagal validasi akan diabaikan secara diam-diam.

BidangTipeCatatan
vnumberVersi skema. Selalu 1.
page_urlstringURL lengkap halaman (≤ 2048). Diperlukan.
page_titlestring?Judul dokumen (≤ 500).
referrerstring?document.referrer (≤ 2048).
anonymous_idstringID per-browser stabil yang Anda hasilkan (≤ 36). Wajib.
session_idstringID per sesi yang Anda buat (≤ 36). Wajib.
team_idstringID tim SocialHub Anda (≤ 36) — mengidentifikasi merek. Wajib.
utmobject?{ sumber, media, kampanye, istilah, konten } diuraikan dari kueri string.
screenstring?"1920x1080".
languagestring?navigator.language.
timezonestring?Zona geografis IANA, misalnya Amerika/Los_Angeles.
timestampnumberPeriode klien ms. Diperlukan.
04 — Perlindungan

Dibangun untuk menahan lalu lintas palsu

team_id Anda berada di kode sumber halaman Anda — seperti ID analitik lainnya, itu bersifat publik. Jadi, titik akhir melindungi dirinya sendiri di sisi server, secara diam-diam (selalu menjawab 204, sehingga penyerang tidak mendapatkan umpan balik untuk menyelidiki):

Pembatasan laju dasar · selalu aktif

Setiap tim dilindungi secara default tanpa pengaturan: titik akhir membatasi jumlah beacon yang dapat dikirim oleh satu sumber, sehingga team_id yang diambil tidak dapat membanjiri atau merusak analitik Anda. Ini bersifat fail-open — gangguan sementara tidak akan pernah mengurangi lalu lintas nyata Anda.

Daftar izin Origin · opsional

Di Pengaturan → Perlindungan Pelacakan, Anda dapat membatasi beacon yang diterima ke domain Anda sendiri, dengan pratinjau Pemantauan untuk memeriksa false positif sebelum Anda memberlakukannya. Ini memblokir situs lain yang menggunakan SDK Anda di browser.

Jujur tentang batasan

Pembatasan laju dan daftar yang diizinkan meningkatkan standar dan membatasi kerusakan, tetapi tidak ada klien tanpa kunci yang dapat sepenuhnya menghentikan skrip yang gigih untuk memalsukan permintaan. Untuk penyerapan sensitivitas tinggi, kirim server-ke-server melalui API yang terautentikasi sebagai gantinya.

Angka yang bersih di hilir

Anti-penyalahgunaan berjalan sebelum apa pun disimpan, sehingga lalu lintas yang difilter tidak pernah mencapai timeline anggota, segmen, atau dasbor Anda — dan halaman Perlindungan Pelacakan menunjukkan kepada Anda berapa banyak yang telah dicegah.

05 — Privasi

Hormati pengunjung melalui konstruksi

GPC & Jangan Lacak

Cuplikan kode tersebut memeriksa navigator.globalPrivacyControl dan navigator.doNotTrack dan tidak mengirimkan apa pun ketika salah satunya diatur. Pertahankan pengamanan itu.

Tidak ada PII mentah

Kirimkan hanya pengidentifikasi dan konteks halaman — jangan pernah nama, email, atau isi formulir dalam beacon. Identitas anggota diselesaikan di permukaan Flash, bukan di situs Anda.

Spanduk persetujuan Anda terlebih dahulu

Jika situs Anda menggunakan pengelola persetujuan, batasi cuplikan di balik persetujuan — hanya panggil pelacak setelah pengunjung menerima analitik.

Disaring oleh bot

Deteksi bot sisi server menandai lalu lintas non-manusia sehingga tidak mencemari linimasa atau statistik anggota Anda.

Rekam sisa perjalanan

Web adalah salah satu dari empat permukaan. Lihat bagaimana email, portal loyalitas, dan aplikasi Anda memberi makan garis waktu anggota yang sama.