robots.txt 是什麼:Googlebot 看的第一份文件
上週有個客戶說他的部落格文章全都消失在 Google 搜尋結果了。我一看 GSC,發現涵蓋範圍報告裡有幾百個頁面被標記為「被 robots.txt 封鎖」。打開他的 robots.txt 一看:
User-agent: *
Disallow: /
整站封鎖。這條設定等於跟所有爬蟲說:「這個網站什麼都不能爬。」
robots.txt 是放在網站根目錄的純文字檔案,URL 固定是 https://yourdomain.com/robots.txt。它是 Googlebot 造訪你的網站時讀取的第一份文件,用來判斷哪些路徑可以爬、哪些路徑要跳過。
重要觀念:robots.txt 只控制爬取,不控制索引。這個差別後面會詳細解釋,先記住這一點。
Googlebot 的行為是:先去抓 /robots.txt,讀取完之後才決定要不要繼續爬其他頁面。如果你的 robots.txt 不存在(回傳 404),Googlebot 預設可以爬整個網站。如果回傳 5xx 伺服器錯誤,Googlebot 會把整個網站當成暫時無法爬取,改天再試。
robots.txt 的語法結構
robots.txt 的語法不複雜,但細節很重要。格式錯一個字元,效果可能完全不同。這一節把四個核心指令和路徑匹配規則搞清楚,後面診斷才有基礎。
基本結構:
User-agent: Googlebot
Disallow: /private/
Allow: /private/public-page/
User-agent: *
Disallow: /admin/
Disallow: /checkout/
Sitemap: https://yourdomain.com/sitemap.xml
逐行說明:
- User-agent:指定這條規則對哪個爬蟲生效。
*代表所有爬蟲。Googlebot只對 Google 爬蟲生效。Google 也有子爬蟲,例如Googlebot-Image、Googlebot-Video,可以分別設定。 - Disallow:禁止爬取的路徑。空白值(
Disallow:)代表允許爬取所有路徑。 - Allow:在 Disallow 的範圍內,開放特定路徑。只有部分爬蟲(包括 Google)支援這個指令。
- Sitemap:宣告你的 sitemap 位置。可以放多行、對應多個 sitemap 檔案。
路徑匹配規則需要特別注意:
Disallow: /blog會封鎖/blog、/blog/、/blog/2024/,因為是前綴匹配。Disallow: /blog/只封鎖/blog/開頭的路徑,不包含/blog這個頁面本身(少數情況下有差異,建議兩個都寫)。Disallow: *.pdf$,Google 支援*(任意字元)和$(路徑結尾)兩個萬用字元。
一個 robots.txt 可以包含多個 User-agent 群組。每個群組從 User-agent: 開始,到下一個 User-agent: 或檔案結尾結束。Google 爬蟲會找最符合自己名稱的群組,如果找不到,才退回用 * 群組。
Crawl-delay 指令:這個指令用來控制爬蟲兩次請求之間的等待時間(秒)。Bingbot 和其他部分爬蟲支援,但 Google 不支援 Crawl-delay。要控制 Googlebot 的爬取頻率,需要在 GSC 的「舊版 Search Console」→「爬取頻率」設定,或者等 Google 自己根據伺服器回應速度調整。
完整的語法規則與建立流程,可以參考 Google 官方 robots.txt 建立文件,裡面有最新的指令說明與範例。
常見 robots.txt 設定錯誤:症狀對照表
排查過的案例裡,robots.txt 問題大概可以分三類:誤封鎖重要路徑、無效指令造成混亂、以及格式問題。每一類的症狀和修法都不一樣。
類型一:誤封鎖重要路徑
| 症狀 | 常見原因 | GSC 表現 |
|---|---|---|
| 整站消失於搜尋結果 | Disallow: /(根目錄全封鎖) |
大量「被 robots.txt 封鎖」 |
| 部落格所有文章消失 | Disallow: /blog 或 /blog/ |
特定路徑下的 URL 全被封鎖 |
| 圖片不出現在 Google 圖片搜尋 | 對 Googlebot-Image 的 Disallow 設定 |
圖片索引量掉零 |
| 新文章不被收錄 | 封鎖了 sitemap 路徑或 API 路徑 | 已提交 URL 仍顯示未收錄 |
類型二:無效指令造成混亂
- 把
Disallow: /page和Disallow: /Page當成同一條,但 robots.txt 路徑匹配是 大小寫敏感的 - 寫了
Allow: /blog/卻沒有對應的Disallow,Allow 獨立存在沒有意義,它只有在某個 Disallow 範圍內才生效 - 誤用
Noindex:指令,這個指令不是 robots.txt 標準語法,Google 已在 2019 年停止支援
類型三:格式問題
- 指令後面多了空格(例如
Disallow: /admin/),部分解析器可能出問題 - 使用 Windows 換行符(CRLF)而非 Unix 換行符(LF),某些舊版爬蟲會誤讀
- 檔案編碼不是 UTF-8(含 BOM 的 UTF-8 也可能造成第一行解析失敗)
誤封鎖診斷流程:用 GSC 確認你沒有擋錯
如果懷疑 robots.txt 封鎖了不該封鎖的頁面,先在 GSC 做檢查,不要急著改檔案。很多人直接刪掉 Disallow 規則,結果改錯反而封鎖了更多東西。
操作步驟:
- 打開 Google Search Console,選擇你的網站
- 左側選單 → 設定(Settings)→ 找到「robots.txt」區塊
- GSC 會顯示 Google 最近讀取的 robots.txt 版本,以及上次抓取時間
- 在測試框輸入你想確認的路徑,例如
/blog/my-article - 點「測試」,系統會告訴你這條路徑對 Googlebot 是「允許」還是「封鎖」
要特別注意 GSC 顯示的 robots.txt 版本不一定是你現在的版本。Google 快取 robots.txt 最長 24 小時。如果你剛剛修改了 robots.txt,GSC 還在顯示舊版本,這是正常的。
如果在涵蓋範圍報告(Coverage Report)裡看到「被 robots.txt 封鎖」,點進去可以看到被封鎖的具體 URL。拿這些 URL 路徑一一貼入測試工具,確認封鎖是否符合你的預期。關於 GSC robots.txt 報告的完整說明,可以參考 Google Search Console 官方說明文件。
另一個快速方法:直接在瀏覽器打開 https://yourdomain.com/robots.txt,看原始內容,搭配閱讀比對被封鎖的路徑。
搭配GSC 索引涵蓋範圍報告的解讀方法,可以更快定位是 robots.txt 封鎖、軟性 404、還是 noindex 指令導致的收錄問題。
robots.txt 不等於 noindex:一個關鍵誤解
這是我見過最常見的誤解之一:以為 robots.txt Disallow 可以阻止頁面出現在搜尋結果。理解這個區別,才不會浪費時間做徒勞的設定。
這個假設是錯的。
robots.txt Disallow 只告訴 Googlebot 不要爬取這個路徑。但 Google 可能已經透過其他方式知道這個 URL 存在(例如:別的網站有連到這個頁面的連結),然後把這個 URL 索引進去,只是不知道頁面內容。
你可能在搜尋結果裡見過這種條目:顯示 URL,但描述欄只寫「由於該網站的 robots.txt,無法取得這個網頁的說明。」這就是典型案例:URL 被索引了,但 Google 因為 robots.txt 封鎖而無法讀取內容。
要完全防止一個 URL 出現在搜尋結果,你需要的是:
- 讓 Googlebot 可以爬取這個頁面(不要 Disallow)
- 在頁面的
<head>加入<meta name="robots" content="noindex">
Googlebot 必須先能爬到頁面,才能讀到 noindex 指令,然後才能把這個 URL 從索引中移除。如果你同時設了 Disallow 和 noindex,noindex 指令等於無效,Google 連進去讀都不進去,當然也讀不到 noindex。
延伸閱讀:noindex 和 nofollow 的完整說明:差異、設定方式與 SEO 驗證流程
robots.txt vs meta robots:什麼情況用哪個
這兩個工具解決不同問題,放在一起比較最容易搞清楚。選錯工具不只是沒效果,有時反而讓問題更難排查。下面的矩陣把六種常見情境整理清楚了。
| 你想要的結果 | 工具選擇 | 說明 |
|---|---|---|
| Googlebot 可以爬、可以索引 | 什麼都不設定 | 預設行為 |
| Googlebot 可以爬、但不想被索引 | 頁面加 meta robots: noindex |
Google 能看到頁面但不收錄 |
| 完全不想讓 Googlebot 爬取(省爬取預算) | robots.txt Disallow | 用於大量不重要的路徑,例如 /search?q= 參數頁 |
| 封鎖爬取 + 確保不被索引 | Disallow + noindex(需等 Google 先讀到 noindex 再加 Disallow) | 必須先讓 Google 爬到並讀到 noindex,才能加 Disallow |
| 某個頁面不想讓 Google 追蹤連結 | 頁面加 meta robots: nofollow |
robots.txt 無法控制連結跟蹤行為 |
| 只封鎖特定爬蟲(例如 Bingbot) | robots.txt User-agent: Bingbot | meta robots 無法按爬蟲區分 |
常見誤用案例:把 Disallow: / 當成保護私密內容的方法。這不管用,因為 robots.txt 是公開的,任何人都可以直接訪問 /robots.txt 看到你封鎖了哪些路徑。要保護私密內容,需要的是登入驗證或 HTTP 認證。
更完整的爬取管理策略,可以參考網站爬取 SEO 的整體框架,裡面有 Googlebot 爬取行為的完整解說。
WordPress robots.txt 的特殊機制與坑
WordPress 沒有實體的 robots.txt 檔案,除非你自己建立一個。預設情況下,WordPress 動態生成一個虛擬 robots.txt,回應給爬蟲,內容大概是:
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
這個預設設定封鎖了後台路徑,允許 admin-ajax.php(因為某些主題的前台功能用到這個路徑)。
問題來了:
問題一:SEO 插件覆蓋虛擬 robots.txt
Yoast SEO 和 RankMath 都可以接管 robots.txt 的輸出。如果你在插件設定裡加了自訂規則,但實際效果跟預期不符,先確認是哪個插件在輸出 robots.txt,以及當前輸出的內容是什麼。最快的方法:直接在瀏覽器打開 /robots.txt 看原始輸出。
問題二:實體檔案優先於虛擬 robots.txt
如果你在 FTP 或主機後台的網站根目錄(public_html/)放了一個 robots.txt 實體檔案,這個實體檔案會覆蓋 WordPress 動態生成的虛擬版本。很多人忘記這件事,結果兩個來源打架,最後不知道哪個生效。
診斷方式:SSH 進主機,ls public_html/ | grep robots,看看有沒有實體檔案。
問題三:暫存外掛快取舊版 robots.txt
部分快取插件會把 robots.txt 也快取起來。修改之後測試沒變化,記得清快取。
進階設定:Sitemap 宣告、Crawl-delay 與爬取效率
robots.txt 除了封鎖路徑,還有兩個實用的進階功能:Sitemap 宣告讓搜尋引擎更快找到你的內容,Crawl-delay 控制非 Google 爬蟲的請求頻率。
Sitemap 宣告
在 robots.txt 最末加上 Sitemap 位置,不只是禮貌,而是有實際效果。Google、Bing 等搜尋引擎在抓 robots.txt 的時候,會同步把 Sitemap URL 加進爬取佇列。這比只在 GSC 提交 Sitemap 多一個通知管道。
Sitemap: https://yourdomain.com/sitemap.xml
Sitemap: https://yourdomain.com/news-sitemap.xml
如果有多個 Sitemap 索引檔案,每個都列出來。
Crawl-delay(非 Google 爬蟲)
如果你的伺服器資源有限,擔心 Bingbot 或其他爬蟲爬太快造成負載,可以設定 Crawl-delay:
User-agent: Bingbot
Crawl-delay: 10
代表請求之間等待 10 秒。但記住,Google 完全無視這個指令。要讓 Googlebot 慢一點,只能透過 GSC 設定(舊版 Search Console 的「爬取頻率」功能)。
爬取預算考量
對大多數中小型網站,爬取預算不是問題,Googlebot 有足夠能力爬完整站。但如果你有以下情況,才需要認真考慮用 robots.txt 管理爬取預算:
- 網站有大量 URL 參數頁(例如電商篩選:
/products?color=red&size=M) - 大量內部搜尋結果頁(
/search?q=) - 測試環境或暫存路徑被意外連結到
- 大型網站(數十萬頁以上)
這些情況下,用 robots.txt 封鎖低價值的動態 URL,可以讓 Googlebot 把爬取能量集中在真正重要的內容頁上。
想深入了解爬取預算的完整概念與 GSC 診斷方法,可以參考爬取預算(Crawl Budget)診斷與優化指南。
測試 robots.txt 的三種工具
修改 robots.txt 之前和之後都應該測試,不要憑感覺猜效果。以下三種工具各有不同視角,組合使用能覆蓋大部分的問題。
工具一:GSC robots.txt 測試工具
前面步驟提過了。這是最直接的方法,因為它模擬的是 Googlebot 的視角。在 GSC → 設定 → robots.txt,輸入路徑測試。
工具二:curl 直接查看
最快速的方法,直接用終端機:
curl https://yourdomain.com/robots.txt
可以確認檔案是否存在、內容是否正確、HTTP 回應碼是否是 200。如果回傳 301 redirect,要追一下 redirect 的目標,有些 CDN 設定會導致 robots.txt 被重導。
工具三:Google 搜尋 site: 指令
輸入 site:yourdomain.com/blog/,看看這個路徑下的頁面有沒有出現在搜尋結果。如果數量明顯偏少,搭配 GSC 報告確認是不是 robots.txt 的問題。
這三個工具搭配Google Search Console 完整教學中的系統化診斷方法,基本上可以排查大部分的 robots.txt 相關問題。
robots.txt 驗收清單:修完之後怎麼確認沒問題
改完 robots.txt,不要就這樣關掉瀏覽器先去做別的事。以下清單是我每次修完 robots.txt 都會跑一遍的確認步驟,5 分鐘內可以完成。
- 直接打開
/robots.txt,確認內容是你要的版本(不是快取的舊版) - 在 GSC 測試工具確認你的重要頁面路徑是「允許」狀態
- 確認
Disallow: /不存在(除非你真的想封鎖整站) - 確認 Sitemap 行已正確宣告(路徑是完整 URL,非相對路徑)
- 如果是 WordPress,確認是插件在控制還是實體檔案,兩個不要同時存在
- 用 curl 確認 HTTP 回應碼是 200(不是 301/404/500)
- 等 24-48 小時後,回到 GSC 查看 robots.txt 版本是否已更新
- 等 Google 重新爬取後,查涵蓋範圍報告,確認「被 robots.txt 封鎖」的 URL 數量是否如預期減少或增加
常見誤解補充
最後整理幾個客戶常問的問題:
robots.txt 加密或保護私密內容?不行。robots.txt 是公開檔案,任何人都能看到你封鎖了哪些路徑,反而可能暴露你想隱藏的路徑名稱。私密內容要靠登入驗證。
robots.txt 可以封鎖 AI 爬蟲?可以設定,但效果有限。如果 AI 爬蟲遵守 robots.txt(遵守程度因平台而異),你可以針對特定 User-agent 設定 Disallow。例如 User-agent: GPTBot(OpenAI 爬蟲)或 User-agent: Claude-Web。但這不是保障,只是表達意願。
每次更新 robots.txt Google 要多久才會讀到?最長 24 小時。通常更快。急迫情況下,可以在 GSC 提交 URL 重新審查,間接觸發 Googlebot 重新訪問你的網站。
如果你的網站有爬取或索引問題,robots.txt 診斷是第一步。排查完之後,下一個要看的通常是GSC 索引涵蓋範圍報告,它會告訴你更完整的收錄狀態。
如果網站使用 JavaScript 框架,robots.txt 是否封鎖了 JS 或 CSS 資源,會直接影響 Googlebot 的渲染能力。詳見:JavaScript SEO 診斷:robots.txt 封鎖渲染資源的影響。