工程日記・第十五天:29 個用戶、3 秒跳出、以及讓分析失明的 Cookie 橫幅
首批 Google Analytics 數據到了:29 個活躍用戶、9 秒平均參與時間、首頁 3 秒就跳出、一個月僅 1 次自然搜索。更糟的是——我們發現昨天上線的 Cookie 同意橫幅讓 GA4 完全失明,而且一個 UTMTracker 組件存在於代碼中卻從未掛載。一次提交修復七個問題:Hero 動畫從 2.2 秒降到 0.3 秒、服務端免同意頁面計數器、UTM 歸因修復、滾動深度追蹤、IndexNow 周定時任務、以及首頁實時空腿航班。
第一批真實數據
CEO 把 GA4 截圖發到了羣裏。經過數週的構建,我們終於有了真實用戶數據。數字很扎心:
| 指標 | 數值 |
|---|---|
| 活躍用戶 | 29 |
| 新用戶 | 28 |
| 平均參與時間 | 9 秒 |
| 首頁參與時間 | 3 秒 |
| 自然搜索會話 | 1 |
| 收入 | $0.00 |
首頁 3 秒。用戶落地後還沒來得及看到內容就離開了。但空腿航班頁面卻講述了不同的故事——27 到 31 秒的參與時間。當用戶找到實時的、數據豐富的內容時,他們確實會停留。首頁只是沒有提供這樣的內容。
三個問題
深入分析數據揭示了三個疊加的問題:
1. Cookie 橫幅讓分析失明瞭
我們昨天上線了 GDPR 合規的 Cookie 同意橫幅。分析 Cookie 默認關閉。GA4 只有在用戶明確點擊"接受全部"或在自定義面板中啓用分析後纔會加載。GA4 報告的 29 個用戶?那可能只是接受 Cookie 的 20-30%。真實流量可能是 3-5 倍——我們只是看不到。
我們甚至無法衡量這個差距。多少比例的訪客接受分析?多少拒絕?完全的盲區。
2. 從未追蹤的 UTMTracker
GA4 中 42% 的會話顯示爲"未分配"——沒有來源、沒有媒介、沒有活動。我追蹤到一個叫 UTMTracker.tsx 的組件。它寫得很好。它從 URL 提取 UTM 參數。它把參數存儲在歸因 Cookie 中。只有一個問題:它從未被掛載到任何佈局中。
這個組件存在於代碼庫中,有單元測試,已經在 ModeAwareLayout.tsx 中導入——但只在人類模式分支中。同時,中間件的語言環境重定向(/ → /zh)在客戶端追蹤器讀取之前就把 UTM 參數從 URL 中剝離了。雙重失敗:追蹤器沒有運行,即使運行了,參數也已經消失了。
3. 2.2 秒的空白屏幕
我們的 Hero 部分使用 Framer Motion 做交錯入場動畫。時間線:
| 元素 | 出現時間 |
|---|---|
| 標籤("200+ 機型") | 2.2 秒 |
| 標題("您的私人飛機") | 2.4 秒 |
| 副標題(價值主張) | 2.6 秒 |
| 預訂表單 | 2.6 秒 |
| CTA 按鈕 | 2.8 秒 |
| 滾動指示器 | 3.2 秒 |
2.2 秒內,訪客只看到一個深色的雲層視頻疊加——什麼都沒有。沒有標題,沒有價值主張,沒有行動號召。首頁平均參與時間 3 秒,大多數用戶在第一個字出現之前就已經決定離開了。
七個修復,一次提交
修復 1:Hero 動畫速度(2.2 秒 → 0.3 秒)
最簡單的改動,最大的影響。將交錯基準延遲從 2.2 秒減少到 0.3 秒,遞增從 0.2 秒 減少到 0.15 秒。預訂表單現在在 0.5 秒出現,而不是 2.6 秒。內容在三分之一秒內可見,而不是兩秒多。
修復 2:掛載 UTMTracker
在人類模式佈局中添加了用 <Suspense> 包裹的 <UTMTracker />(它使用 useSearchParams)。還修補了中間件以在語言環境重定向過程中保留所有 URL 參數——4 行代碼修復,確保 flyvolo.ai?utm_source=tiktok 重定向到 /zh?utm_source=tiktok 而不是僅僅 /zh。
修復 3:服務端頁面瀏覽計數器
使用 Vercel KV(與我們的限流器相同的 Upstash Redis 實例)構建了一個免同意、免 Cookie 的分析後備方案。一個小型客戶端組件在每次頁面導航時發送 navigator.sendBeacon。API 路由遞增一個每日計數器鍵:pv:2026-03-05:/en/empty-legs。沒有個人數據,沒有 Cookie,不需要同意——只有路徑 + 計數。基於合法利益的 GDPR 合規。
修復 4:同意選擇追蹤
在 Cookie 橫幅的"接受全部"、"拒絕全部"和"保存偏好"處理器中添加了 navigator.sendBeacon 調用。現在我們可以回答:多少比例的訪客接受分析?
修復 5:滾動深度和 CTA 追蹤
創建了一個 EngagementTracker 組件,使用 IntersectionObserver 追蹤滾動深度里程碑(25%、50%、75%、100%)和通過 data-track-cta 屬性追蹤 CTA 點擊。同時向 GA4(有同意時)和服務端端點(始終)發送數據。
修復 6:IndexNow 周定時任務
我們的 IndexNow 端點可以向 Bing、Yandex、Seznam 和 Naver 提交所有 3,400+ 個 URL——但它從未被自動觸發。創建了一個 Vercel Cron 任務,每週一 03:00 UTC 運行。
修復 7:首頁空腿航班預告
數據很清楚:空腿航班頁面的參與度比首頁高 9-10 倍(27-31 秒 vs 3 秒)。差異在哪?實時庫存數據、具體定價和可操作的交易。我們把這些帶到了首頁。創建了一個 EmptyLegsTeaser 服務端組件,從 Avi-Go 數據庫獲取 4 個實時交易,渲染在 TrustBar 和 AboutSection 之間。
今天還交付了:法律遷移 + Cookie 同意
增長計劃實際上是下半天的工作。上半天處理了三個法律任務:
- 美國 → 新加坡實體遷移:將服務條款和隱私政策從特拉華州法律/AAA 仲裁更新爲新加坡法律/SIAC(新加坡國際仲裁中心)。新增第 14 條"運營實體"——VOLO Technologies Pte. Ltd.。在隱私政策中添加了 PDPA。
- 代理合作條款頁面:在
/for-agents/terms構建了完整的 11 節法律頁面,涵蓋佣金層級(3-5%)、歸因規則、數據保護、反欺詐和管轄法律。 - Cookie 同意橫幅:構建了 GDPR 合規橫幅,三個類別:必要(始終開啓)、分析(選擇加入)、營銷/代理推薦(選擇加入)。使用
useSyncExternalStore讓 GA4 實時響應同意變更。
地理分佈
用戶地理分佈令人鼓舞。前三大市場與業務戰略完全吻合:新加坡(總部)12 人、中國 8 人、美國 7 人。四語言架構(en/zh/fr/es)和基於 IP 的語言檢測正在按預期工作。
數據彙總
| 指標 | 之前 | 之後 |
|---|---|---|
| Hero 內容可見 | 2.2 秒 | 0.3 秒 |
| UTM 歸因 | 損壞(從未掛載) | 工作中 + 重定向保留 |
| 頁面瀏覽追蹤覆蓋 | ~20-30%(僅同意) | 100%(服務端後備) |
| 滾動深度追蹤 | 無 | 25/50/75/100% 里程碑 |
| IndexNow 調度 | 僅手動 | 每週 Cron(3,400+ URL) |
| 首頁實時內容 | 無 | 4 個實時空腿航班 |
| 法律實體 | 美國(特拉華州) | 新加坡(VOLO Technologies Pte. Ltd.) |
提交記錄
8bed8d9 — 法律:更新實體至新加坡,添加代理合作條款,構建 Cookie 同意。
a7c035d — 修復:解決 react-hooks/set-state-in-effect lint 錯誤(React 19 兼容性)。
81b467e — 修復:爲機隊頁面 Merchant Listing Offer schema 添加 shippingDetails。
7e43e47 — 修復:解決 Merchant Listing image + shippingDetails 錯誤。
442f313 — 增長:基於 GA 數據的改進計劃 Phase A——參與度、分析、SEO。
打造產品最令人謙卑的時刻,是數據到來的那一刻。你已經編碼了數週,部署功能、修復 bug、編寫測試——然後數字告訴你:29 個人訪問了,大多數人 3 秒就離開了。但數據也告訴你該往哪裏挖。空腿頁面留住了用戶 31 秒。Hero 有 2.2 秒不可見。追蹤組件從未掛載。Cookie 橫幅讓分析靜音了。數據不僅僅讓你謙卑——它遞給你一把鏟子,指向該挖的地方。
準備好飛行了嗎?幾秒鐘獲取個性化包機報價。
訂閱資訊
空腿航班優惠、新航線與航空洞察,直達您的郵箱。