搜霸 SEOBARSEO / GEO 技術專欄robots.txt 怎麼寫?語法、常見錯誤與 AI 爬蟲

robots.txt 怎麼寫?語法、常見錯誤與 AI 爬蟲

2026年8月29日技術 SEO· 王豪勳
淺色底示意圖:五條水平線通過一道虛線閘門,三條以綠色箭頭穿過、兩條在閘門前折返,代表 robots.txt 放行與封鎖爬蟲

TL;DR

  • robots.txt 控制的是「要不要爬」,不是「要不要收錄」;被擋的網址仍可能出現在搜尋結果裡
  • 想讓頁面不被收錄要用 noindex,而 noindex 生效的前提是那一頁不能被 robots.txt 擋住
  • Google 只讀四個欄位:user-agentallowdisallowsitemapcrawl-delay 不支援
  • 寫在 robots.txt 裡的 noindex 從 2019 年 9 月起完全無效,但這種寫法至今還在流傳
  • 實測台灣 21 個網站:只有新聞媒體在管 AI 爬蟲,電商、旅遊、求職、論壇一家都沒設

目錄

擋的是爬取,不是收錄
檔案放哪裡、管得到哪些網址
語法只有四個欄位,其餘一律被忽略
規則怎麼比對:最長路徑優先,打平取最寬鬆
寫在 robots.txt 裡的 noindex 早就沒有作用
AI 爬蟲:台灣 21 個網站的實際做法
六個常見錯誤
一份夠用的最小範本

引言

robots.txt 是網站根目錄下的一個純文字檔,用來告訴爬蟲哪些網址可以抓、哪些不要抓。它的規格比 sitemap 更老,2022 年才由 RFC 9309 正式標準化,而在那之前的二十多年,各家搜尋引擎的實作各有差異——這是網路上關於 robots.txt 的說法特別混亂的原因。

混亂的代價不小。它是少數「寫錯一行就可能讓整個網站從搜尋結果消失」的檔案,而且沒有任何警告:語法錯誤不會報錯,只會被忽略;規則寫過頭也不會提示,網站就是慢慢從搜尋結果掉下去。

下面會先釐清它實際上能做什麼——這一層弄錯的話,後面的語法寫得再對也沒有用——再談怎麼寫,以及那個幾乎每份中文教學都寫錯的地方。

擋的是爬取,不是收錄

後面每個決定都建立在這一點上,而它偏偏是最常被弄反的:robots.txt 管的是「要不要抓取這一頁」,不是「要不要把這一頁放進搜尋結果」。 抓取與索引在 Google 內部是兩個分開的階段,robots.txt 只碰得到前面那個。

Google 官方文件寫得很直接:「如果網頁遭到 robots.txt 檔案封鎖,或是檢索器無法存取該網頁,檢索器將永遠看不到 noindex 規則,因此該網頁仍可能出現在搜尋結果中,例如當其他網頁連結到該網頁時。」

把這句話展開,用 Disallow 擋掉一個網址得到的其實是這樣的結果:Google 不去讀它的內容,但只要別的網站連向它,Google 仍然知道這個網址存在,於是照樣可能把它列進搜尋結果——只是因為從沒讀過內容,摘要那一欄會是空的,或是一句制式說明。

順著這個邏輯往下推,就會撞上一個很多人踩到的矛盾。想讓某一頁不出現在搜尋結果,正確做法是讓 Google 讀得到它,然後在頁面上放 noindex 反過來用 robots.txt 擋住的話,Google 連那一頁都打不開,自然也讀不到裡面的 noindex,結果是那一頁反而留在索引裡——你越用力擋,它越擋不掉。

兩者的適用情境是分開的:

目的 做法
不希望浪費爬取資源(例如站內搜尋結果頁、無限組合的篩選網址) robots.txt Disallow
不希望出現在搜尋結果 頁面放 noindex,且不要用 robots.txt 擋
內容根本不該被任何人看到 密碼保護或移除,robots.txt 不是安全機制

表格最後一列要多說一句,因為它是實務上最常被誤用的一種。robots.txt 是公開的檔案,網址固定、誰都能讀,把後台路徑寫進 Disallow 等於在門口貼公告說「這裡有東西」——對一般爬蟲有效,對真正想找的人則是提示,不是阻擋。

檔案放哪裡、管得到哪些網址

位置與管轄範圍的規則比多數人以為的嚴格,而且錯了不會有任何提示,只是整份檔案被當成不存在。

首先,它必須放在網域根目錄,也就是 https://example.com/robots.txt;放進子目錄的話不會被讀取,等於白寫。

管轄範圍限於同一個主機、協定與連接埠。 Google 的文件寫得很明確:robots.txt「僅適用於代管該檔案的主機、通訊協定和連接埠號碼」。實務上的意思是:

  • blog.example.com 不吃 example.com 的 robots.txt,子網域要自己放一份
  • https://http:// 理論上是兩份,但 80 與 443 分別是各自協定的預設埠,視為對等

檔案大小上限 500 KiB,超過的部分直接被忽略。一般網站遠遠用不到,但如果是程式產生、動輒上萬行的 robots.txt,就該檢查尾端的規則有沒有被切掉。

robots.txt 本身的回應狀態碼,處理方式差很多:

狀態 Google 的處理
2xx 正常解析
3xx 最多跟五次轉址,超過視為 404
4xx(429 除外) 視為沒有任何限制,全部可爬
5xx 先停爬 12 小時,之後改用最多 30 天的快取版本;再無法解決則視為沒有限制

這張表最關鍵的是 4xx 與 5xx 的差別。回 404 其實不是問題,那等於「沒有限制」,跟根本不放這個檔案的效果一樣;真正要避免的是 5xx,因為伺服器出錯會讓 Google 直接停止爬取。也因此,「robots.txt 一定要有」這句流傳很廣的話講得太滿——沒有它,行為是明確可預期的,而有一份卻會噴 500 的,反而比較危險。

Google 一般會快取 robots.txt 最多 24 小時,所以改完不會立刻生效。

語法只有四個欄位,其餘一律被忽略

Google 支援的欄位只有四個:user-agentallowdisallowsitemap。其他的欄位在解析時直接跳過,不會報錯。

最小的一份是這樣:

User-agent: *
Allow: /

Sitemap: https://example.com/sitemap.xml

User-agent: * 代表這組規則適用於所有爬蟲,Allow: / 代表整站開放。至於 Sitemap: 那一行,它是不需要登入任何後台就能通知所有搜尋引擎的一種方式,加了沒有壞處,完整說明在 sitemap 是什麼?產生、提交與 Google 實際會讀的欄位

要擋特定目錄:

User-agent: *
Disallow: /admin/
Disallow: /search
Allow: /

Sitemap: https://example.com/sitemap.xml

要對不同爬蟲給不同規則,就寫成多組,各組之間空一行:

User-agent: Googlebot
Disallow: /no-google/

User-agent: *
Disallow: /admin/

這裡有一個相當常見的誤解:一個爬蟲只會套用一組規則。它會挑名稱最精確的那一組,套用之後就不再理會其他組,因此上面那個例子裡的 Googlebot 完全不受 User-agent: * 那組的 /admin/ 限制——多數人以為兩組會疊加,但實際上是取代。想讓 Googlebot 也擋 /admin/,必須在它自己那一組裡再寫一次。

# 之後到行尾是註解。

另外,crawl-delay 不支援。這個欄位曾經很流行,用來要求爬蟲放慢速度,但 Google 從來沒有支援過,寫了也只是被忽略(Bing 與 Yandex 有各自的處理方式)。要控制 Google 的爬取速率,管道在 Search Console,不在這個檔案裡。

規則怎麼比對:最長路徑優先,打平取最寬鬆

當一個網址同時符合好幾條規則時,優先順序有明確定義。

依規則路徑的長度取最精確的那一條;長度相同而彼此衝突時,Google 採用限制最少的那一條。

舉例來說:

User-agent: *
Disallow: /products/
Allow: /products/featured/

/products/featured/shoes 同時符合兩條,但 Allow 那條的路徑比較長、比較精確,所以可以爬。而 /products/old 只符合 Disallow,擋掉。

兩個萬用字元:

  • * 代表零個或多個任意字元
  • $ 代表網址結尾
Disallow: /*?sort=      # 擋掉所有帶 sort 參數的網址
Disallow: /*.pdf$       # 擋掉所有以 .pdf 結尾的網址

結尾的 * 沒有意義,/fish* 等同於 /fish

路徑大小寫有別:欄位名稱(Disallowdisallow)不分大小寫,但路徑值完全照字面比對——/Admin/ 擋不到 /admin/

還有一個細節容易忽略,而它造成的誤擋通常很久之後才被發現:Disallow: /admin 沒有加結尾斜線時走的是前綴比對,於是 /administrator/admin-login 這些你可能沒打算擋的網址會一併被擋掉。要精確只擋那個目錄,把斜線補上,寫成 Disallow: /admin/

寫在 robots.txt 裡的 noindex 早就沒有作用

網路上到現在仍能找到「在 robots.txt 加一行 Noindex: /path」的教法,而且通常寫得相當肯定。Google 在 2019 年 9 月 1 日已經完全移除對這類規則的處理,所以照著做的人得到的是一行被靜默忽略的文字,以及一個以為已經處理好、其實還在索引裡的頁面。

官方公告講的是 crawl-delaynofollownoindex 這三個從未被正式文件記載的欄位。他們分析全網 robots.txt 後發現,這些規則的用法「在除了 0.001% 以外的所有 robots.txt 檔案中,都與其他規則互相矛盾」,並直言「這些錯誤以網站管理員並非本意的方式,傷害了網站在 Google 搜尋結果中的呈現」。

公告同時列出替代做法,依情境選用:

  1. noindex 放在 robots meta 標記或 HTTP 回應標頭 — 允許爬取的前提下,這是把網址移出索引最有效的方式
  2. 404 或 410 狀態碼 — 兩者都代表頁面不存在,爬過之後就會從索引移除
  3. 密碼保護 — 除非另外標記為訂閱或付費內容,放在登入之後通常會移出索引
  4. robots.txt 的 Disallow — 官方把它列為選項,但同時說明:搜尋引擎仍可能依據其他頁面的連結索引該網址
  5. Search Console 的移除網址工具 — 快速但是暫時性的

第 1 項與第 4 項不能同時用,理由在前面那一節。

AI 爬蟲:台灣 21 個網站的實際做法

robots.txt 現在多了一個用途:決定要不要讓 AI 系統讀你的內容。ChatGPT、Claude、Perplexity 這些服務的爬蟲都各有自己的 user-agent 名稱,可以用一般的 robots.txt 語法處理。

網路上的討論多半停在「可以擋」這個層次,至於實際上大家怎麼選、選的比例如何,幾乎查不到。既然這份檔案人人都讀得到,那就自己數一遍——我在 2026 年 8 月抓了 21 個台灣主要網站的 robots.txt 逐份看過,涵蓋新聞媒體、電商、旅遊、求職與論壇。

結果的分界線非常乾淨:

  • 21 站中取得 robots.txt 的有 16 份
  • 其中 7 站在檔案裡點名了 AI 爬蟲
  • 7 站全部是新聞或科技媒體(中時、中央社、INSIDE、科技新報、ETtoday、聯合新聞網、風傳媒)
  • 電商、旅遊、求職、論壇這幾類,一站都沒有

在有處理的媒體之中,5 站是明確封鎖(Disallow: /)。被擋最多的是 GPTBot 與 ClaudeBot,各 5 站;其次是 CCBot 與 Bytespider,各 4 站。

但有一家的選擇完全相反。 ETtoday 點名了同一批爬蟲,寫的卻是:

User-agent: ClaudeBot
Allow: /

User-agent: GPTBot
Allow: /

同一個產業、同一批爬蟲,一邊全擋、一邊明確放行。這不是誰寫錯了,而是兩種對「內容被 AI 讀走」的判斷——一邊認為那是被拿去訓練卻沒有回報,一邊認為那本身就是曝光。這個題目目前沒有標準答案,所以會出現同業之間各走各的的情況。

有意思的是,這種帶有商業判斷的決定,最後是寫在一個公開的純文字檔裡的。想知道某一家同業對這件事的態度,不必打聽,去讀他們的 robots.txt 就好。

那麼一般企業網站該怎麼選?先分清楚兩種爬蟲,它們的目的不同:

類型 例子 擋掉的後果
訓練用 GPTBot、CCBot、Google-Extended、Applebot-Extended 內容不進訓練資料
即時檢索用 OAI-SearchBot、ChatGPT-User、PerplexityBot AI 回答問題時不會引用你

兩類的代價差很多。第一類擋掉,影響的是很久以後的模型;第二類擋掉的後果則相當直接——使用者問「台南有哪些網頁設計公司」時,AI 會即時去搜尋、抓網頁、整理成答案,被擋的網站就不會出現在那份名單裡。

回頭看那 7 家媒體,他們的選擇有其道理:內容本身就是商品,被整篇拿走而讀者不必來訪,那是純損失。但這個算式換到一般企業身上就不成立了——對靠被找到來獲客的公司來說,全面封鎖等於主動退出這個管道,而且退出的時候不會有人通知你。

如果沒有明確理由要擋,預設全部開放是合理的。真的要限制,也建議只擋訓練用的那一類,保留即時檢索。不過放行只是把門打開而已。被爬取和被引用是兩回事——伺服器紀錄看得到某個 AI 爬蟲來過哪些頁面,但那份紀錄不會告訴你內容最後有沒有被整理進答案裡。這兩件事要分開量,也是完全不同的題目。

六個常見錯誤

一、用 robots.txt 想達成不被收錄。 前面講過,方向相反。

二、Disallow: / 留在正式站。 開發或測試環境常會擋全站,上線時忘記改回來。這一行會讓整個網站逐漸從搜尋結果消失,而且過程中不會有任何警告,等到有人發現流量不對,通常已經掉了好幾週。改版上線後第一時間就該確認這個檔案。

三、擋掉 CSS 與 JS。 曾經有「擋掉靜態資源省爬取預算」的說法。Google 現在需要渲染頁面才能正確判讀內容與行動裝置相容性,擋掉樣式與腳本會讓它看到一個壞掉的版本。

四、以為子網域共用一份。 shop.example.com 需要自己的 robots.txt。

五、把敏感路徑寫進去。 這個檔案是公開的,寫進去等於公告位置。

六、robots.txt 回 5xx。 4xx 沒問題(視為無限制),5xx 會讓 Google 停止爬取。如果這個檔案是程式動態產生的,要確認它在資料庫或後端出錯時會回什麼。

順帶一提,我在做上面那份調查時,就遇到兩個網站對一般客戶端回 403、一個回 404。依前面那張表,404 等同無限制、403 同屬 4xx,處理方式一樣,所以這些站不會因此出事。不過這裡不能反推 Googlebot 也拿不到——多數網站會把搜尋引擎的爬蟲列入白名單,我用一般瀏覽器識別字串抓不到,不代表 Googlebot 抓不到。

一份夠用的最小範本

把前面幾節的結論收攏起來,多數企業網站其實不需要複雜的 robots.txt,下面這一份就夠了:

User-agent: *
Allow: /

Sitemap: https://example.com/sitemap.xml

本站的 robots.txt 目前就是這三行:全站開放,加上一行 sitemap 位置。網站不大、沒有真的需要擋的路徑時,這就是正確答案;規則寫得多不會讓它變得更好,只會多出幾個出錯的機會。

有站內搜尋或大量篩選網址的話,加上這幾行避免爬蟲在無限組合裡打轉:

User-agent: *
Disallow: /search
Disallow: /*?sort=
Disallow: /*?filter=
Allow: /

Sitemap: https://example.com/sitemap.xml

改完之後可以在 Search Console 確認 Google 實際讀到的版本與解析結果,那裡也會顯示語法問題。Search Console 的設定方式見 Google Search Console 設定教學

最後一句提醒:這個檔案的風險不對稱。寫得少,最壞的情況是爬蟲多抓了幾個沒必要的網址;寫得多而寫錯,最壞的情況是整站從搜尋結果消失。不確定的時候,少寫。

參考來源

robots.txt技術 SEO網站收錄AI 爬蟲

常見問題

Q

網站一定要有 robots.txt 嗎?

不一定。robots.txt 回 404 時,Google 會視為「沒有任何限制」,效果與整站開放相同,所以沒有這個檔案不會造成損害。

真正要避免的是回 5xx:伺服器出錯時 Google 會先停止爬取 12 小時,之後改用最多 30 天的快取版本。如果這個檔案是程式動態產生的,要確認它在後端出錯時不會噴 500。

Q

用 robots.txt 擋掉的頁面,會不會還是出現在搜尋結果?

會。robots.txt 控制的是「要不要爬取」,不是「要不要收錄」。Google 官方文件說明,被 robots.txt 封鎖的網頁仍可能出現在搜尋結果中,例如當其他網頁連結到它時——只是因為沒讀過內容,摘要那一欄會是空的或制式說明。

要讓頁面不出現在搜尋結果,正確做法是允許爬取,然後在頁面放 noindex。

Q

在 robots.txt 裡寫 noindex 有用嗎?

沒有用。Google 於 2019 年 9 月 1 日移除了對 noindex、nofollow、crawl-delay 這幾個未被正式記載的欄位的處理,寫了會被直接忽略。

替代做法依情境選用:允許爬取時用 robots meta 標記或 HTTP 標頭的 noindex(最有效)、用 404 或 410 狀態碼、用密碼保護,或使用 Search Console 的移除網址工具(暫時性)。

Q

要不要擋 GPTBot 這類 AI 爬蟲?

先分清楚兩類。訓練用的爬蟲(GPTBot、CCBot、Google-Extended、Applebot-Extended)擋掉的後果是內容不進訓練資料;即時檢索用的爬蟲(OAI-SearchBot、ChatGPT-User、PerplexityBot)擋掉的後果是 AI 回答問題時不會引用你。

以內容本身為商品的媒體,封鎖有其道理。但對靠被找到來獲客的一般企業,全面封鎖等於主動退出這個管道。如果沒有明確理由,預設開放較合理;真要限制,建議只擋訓練用的那一類。

Q

改了 robots.txt 多久生效?

Google 一般會快取 robots.txt 內容最多 24 小時,所以改完不會立即反映;在無法取得檔案的情況下可能快取更久。

如果需要確認 Google 目前實際讀到的是哪一個版本,可以在 Search Console 檢視,那裡同時會顯示解析結果與語法問題。

技術 SEO 分類其他文章

繼續閱讀同主題的延伸內容

sitemap 是什麼?產生、提交與 Google 實際會讀的欄位
XML sitemap 怎麼產生、怎麼提交,以及 sitemap.xml 裡哪些欄位 Google 根本不會讀。包含 ping 端點停用後剩下的三種提交方式,以及用 xmllint 自行驗證格式時,哪…

留言討論

只有會員能留言(防止垃圾訊息),留言顯示於此頁。

載入中...
← 返回SEO / GEO 技術專欄