W whoops.tw
SEO

為什麼 robots.txt 與 noindex 不能同時使用? | 白話文商學院

robots.txt 和 noindex 不能同時設在同一個頁面,這不是慣例問題而是邏輯互斥。robots.txt 在門口就擋下爬蟲,搜尋引擎根本爬不到頁面內容,頁面裡的 noin…

robots.txt 和 noindex 不能同時設在同一個頁面,這不是慣例問題而是邏輯互斥。robots.txt 在門口就擋下爬蟲,搜尋引擎根本爬不到頁面內容,頁面裡的 noindex 自然讀不到。Google 的檢索與索引文件講得很直白:要讓 noindex 生效就不該用 robots.txt 封鎖該頁,必須讓檢索器能存取網頁(見 Google Search 開發者文件)。換言之,若 robots.txt 封鎖了某頁,noindex 形同失效,URL 還是可能出現在搜尋結果。

重點先看:不收錄要放行爬蟲加 noindex,不爬才用 robots.txt;若 robots.txt 封鎖,noindex 形同失效,URL 仍可能被收錄。

先給結論:兩者不能疊加,目的相反

直接回答:robots.txt 和 noindex 不可以同時使用在同一個頁面。兩者同時設的時候 noindex 會形同失效,因為 robots.txt 在門口就攔下爬蟲,搜尋引擎爬不到頁面內容,自然讀不到裡面的 noindex 指令。很多人以為兩個一起用是「雙重保險」,1 加 1 大於 2,結果剛好相反,這是現場最常見的設定陷阱。

結構性矛盾在於爬取控制與索引控制是兩道獨立程序,而 noindex 屬於後者,卻依賴前者先發生才能被讀到。如果你對 robots.txt 完整介紹與 SEO 效果noindex 是什麼與它的 SEO 效果 還不熟,先回頭把這兩個指令的定位弄清楚,後續判斷會更穩。衝突的根源與覆蓋關係無關,純粹是兩個工具對應的目的相反:要不被收錄用 noindex 並放行爬蟲,要不被爬才用 robots.txt。基礎觀念可先看 SEO 自學懶人包。至於封鎖了頁面 URL 卻仍出現在搜尋結果,原因藏在索引來源比爬取範圍更寬這件事上。

把結論再往實務推一層。robots.txt 與 noindex 各自背後代表兩種完全不同的工程意圖:robots.txt 是「檢取排程」的過濾器,它在爬蟲發出 HTTP 請求之前就介入,決定要不要把這個 URL 排進檢取佇列;noindex 則是「索引建檔」的開關,它只在爬蟲已經下載到回應內容之後才有意義,告訴索引系統這份內容要不要進資料庫。一個作用在請求之前,一個作用在回應之後,兩者的時間軸根本不重疊。當你在同一頁同時開兩個開關,先觸發的那一個(robots.txt)會直接截斷後面那個(noindex)的執行條件,於是 noindex 從頭到尾沒有被執行的機會。把這層時序關係想通,後面所有進階判斷都會變得直觀。

爬取、索引、收錄是三道獨立程序

robots.txt 管的是要不要爬(crawl),noindex 管的是爬到了要不要收進索引(index)。一個在門口生效,一個在頁面內才生效,所以爬取被封鎖時 noindex 連被讀到的機會都沒有。要理解衝突,這三個動作的定義得先確認,因為Google 搜尋引擎運作原理裡的檢索、索引、排名是循序進行的。

  • 爬取(crawl):搜尋引擎派爬蟲下載頁面原始碼,由 robots.txt 在門口決定放不放行,細節可看 爬取與爬取預算的運作機制
  • 索引(index):把爬到的內容收進資料庫,由頁面內的 noindex 或 Header 的 x-robots-tag 決定要不要收,這也是 索引是什麼與如何確認被索引 的核心。
  • 收錄(serve):被索引的頁面才有資格出現在 搜尋結果頁 SERP 元素,但沒被索引不代表 URL 不會出現,這是關鍵反直覺點。

因果鏈是這樣跑的:你在 robots.txt 寫下 Disallow: /somepage,爬蟲理論上不會去爬該頁,於是看不到 HTML 裡的 meta robots,也讀不到 HTTP Header 的 x-robots-tag: noindex,noindex 無從執行。這也牽動整站的檢取資源分配,可對照 爬取預算優化策略 一起評估。noindex 沒有壞掉,只是它從一開始就沒有舞台。被爬不等於被索引,不被爬也不等於不被索引,這是判斷的起點,也解釋了 檢索環節在索引與排名之間的角色 為何必須先弄懂。一旦把兩條管線看成獨立,就會發現 noindex 與 robots.txt 作用在不同的時間點上,並不存在誰蓋過誰的問題。

把三道程序的關係再具體化成可以拿來除錯的檢查點。爬取層發生問題,症狀是 GSC 網址檢查工具會顯示「已被 robots.txt 封鎖」或「無法擷取」,這個狀態會一路擋住後面兩層;索引層發生問題,症狀是「已檢索,但未建立索引」,代表爬蟲進來了、noindex 被讀到了、指令也照辦了,這反而是設定正確的訊號;收錄層若出現「已建立索引」,代表 noindex 沒有生效或根本沒設。先學會從 GSC 的狀態文字判斷問題落在哪一層,比盲目改 meta 或改 robots.txt 有效得多,因為三層的修法完全不同:爬取層去動 robots.txt,索引層去動 noindex,收錄層則要先確認前面兩層都通了。

同時設定的下場:noindex 失效、URL 仍可能出現

為什麼 robots.txt 阻擋了頁面,URL 還是出現在搜尋結果?因為即使內容爬不到,只要該 URL 被其他網站連結或其他線索指向,搜尋引擎還是會把它收進索引,只是顯示成只有 URL、沒有描述的條目。Google 官方文件寫得很直白:網頁若被 robots.txt 封鎖或檢索器無法存取,檢索器便無從發現 noindex 規則,該網頁仍可能出現在搜尋結果(見 Google Search 開發者文件)。

反直覺的地方在於,封鎖爬取不等於安全隱形,只是隱藏內容、不是移除條目。你在 SERP 上常會看到一行熟悉的訊息:「沒有可用的描述,因為此網站的 robots.txt 進行了限制。」這正是設定衝突的可見症狀,不是 bug,而是 robots.txt 長期以來的已知行為,這在 Google AI Overviews 摘要 興起後更值得留意,因為 AI 整理答案時也可能引用這類只露網址的條目,相關趨勢可看 AI 搜尋摘要的 SEO 對策。看到這行字,別急著怪搜尋引擎,先檢查自己有沒有把 noindex 和 Disallow 疊在一起。

把三種情境擺在一起比對,衝突會看得更清楚。實務上排查時第一個該看的對照表長這樣,不管是 Perplexity 查資料或自己除錯都適用:

設定情境爬蟲能否爬到內容noindex 是否生效SERP 結果
只用 robots.txt Disallow不能無從生效URL 仍可能出現,僅顯示網址,附「因 robots.txt 限制」訊息
只用 noindex 並放行生效最終從搜尋結果移除
兩者同時用不能形同失效等同第一種情境,URL 仍可能出現

這張表也說明了一個常被忽略的事實:noindex 是「主動排除收錄」的指令,它需要被讀取才會發揮作用,而讀取的前提是頁面被爬到。如果你的網站結構有問題,例如 SEO 友善的網站架構 沒做好,或內部連結打造網站架構出現斷層,爬蟲本來就難抵達該頁,這時候加再多 noindex 也讀不到。把網址結構與命名、網域與網址的區分顧好,是讓指令有機會被讀到的地基。

被爬不到的頁面,不只 noindex 失效,連帶結構化資料用途、Open Graph 社群分享標籤、Title Tag 裡的任何標記都會一起失去意義,因為搜尋引擎根本沒下載到那份原始碼,完整的標記規範可見結構化資料 Schema 標記教學。換言之,爬取被封鎖是一個會牽連整頁所有標記的根因,不是單一指令的小毛病。正因如此,排查 noindex 失效時,第一個動作永遠是確認該頁有沒有被爬到,meta 寫法擺到後面再看;先排除爬取層,再談索引層的指令,順序顛倒會讓你繞一大圈還找不到答案。

為什麼被封鎖的 URL 仍會被收錄:連結訊號與索引來源

很多人卡在「我明明 Disallow 了,為什麼還在搜尋結果」這一關。原因在於 Google 收錄一個 URL 的依據,從來不只有「親自爬到內容」這一條路。只要這個 URL 出現在外部連結、sitemap、內部連結、或任何已被索引的頁面裡,Google 就會把這個 URL 本身記成一筆「存在於網路上的位址」,即便它從來沒下載過該頁的 HTML。這種收錄叫做「沒有內容的索引條目」,搜尋引擎知道這個網址存在、知道它被誰連結,卻沒有任何文字描述可以顯示,於是 SERP 上就出現那行「因 robots.txt 限制,沒有可用描述」。

這個機制帶出兩個常被低估的後果。第一,封鎖爬取無法保證隱形,只要還有任一條連結指向該 URL,它就會以條目形式留在索引裡;想徹底消失,唯一可靠的方法是讓 noindex 被讀到;把爬蟲擋在門外是做不到的。第二,被封鎖頁面上的連結價值也會跟著打折,因為爬蟲進不去,頁面裡那些指向其他頁面的內部連結、反向連結與網域權重 的傳遞訊號都無法被解析,等於你把一個本來能分配權重的節點整個關掉。這也是為什麼把重要分類頁或導覽節點寫進 Disallow,往往會連帶拖垮它下游頁面的索引速度。

這裡的關鍵是:robots.txt 控制的是「要不要花資源去爬」,控制不了「要不要把這個網址記進索引」。索引來源比單一頁面的爬取範圍寬得多,外部世界的任何提及都可能讓一個 URL 進入索引。想把這個觀念和整體索引運作串起來,可回頭對照 Google 搜尋引擎運作原理 裡檢索與索引的關係,會更清楚為什麼兩者獨立。

決策框架:你要的是不被爬還是不被收錄

選擇哪一個,關鍵在於先確認你的目的是怕被爬還是怕被收錄。怕被收錄就用 noindex 並放行爬蟲;怕被爬(例如大量參數頁、系統檔),才用 robots.txt,但要接受它仍可能以 URL 形式出現在搜尋結果。把目的拆成爬取控制與索引控制兩個維度,先決定目的再選工具,是這個主題真正的資訊增量。會出錯的往往不在工具本身,而在沒想清楚要解決哪一層問題,就把所有指令倒進同一頁:有人想藏掉訂單頁卻用 Disallow,有人想省爬取預算卻硬加 noindex。搜尋意圖與高排名 的觀念不只用在內容,也用在索引控制:先確認目的,再選手段。

三條正確路徑如下,對應三種常見需求:

  • 不被收錄:頁面或 HTTP Header 加 noindex,同時放行爬蟲。單頁用 meta robots,整站或非 HTML 資源用 x-robots-tag: noindex,可參考 不被索引的四種方法
  • 完全不曝光:會員登入、密碼保護或伺服器端認證,這對搜尋引擎與一般訪客都不顯示,是真正的隱藏。
  • 只擋爬取:用 robots.txt Disallow,目的是省爬取預算與伺服器負擔,搭配 反向連結與網域權重 的布局一起看,但要接受該 URL 仍可能被索引。

這裡要特別釐清 x-robots-tag 與 meta robots 的差別。前者放在 HTTP Header,適合整站批次設定或 PDF、圖片這類非 HTML 資源,伺服器層就能控制;後者寫在 HTML 的 head 區塊,適合單頁、單檔調整。兩者傳達的索引意圖相同,差別在落點與適用範圍。如果你對標記不熟,用 F12 看網頁原始碼 能幫你確認 meta 到底有沒有正確送出。

這個決策框架也會回頭影響你怎麼規劃 重複內容對 SEO 的影響 的處理方式。遇到重複頁,多數人直覺是 noindex,但若該頁同時被封鎖爬取,noindex 又會失效,這時候反而該優先用 canonical 標準網址解決重複內容,更系統化的重複內容處理可參考 Canonical URL 完全指南。不過 canonical 和 noindex 本身也不建議同時用在同一頁,因為目的相斥,這點後面會點到。

二維決策矩陣:把目的對應到正確工具

把上面的判斷整理成一張二維矩陣,遇到任何一個頁面,都能用同一套問法決定指令。橫軸是「要不要出現在搜尋結果」,縱軸是「要不要被爬蟲存取」,兩個維度各自有兩個答案,交會出四種組合,每種組合對應一組明確的設定:

要出現在搜尋結果不要出現在搜尋結果
要被爬蟲存取什麼都不用設,正常發布並確保可被索引放行爬蟲,加 noindex
不要被爬蟲存取矛盾組合,實務上不存在;若硬要 Disallow,URL 仍可能以條目形式出現用密碼或權限保護,而非 robots.txt

這張矩陣最關鍵的價值在於第三格和第四格。第三格「不要被爬又要出現在搜尋結果」是邏輯上不該存在的組合,但實務上很多誤設就落在這裡:開發把結帳流程 Disallow,行銷卻期待結帳完成頁能被收錄來累積轉換頁的能見度,兩邊需求打架,結果頁面既爬不到又進不了索引。第四格「不要被爬又不要出現」是大家最想達成卻最常設錯的狀態,正解是伺服器層權限,不是 robots.txt,因為 robots.txt 擋不住索引條目。把這張矩陣印下來貼在排查流程旁邊,任何「為什麼這頁沒照我預期」的問題,先丟進矩陣定位,八九不離十能找到矛盾點。

矩陣還能反過來用來檢查設定一致性。把網站裡每一個被特殊處理的頁面(有 noindex、有 Disallow、有 canonical、有密碼)逐一填進對應的格子,如果同一個頁面被填進兩個以上的格子,例如同時有 Disallow 又有 noindex,就代表指令之間一定有一個是失效的。這個一致性檢查比逐條讀 robots.txt 與 meta 來得快,因為它直接逼你看「目的」而非「語法」。

已經設錯了怎麼補救:移除與驗證

設定錯了要怎麼讓頁面真的從搜尋結果消失?先把 robots.txt 的 Disallow 拿掉,讓爬蟲能爬到該頁讀到 noindex,接著透過網址檢查工具主動請求重新檢索,noindex 才會真正生效,之後頁面會從索引中移除。順序不能顛倒,因為只要 Disallow 還在,後面所有動作都是白做。

補救的標準步驟如下,是 How-to 類排查最實用的流程:

  1. 移除 robots.txt 中針對該頁的 Disallow 規則,確認放行。
  2. 確認 noindex 已加在頁面 meta 或 HTTP Header(x-robots-tag,noindex)。
  3. Google Search Console 的網址檢查工具主動提交重新檢索,工具細節見 GSC 網址檢查工具主動提交
  4. 等待重新檢索與索引更新,期間可看 GSC 網頁索引報表判讀 追蹤狀態。
  5. 若需立即移除,搭配 GSC 移除工具(暫時性,效力約半年左右),但根治仍是 noindex。

時程不要寫死。noindex 生效時間取決於檢索頻率,從數天到數週不等,沒有固定保證天數。大型網站或冷門頁面可能更久,所以想立刻下架的話,得靠 GSC 移除工具先撐住半年左右,再等noindex 自然接手。得承認一件事:沒有任何指令能保證 N 天內一定消失,這是搜尋引擎本身的節奏決定的。

用一個典型情境把整段補救流程串起來看會更具體。以商品數約數千到上萬的中型電商站為例,常見的狀況是開發為了擋掉結帳流程、購物車與一批參數篩選頁,在 robots.txt 寫了 Disallow: /cartDisallow: /checkoutDisallow: /*?,同時行銷又在這些頁面加了 noindex,誤以為雙重保險。這類站點常見的症狀是 SERP 上持續出現一批只有網址、附帶「因 robots.txt 限制,沒有可用描述」的條目,數量依被封鎖範圍大小約落在數十到數百個 URL,而且往往拖了約數週到一兩個月仍未消失。把 Disallow 拿掉、放行爬蟲讓 noindex 被讀到後,依典型表現幅度,多數條目約在數天到數週內陸續退出索引,但若該批 URL 同時被外部連結大量指向,殘留時間會再拉長,這是 robots.txt 與索引來源相互獨立造成的已知落差,光靠重複調整指令難以立即消除。這個情境要提醒的是:補救能否徹底,關鍵在於一開始有沒有把「不要被爬」與「不要被收錄」拆成兩件事來評估;把 Disallow 當成隱藏工具,往往就是這類 URL 條目長期賴在 SERP 的根因。

驗證方法有兩條。第一,在 GSC 網頁索引報表查看該頁是否進入,相關指標可對照 SEO KPI 設定與代理商地雷「已檢索但未建立索引」狀態;第二,用 URL Inspection 確認檢取狀態與最後檢取時間,輸入時留意 網址 URL 的 SEO 基礎 的格式,看 noindex 有沒有被讀到。如果你還沒裝好 GSC,先照 Google Search Console 安裝教學 跑過一次,否則後續驗證都沒有資料可看,操作細節也可對照 GSC 實戰技巧。碰到大規模排查,搭配 Screaming Frog 爬蟲檢測工具 一次撈出哪些頁面同時有 Disallow 與 noindex,會比逐頁檢查快很多。

補救流程裡有一個最容易漏掉的步驟:驗證 robots.txt 是否真的已經被 Google 重新讀取。robots.txt 本身也有快取,Google 並非每次檢取都重讀這個檔案,典型的快取時效大約是二十四小時左右,所以即使你已經把 Disallow 拿掉、把檔案存好,Google 在這段快取期內還是可能沿用舊的封鎖規則。正確做法是在 GSC 的 robots.txt 檢查工具裡先請求重新讀取該檔,確認 Google 拿到的是最新版本,再去做網址層級的重新檢索請求。順序倒過來的話,你會看到網址檢查工具回報「仍被封鎖」,誤以為 noindex 沒生效,其實只是 robots.txt 快取還沒更新。

robots.txt 語法的隱藏陷阱:Disallow 寫法的邊界條件

就算觀念正確,robots.txt 的語法本身還有幾個會讓指令失靈的邊界條件,值得單獨拆開講。最容易誤觸的是路徑匹配的範圍認定。Disallow: /private 會封鎖所有以 /private 開頭的網址,包括 /private/private//private-page/private?x=1;但 Disallow: /private/ 只封鎖 /private/ 這個資料夾底下的網址,不會擋到 /private-page 這類同名但不同層級的頁面。很多封鎖範圍過大的事故,就是少了那一條結尾斜線造成的。與斜線一樣會擴大或收窄範圍的,是萬用字元 * 與結尾符號 $* 代表任意字串,Disallow: /*? 會封鎖所有帶查詢字串的網址,擋參數頁時好用卻也容易誤傷帶必要參數的落地頁;$ 用來標示路徑結尾,Disallow: /*.pdf$ 只封鎖結尾是 .pdf 的網址,不會連帶封鎖 /pdf-guide。這兩個符號搭配得當能精準控制範圍,搭配不當就會出現「明明只想擋一種網址卻整批被擋」的狀況,要進一步理解參數處理可看 網址查詢參數的處理

語法的另一個分岔是 user-agent 的選擇,它決定規則對誰生效。robots.txt 可以針對不同爬蟲設不同規則,User-agent: * 對所有爬蟲生效,User-agent: Googlebot 只對 Google 生效。實務上常見的錯誤是把封鎖規則只寫在 User-agent: * 區塊,卻忘了某些驗證工具或第三方爬蟲用的是自己的 user-agent 名稱,結果 Google 被擋住了,你想擋的其他爬蟲反而沒被擋到;反過來,若只想封鎖 Google 但放行其他搜尋引擎(例如開發環境不想被 Google 索引),就要明確指定 User-agent: Googlebot 並寫在 * 之前,因為爬蟲只讀第一個匹配到的區塊。但無論路徑或 user-agent 寫得多精準,都繞不開一個比語法更根本的事實:robots.txt 一旦封鎖了某個頁面,Google 就不再下載它,連帶這個頁面上的 noindex、canonical、結構化資料全部都讀不到。所以排查「為什麼 canonical 沒生效」「為什麼 noindex 沒生效」時,永遠先懷疑是不是被 robots.txt 封鎖,meta 寫錯通常不是主因。

robots.txt 加 canonical 為什麼也失效

robots.txt 與 canonical 可以一起用嗎?不行,道理一模一樣。canonical 也是寫在頁面內的指令,一旦 robots.txt 封鎖了爬取,搜尋引擎讀不到 canonical,標準網址的指向就無法生效,等於兩個一起用也不奏效。這是很多同類文章沒點出的延伸陷阱,canonical 標準網址解決重複內容跟 noindex 得的是同一種病,定期可參考 SEO 內容年度更新建議

判斷通則只有一句:只要指令需要被讀取才生效,就不能同時用 robots.txt 把它擋在門外。這涵蓋所有頁面內或 Header 內的索引相關指令,noindex、canonical 都在內。所以當你在處理重複內容時,記得 四種連結類型完整解析 裡 canonical 那一頁必須被放行爬取,否則標準化訊號根本送不出去。

這裡要釐清一個容易踩雷的組合:noindex 與 canonical 本身也不建議同時用在同一頁,因為目的相斥,一個要排除收錄、一個要把權重集中轉移,這裡只點到不展開。把它和 robots.txt 的衝突分開記,會更清楚。說回主軸,canonical 失效的根因和 noindex 一模一樣,若內容有轉載,另見 文章轉載對 SEO 的影響,都是爬取被封鎖導致指令讀不到,排查邏輯完全可以套用前一段的補救步驟。

真正藏住內容要靠權限與密碼保護

如果連內容都不想被任何人看到,答案是 noindex 不夠用。noindex 只擋收錄進搜尋結果,不擋被爬取被存取。若要完全不讓外人讀到內容,應使用會員登入、密碼保護或伺服器端認證,這對搜尋引擎與一般訪客都不曝光,才是真正的隱藏。把「不想出現在搜尋結果」和「不想被存取」當成兩個不同資安層級,是這個主題最該建立的觀念。

robots.txt 不是安全機制,它只是禮貌性請求,惡意爬蟲仍會無視,把敏感路徑寫進 Disallow 反而等於公開昭告這些路徑存在;想藏後台路徑卻把它寫進 robots.txt,等於發一張地圖給攻擊者,這個代價很多人沒算到。真正想擋住存取,請回到伺服器層:會員登入、HTTP Basic Auth、IP 白名單、單獨的 HTTPS 與網站安全 憑證加上權限控管,這些才擋得住訪客與搜尋引擎。noindex 只解決「不出現在 SERP」這一層,不解決「不讓人讀到內容」。

把「隱藏」這件事依強度分成三級會更清楚判斷。最低一級是「不想被收錄」,用 noindex 加放行,搜尋引擎讀得到內容但不會建索引,這對沒有保密需求、只是不想佔 SERP 版位的頁面最合適,例如感謝頁或站內篩選結果。中間一級是「不想被外部看到內容」,用密碼或會員牆,內容存在但需驗證才能讀,會員專屬內容、訂單、後台、含個資的頁面、暫時性活動報名表單、測試環境與預覽連結都落在這裡。最高一級是「不想讓任何人知道這個網址存在」,只能靠完全不對外曝光、不放在任何會被連結的地方來達成,連 robots.txt 都別寫,因為寫了等於昭告天下。把需求對應到強度等級,工具的選擇就會自動收斂。

robots.txt 真正該用的場合:擋爬取不是擋索引

什麼時候才該單獨使用 robots.txt?當你的目的只是不要讓搜尋引擎浪費爬取資源、同時不介意是否出現在搜尋結果時,才用 robots.txt。典型情境包括系統檔、大量動態篩選參數頁、站內搜尋結果頁、分頁與排序參數,目的是保護爬取預算與伺服器負擔。這跟 網址路徑的組成 息息相關。

  • 站內搜尋結果頁:/search/?q=
  • 動態參數頁:?sort=?filter=?page=,細節見 網址查詢參數的處理
  • 系統與後台路徑:/wp-admin、購物車、結帳流程、暫存目錄

大型網站用 robots.txt 引導爬蟲把預算花在重要頁面,這是它最正當的用途,搭配 XML Sitemap 對爬取的幫助 一起規劃效果更好,網站 Sitemap 的整體入門觀念可看 網站 Sitemap 入門指南。但要接受一個代價:被 Disallow 的頁面仍可能以 URL 形式出現在 SERP,這是 robots.txt 的已知限制,不是 bug。想消失交給 noindex,想省爬取交給 robots.txt,命名時也可參考 中文網址與英文網址選擇,各司其職,這八個字記熟就能避開大多數設定錯誤。

講到爬取預算,還要留意 JavaScript 密集的頁面:爬蟲會做二次渲染,耗費的資源比純 HTML 高很多,這時候亂封鎖反而會誤傷重要頁面的 JavaScript 網站爬蟲渲染與收錄。若網站是 Hreflang 多語言網站架構 或剛經歷 網站搬家改版的 SEO 風險,robots.txt 的調整更要保守,否則一次封鎖就可能讓整批頁面的索引訊號斷掉。這類情境下,與其全面 Disallow,不如只針對明確無價值的參數組合下手,把判斷建立在具體路徑而非整個資料夾上,才能在保護爬取預算與維持索引訊號之間取得平衡。robots.txt 是拿來省資源的工具,不是拿來藏頁面的工具,兩者混為一談就是大部分設定事故的開端。

回到源頭,無論你要處理的是 SEO 關鍵字基礎 背後的內容布局,還是 黑帽白帽灰帽 SEO 差異 裡講的指令濫用,robots.txt 與 noindex 的分工都是基本功,把它放進 站內 SEO 完整攻略 的全盤規劃裡一起看會更踏實。把工具的邊界畫清楚,比記一百條規則都實用;這類設定會出錯的永遠是同一個地方:沒先把目的講清楚,就把指令全倒進同一頁。

進階情境:搬家、改版與多語系網站的指令風險

當網站進入大規模異動期,robots.txt 與 noindex 的風險會被放大。最典型的是網站搬家或改版期間,舊網址正在做 301 轉向到新網址,這時候若舊網址同時被 robots.txt 封鎖,爬蟲連 HTTP 301 回應都拿不到,轉向訊號等於斷在門口,新網址會拿不到舊網址累積的權重與索引銜接。正確做法是搬家期間務必放行舊網址讓爬蟲讀到 301,等新網址完全接管、舊網址在 SERP 自然消失後,再評估是否要清理。這層風險可對照 網站搬家改版的 SEO 風險 的完整處理流程。

多語系網站則有另一種隱形風險。hreflang 標記和 canonical 一樣屬於頁面內指令,必須被爬蟲讀到才生效,若某一個語系版本被 robots.txt 封鎖,爬蟲讀不到它的 hreflang,整組語系之間的對應關係就會出現破洞,使用者可能在錯的語系看到頁面,或某些語系根本不被收錄。多語系架構下,robots.txt 的封鎖範圍要特別保守,原則上只封鎖整站共通的系統路徑,避免碰觸任何語系版本的內容路徑,相關觀念見 Hreflang 多語言網站架構

還有一個常被低估的搭配組合:noindex 與 410 Gone 狀態碼。當一個頁面要永久下架,最乾淨的做法是回傳 HTTP 410,告訴搜尋引擎這個資源已永久移除且不會回來,Google 收到 410 通常會比收到 404 更快把它從索引移除。相較之下,單純用 noindex 處理永久下架的頁面,等於多繞一圈:頁面還在被爬、noindex 還在被讀,搜尋引擎還要花檢取資源去維持一個永遠不會被收錄的狀態。把「永久刪除」和「暫時不收錄」分清楚,前者用 410,後者用 noindex,能讓索引系統的處理效率更高,也讓你的指令意圖更明確。

行動裝置優先索引下的指令注意事項

Google 已完成行動裝置優先索引的轉換,所有能在行動裝置運作的網站,都主要由行動版爬蟲檢取。這件事直接影響 robots.txt 與 noindex 的設定邏輯:既然 Google 主要看行動版,那麼行動版與桌面版如果在指令上不一致,例如桌面版有 noindex 但行動版沒有,或是行動版的某些資源被 robots.txt 封鎖導致頁面無法完整渲染,都會讓索引訊號出現矛盾。Google 在 2023 年 10 月正式宣告行動裝置優先索引已完成,所有支援行動瀏覽的網站都改由行動爬蟲主要檢取 [來源:〈Google Search Central Blog (developers.google.com)〉〈https://developers.google.com/search/blog/2023/10/mobile-first-is-here〉〈2023-10-31〉]。

實務上要檢查的重點有兩個。第一,行動版頁面裡的 CSS 與 JavaScript 資源不能被 robots.txt 封鎖,否則行動爬蟲無法渲染頁面,也就讀不到頁面裡的 noindex 或其他 meta;很多人在 robots.txt 把整個 /assets//static/ 封鎖以為是省資源,結果連帶封鎖了渲染所需的樣式與腳本,這在 JavaScript 網站爬蟲渲染與收錄 裡是反覆出現的問題。第二,行動版與桌面版的 meta robots 必須一致,不能只在其中一個版本加 noindex,因為行動裝置優先索引下,Google 看到的是行動版的指令,桌面版的設定幾乎被忽略。

這也帶出一個延伸原則:當網站有獨立的行動版網域(例如 m. 開頭的子網域)時,兩個網域的 robots.txt 要分開管理,而且兩邊的索引指令必須對齊,否則很容易出現「桌面版被正確處理、行動版卻被誤封鎖」的狀況。把這層認知納入排查流程,當你看到 GSC 報告裡索引狀態異常時,記得連行動版的 robots.txt 與 meta 一起檢查,而不只看桌面版。

排查流程:用文字決策樹找出指令失效的根因

把前面所有判斷串成一條可以照著走的排查流程。當你發現某個頁面的索引狀態不如預期,無論是該收錄卻沒收錄、或不該收錄卻還在 SERP,都套用一棵結構化的決策樹,從最上層逐層檢查,每一步都對應一個明確的動作:

  1. 用 GSC 網址檢查工具看該頁的「檢索狀態」。若顯示「已被 robots.txt 封鎖」或「無法擷取」,問題在爬取層,跳到步驟二;若顯示「已檢索」則跳到步驟三。
  2. 檢查 robots.txt 是否有針對該路徑的 Disallow,包括萬用字元與結尾斜線的誤觸;若有,移除並在 GSC 請求重新讀取 robots.txt,再回步驟一看檢取狀態是否恢復。
  3. 確認頁面回應的 meta robots 或 x-robots-tag 內容。若包含 noindex,但你想被收錄,代表索引指令與目的衝突,移除 noindex;若你想排除收錄,這反而是正確狀態。
  4. 檢查該頁是否同時有 canonical 指向他頁。canonical 會把索引權重轉移到目標頁,若目標頁有問題,來源頁會跟著消失,需確認 canonical 目標本身可被正常索引。
  5. 若上述都正常但索引狀態仍異常,檢查伺服器是否對 Googlebot 回傳了非 200 狀態碼,例如 403、404、5xx,這會在檢取層就中斷整個流程。
  6. 所有檢查完成後,提交重新檢取並等待索引更新,期間用 GSC 網頁索引報表判讀 追蹤狀態變化。

這棵決策樹的設計邏輯是「從最便宜、最上層的檢查開始,逐層往下」。爬取層的問題只要看一眼檢取狀態就能發現,成本最低,所以擺第一;伺服器回應碼的檢查相對需要動到 log 或伺服器設定,成本最高,擺最後。照這個順序走,能避免一開始就鑽進 meta 細節、卻繞了一大圈才發現原來是 robots.txt 快取沒更新的窘境。把這棵樹和前面的二維矩陣搭配使用,矩陣幫你定位「目的有沒有設對」,決策樹幫你定位「執行有沒有出錯」,兩者涵蓋了絕大多數設定事故的根因。

設定前最後的檢查清單

動手改任何索引或爬取指令之前,照著這份清單逐條確認,能擋掉九成以上的設定事故。這份清單把前面所有觀念濃縮成可操作的勾選項目:

  • 這個頁面的目的是「不被收錄」還是「不被爬」?兩者只能選一個對應的工具。
  • 若用 noindex,確認該頁沒有同時被 robots.txt 的 Disallow 封鎖,否則 noindex 失效。
  • 若用 canonical 解決重複內容,確認來源頁與目標頁都放行爬取,否則標準化訊號送不出去。
  • 封鎖系統路徑時,檢查結尾斜線與萬用字元是否誤觸了內容頁,例如 /search/search/ 範圍不同。
  • 敏感路徑(後台、會員資料)不要寫進 robots.txt,改用伺服器層權限,避免等於公開路標。
  • 行動版的 CSS、JS 資源不能被封鎖,否則行動爬蟲無法渲染、讀不到 meta。
  • 搬家或改版期間放行舊網址讓 301 訊號能被讀到,封鎖會斷掉權重銜接。
  • 永久刪除的頁面優先用 410,比單純 noindex 更快被移出索引。
  • 改完 robots.txt 後,到 GSC 請求重新讀取該檔,避免快取期內沿用舊規則。
  • 大規模異動後,用 Screaming Frog 爬蟲檢測工具 批次掃描,確認沒有頁面同時掛著矛盾的指令組合。

這份清單不是一次性文件,建議在每一次網站結構變動、每一次大規模上線新區塊之前都跑一遍。指令設定的事故往往出在改 A 的時候忘了 A 還連著 B,觀念本身多半已經懂了,清單的存在就是為了在忙碌的部署流程裡強制留下一次完整的自我檢查。把這個習慣建立起來,比記住任何單一條規則都更能長期避開設定地雷。

常見問題:robots.txt 與 noindex 的疑難排解

robots.txt 和 noindex 為什麼不能同時使用?

因為前者封鎖爬取,後者要被爬到才讀得到。爬蟲在門口被擋下,頁面內的 noindex 根本無從執行,等於自動失效,URL 仍可能出現在搜尋結果。

頁面被 robots.txt 封鎖為什麼還是出現在搜尋結果?

只要該 URL 被外部連結或其他線索指向,搜尋引擎仍會收進索引,並以只有網址、沒有描述的形式顯示,常附「因 robots.txt 限制」的提示。封鎖爬取不等於移除條目。

robots.txt 的 Disallow 結尾要不要加斜線有差嗎?

有差。Disallow: /private 會封鎖所有以這個字串開頭的網址,範圍較大;Disallow: /private/ 只封鎖該資料夾底下的網址。範圍控制錯誤是 robots.txt 最常見的誤觸,封鎖前務必對照實際網址結構確認。

網站搬家期間舊網址該不該用 robots.txt 封鎖?

不該。搬家期間舊網址正在做 301 轉向,若被封鎖,爬蟲讀不到 301 回應,轉向訊號斷在門口,新網址會拿不到舊網址的權重銜接。要等新網址完全接管後再評估是否清理舊路徑。

永久刪除的頁面用 noindex 還是 410 比較好?

永久刪除用 HTTP 410 Gone 更乾淨。410 明確告訴搜尋引擎資源已永久移除,通常比 404 更快被移出索引,也省下持續檢取一個永遠不會被收錄頁面的資源。noindex 適合「暫時不收錄」,410 適合「永遠不存在」。

相關文章