Tenten AIGEO
回到部落格
技術實作手冊實作

從伺服器日誌驗證 GPTBot 是否真的來爬你的網站(附 log 分析範例)

GA4 看不到 GPTBot。想確認 OpenAI 的 AI 爬蟲真的來抓你的網站,唯一的證據在伺服器日誌。本文用 grep 與 awk 範例,帶你從 access log 撈出 GPTBot、驗證真偽、判讀狀態碼,找出被擋在門外的頁面。

Tenten GEO 團隊發布於 2026-07-125 分鐘閱讀
昏暗機房中,一道發光的日誌資料流從伺服器流向被薰衣草色光束照亮的爬蟲身影,象徵在日誌中捕捉 AI 爬蟲。

你在 Google Analytics 裡永遠看不到 GPTBot。GA4 和多數第三方分析工具,都要靠瀏覽器執行 JavaScript 才記下一次造訪,而 GPTBot 不跑 JS、也不會觸發那段追蹤碼。要證明 OpenAI 的爬蟲真的來抓過你的頁面、抓到什麼、拿到哪種回應,唯一可信的證據是伺服器的原始存取日誌(access log)。

為什麼伺服器日誌才是唯一的真相

AI 爬蟲和真人使用者走的是兩條路。真人開瀏覽器,載入頁面、執行 JS、觸發 GA4 事件,於是你在儀表板看到一次工作階段。GPTBot 這類爬蟲只發出一個 HTTP 請求、把回傳的 HTML 收走就離開,不執行你的追蹤程式碼,分析工具因此完全漏記它。伺服器日誌不一樣:每一個打進來的請求,不論來自真人、Googlebot 還是 GPTBot,Nginx 或 Apache 都會逐行寫下來源 IP、時間、請求路徑、回傳狀態碼與 User-Agent。這份紀錄無法被前端擋掉,也不會因為對方不跑 JS 就消失。

先認得三隻 OpenAI 爬蟲,別只盯著 GPTBot

很多人以為 OpenAI 只有一隻爬蟲,於是在 log 裡只搜 GPTBot,結果嚴重低估自己的能見度狀況。OpenAI 至少有三隻用途不同的爬蟲,各自帶不同的 User-Agent,你要分開看待、也要分開統計。

  • GPTBot:為模型訓練與改進而抓取,User-Agent 內含「GPTBot」。它遵守 robots.txt,來源 IP 公開在 openai.com/gptbot.json。
  • OAI-SearchBot:為 ChatGPT 內的搜尋功能建立索引,User-Agent 內含「OAI-SearchBot」。這隻和你在 ChatGPT 答案裡「被引用」的關係最直接。
  • ChatGPT-User:使用者在 ChatGPT 中即時要求讀取某個連結時才觸發,User-Agent 內含「ChatGPT-User」。它出現,代表當下有真人透過 ChatGPT 造訪你的頁面。
  • 延伸一步:同一份 log 裡通常還有 PerplexityBot、ClaudeBot、Google-Extended 等其他 AI 爬蟲,判讀方法完全一樣。

第一步:從 access log 撈出 GPTBot 的足跡

以最常見的 Nginx combined 格式為例,一行日誌長這樣:來源 IP、時間、"GET /blog/geo-audit HTTP/1.1"、狀態碼 200、回傳位元組數,最後是 User-Agent 字串。GPTBot 的請求,User-Agent 尾端會標明 compatible; GPTBot/1.2; +https://openai.com/gptbot。有了這個特徵,用幾行指令就能把它的行為攤開。

  • 撈出所有 GPTBot 請求:grep -i "GPTBot" /var/log/nginx/access.log
  • 數它今天來了幾次:grep -ic "GPTBot" access.log
  • 看回傳狀態碼分布(combined 格式第 9 欄是 HTTP 狀態碼):grep -i "GPTBot" access.log | awk '{print $9}' | sort | uniq -c | sort -rn
  • 看它最常抓哪些頁(第 7 欄是請求路徑):grep -i "GPTBot" access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -20
  • 一次比較三隻爬蟲的抓取量:grep -c "GPTBot" access.log;grep -c "OAI-SearchBot" access.log;grep -c "ChatGPT-User" access.log

輸出會立刻告訴你三件事:頻率(一天幾次、集中在哪個時段)、覆蓋範圍(它有沒有抓到你最重要的產品頁和文章,還是只在首頁繞圈),以及回應健康度(狀態碼是不是幾乎都 200)。如果 grep 出來一片空白,代表過去這段時間 GPTBot 根本沒來,那要回頭查 robots.txt 或防火牆是不是把它擋在門外。

從 access log 到判讀 GPTBot 行為的三步驟流程圖:撈取、驗證真偽、判讀狀態碼。
三步驟從伺服器日誌驗證 AI 爬蟲:先 grep 撈取,再比對官方 IP 驗真偽,最後看狀態碼判斷抓取健康度。

第二步:確認這隻 GPTBot 是真的

User-Agent 字串可以隨便偽造。任何爬蟲、甚至惡意流量,都能在標頭裡填上「GPTBot」來假冒身分,藉此繞過某些規則或消耗你的資源。所以撈到之後還要驗真偽,方法有兩個,可靠度都高。

  • 比對官方 IP 清單:OpenAI 把各爬蟲的來源 IP 區段公開在 openai.com/gptbot.json、openai.com/searchbot.json、openai.com/chatgpt-user.json。把 log 裡的來源 IP 拿去比對,落在對應區段內才算數。
  • 反向 DNS 驗證:對來源 IP 做 PTR 查詢(host 或 dig -x),正牌 GPTBot 會解析回 OpenAI 名下的網域;再對那個網域做一次正向查詢,確認解析回同一個 IP(forward-confirmed rDNS)。兩邊對得上才可信。

第三步:看它抓到什麼、拿到什麼狀態碼

爬蟲有來,不代表你被抓好抓滿。真正決定你能不能被 ChatGPT 引用的,是它每一次請求「拿到什麼」。這裡有四個訊號要盯。

  • 狀態碼:理想是清一色 200。大量 403 通常是 Cloudflare 或 WAF 把 GPTBot 當可疑流量擋掉;404 代表你的 sitemap 或內部連結指向已失效的網址;連續 5xx 則是伺服器在爬蟲來的時候出錯。
  • 覆蓋的頁面:核對它抓的路徑清單,最該被引用的定價頁、方案頁、深度文章有沒有在裡面。只抓首頁和幾支舊文,等於你的主力內容對 AI 是隱形的。
  • llms.txt 與 robots.txt 的命中:log 裡看得到爬蟲有沒有請求 /llms.txt 和 /robots.txt。如果你放了 llms.txt 卻從沒被讀取,代表這隻爬蟲目前不吃這套,別高估它的作用。
  • 抓取頻率與新鮮度:對照你發文或改版的時間,看 GPTBot 多久回來重抓一次。回訪間隔太長,代表你的新內容要很久才會進到模型的認知裡。

先看日誌,再談優化

在你花力氣寫 llms.txt、補 Schema、重寫內容之前,先花十分鐘 grep 一次 access log。Tenten 接手過一個案子:客戶的 llms.txt 和 Schema 都做足了,log 一撈才發現 GPTBot 半年來每次都被 WAF 回 403,前面的優化全打了水漂。日誌會誠實告訴你 GPTBot 到底來不來、抓到什麼、被擋在哪,這是所有 GEO 技術優化裡最便宜、也最該先做的一步。想知道自己的日誌藏了哪些能見度缺口、又該先修哪一個,可以預約一場 30 分鐘 GEO 診斷,我們直接對著你的抓取狀況,指出最該動手的地方。

常見問題

GPTBot 會出現在 Google Analytics 裡嗎?
不會。GA4 靠瀏覽器執行 JavaScript 才記錄造訪,而 GPTBot 不執行 JS、也不觸發追蹤碼,因此完全被漏記。唯一能證明它來過的證據,是伺服器的原始存取日誌。
怎麼確認 log 裡的 GPTBot 是真的、不是偽造的?
兩個方法:一是把來源 IP 比對 OpenAI 公開在 openai.com/gptbot.json 的官方區段;二是做反向 DNS 查詢並正向確認(forward-confirmed rDNS)。兩者對得上才可信。
用哪個指令能快速看 GPTBot 的抓取狀況?
用 grep -i "GPTBot" access.log 撈出請求,再接 awk '{print $9}' | sort | uniq -c 看狀態碼分布。若大量出現 403,通常是 WAF 或防火牆把它擋掉了。

READY WHEN YOU ARE

想知道你的品牌在 AI 答案裡值多少?

30 分鐘 GEO 診斷,我們用你的實際提問,帶你看見在六大 AI 引擎裡的能見度缺口,以及補上它的優先順序。

預約 30 分鐘診斷