WebWork

robots.txt 的 User-agent、Disallow、Allow、Sitemap 規則逐條對照公開網址的實際搜尋結果狀態,含封鎖後仍可被外部連結索引的條件、測試工具與檔案放置位置。

robots.txt 規則與公開 URL 回應對照表

robots.txt 是什麼?放在網站哪裡?

「把網址寫進 Disallow,那一頁就會從 Google 消失。」這句話在網站圈流傳很久,實際的公開搜尋結果並不這樣走。robots.txt 是放在網站根目錄的純文字檔,用來告訴搜尋引擎爬蟲哪些網址與資源可以存取、哪些先不要,主要任務是管理檢索流量、避免伺服器被大量請求壓垮;被 Disallow 擋住的網址仍可能出現在搜尋結果中。

位置和檔名都不能將就。完整網址固定長成 https://www.example.com/robots.txt,檔名全小寫、直接放在網站根目錄,寫成 Robots.txt 或塞進子資料夾,爬蟲讀不到,等於網站根本沒有這份檔案。效力範圍也跟著檔案走:Google 的 robots.txt 規範文件寫明,規則只套用在檔案所在的 host、通訊協定與連接埠,https 那一份不涵蓋 http,掛在 :8181 這類非標準連接埠的服務要自己一份,子網域同樣各管各的。

爬蟲抵達網站時通常先讀這個檔案,再決定往哪裡走。MDN 的術語說明把它定位成控制存取範圍的檔案,一份寫得比較嚴的 robots.txt 能避免爬蟲吃掉過多頻寬,這也解釋了它為什麼常被當成流量調節工具,而不是收錄開關。

真正的目的如果是不讓某個頁面出現在搜尋結果,工具要換:改用 noindex 標記,或替頁面加上密碼保護。robots.txt 回答的是「爬蟲可不可以來」,不是「這一頁能不能被搜尋到」。

檔案裡的指令怎麼寫?

一份能用的 robots.txt 由幾個指令組成,一行一個,冒號後面接值。真正決定規則有沒有生效的是路徑怎麼寫,路徑沒指名或格式不對,那一行會被忽略。

如果您只想擋後台,Disallow 後面就要接上實際路徑,例如 /private/,而不是只寫一句「禁止這個目錄」。

User-agent 決定這組規則講給誰聽。寫 * 是對所有機器人說話,寫 Googlebot 或 bingbot 就只對那一支生效;同一個檔案裡可以針對不同爬蟲各寫一組規則,例如讓某支爬蟲不要進後台目錄,其他照常。

指令寫法範例作用條件與注意
User-agentUser-agent: *指定這組規則套用在哪些機器人身上,星號代表全部也可以指名 Googlebot、bingbot 等單一爬蟲
DisallowDisallow: /private/指定不想被檢索的目錄或檔案路徑需指名路徑,否則該行會被忽略
AllowAllow: /private/open.html在禁止的範圍裡開一條允許通行的例外需指名路徑;Allow 至少要跟 Disallow 一樣具體才會勝出;並非每個搜尋引擎都認可這個指令
SitemapSitemap: https://www.example.com/sitemap.xml指向 XML 網站地圖,幫爬蟲找到頁面需使用絕對路徑
Crawl-delayCrawl-delay: 20指定爬蟲兩次請求之間的間隔時間單位以秒計,Bing 支援這個指令;Google 不支援,Cloudflare 的說明則寫毫秒

路徑要指名,規則才會生效

Disallow 只寫「禁止這個目錄」是不夠的,後面要接上實際路徑,例如 /private/ 或 /images/dogs.jpg。同一個 User-agent 底下可以連續寫好幾行 Disallow,把後台、暫存目錄、特定副檔名分開列。想在最嚴的規則裡開一條生路,就補一行 Allow 指回允許的路徑。

Allow 與 Disallow 撞在同一條路徑上時,Google 的規範文件寫得很清楚:取路徑最長、最具體的那一條;長度相同又互相衝突,包括用到萬用字元的情況,取比較寬鬆的 Allow。路徑也有大小寫差別,/fish 擋不到 /Fish.asp;星號代表任意字元,「$」代表網址結尾,這兩個符號用得精準,規則才不會擋到不該擋的地方。

Crawl-delay 的間隔怎麼算

這個欄位以秒為單位,真正支援它的 Bing 在官方說明裡把它定義成固定時間窗內最多抓一次,Google 則完全不支援這個指令;Cloudflare 的說明寫毫秒,屬於另一種寫法。想壓低 Googlebot 的爬取量,Google 目前的做法是短期(幾小時到 1 到 2 天)對爬蟲請求回 500、503 或 429,或提交特殊請求回報爬取量異常;這個訊號拖太久,網址可能掉出索引。

規則寫了,公開網址會怎麼回應?

同一條規則套在不同檔案類型上,公開網址的狀態差得很遠,連 robots.txt 這份檔案自己的 HTTP 回應,都會改變整份規則怎麼被套用。

如果您在搜尋結果看到自家某個網址只有網址、沒有說明,就是被 Disallow 擋住但仍被收錄的樣子。

規則套用對象公開網址的實際回應
Disallow 封鎖網頁HTML、PDF 等 Google 可讀取的非媒體格式搜尋結果仍可顯示該網址,但不提供網頁說明,也就是只有網址沒有描述
Disallow 封鎖媒體檔案圖片、影片、音訊不出現在 Google 的圖片與影片搜尋結果;其他網頁或使用者仍可直接連到這些檔案
Disallow 封鎖資源檔案頁面載入需要的 CSS、JavaScript、圖片頁面可能無法被正確分析;缺少這些資源時,Google 難以理解頁面內容
外部連結指向被封鎖的網址來自其他網站的連結該網址仍可能被建立索引,搜尋結果可顯示網址與連結的錨定文字
Allow 開例外被 Disallow 涵蓋、但您允許的目錄或檔案該路徑回到正常檢索,前提是 Allow 寫得比 Disallow 更具體;長度相同又衝突時,Google 取較寬鬆的 Allow
Sitemap 指向 XML網站地圖協助爬蟲發現可檢索的頁面,不改變爬取速率,也不會讓特定頁面優先
robots.txt 自己回 4xx429 以外的用戶端錯誤、重新導向超過 5 次Google 視同網站沒有 robots.txt,等於不限制檢索
robots.txt 自己回 5xx 或連線失敗伺服器錯誤、連線中斷前 12 小時停止檢索整個網站並持續重試;之後 30 天沿用最後一份成功取得的版本

封鎖之後,搜尋結果長什麼樣

最常見的落差出現在一般網頁。Google 不會檢索被 Disallow 擋住的內容,但如果其他網站的連結指向那個網址,Google 仍可能為它建立索引,搜尋結果顯示網址與連結的錨定文字,就是沒有說明文案。被封鎖頁面裡嵌入的圖片、影片與 PDF 會一起被排除在檢索之外,除非有另一個允許檢索的頁面參照它們。想連網址一起收乾淨,得回到移除頁面、noindex 或密碼保護這幾條路。

媒體檔案與資源檔案的回應差在哪

把圖片或影片擋在門外,效果比擋網頁乾淨:它們不再出現在圖片、影片搜尋結果,但不代表檔案變成私有,別人照樣能把網址貼出去、直接連進來。資源檔案要更小心,CSS 與 JavaScript 被擋掉之後,爬蟲看到的是殘缺的版面,分析結果跟著失準;判斷標準很實際,這些檔案對理解內容有幫助就留著,只是佔流量、不影響判讀的再擋。

robots.txt 自己回 500 的時候

Google 的 robots.txt 規範文件寫明,4xx 錯誤(429 除外)一律視同網站沒有這份檔案,等於不限制檢索。回應 5xx 或連線失敗時,前 12 小時 Google 停止檢索整個網站並持續重試,接下來 30 天沿用最後一份成功取得的版本;如果從來沒有舊版可用,這段期間就當作沒有規則,30 天後網站大致恢復正常就當沒有檔案,網站本身也還有問題就繼續停止檢索。重新導向最多跟 5 次,超過就當成 404 處理。改版期間把 robots.txt 弄成 500,影響的是整站檢索,比寫錯一行路徑嚴重得多。

怎麼確認自己的 robots.txt 有沒有問題?

最快的檢查是把網域後面直接接上 /robots.txt 打開,看得到內容,就代表檔案放對了位置;開出來是空的或出現 404,就要回頭確認檔名大小寫與目錄層級。

如果您剛改完規則,隔天 Google 讀到的還是舊版,可能是快取還沒過期,本文前面寫過 Google 通常最多快取 24 小時;急件可以從 robots.txt 報告要求重新檢索。

語法要另外驗。Google Search Console 現在提供的是 robots.txt 報告,列出 Google 在網站前 20 個主機找到的 robots.txt、最後檢索時間,以及過程中遇到的警告與錯誤;修掉嚴重錯誤後,可以在報告裡要求重新檢索。想知道某個特定網址是不是被規則擋住,用的是網址審查工具,純語法檢查則交給 robots.txt 驗證器。Bing Webmaster Tools 也能測同一份檔案,兩邊都跑一次,可以抓到不同檢索器解讀上的差異。

改完不會立刻生效。Google 通常把 robots.txt 的內容快取最多 24 小時,檔案超過 500 KiB 的部分直接忽略;急件就從 robots.txt 報告要求重新檢索,讓新版規則早一點上路。

如果工具都過關,搜尋結果卻還是出現不該出現的網址,問題通常不在語法,而在選錯工具。這種情況可以請技術團隊逐條核對規則與公開回應,把該擋的、該改用 noindex 的分開處理。

哪些頁面該擋、哪些不該擋?

判斷的起點是這頁有沒有值得被檢索的內容。有內容、能替網站加分,就讓爬蟲進來;純管理的入口與半成品,才交給 Disallow。改版期間把整站 Disallow 的寫法,正式上線後就該移除,那一行的影響會直接落在搜尋結果上。

適合用 Disallow 的頁面

網站後台的登入入口、還在開發或改版的測試頁,以及為了測試功能而開的子網域,內容與主站一模一樣的那種重複頁,都是典型例子。這些頁面對訪客沒有價值,讓爬蟲把時間花在上面也不划算。半成品想不進搜尋結果,就不要用 Disallow 擋它,改用 noindex 或密碼保護,Google 才有機會讀到您的指示。

該改用 noindex 的頁面

購物車、結帳頁、站內搜尋結果頁屬於這一類,它們不適合當成搜尋結果的落地頁。noindex 讓頁面保留檢索、不進搜尋結果,代價是 Google 仍要對每個網址送出請求;Google 的檢索預算文件對大型網站建議,不重要或重複的網址(無限捲動產生的一長串版本、只是排序不同的列表)交給 robots.txt 擋,用 noindex 反而浪費檢索時間。網址數量少的時候兩種做法都可以,站台一大,這個取捨就會影響檢索效率。

規則管不到的地方

robots.txt 是一份請求,沒有強制力。搜尋引擎的爬蟲可以自行決定要不要遵循,Googlebot 與一些值得信任的檢索器通常會照做,惡意爬蟲則常直接忽略,甚至反過來讀您的規則,去找您不想被看見的路徑。

解讀方式也不統一。各家爬蟲對語法的理解有差異,有些指令它根本看不懂,所以同一份檔案在不同檢索器上可能得到不同結果,同一個網址在 Google 與 Bing 的狀態也就不見得一致。

如果您把備份資料夾的路徑寫進 robots.txt 想藏起來,等於把位置公開給任何人;真正敏感的東西,例如會員資料、內部報表、測試用的金鑰,要交給密碼保護或身分驗證。

robots.txt 是公開檔案,任何人都能打開來讀,您把路徑寫進去,等於同時告訴別人那裡有東西。

相關提問

  1. Disallow 封鎖的頁面還會被搜尋到嗎?

    會。Google 不會檢索被 Disallow 擋住的內容,但只要別的網站連到那個網址,它仍可能被建立索引,搜尋結果只以網址加錨定文字出現。想收乾淨,移除頁面、noindex、密碼保護這三條路要挑一條走。

  2. robots.txt 跟 noindex 差在哪裡?

    Disallow 阻止爬蟲進入頁面(不檢索),noindex 允許進入但不建立索引,兩者用在不同頁面上。要留意的是兩者不該同時下在同一頁:Google 進不去就讀不到頁面上的 noindex 標記,那個標記等於白寫,而這一頁本來就是希望它被檢索、只是不要進搜尋結果。

  3. Crawl-delay 的單位到底是秒還是毫秒?

    以秒計。Bing 官方把 Crawl-delay 定義成 1 到 30 秒的時間窗,每個時間窗最多抓一頁,數字越大抓得越少,而且每個子網域各算各的。Google 不支援這個指令,Cloudflare 的說明以毫秒計,是另一種寫法。

  4. 子網域要另外放一份 robots.txt 嗎?

    要,每個子網域需要自己的 robots.txt 檔案。規則只對檔案所在的 host、通訊協定與連接埠生效,https 那一份不涵蓋 http,掛在非標準連接埠的服務要另外準備一份,放在子資料夾裡的 robots.txt 也不會被讀到。

  5. 檔名寫成 Robots.txt 或 robots.TXT 會怎樣?

    爬蟲找不到,等同於沒有這個檔案。系統讀的是固定的小寫檔名,大小寫不符就當作不存在,等於沒有限制,爬蟲預設可以存取整個網站;如果原本靠它擋住測試頁,那些頁面會回到可檢索的狀態。

  6. 沒有 robots.txt 會被搜尋引擎懲罰嗎?

    不會,沒有這個檔案時等於沒給出限制,爬蟲預設可存取整個網站。Cloudflare 在 2025 年的觀察裡提到,前 10,000 個網站只有 37% 有這份檔案,可見它不是必要條件。要緊的是放對位置、寫對規則,而不是有沒有這個檔案。