用 curl 帶 GPTBot 的 User-Agent:三行指令,算出 AI 爬蟲讀到你官網幾個字

想知道 AI 爬蟲讀到你官網什麼,不用買工具。用 curl 帶上 GPTBot 的 User-Agent 抓網頁,再用十行 Python 把 script、style 這些程式碼拿掉、算剩下的字數,三行指令就有答案。我們舊官網首頁跑出來是 77 個字,現在是 1,783 個字。這篇附完整指令、怎麼看結果,以及這個方法看不到的地方。

先把下面「ai-read.py」那一節的十行 Python 存成檔案,再打開終端機,貼上這三行,把第二行的網址換成你的官網:

export UA="Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.4; +https://openai.com/gptbot"
curl -s -A "$UA" -o page.html https://你的網域/
python3 ai-read.py < page.html

畫面會印出兩樣東西:不跑 JavaScript 的爬蟲讀到的前 200 個字,和總字數。

我們用這三行抓自己的舊官網首頁,得到的是:

火曜領航 火箭燃料 · 裝載中 ⚠️ 應用載入失敗 很抱歉,應用程式未能正確載入。這可能是因為暫時性的網絡問題或瀏覽器相容性問題。 重新載入頁面 返回首頁

AI 讀到 77 個字

瀏覽器裡一切正常的官網,在這裡只剩一句載入失敗。

三行指令各在做什麼?

第一行:設定 GPTBot 的 User-Agent。 User-Agent 是瀏覽器或爬蟲每次連線時自報的身分。這串是 OpenAI 爬蟲說明頁上 GPTBot 的範例字串,官方註明「版本號可能會變」,2026 年 10 月 18 日查的時候是 1.4 版。要用最新的,就到 OpenAI 的〈Overview of OpenAI Crawlers〉頁面複製。

第二行:curl 用這個身分抓網頁,存成 page.html。 -s 是安靜模式,不印進度條;-A 是指定 User-Agent;-o page.html 是把抓到的原始 HTML 存成檔案。curl 官方說明寫,字串裡有空白時要用單引號或雙引號包起來,GPTBot 這串有空白,所以 "$UA" 的引號不能省。

第三行:把 page.html 交給 ai-read.py。 原始 HTML 裡大半是程式碼,直接算字數沒有意義。這支小程式負責把程式碼拿掉、算剩下的文字。存成檔案的好處是:想看別的段落、或用其他工具檢查,不用再抓一次。

ai-read.py:十行 Python

把下面這段存成 ai-read.py,和你下指令的地方放在同一個資料夾(十行,前三行是說明):

#!/usr/bin/env python3
"""從標準輸入讀 HTML,印出不跑 JavaScript 的爬蟲讀得到的文字和字數。
去掉 script、style、noscript、template,連續空白縮成一格後計字元數(含 <title>)。"""
import html, re, sys
n = int(sys.argv[1]) if len(sys.argv) > 1 else 200
s = sys.stdin.read()
s = re.sub(r'(?is)<(script|style|noscript|template)[^>]*>.*?</\1>', ' ', s)
text = ' '.join(html.unescape(re.sub(r'(?s)<[^>]+>', ' ', s)).split())
print(text[:n] + ('…' if len(text) > n else ''))
print(f'\nAI 讀到 {len(text):,} 個字')

它做四件事:

  1. 拿掉 <script>、<style>、<noscript>、<template> 整段,這些是程式碼和樣式,不是給人讀的內容
  2. 拿掉剩下所有 HTML 標籤,只留文字
  3. 把連續的空白、換行縮成一格
  4. 印出前 200 個字和總字數(<title> 的網頁標題也算在內)

只用 Python 內建的模組,不用另外安裝套件。Mac 和大部分 Linux 都有 python3;Windows 要先裝 Python。

想多看一點文字,在後面加數字,例如 python3 ai-read.py 500 < page.html 會印前 500 個字。

我們自己跑出來的結果

2026 年 10 月 18 日,同一支程式、同一個算法:

網頁AI 讀到的字數前幾個字
舊 Vue 官網首頁77應用載入失敗…
現在的 atonkevin.ai 首頁1,783火曜領航|品牌官網、營運系統與互動應用開發…

舊首頁已經下線,這一列是從我們的版本紀錄裡取出當時的首頁檔案,在自己電腦上開一個小伺服器重抓的。

77 個字的原因是:舊官網是 Vue 做的單頁應用,伺服器先送一個幾乎空白的殼,內容要等瀏覽器把 JavaScript 跑完才長出來。不跑 JavaScript 的爬蟲,只拿得到殼裡那句備援訊息。後來我們把內容頁搬到 WordPress,伺服器直接送出完整的 HTML,經過見〈Vue 單頁應用的 SEO 與 AI 爬蟲問題〉。

跑出來的數字怎麼看?

字數沒有官方標準,不用拿去跟別人比。我們看三件事:

1. 印出來的文字裡,有沒有你最重要的那段話。 公司是做什麼的、在哪裡、怎麼聯絡,這些有沒有出現在前幾百個字裡。我們現在的首頁,前 200 個字大半是選單(首頁、實績案例、服務項目……),重點內容在後面,這也是我們之後要調的地方。

2. 換幾個網址再跑,數字有沒有變。 我們舊官網曾經在殼裡補一段公司簡介,字數從 77 變成 200 多,可是每個網址跑出來都一樣。案例頁、文章頁和首頁字數完全相同,通常代表伺服器每一頁都送同一份殼。

3. 跟瀏覽器看到的比。 瀏覽器裡有大段文字、這裡卻只剩幾十個字,就是內容靠 JavaScript 產生。Google 搜尋中心的 JavaScript SEO 文件寫:「我們依然建議採取伺服器端轉譯或預先轉譯,方便使用者和檢索器更快速地瀏覽網站,況且也不是所有漫遊器都能執行 JavaScript。」

這個方法看不到什麼?

它只是假扮 GPTBot。 我們用的是 GPTBot 的 User-Agent,但連線是從你自己的電腦發出去的。真的 GPTBot 從 OpenAI 公布的 IP 範圍來,有些網站的防火牆或 CDN 會依 IP 判斷,對真假爬蟲給不同的回應。這三行測的是「伺服器對這個身分送出什麼」,不保證和 OpenAI 實際抓到的一模一樣。

它不跑 JavaScript。 這正是重點,但也代表它不代表 Google。Google 搜尋中心寫明,在資源允許的情況下,Google 會用無頭 Chromium 轉譯網頁並執行 JavaScript。所以這裡字數少,不等於 Google 也看不到。

它不管 robots.txt。 curl 不會先看 robots.txt。你的網站有沒有擋 GPTBot,要另外看 robots.txt,做法見〈robots.txt 的 AI 爬蟲怎麼設?〉。

讀得到不等於會被引用。 這三行只回答「讀到什麼」。AI 回答問題時會不會提到你、引用你,是另一件事。

想請人幫你跑一次、一起看結果,可以到聯絡頁留言。

常見問題

為什麼不直接在瀏覽器按「檢視原始碼」?

可以看,但原始碼裡大半是程式碼和樣式,很難判斷真正的文字有多少。ai-read.py 把 script、style 這些拿掉、只留文字並算字數,比較容易看出不跑 JavaScript 的爬蟲讀到什麼。

curl 的 -A 參數是什麼?

-A 是 –user-agent 的縮寫,用來指定連線時自報的 User-Agent。curl 官方說明寫,字串裡有空白時要用單引號或雙引號包起來;不指定時,curl 預設送出 curl/版本號。

GPTBot 的 User-Agent 要去哪裡查?

OpenAI 的〈Overview of OpenAI Crawlers〉頁面列了 GPTBot、OAI-SearchBot、ChatGPT-User 的 User-Agent 範例,官方註明版本號可能會變。2026 年 10 月 18 日查的時候,GPTBot 是 1.4 版。

字數多少才算夠?

沒有官方標準。比起字數,更該看的是印出來的文字裡有沒有你最重要的內容,以及不同網址跑出來是不是不一樣。

用 GPTBot 的 User-Agent 測,結果就等於 ChatGPT 看到的嗎?

不一定。指令是從你的電腦發出,真正的 GPTBot 從 OpenAI 公布的 IP 範圍來,有些網站的防火牆或 CDN 會依來源給不同回應。這個方法測的是伺服器對這個身分送出的內容。

參考來源

以上官方文件皆於 2026 年 10 月 18 日查詢。

最後更新: