AI 爬蟲
看看哪些 AI 爬蟲真正造訪你的網站,以及如何安裝追蹤。
AI 爬蟲追蹤顯示哪些 AI 引擎真正在造訪你的網站:GPTBot、ClaudeBot、PerplexityBot、Bingbot 等。它與 GEO 稽核互補:稽核告訴你機器人能否到達頁面;爬蟲追蹤告訴你它們是否真的來了。
為什麼用伺服器端擷取
AI 訓練爬蟲不執行 JavaScript,Google Tag Manager 或 JavaScript 像素永遠 看不到 GPTBot 或 ClaudeBot。Citlyze 在伺服器端擷取爬蟲造訪,那裡能看到 真實的請求 User-Agent,因此不執行 JavaScript 的爬蟲也會被統計。
人類這一半則不同:由 AI 回答引薦的訪客會執行 JavaScript,因此對 AI 流量來說,瀏覽器程式碼片段或 Tag Manager 安裝就足夠了(見 安裝 AI 流量追蹤)。本頁的 伺服器端安裝則同時擷取兩種。
安裝追蹤
前往 設定 → 連接 → 網站追蹤並產生網站金鑰。金鑰有兩部分(金鑰 ID 與簽章 密鑰),只顯示一次;兩者都要複製。然後為你的平台加入對應程式碼片段 (每個選項的逐步安裝說明見安裝 AI 爬蟲追蹤):
- Cloudflare(建議):把 Worker 片段放在網站前面。
- Vercel / 反向代理:加入中介軟體片段。
- WordPress:下載 AI Crawler Control by Citlyze,在 wp-admin → 外掛中
上傳,然後在其設定中填寫全部三個欄位:Tracker base URL
(
https://app.citlyze.com)、Key ID 與 Signing secret,再使用 發送測試事件(Send test event)驗證連線。在填寫追蹤器基礎 URL 之前,外掛不會回報任何資料。 - 自建伺服器 / Node:適用於自架網站(AWS、GCP、Azure、裸機、容器):
加入 Express 風格的中介軟體片段(Node 20+)。它可適配 Fastify、Koa 或原生
http,其他語言也可以直接實作簽章信標協定。
Cloudflare、Vercel 與自建伺服器的程式碼片段從環境變數
CITLYZE_SIGNING_SECRET(在 Cloudflare 上是加密的 Worker 機密)讀取簽章
密鑰,因此簽章密鑰永遠不會出現在你提交或分享的程式碼中。WordPress 外掛則把它
保存在外掛設定裡。
每個事件都用你的密鑰簽章,追蹤器可以拒絕偽造的信標。
該簽章只證明這份回報來自你的網站,並不能說明訪客是誰。確認訪客確實是 GPTBot 是另一個步驟,見驗證如何運作。
標準 Shopify 商店無法執行伺服器端擷取,而且 Shopify 不支援在商店前架設代理 (例如 Cloudflare),因此標準 Shopify 無法使用完整的爬蟲追蹤。Headless 的 Hydrogen 或 Oxygen 店面執行伺服器端程式碼,可以使用自建伺服器片段。Webflow 託管同樣無法執行伺服器程式碼;在 Webflow Enterprise 上,自行管理的反向代理 可以在代理層執行 Cloudflare Worker 或自建伺服器片段。
採集器會回報每個請求的結果:
- Cloudflare Worker、自建伺服器中介軟體與 WordPress 外掛會傳送精確的 HTTP 狀態碼(200、301、404、410、500 等),用於驅動下文的錯誤與重新導向 洞察。Vercel 中介軟體在回應產生之前執行,因此無法回報;如需在 Vercel 上取得 狀態碼,請改用 網站追蹤 → 伺服器記錄中的 Vercel log drain,而不是中介 軟體。
- 發生重新導向時,這三種採集器還會傳送導向目標:指向你自己網站的頁面時 傳送路徑,指向其他網站時只傳送網域。
- 爬蟲造訪還會傳送查詢字串(例如
?page=2)。人類訪客的查詢字串永遠不會 離開你的網站。
事件以帶簽章的批次傳送。如果 Citlyze 暫時無法連線,Cloudflare Worker 與 自建伺服器中介軟體會重試一次;WordPress 外掛會把未送達的事件在你的 WordPress 資料庫中保留最多一天,並持續重試。重試永遠不會被重複計算。每個 已安裝的採集器還會至少每天更新一次已知爬蟲清單,因此無需更新片段或外掛即可 識別新出現的爬蟲。當你的片段或外掛有新版本時,網站追蹤頁面會提示你。
WordPress 外掛能看到每個到達 WordPress 的請求,包括在頁面算繪前被其他外掛 重新導向的請求。它看不到從未到達 WordPress 的請求:由全頁快取直接回傳的 頁面、由你的 Web 伺服器或 CDN 完成的重新導向,以及在 WordPress 載入前被 防火牆攔截的請求。外掛設定頁偵測到頁面快取時會提示你。對於大量使用快取的 網站,請使用 Cloudflare Worker 或上傳伺服器記錄檔。如果 WordPress 位於 Cloudflare 以外的代理或負載平衡器之後,請在外掛設定中填寫代理設定的用戶端 IP 標頭與代理位址,以便按真實位址驗證爬蟲。
每個網站只使用一種採集方式。如果網站採集器與伺服器記錄檔來源回報同一個 網域,每次造訪都會被計算兩次;發生這種情況時,網站追蹤頁面會提醒你。
自建伺服器與其他語言
自建伺服器頁籤提供的是 Node 中介軟體,但任何技術棧都可以回報:向
https://app.citlyze.com/api/track 發送帶簽章的 HTTPS POST 請求,攜帶
JSON 請求主體(最大 256 KB)與 Content-Type: application/json。每個請求
攜帶一個包含 1 到 50 個事件的批次。
必要的請求標頭:
| 標頭 | 值 |
|---|---|
x-aeo-schema | 字面字串 3。 |
x-aeo-key-id | 你的金鑰 ID(產生網站金鑰時顯示的 UUID)。 |
x-aeo-ts | 以秒計的 Unix 時間戳;必須與追蹤器時鐘相差 5 分鐘以內。 |
x-aeo-nonce | 每個批次唯一:16 到 64 個字元,由十六進位數字與連字號組成。去掉連字號的 UUID 即可。 |
x-aeo-signature | 小寫十六進位 HMAC,按下述方式計算。 |
計算簽章:
- 衍生簽章用金鑰:對你的簽章密鑰(完整的
ctk_...字串)取小寫 64 位 十六進位 SHA-256。將該十六進位字串的 UTF-8 位元組用作 HMAC 金鑰; 不要對它做十六進位解碼。 - 建構訊息:
"3\n" + timestamp + "\n" + nonce + "\n" + bodyDigest,其中bodyDigest是你實際發送的請求主體位元組的小寫十六進位 SHA-256。簽章 之後任何重新序列化都會使簽章失效。 x-aeo-signature就是用第 1 步的金鑰對該訊息計算的小寫十六進位 HMAC-SHA256。
請把簽章密鑰保存在環境變數或平台的機密儲存中,永遠不要寫進原始碼。
請求主體欄位:
collector:你的整合的簡短名稱,例如my-app/1.0(字母、數字、.、_、/與-,最長 64 個字元)。events:事件清單。每個事件包含以下欄位(除註明外均為必填):occurredAt:請求發生的時間,以自 Unix 紀元起的毫秒數表示。超過 48 小時的事件會被忽略。host:請求的主機名稱(不含連接埠),或空字串。主機既不是你網站金鑰 的網域、也不是其子網域的事件會被忽略。userAgent:訪客的 User-Agent,最長 1024 個字元。path:請求路徑,以/開頭,不含查詢字串與片段識別,最長 2048 個字元。query(選填):不含?的查詢字串,僅用於爬蟲請求。visitorIp:你的伺服器看到的用戶端 IP。位於負載平衡器或反向代理之後 時,從你自己的代理設定的轉送標頭中取值;爬蟲身分驗證檢查的正是這個 欄位。referrer:空字串,或去掉查詢與片段的https://來源 URL。只對從 AI 回答點擊進入的人類造訪有意義。utmSource(選填):當來自 AI 回答的造訪沒有來源資訊時,填寫utm_source的值。status:回應的三位 HTTP 狀態碼;如果在回應產生之前回報,則為unknown。method:大寫的 HTTP 方法。redirectTarget(選填):對於 3xx 回應,填寫它指向的Location。
只回報 User-Agent 看起來是自動化程式、或來源是 AI 回答引擎的請求,並在回應
之後發送批次,絕不要讓訪客等待。如果批次因網路錯誤、429 或 5xx 失敗,
請使用相同的 nonce 與請求主體以及新的時間戳重試:已經送達的批次會依其
nonce 識別,只計算一次。429 回應帶有 Retry-After 標頭。其他任何 4xx
都表示批次本身無效,請不要重試。
你也可以選擇每天從 GET https://app.citlyze.com/api/track/registry 取得
一次最新的已知爬蟲識別與 AI 來源主機清單,並在 x-aeo-key-id 標頭中攜帶
你的金鑰 ID。回應標頭 x-aeo-registry-signature 是用第 1 步的金鑰對
"citlyze-registry-1\n" + bodyDigest 計算的小寫十六進位 HMAC-SHA256;
不相符時請忽略該清單。
要驗證你的整合,發送一個帶 "test": true 的批次,其中只包含一個事件,
該事件的 userAgent 以 citlyze-connection-test/ 開頭,path 為
/citlyze-test。簽章正確的測試回傳 HTTP 200 且不儲存任何內容;真實批次
回傳 204,無論造訪最終是否出現在你的報告中。
輪換或撤銷金鑰
如果簽章密鑰可能已外洩(例如被提交到程式碼儲存庫或出現在截圖中),請使用
金鑰旁邊的輪換。輪換會為同一把金鑰簽發新的密鑰:金鑰 ID、名稱、網域
與全部歷史記錄都會保留,但舊密鑰立即失效;請盡快把 CITLYZE_SIGNING_SECRET
(或外掛設定)更新為新密鑰。
撤銷則不同:它會永久停用該金鑰,並停止該網站的追蹤。
解讀分析
診斷 → AI 爬蟲活動 → 總覽頁面針對所選時間範圍顯示:
- 頂部指標卡:爬蟲總造訪、不同爬蟲數、最活躍爬蟲與趨勢
- 爬蟲造訪隨時間變化(每日總量)
- 爬蟲造訪時段:按一天中各小時統計的造訪量
- 各爬蟲趨勢(每個爬蟲一條線)
- 按爬蟲細分,含組織、用途、造訪量與趨勢
- 被爬取最多的頁面(前 10,附完整清單連結)
- 未識別的機器人:與任何已知 AI 爬蟲都不符的類機器人 User-Agent, 歸入「未知機器人」分組,讓新爬蟲盡早顯現
日期與小時依你瀏覽器的時區計算,因此紐約晚上 9 點的造訪計入當天,而不是 隔天。按頁面的表格使用 UTC 日期。
趨勢只比較完整的日期。今天尚未結束時不參與比較,每個完整的日期都與上一個 期間中對應的日期比較。在上一個期間沒有造訪的爬蟲顯示新增而不是百分比; 如果追蹤是在上一個期間開始之後才啟動的,則暫不顯示趨勢。
使用預設時間範圍(7/30/90 天)、自訂日期範圍與爬蟲篩選器聚焦檢視。追蹤 多個網站的工作區還會顯示網站篩選器。從 AI 回答進入的訪客見 AI 流量。
驗證如何運作
任何用戶端都能在 User-Agent 裡寫上 GPTBot。所以 User-Agent 只是一種宣稱,
而非證據。Citlyze 也依此處理:核心爬蟲數據只統計我們能獨立確認的流量。
每次造訪會得到三種信心度之一:
- 已驗證:我們對照營運方公開的資訊確認了訪客的網路身分。只有這些會計入 你的總數。
- 疑似:有旁證支持,例如你的 CDN 將該請求標記為已知機器人,但沒有獨立 確認。
- 未驗證:User-Agent 宣稱是某個爬蟲且沒有矛盾之處,但我們無法確認。會 單獨呈現,絕不計入你的總數。
驗證會使用營運方所支援的方式:
| 方式 | 能證明什麼 |
|---|---|
| 已簽章請求 | 請求帶有加密簽章,我們對照營運方公開的金鑰完成了驗證。這是最強的證據。 |
| 公布的 IP 範圍 | 來源位址落在營運方為其爬蟲公布的 IP 範圍內。 |
| 反向 DNS | 來源位址解析到營運方的網域,而該名稱又解析回同一位址。 |
| 已知 IP 範圍 | 來源位址落在營運方文件中固定記載的 IP 範圍內。 |
| CDN 證明 | 你的 CDN 將該請求辨識為已知機器人。屬旁證,並非定論。 |
| 僅 User-Agent | 除了自報的名稱之外沒有任何依據。始終為未驗證。 |
未公布任何可驗證資訊的營運方,最多只能達到未驗證。這是該爬蟲本身的特性, 不是你的設定有問題;這也正是我們分開呈現、而不是混成一個數字的原因。
有兩點值得了解:
- 代理流量單獨統計。 由人操作的工具(例如 ChatGPT Agent)會出現在代理活動 中,而不計入爬蟲總數:一個人點擊與一個爬蟲為你建立索引,並不是同一種訊號。
- 有時我們無法完成驗證:營運方的 IP 清單可能暫時無法存取。這類造訪會維持 未驗證而不是被計入,因此你的總數絕不會包含我們未確認的內容。
被爬取頁面
診斷 → AI 爬蟲活動 → 被爬取頁面是完整的下鑽檢視:所選時間範圍內 AI 爬蟲爬取過的 每個頁面,支援搜尋、排序與分頁。每列顯示造訪量、佔全部爬蟲流量的份額、與 上一期間的趨勢對比、錯誤數、重新導向數、最活躍爬蟲與最近造訪時間;展開一列 可查看按爬蟲的細分,以及爬蟲收到的具體狀態碼。
相關時,表格上方會出現以下洞察:
- 被爬取但從未被引用:AI 引擎爬取了但從未在你追蹤的回答中引用的頁面; 適合改寫為更清晰、更易被引用的內容。
- 回傳錯誤的頁面:以 4xx/5xx 回應爬蟲的頁面。損壞的頁面無法被讀取或 引用。
- 發生重新導向的頁面:爬蟲仍在請求、隨後被重新導向的舊 URL。請把內部 連結與網站地圖指向最終 URL。
- 首次被爬取的頁面:自追蹤開始以來、在本期間之前從未被任何 AI 爬蟲 爬取過的頁面。新內容出現在這裡,表示爬蟲已經發現了它。
狀態碼與重新導向需要能回報它們的採集器:Cloudflare Worker、自建伺服器中介 軟體、WordPress 外掛或伺服器記錄檔。
在包含資料匯出的方案中,表格可下載為 CSV。
抓取日誌
診斷 → AI 爬蟲活動 → 抓取日誌按天、按時間順序列出已驗證 AI 爬蟲與已簽章代理對你 網站發出的每個請求,並歸入抓取工作階段(同一爬蟲的請求之間間隔不超過 30 分鐘)。每個請求都會顯示時間、頁面及其查詢字串、狀態碼;對於重新導向, 還會顯示導向目標,以及爬蟲是否在同一工作階段中跟隨了它。在一個工作階段中 被多次爬取的頁面會有標記。
抓取日誌只保存已驗證爬蟲與已簽章代理的請求,從不包含其他訪客,也從不儲存
IP 位址或 User-Agent。可能包含憑證或個人資料的查詢參數(例如 token 或
email)的值會被替換為 redacted。可回看的天數取決於你的方案,見
方案與限額。在包含資料匯出的
方案中,單日日誌可下載為 CSV。
透過 API 與 MCP 取得資料
安裝追蹤後,爬蟲造訪即可程式化取得:
- REST:
GET /api/v1/crawler-events,見 AI Crawler Events 資源。 - MCP:
list_crawler_events工具,見 MCP 工具參考。
兩者均為唯讀、限定在你的工作區內。REST 資源支援按 crawler_id、被追蹤網
站與精確 path 篩選;來自 AI 回答的人類造訪透過
GET /api/v1/ai-referrals 取得。