先把下面「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):,} 個字')
它做四件事:
- 拿掉
<script>、<style>、<noscript>、<template>整段,這些是程式碼和樣式,不是給人讀的內容 - 拿掉剩下所有 HTML 標籤,只留文字
- 把連續的空白、換行縮成一格
- 印出前 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 會依來源給不同回應。這個方法測的是伺服器對這個身分送出的內容。
參考來源
- OpenAI:Overview of OpenAI Crawlers
- Google 搜尋中心,2026-03-05 更新:瞭解 JavaScript 搜尋引擎最佳化 (SEO) 基礎知識
- curl:curl man page(-A, –user-agent)
以上官方文件皆於 2026 年 10 月 18 日查詢。
最後更新: