三十秒內可以講完 robots.txt、noindex、canonical 的差異,但根據我們的服務經驗,一個網站若因為這三個工具設定互相衝突,平均要花二到四週才能把索引狀態修正回來,因為每一次調整都得等搜尋引擎重新抓取、重新判斷才會真正生效。核心結論很直接:robots.txt 管的是抓取這一段流程,noindex 管的是索引這一段流程,canonical 管的是重複內容歸屬到哪一頁這一段流程。三段流程各自交給不同工具,一旦混著用,效果會互相打架,而且打架的方式通常很不直覺,看起來設定得很周全,結果反而卡死。

這篇文章不打算重述索引控制的廣泛原則,而是把焦點放在一件事:這三者各自管的層級不同,混用時具體會發生什麼狀況,以及我們在拆解案例時怎麼一步一步排查。先建立一個習慣的提問方式:你是不想讓它被爬,還是不想讓它出現在搜尋結果?這句話能解決一半以上的混淆,後面每一段都會回到這個判斷點。

1. 三個工具各自站在哪一段流程

1.1 robots.txt 管的是「爬蟲要不要進門」

robots.txt 放在網站根目錄,是一份寫給爬蟲看的通行規則。它控制的是抓取行為:某個路徑要不要讓爬蟲進去讀取內容。在裡面寫 Disallow,等於在門口掛牌「這條路不要走進去」。

關鍵在於,被 Disallow 的頁面,爬蟲連內容都不會讀。它可能還是知道這個網址存在(例如被其他頁面連過去),但讀不到頁面裡面寫了什麼。這一點是後面所有錯誤組合的根源,先記住這一句。

User-agent: *
Disallow: /cart/
Disallow: /account/
Disallow: /search-results/
Sitemap: https://example.com/sitemap.xml

1.2 noindex 管的是「這頁要不要放進索引庫」

noindex 是一個明確指令,告訴搜尋引擎:你可以來讀,但讀完之後不要把這頁收進搜尋結果索引庫。它通常放在頁面的 meta 標籤裡,也可以用 HTTP 回應標頭送出,後者特別適合非 HTML 檔案,例如 PDF 或圖片。

<meta name="robots" content="noindex, follow">
X-Robots-Tag: noindex

我們特別提醒一件事:noindex 是頁面層級的指令,而且爬蟲必須真的讀到這行標籤,指令才會生效。它跟 robots.txt 不同,robots.txt 是連讀都不讀,noindex 則是讀了之後才決定收不收。這個差異一旦被搞混,會變成最經典的一種踩雷方式,第三段會細講具體流程。

另外一個常被忽略的細節,是 noindex 後面通常會搭配 follow 或 nofollow。寫成 noindex, follow,代表這頁不進索引,但頁面上的連結仍然可以被爬蟲繼續追蹤下去,權重可以透過這些連結流向其他頁面。若寫成 noindex, nofollow,等於同時切斷了索引跟連結追蹤,對於還想靠內部連結把權重傳遞出去的頁面(例如分頁清單),這樣設定往往是不必要的損失。多數情境下,noindex 搭配 follow 才是比較穩妥的選擇。

1.3 canonical 管的是「重複內容算在哪一頁」

canonical 處理的是完全不同的情境:當你有好幾個網址內容幾乎一樣(例如帶不同追蹤參數、排序參數、或分頁的變體),你希望搜尋引擎把它們視為同一份內容,並且把權重與排名歸給你指定的那一個「主版本」。

<link rel="canonical" href="https://example.com/products/seo-tools/">

canonical 不會叫搜尋引擎「不要收錄某頁」,它是說「這幾頁其實是同一件事,請以我指定的這頁為準」。它是一個強烈的建議,不是命令,搜尋引擎有可能不採用你的指定,這一點跟 noindex 的強制性差很多。實務上遇到搜尋引擎不採用 canonical 指定的情況,多半是因為指定的目標頁面內容跟來源頁差異太大,或者目標頁本身也帶著其他互相矛盾的信號,這種時候調整內容相似度往往比重寫標籤更有效。

2. 三個容易被混著用的原因

2.1 抓取跟索引在腦中被壓成同一件事

多數人直覺上認為「不讓搜尋引擎看到某頁」是一個動作,但實際上分成兩道關卡。第一道是抓取:爬蟲會不會去讀。第二道是索引:讀完之後會不會收進搜尋結果。robots.txt 卡的是第一道,noindex 卡的是第二道。你想達成的目標不同,該動的關卡就不同,先分清楚再動手。

我們診斷過的案例中,最常見的情況是團隊想把某個後台或測試區「藏起來不被搜到」,於是直接在 robots.txt 擋掉。過一陣子卻發現,那頁的網址還是出現在搜尋結果裡,只是標題底下寫著系統無法提供這個頁面的說明。原因就是 robots.txt 只擋了讀取,沒擋收錄,兩件事本來就不是同一回事。

2.2 一個判斷你該用哪個的簡單問法

遇到新人問「這頁該怎麼處理」,我們通常只丟一句話讓對方先問自己:我是不想讓它被爬,還是不想讓它出現在搜尋結果?如果是前者,可能牽涉抓取預算或伺服器負擔,考慮 robots.txt。如果是後者,幾乎都該用 noindex。至於 canonical,只有在內容重複、需要指定主版本時才登場,它跟前兩者的目的根本不在同一條線上,不能拿來互相替代。

2.3 「藏起來」跟「不重複計分」被當成同一種需求

另一種常見誤解,是把「不想被搜到」跟「不想被重複計算權重」當成同一件事來處理。分頁、排序參數、追蹤參數這類頁面,內容通常跟主頁一樣,問題不是「不該被搜到」,而是「不該被當成另一份獨立內容計分」。這種情況該用 canonical 把權重併回主頁,而不是用 noindex 把它整個排除在索引之外,兩種做法的實際效果差距不小,一旦選錯,流量價值就白白流失。

3. 最經典的雷:noindex 頁又被 robots.txt 擋住

3.1 為什麼這個組合會失效

這是我們每年都會遇到好幾次的狀況,也是這篇最想講清楚的一段。有人想把一頁徹底藏好,於是同時做了兩件事:在頁面加上 noindex,又在 robots.txt 把這條路徑 Disallow。聽起來很保險,對吧?實際上這兩個設定會互相抵消,而且抵消的方向對使用者最不利。

邏輯是這樣:noindex 這行指令寫在頁面內容裡,爬蟲要讀到頁面內容才看得到它。但你又用 robots.txt 擋住了抓取,爬蟲根本不會去讀這頁,於是它永遠看不到那行 noindex。結果就是這頁可能因為外部連結而被搜尋引擎知道存在,卻因為讀不到 noindex 而無法被移除,反而以一種很難看的形式留在搜尋結果裡,就是前面提過的「無法提供說明」那種顯示方式。

我們處理過一個具體案例:一個做活動報名的網站,把舊年度的報名頁全部加上 noindex,同時也把整個報名系統的路徑寫進 robots.txt,理由是「反正都不要了,兩個一起擋比較保險」。三個月後客戶回報,搜尋結果裡還是能查到好幾個舊報名頁的網址,只是點進去看不到任何說明文字。檢查抓取記錄才發現,這些路徑從封鎖生效那天起就沒有再被讀取過,noindex 標籤形同虛設。把 robots.txt 的封鎖拿掉之後,大約兩週內這些頁面陸續從索引裡消失,才算真正解決。

3.2 我們實務上怎麼排查這類問題

我們通常分享一個排查順序給客戶的技術團隊。第一步,先在搜尋引擎用 site 指令或站長工具的網址檢查功能,確認這頁到底有沒有被收錄。第二步,如果被收錄了,去看它是不是同時掛著 noindex 又被 robots.txt 擋。第三步,若兩者都有,先把 robots.txt 的封鎖拿掉,讓爬蟲能進來讀到 noindex,等它確實把頁面移出索引之後,再視需要決定要不要重新擋抓取。

順序不能顛倒。很多人急著把兩層都設好設滿,反而讓自己動彈不得。要移除一頁,得先讓移除的指令被讀到,這句話值得貼在排查清單的最上面。

3.3 正確的先後順序

你的目標 該用的工具 不要同時做的事
把已被收錄的頁移出搜尋結果 加 noindex,並確保爬蟲讀得到 不要同時用 robots.txt 擋這頁
已用 noindex 移除、之後想省爬取 確認移除後再考慮 robots.txt 不要在移除前就擋抓取
純粹不想浪費爬取預算在無意義路徑 robots.txt Disallow 這類頁通常本來就不該被收錄

4. canonical 跟 noindex 該不該一起出現

4.1 一個是建議,一個是指令

常被問到:重複內容的頁面,究竟該下 canonical 還是 noindex?這兩個目的其實不一樣。canonical 是說「這幾頁是同一件事,請把權重集中到主版本」,你仍然希望這份內容被搜尋引擎理解、被排名,只是希望歸給某一頁。noindex 則是說「這頁不要進搜尋結果」,是要把它整個排除。

所以先問自己:這頁是「重複但仍有價值、想集中權重」,還是「根本不該出現在搜尋結果」?前者用 canonical,後者用 noindex,目的不同,不該混為一談,也不該同時上兩種手段來求心安。

4.2 兩個一起下的時候會發生什麼事

如果你在同一頁同時放了指向別頁的 canonical,又放了 noindex,等於送出兩個矛盾訊號:canonical 說「請把我算進主版本」,noindex 說「請把我排除」。搜尋引擎收到互相打架的訊號時,處理方式不一定符合你的預期,可能忽略其中一個,也可能讓 noindex 的訊號連帶影響到你指定的主版本。我們的建議很簡單:同一頁不要同時用這兩個處理重複內容的手段,先想清楚你到底要集中權重還是要排除,選一個就好。

4.3 帶參數的網址怎麼處理最省事

以帶追蹤參數的網址為例(例如某個活動連結後面掛了一串來源標記),這類頁內容跟原頁幾乎一模一樣。我們幾乎都建議用 canonical 指回乾淨的原始網址,而不是 noindex,因為這些變體本身有流量價值,你要的是把它們的權重併回主頁,不是讓它們消失。根據我們的服務經驗,一家促銷活動較頻繁的零售網站,若把所有帶參數的頁面都設成 noindex,反而會讓原本該累積到主頁的連結權重被稀釋掉一部分,得不償失。

5. 依情境挑工具的判斷表與決策順序

5.1 三個工具的核心差異一次分清楚

面向 robots.txt noindex canonical
管的層級 抓取(要不要讀) 索引(要不要收) 重複歸屬(算哪一頁)
強制性 指令(對多數合規爬蟲) 指令 建議,搜尋引擎可不採用
爬蟲需不需要讀到頁面內容 不需要,擋在門外 需要,讀到標籤才生效 需要,讀到才知道指向
對權重的影響 被擋頁不傳遞內部連結權重 頁不進索引,連結可設為 follow 權重集中到主版本
典型使用情境 後台、購物車、無意義參數路徑 薄內容頁、感謝頁、內部搜尋結果頁 參數變體、排序頁、分頁、跨網域同稿

5.2 一個我們常用的決策順序

面對一頁不確定該怎麼處理時,我們會照這個順序想。第一,這頁是不是跟別頁重複?是的話,先判斷它有沒有獨立價值,有價值就用 canonical 指向主版本,沒價值就用 noindex。第二,如果不是重複問題,而是這頁單純不想讓它出現在搜尋結果,直接 noindex,而且千萬別再拿 robots.txt 去擋它。第三,只有當某個路徑量大、對抓取預算或伺服器造成負擔,而且本來就不需要被收錄時,才動 robots.txt。這個順序能避開多數的混用災難,也能讓團隊有一致的判斷依據,不會因為換人負責就換一套邏輯。

舉一個常見的分岔情況:一頁既有排序參數、又打算下架整個舊分類。這種時候要先問清楚是暫時性重複還是永久不需要,如果分類未來還會重新啟用,優先用 canonical 併回主版本,保留頁面的既有連結價值;如果分類確定不再使用,才考慮直接 noindex,甚至進一步規劃網址轉址,而不是讓兩種手段疊在同一個路徑上。

5.3 我們踏過也看別人踏過的三個地雷

第一個,把整個網站在上線前用 robots.txt 全站 Disallow,上線後忘了拿掉,結果新站好幾個月都進不了搜尋結果。第二個,想下架一批舊頁,只加了 noindex 卻同時保留舊的 robots.txt 封鎖,noindex 讀不到,舊頁卡在半死不活的狀態,既沒完全消失也沒正常收錄。第三個,對分頁系列每一頁都下 noindex,把本來能靠內部連結傳遞下去的權重整條切斷。這三個我們都親眼見過,共通點都是沒先分清楚自己要動的是哪一段流程,就急著把設定一次做滿。

6. 不同網站架構下的設定與驗證方法

6.1 常見的設定位置與分工落差

不同的網站架構,這三個設定出現的位置也不同。多數內容管理系統會把 noindex 的開關做在文章或頁面的 SEO 相關設定裡,勾選之後系統會自動在該頁寫入 meta 標籤。canonical 也類似,多半由系統依規則自動產生,個別頁面可以手動覆寫。robots.txt 則通常是一份獨立檔案,有些平台開放後台編輯,有些則需要透過架構層或工程團隊處理。

實務上很多混用問題不是團隊故意設錯,而是不同角色分別動了不同工具卻沒互相知會:行銷人員在頁面設定裡勾了 noindex,工程團隊在架構層又把同一批路徑寫進 robots.txt,兩邊互不知情,最後才在檢查時發現互相打架,往往已經過了好幾週。

6.2 三個驗證步驟:原始碼、索引狀態、抓取記錄

設定改完之後,我們建議照三個層面驗證。第一,打開頁面原始碼,確認 meta robots 標籤或 canonical 標籤的內容是不是預期的樣子,這一步能抓到設定跟實際輸出不一致的問題。第二,用搜尋引擎的網址檢查工具查詢該網址目前的索引狀態,確認它讀到的指令跟設定的一致。第三,查伺服器的抓取記錄,確認爬蟲真的有進來讀取這個頁面,如果記錄裡完全沒有這個路徑的存取,通常代表它被 robots.txt 擋住了,這時候不管頁面裡寫了什麼 noindex 都不會生效。

6.3 設定改完後多久看得到效果

這三個工具都不是即時生效,都要等下一次抓取。robots.txt 的規則通常在爬蟲下一次讀取時就會套用,速度較快。noindex 則要等頁面被重新抓取、讀到那行標籤,才會反映在索引狀態上,短則幾天,長則數週,視網站規模與爬蟲造訪頻率而定。canonical 的權重歸戶調整通常更慢,因為搜尋引擎需要時間重新評估多個網址之間的關係。想加快速度,可以透過站長工具主動提交網址請求重新檢查,但前提是頁面本身沒有被 robots.txt 擋住,爬蟲進得來才讀得到你要它讀的指令。

7. 常見問題

7.1 robots.txt 擋掉一頁,它就不會出現在搜尋結果了嗎?

不一定。robots.txt 擋的是抓取,不是收錄。如果這頁被其他頁面連結,搜尋引擎仍可能知道它存在,並把網址列進結果,只是無法顯示內容說明。要確保不出現在結果裡,應該用 noindex,並讓爬蟲讀得到這行指令。

7.2 我想徹底藏起一頁,是不是 noindex 加 robots.txt 一起上最保險?

正好相反,這是最常見的失效組合。robots.txt 會擋住爬蟲,讓它讀不到 noindex,那行移除指令等於沒送出。正確做法是先只用 noindex,等頁面確實被移出索引後,再視情況決定要不要加上 robots.txt。

7.3 canonical 可以取代 noindex 用來下架頁面嗎?

不建議。canonical 是重複內容歸屬的建議,搜尋引擎有可能不採用,而且它的用意是集中權重,不是排除頁面。如果你要的是「這頁不要出現」,該用的是 noindex,兩者目的不同,不該互相替代。

7.4 帶追蹤參數的網址,應該用 noindex 還是 canonical?

多數情況用 canonical 指回乾淨的原始網址比較合適。這類變體內容跟原頁相同、又常帶著流量,你要的是把權重併回主頁,而不是讓它消失。用 noindex 會把它整個排除,反而浪費了它累積的連結價值。

7.5 同一頁同時放 canonical 又放 noindex 會怎樣?

會送出互相矛盾的訊號:canonical 要求歸入主版本,noindex 要求排除。搜尋引擎的處理結果不一定符合預期,甚至可能連帶影響你指定的主版本。建議同一頁只選一種處理重複或排除的方式,先想清楚目的再下手。

7.6 加了 noindex 後,多久頁面才會從搜尋結果消失?

要等爬蟲下一次重新抓到這頁、讀到那行指令,再更新索引,時間長短視這頁被重新抓取的頻率而定,可能數天到數週不等。想加快,可以透過站長工具主動請求重新檢查該網址,但前提還是這頁沒有被 robots.txt 擋住,爬蟲進得來才讀得到。

7.7 sitemap 裡放了 noindex 的網址,會不會有問題?

會造成訊號矛盾。sitemap 的作用是告訴搜尋引擎「這些網址值得優先查看」,等於間接建議收錄;如果同一個網址又被設成 noindex,等於一邊建議收錄、一邊要求排除。比較乾淨的做法是把確定要 noindex 的網址從 sitemap 移除,避免兩邊的訊號互相矛盾,也讓爬蟲把資源花在真正需要被收錄的頁面上。

回到最前面的提問方式:先分清楚自己要動的是抓取、索引、還是重複歸屬這三段流程中的哪一段,再挑對應的工具下手,多數的索引異常都能在這一步就被攔下來。