robots.txt 設定看起來只是幾行文字,卻是許多網站「重要頁面突然從 Google 搜尋結果消失」的常見兇手。一個位置打錯的 Disallow: /,或是不小心把整個部落格目錄擋住,就可能讓辛苦寫好的文章從索引裡蒸發,而且站方往往毫無警覺。
robots.txt 的作用其實很單純:告訴搜尋引擎爬蟲網站的哪些路徑可以爬、哪些不要爬,主要目的是管理伺服器的爬取流量,而不是把網頁排除在 Google 之外的工具。這個常見誤解,正是多數 robots.txt 設定出包的源頭。
以下從語法規則、優先權判斷、常見錯誤,到上線前的測試方式,一次整理清楚,並補上一個多數教學還沒提到的新課題:2026 年該怎麼在 robots.txt 裡處理 AI 爬蟲,例如 GPTBot、ClaudeBot。
robots.txt 是什麼?先搞懂它能做什麼、不能做什麼
robots.txt 是一個放在網站根目錄的純文字檔案,依循「Robots 排除標準」撰寫規則,提供給遵守規範的爬蟲讀取。它的核心用途是避免爬蟲對網站發出過多請求造成負擔,適合用來管理大型網站的爬取預算,或是擋掉不需要被爬取的功能性頁面,例如購物車、後台登入頁。
它做不到的事,是把頁面藏起來。Google 官方文件明確說明,被 robots.txt 擋住的頁面如果被其他網站連結,網址本身以及連結的錨文字仍可能出現在搜尋結果中,只是不會顯示內容摘要。換句話說,靠 Disallow 想讓頁面徹底消失,常常事與願違——爬蟲不會進去讀內容,但頁面存在的事實還是可能被 Google 發現並列出。
真正要讓頁面不出現在搜尋結果,官方建議的作法是用 noindex meta 標籤或密碼保護,而不是 robots.txt。想了解各種 HTML 標籤在 SEO 上分別負責什麼,可以參考為什麼 HTML 標籤是 SEO 最被忽略的基本功這篇。
| 方法 | 爬蟲會不會讀取頁面內容 | 頁面會不會出現在搜尋結果 | 適合用途 |
|---|---|---|---|
| robots.txt Disallow | 不會進入爬取 | 網址仍可能被索引,但沒有摘要 | 節省爬取預算、擋掉低價值路徑 |
| meta robots noindex | 會進入爬取,才能讀到指令 | 不會出現 | 確實要移除搜尋結果的頁面 |
| 密碼保護 | 無法存取內容 | 不會出現 | 私密或會員限定內容 |
如果懷疑自己的頁面是被 robots.txt 誤擋才沒被收錄,可以搭配網站沒被 Google 收錄?6 個檢查步驟逐項排查。
robots.txt 放在哪裡?上線前要符合的基本規則
在動手寫規則之前,先確認幾個容易踩雷的基本條件。
| 規則 | 說明 |
|---|---|
| 檔案位置 | 必須放在網站根目錄,例如 https://www.example.com/robots.txt;放在子目錄無效 |
| 檔名 | 必須完全是小寫的 robots.txt,不能有其他變化 |
| 編碼 | 必須是 UTF-8 純文字檔 |
| 適用範圍 | 只管理同一個協定、主機、埠號底下的路徑;http 和 https、www 和不帶 www 的版本要分開處理 |
| 檔案大小 | Google 只讀取前 500 KiB,超過的內容會被忽略 |
| 數量 | 一個網域只能有一份 robots.txt |
robots.txt 設定語法教學:五個核心欄位
寫 robots.txt 用到的欄位不多,Google 官方建立指南列出的核心欄位只有幾個,理解每一個欄位的行為,比背語法更重要。
User-agent:指定規則適用哪個爬蟲
每一組規則都要以 User-agent 開頭,指定這組規則適用的爬蟲。星號代表除了 Google 部分 AdsBot 系列之外的所有爬蟲;要針對特定爬蟲下規則,例如 Googlebot、Bingbot,就把名稱填進去。
User-agent: *
Disallow: /wp-admin/
Disallow 與 Allow:擋掉與放行
Disallow 用來標出不希望爬蟲進入的路徑,路徑必須以斜線開頭。Allow 則是在某個大範圍被擋住的情況下,把裡面的特定子路徑重新放行,常見用法是整個管理後台擋住,但放行其中一支要給前台呼叫的檔案:
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
這正是 WordPress 內建虛擬 robots.txt 的預設寫法,由核心函式 do_robots() 自動產生,即使沒有另外上傳檔案,網站也會輸出這組規則。
Sitemap:告訴爬蟲地圖在哪
Sitemap 欄位用來宣告網站地圖的完整網址,可以放在檔案中任何位置,一份 robots.txt 可以列出零個或多個 sitemap:
Sitemap: https://www.example.com/sitemap.xml
萬用字元 * 與 $:更精準地描述路徑
Google 支援兩種萬用字元:「*」代表任意 0 個以上的字元,「$」代表網址結尾。兩者搭配可以精準鎖定某一類檔案,不必逐一列出路徑:
User-agent: *
Disallow: /*.pdf$
這組規則會擋掉所有以 .pdf 結尾的網址,但不會影響網址中間剛好出現 .pdf 字串、後面還有其他參數的頁面。
優先權規則:Disallow 和 Allow 衝突時聽誰的
當 Allow 和 Disallow 同時符合同一個網址,Google 會採用路徑字元數最長、也就是最具體的規則;如果雙方長度相同,則採用限制較少的一條,也就是 Allow 優先。以下幾個細節也容易被忽略:
- 路徑比對區分大小寫,/File.html 和 /file.html 是兩個不同的路徑
- 爬蟲會挑最符合自己名稱的那一組 User-agent 規則使用,不會把多組不同對象的規則混在一起套用
- 針對同一個 User-agent 如果分散寫了好幾組規則,Google 會先在內部合併成一組再判斷
- 沒有被任何 Disallow 規則擋到的路徑,預設就可以被爬取,不需要特別寫 Allow 去聲明
常見錯誤:robots.txt 為什麼常常誤擋重要頁面
多數 robots.txt 造成的 SEO 災情,都不是語法錯誤,而是規則寫得比想像中管得更寬。以下是幾個最常見的狀況。
- 用 Disallow: / 擋掉整站——這是最嚴重的錯誤,通常發生在把測試站的 robots.txt 忘記換成正式版,或是複製範本時沒改到路徑,結果讓整個網站對爬蟲關閉。
- 擋掉 CSS、JS 等資源檔案——Googlebot 需要載入 CSS 和 JavaScript 才能像瀏覽器一樣畫出頁面,藉此判斷內容與版面。擋住這些資源會讓 Google 看到殘缺的頁面,可能影響排名判斷。
- 把 robots.txt 當成 noindex 在用——曾經在 robots.txt 裡寫 noindex 指令確實對 Google 有效,但這從來不是正式支援的欄位。Google 已在 2019 年 9 月 1 日起停止支援這個寫法,現在寫了也不會有任何效果,要移除頁面必須改用 meta robots noindex、404 或 410 狀態碼,或是密碼保護。
- 指望 crawl-delay 控制爬取速度——這是部分爬蟲支援的非官方欄位,Google 完全不讀取這個指令,寫了也不會減緩 Googlebot 的爬取頻率。
- 誤解 WordPress「不公開索引」設定的效果——WordPress 5.3 之前,勾選阻止搜尋引擎索引本網站,會讓虛擬 robots.txt 直接輸出 Disallow: /,擋住整站爬取。5.3 版之後這個行為已經移除,改成透過 meta 標籤輸出 noindex,爬蟲仍會進站爬取,只是被要求不要索引。這代表現在光看 robots.txt 內容,已經看不出這個設定有沒有打開,必須另外檢查頁面的 meta 標籤。
- 路徑或大小寫打錯——少打一個斜線、目錄名稱大小寫不一致,規則就悄悄失效或誤傷其他路徑,而且不會有任何錯誤訊息提示。
- 沒確認 robots.txt 是否真的能被公開存取——如果網站前面掛了需要登入或 IP 白名單的防護機制,爬蟲讀 robots.txt 時可能拿到登入頁或錯誤頁,反而被當成規則內容誤判。
實際範例:一份能直接套用的 robots.txt
把前面的規則組合起來,一份基本、適合多數網站的 robots.txt 大致長這樣:
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Disallow: /cart/
Disallow: /checkout/
Disallow: /*?s=
Sitemap: https://www.example.com/sitemap.xml
這份範本示範了三個常見情境:擋掉後台但放行前台需要呼叫的檔案、擋掉購物車與結帳頁(這類頁面不需要被搜尋引擎索引)、擋掉內部搜尋結果頁(常見的重複內容來源,以 ?s= 這類查詢參數辨識),最後宣告 sitemap 位置。實際使用前務必依照自己網站的目錄結構調整路徑,並照著後面的測試步驟確認沒有誤傷其他頁面。
2026 年新課題:AI 爬蟲(GPTBot、ClaudeBot)要不要擋?
除了傳統搜尋引擎,近年 OpenAI、Anthropic 等 AI 公司也各自派出爬蟲收集網路內容,而且同一家公司底下,不同爬蟲的用途並不相同,擋或不擋的後果也不一樣,不能一概而論。
以 OpenAI 為例,官方文件列出三支不同用途的爬蟲:GPTBot 用來蒐集資料訓練生成式 AI 模型,OAI-SearchBot 用於 ChatGPT 的搜尋功能、把網站內容帶進搜尋結果,ChatGPT-User 則是使用者在 ChatGPT 對話中臨時要求讀取某個網址時才會觸發。三者可以分開設定,例如擋掉訓練用的 GPTBot,同時放行負責搜尋曝光的 OAI-SearchBot。
Anthropic 的架構類似:ClaudeBot 負責蒐集訓練資料,Claude-SearchBot 用來優化 Claude 的搜尋結果品質,Claude-User 則對應使用者在 Claude 中主動要求讀取頁面的情境。Anthropic 官方說明三支爬蟲都遵守 robots.txt,可以個別用 User-agent 規則控制。
要不要擋,取決於取捨:擋掉訓練用爬蟲不會影響 Google 排名,因為 Googlebot 是完全獨立的爬蟲、有自己的一套規則;但如果連搜尋或檢索用的爬蟲也一併擋掉,等於放棄了在 ChatGPT、Claude 這類 AI 助理的回答中被引用的機會。這正是GEO,生成式引擎優化要處理的課題之一——內容能不能被 AI 搜尋引用,robots.txt 是最前面的一道關卡。範例寫法:
User-agent: GPTBot
Disallow: /
User-agent: OAI-SearchBot
Allow: /
User-agent: ClaudeBot
Disallow: /
User-agent: Claude-SearchBot
Allow: /
值得留意的是,這個時間表不是每支爬蟲都通用。OpenAI 官方文件提到,OAI-SearchBot 的搜尋結果調整約需 24 小時才會反映,但這句話只針對 OAI-SearchBot 的搜尋結果呈現;官方並未說明 GPTBot、ClaudeBot 這類訓練用爬蟲的封鎖規則要多久才會生效,調整後不宜假設訓練爬蟲也會在同樣的時間內跟著同步。
設定好之後怎麼測試?
robots.txt 屬於改錯不會跳警告、但後果很嚴重的檔案,上線前務必測試,不要憑感覺判斷。
- 先用無痕視窗打開檔案網址,例如 https://你的網域/robots.txt,確認任何人(包含爬蟲)都能公開讀到內容,而不是被導向登入頁或出現 404。
- 用 Search Console 的 robots.txt 報表檢查——這份報表會列出 Google 幫網站前 20 個主機找到的 robots.txt 檔案、上次檢查時間、檔案大小,以及剖析錯誤或警告的數量,點進去還能看到過去 30 天的版本歷史。如果站上還沒設定過 Search Console,可以先參考SEO 實戰篇【零】:先裝好你的「儀表板」。
- 用網址檢查工具驗證單一頁面——想確認某一支特定網址有沒有被擋到,把網址貼進 Search Console 的網址檢查工具,就能看到 Google 判定的爬取狀態。
- 修改後主動要求重新檢索——在 robots.txt 報表的檔案清單裡,可以針對更新過的檔案要求 Google 重新抓取,不用被動等待快取到期。
常見問題 FAQ
robots.txt 可以讓頁面徹底消失在 Google 搜尋結果嗎?
不行。robots.txt 只能阻止爬蟲進入頁面讀取內容,如果這個網址已經被其他地方連結,Google 仍可能把網址本身列進搜尋結果,只是沒有內容摘要。真的要移除頁面,要用 meta robots 的 noindex 標籤,或是搭配密碼保護。
robots.txt 和 meta robots noindex 差在哪?
差別在於爬蟲要不要進去看。robots.txt 是在爬蟲進門之前就把它擋在外面,所以爬蟲讀不到頁面裡 noindex 這類指令;meta robots noindex 則是允許爬蟲進來讀取頁面,讀到 noindex 之後才不把頁面收進索引。如果同時對一個頁面下 Disallow,又想靠 noindex 移除它,兩者會互相干擾——爬蟲根本進不去,自然也讀不到 noindex 標籤。
網站沒有 robots.txt 檔案,或檔案讀取失敗會怎樣?
依錯誤類型而定。Google 官方規格文件說明,如果伺服器回傳 404 等 4xx 錯誤(429 除外),Google 會視為網站沒有任何爬取限制,照常爬取全站;如果回傳 5xx 伺服器錯誤,Google 會先暫停爬取,30 天內沿用先前讀到的舊版規則,超過 30 天仍讀不到才會視為沒有限制。
robots.txt 改了之後多久生效?
Google 通常會把 robots.txt 的內容快取最長 24 小時,實際時間也會受網站回傳的 Cache-Control 標頭影響。改完規則想盡快生效,可以到 Search Console 的 robots.txt 報表要求重新檢索,不用整整等一天。
WordPress 需要自己上傳 robots.txt 嗎?
不一定。WordPress 內建會自動用虛擬檔案輸出一份基本的 robots.txt(擋 /wp-admin/、放行 admin-ajax.php),不用手動建立就會存在。如果需要加入 sitemap 宣告、擋掉購物車頁面等客製規則,才需要另外用外掛或手動上傳實體檔案覆蓋預設版本。
參考資料
- Robots.txt Introduction and Guide(Google Search Central)
- Create and Submit a robots.txt File(Google Search Central)
- How Google Interprets the robots.txt Specification(Google Search Central)
- robots.txt 報表(Search Console 說明)
- Google Cancels Support for Robots.txt Noindex(Search Engine Journal)
- The ultimate guide to robots.txt(Yoast)
- do_robots()(WordPress Developer Resources)
- Overview of OpenAI Crawlers(OpenAI Developers)
- Does Anthropic crawl data from the web, and how can site owners block the crawler?(Claude Help Center (Anthropic))
