三十秒內可以講完 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 移除,避免兩邊的訊號互相矛盾,也讓爬蟲把資源花在真正需要被收錄的頁面上。
回到最前面的提問方式:先分清楚自己要動的是抓取、索引、還是重複歸屬這三段流程中的哪一段,再挑對應的工具下手,多數的索引異常都能在這一步就被攔下來。
