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.
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:
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.
Dua cara masuk. Atur YOUR_TEAM_ID dan Anda langsung aktif.
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.
<!-- 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>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:
<!-- 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(); });Badan beacon
Kirim application/json (atau string biasa melalui sendBeacon). Apa pun yang melebihi 4 KB atau gagal validasi akan diabaikan secara diam-diam.
| Bidang | Tipe | Catatan |
|---|---|---|
v | number | Versi skema. Selalu 1. |
page_url | string | URL lengkap halaman (≤ 2048). Diperlukan. |
page_title | string? | Judul dokumen (≤ 500). |
referrer | string? | document.referrer (≤ 2048). |
anonymous_id | string | ID per-browser stabil yang Anda hasilkan (≤ 36). Wajib. |
session_id | string | ID per sesi yang Anda buat (≤ 36). Wajib. |
team_id | string | ID tim SocialHub Anda (≤ 36) — mengidentifikasi merek. Wajib. |
utm | object? | { sumber, media, kampanye, istilah, konten } diuraikan dari kueri string. |
screen | string? | "1920x1080". |
language | string? | navigator.language. |
timezone | string? | Zona geografis IANA, misalnya Amerika/Los_Angeles. |
timestamp | number | Periode klien ms. Diperlukan. |
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.
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.