Open source
fbc-guard 檢查落地頁存放 Meta 點擊碼的程式,找出會讓轉換算到錯的廣告、或讓事件管理工具回報 fbclid 被修改的寫法。它只讀原始碼,不執行程式,也不會送任何資料給 Meta。
有人點了 Meta 廣告,落地頁網址會帶一個 fbclid。頁面把它存進第一方 cookie _fbc,格式是 fb.子網域索引.建立時間.fbclid,之後送事件時一起交給 Meta。
Meta 官方的 fbc/fbp 說明寫明了幾件事:點擊碼大小寫有差,不能改動;建立時間用毫秒;網址上的 fbclid 跟 cookie 裡存的不同時,就要寫入新的。
手寫的程式最常錯在這幾處。錯了頁面照樣能跑,訪客看不出任何異狀,只有成效報表會悄悄算錯。每條規則都註明依據:官方明文、從官方原則推得,或是實務上看過的錯誤。
只在沒有 cookie 時才寫入,回訪的人點了新廣告,送出去的還是舊點擊碼,轉換會算到上一支廣告。依據:官方明文。
從網址取出 fbclid 時已經解碼過,再呼叫一次 decodeURIComponent 就等於改了它。依據:從官方原則推得。
點擊碼大小寫有差,轉成小寫或大寫就成了另一個值。依據:官方明文。
用 slice、substring 把點擊碼切短,送出去的就不是原值。依據:從官方原則推得。
組 _fbc 時用 Date.now()/1000 這類秒數就錯了。先存成變數再串進去、寫在樣板字串裡,一樣抓得到。依據:官方明文。
寫死一個數字,換到不同層級的網域就對不上,應該依網域推算。依據:實務上看過的錯誤,Meta 文件沒有這樣規定。
跟 FBC-05 一樣,檢查 _fbp 的建立時間。依據:官方明文。
每一條規則都會給出下面其中一種結果。指令列的退出碼可以直接接在部署流程前面。
| 結果 | 代表什麼 | 退出碼 |
|---|---|---|
| pass | 沒找到已知的錯誤寫法 | 0 |
| fail | 至少一條規則抓到錯誤寫法 | 1 |
| unknown | 找不到存網址點擊碼的變數,這條無法判定 | 0 |
| not_applicable | 掃描範圍內沒有 _fbc,什麼都沒判斷,不等於通過 | 0 |
| 工具自我測試沒過 | 量尺本身壞了,不給任何判定 | 2 |
需要 Node.js 18 以上。直接檢查線上落地頁,它會一起抓同網域的 JS 檔,跨網域的不抓:
npx -y -p mcp-server-fbc-guard fbc-guard https://你的落地頁/也可以檢查部署前的檔案:
fbc-guard ./dist/index.html ./dist/js/tracking.js接成 MCP server,AI 寫追蹤碼時就能當場檢查:
{"mcpServers":{"fbc-guard":{"command":"npx","args":["-y","mcp-server-fbc-guard"]}}}兩個工具:check_fbc_code 檢查一段程式碼,check_fbc_url 抓網址和同網域的 JS 再檢查。
MIT 授權。這是讀原始碼的靜態檢查,通過的意思是「沒找到已知的錯誤寫法」,不代表程式一定正確。壓縮或混淆過的程式、跑起來才組出來的程式,可能藏住錯誤;放在代碼管理工具容器、跨網域腳本或伺服器端的追蹤碼,這次掃描看不到。要確認實際送出的值,還是要在瀏覽器帶著舊 cookie 和真實的 fbclid 實測一次。
點擊碼只是追蹤設定的其中一段:
事件管理工具說 fbclid 被修改,是什麼原因?
fbc 參數裡的點擊碼,跟廣告點擊時網址上的原值不一樣。常見原因是程式把 fbclid 再解碼一次、改了大小寫、切短,或回訪者點了新廣告卻沒有蓋掉舊 cookie。fbc-guard 會逐條找出這些寫法。
_fbc 的建立時間要用秒還是毫秒?
毫秒。Meta 官方格式裡的建立時間是毫秒時間戳,也就是 Date.now() 的值,不要再除以 1000。
已經裝了 Meta Pixel,還需要檢查嗎?
_fbc 完全交給 Pixel 自己寫的話,這支工具會回報不適用。要檢查的是自己寫 cookie、或自己從網址抓 fbclid 送轉換 API 的程式。
會把資料送給 Meta 嗎?
不會。它只讀頁面原始碼和同網域的 JS 檔,不執行程式,也不送任何資料出去。