Skip to content

Commit dd30cfb

Browse files
committed
fix(tracker): emit empty referrer and normalize 'direct' server-side
Tracker now sends empty string when document.referrer is missing; the API normalizes legacy 'direct' values alongside empty strings in the isDirect / referrer CASE expressions. Also adds the full set of Telegram domains to the referrer classification list.
1 parent 00ed790 commit dd30cfb

4 files changed

Lines changed: 9 additions & 5 deletions

File tree

apps/api/src/query/expressions.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ export const Expressions = {
200200
referrer: {
201201
normalized: expr(`
202202
CASE
203-
WHEN referrer = '' OR referrer IS NULL THEN 'direct'
203+
WHEN referrer = '' OR referrer IS NULL OR referrer = 'direct' THEN 'direct'
204204
WHEN domain(referrer) LIKE '%.google.com%' OR domain(referrer) LIKE 'google.com%' THEN 'https://google.com'
205205
WHEN domain(referrer) LIKE '%.facebook.com%' OR domain(referrer) LIKE 'facebook.com%' THEN 'https://facebook.com'
206206
WHEN domain(referrer) LIKE '%.twitter.com%' OR domain(referrer) LIKE 'twitter.com%' OR domain(referrer) LIKE 't.co%' THEN 'https://twitter.com'
@@ -210,7 +210,7 @@ export const Expressions = {
210210

211211
domain: expr("domain(referrer)"),
212212

213-
isDirect: expr("referrer = '' OR referrer IS NULL"),
213+
isDirect: expr("referrer = '' OR referrer IS NULL OR referrer = 'direct'"),
214214

215215
isExternal: (websiteDomain: string) =>
216216
expr(`

packages/shared/src/lists/referrers.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2584,7 +2584,11 @@ export const referrers: Record<string, { type: string; name: string }> = {
25842584
"vkontakte.ru": { type: "social", name: "Vkontakte" },
25852585
"weibo.com": { type: "social", name: "Weibo" },
25862586
"t.cn": { type: "social", name: "Weibo" },
2587+
"t.me": { type: "social", name: "Telegram" },
2588+
"telegram.org": { type: "social", name: "Telegram" },
2589+
"telegram.me": { type: "social", name: "Telegram" },
25872590
"web.telegram.org": { type: "social", name: "Telegram" },
2591+
"desktop.telegram.org": { type: "social", name: "Telegram" },
25882592
"org.telegram.messenger": { type: "social", name: "Telegram" },
25892593
"org.telegram.messenger.web": { type: "social", name: "Telegram" },
25902594
"org.aka.messenger": { type: "social", name: "Telegram" },

packages/tracker/src/core/tracker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@ export class BaseTracker {
392392
window.location.search +
393393
window.location.hash,
394394
title: document.title,
395-
referrer: document.referrer || "direct",
395+
referrer: document.referrer || "",
396396
viewport_size: width && height ? `${width}x${height}` : undefined,
397397
timezone: this.cachedTimezone,
398398
language: navigator.language,

packages/tracker/tests/context.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,7 @@ test.describe("Event Context", () => {
524524
expect(payload?.referrer).toBe("https://google.com/search?q=test");
525525
});
526526

527-
test("uses 'direct' when no referrer", async ({ page }) => {
527+
test("uses empty string when no referrer", async ({ page }) => {
528528
await page.goto("/test");
529529
await page.evaluate(() => {
530530
// Clear any referrer
@@ -548,7 +548,7 @@ test.describe("Event Context", () => {
548548
const request = await requestPromise;
549549
const payload = findEvent(request, (e) => e.name === "screen_view");
550550

551-
expect(payload?.referrer).toBe("direct");
551+
expect(payload?.referrer).toBe("");
552552
});
553553
});
554554

0 commit comments

Comments
 (0)