我是吳承學,二十多年來替各種規模的網站做 SEO 稽核。robots.txt 和 noindex 這兩個工具看起來簡單,一個是文字檔、一個是一行標籤,卻是我看過害網站流量一夜蒸發最常見的兩個元凶。原因很單純:很多人以為它們是同一件事,結果該擋的沒擋、不該擋的擋了。這篇我把兩者的分工、各自的使用時機,以及那些我實際救過的誤設案例寫清楚,讓你在放行或封鎖任何一條路徑之前,知道自己到底在對搜尋引擎說什麼。

1. robots.txt 管的是抓取,noindex 管的是收錄

要用對這兩個工具,得先分清楚它們作用在搜尋引擎流程的哪一段。抓取和收錄是兩個不同的階段,對應的控制手段也不一樣。

1.1 兩者作用的階段完全不同

robots.txt 控制的是「爬蟲能不能來抓這個網址」,它擋在抓取這一關;noindex 控制的是「這一頁能不能出現在搜尋結果」,它作用在收錄這一關。一個管門口,一個管櫥窗。理解這個差別,你才會明白為什麼有些頁面明明用 robots.txt 擋了,卻還是出現在搜尋結果裡。

1.2 用 robots.txt 擋收錄是最常見的誤解

很多人想把某頁從搜尋結果拿掉,直覺就是去 robots.txt 加一條 Disallow。問題是,robots.txt 只是請爬蟲不要來抓,它並沒有說「不要收錄」。當這頁被其他頁面連結、搜尋引擎從外部知道它的存在時,它仍可能以一個沒有描述的樣子被列進搜尋結果。更糟的是,因為你擋住了抓取,搜尋引擎讀不到頁面裡的 noindex,反而讓 noindex 失效。想讓一頁不被收錄,正確做法是放行抓取、在頁面裡放 noindex。

1.3 兩個工具的分工對照

比較項目 robots.txt Disallow noindex
作用階段 抓取(要不要來讀) 收錄(要不要列進搜尋結果)
放置位置 網站根目錄的 /robots.txt 頁面的 meta 標籤或 HTTP 標頭
能否阻止出現在搜尋結果 不能保證,仍可能被列出 可以,爬蟲讀到後會移出
前提條件 該頁必須允許被抓取,爬蟲才讀得到
適合對象 大量無意義網址、後台資源 不希望收錄但需被讀取的頁面

2. robots.txt 該開放什麼、該封鎖什麼

robots.txt 的原則其實只有一句:凡是你希望帶來流量的內容,路徑一律開放;凡是純功能性、對搜尋沒有價值的路徑,才考慮封鎖。

2.1 主要內容路徑一律保持開放

文章、產品、服務、分類這些會被搜尋、也應該被搜尋到的頁面,它們的路徑絕對不能被 robots.txt 擋住。這聽起來是常識,但我稽核時仍常遇到因為一條範圍過大的規則,把整個內容目錄一起掃進封鎖名單的情況。每次改動 robots.txt,我都會反問一句:這條規則除了我想擋的,有沒有順手擋掉別的。

2.2 後台、登入、購物車這類路徑才該封鎖

該擋的是那些對搜尋引擎沒有意義、甚至涉及隱私的路徑,例如後台管理、登入頁、購物車。這些頁面被抓取只會浪費爬蟲的預算,也不會替你帶來任何搜尋流量。把它們擋掉,反而能讓爬蟲把資源留給真正重要的內容。

2.3 一份中規中矩的 robots.txt 長這樣

User-agent: *
Disallow: /admin/
Disallow: /login
Disallow: /cart

Sitemap: https://example.com/sitemap.xml

這份範例放行了所有主要內容,只擋掉後台、登入與購物車,並在最後指向 sitemap,方便爬蟲找到你希望被收錄的所有網址。我的習慣是 robots.txt 寧可寫得保守一點,擋的路徑列得明確、範圍小,也不要用一條大範圍規則圖方便,那往往是災難的開始。

3. noindex 的正確使用時機

noindex 是用來精準地把某些頁面排除在搜尋結果之外,前提是這些頁面仍然可以被抓取。用對地方,它能讓你的收錄清單保持乾淨。

3.1 哪些頁面適合掛 noindex

適合 noindex 的,通常是有存在必要、但不需要出現在搜尋結果的頁面。例如站內搜尋結果頁、篩選後產生的重複參數頁、感謝頁、內容過於單薄的自動生成頁。這些頁面若都被收錄,反而會稀釋整站的品質評價。用 noindex 把它們排除,是在替搜尋引擎減少雜訊。

3.2 robots meta 的標準寫法

最直接的做法,是在該頁的 <head> 裡加一行 meta 標籤:

<meta name="robots" content="noindex, follow">

這裡的 follow 通常保留,意思是「這頁別收錄,但頁面上的連結還是可以跟著爬」,讓連結的權重仍能傳遞下去。相對地,重要頁面一定要反過來確認自己沒有被誤掛 noindex,我稽核時看到主力頁面的 meta robots 出現 noindex,心裡都會警鈴大作。

3.3 非 HTML 檔案改用 HTTP 標頭控制

meta 標籤只能放在 HTML 裡,遇到 PDF、圖片這類非 HTML 檔案就派不上用場。這時要改用 HTTP 回應標頭:

X-Robots-Tag: noindex

它的效果和 meta robots 相同,但作用在伺服器回應的層級,能套用在任何檔案類型上。很多人不知道有這個選項,結果讓一堆本該排除的 PDF 悄悄進了搜尋結果。

4. 我看過最容易釀成災難的兩種設定錯誤

這一節講的都是真實會發生、而且代價很高的錯誤。它們的共通點是「一行設定,全站受害」,而且往往拖了好幾週才被發現。

4.1 一條 Disallow 誤封整個網站

最經典的意外,是 robots.txt 裡出現這一行:

User-agent: *
Disallow: /

這一斜線代表封鎖全站,爬蟲從此不再抓取任何頁面。它常常是從測試環境的設定檔一路帶上正式站的。我遇過一個客戶流量連續兩週緩跌,查到最後就是上線時把測試站的 robots.txt 原封不動搬了過來。改回來之後花了不少時間才等收錄慢慢回穩,這種代價完全可以在上線前一次檢查就避免。

4.2 上線忘了拿掉測試站的全站 noindex

另一個雙胞胎錯誤,發生在 noindex 這一側。開發階段為了不讓測試站被收錄,常會在全站模板掛上 noindex,這本身是對的。麻煩的是正式上線時忘了拿掉,於是整個正式站對搜尋引擎宣告「請不要收錄我」。這種錯誤最陰險的地方在於,網站表面上一切正常,使用者瀏覽毫無異狀,只有搜尋流量默默歸零。所以我把「移除全站 noindex」列為上線檢查清單的固定一項,不靠記憶。

4.3 又用 robots.txt 擋、又想靠 noindex 的自相矛盾

還有一種是邏輯打架:想讓某頁不被收錄,於是同時在 robots.txt 擋它、又在頁面掛 noindex。結果是爬蟲被 robots.txt 擋在門外,根本讀不到頁面裡的 noindex,noindex 自然失效,這頁反而可能繼續掛在搜尋結果上。要 noindex 生效,就得放行抓取,兩件事只能擇一,不能疊加。

5. 上線前的 robots 與索引驗收

前面那些災難,幾乎都能靠一套固定的上線前檢查擋下來。我把它壓縮成三個動作,不需要花俏工具。

5.1 直接抓取 robots.txt 確認狀態與規則

打開 https://example.com/robots.txt,先確認它回應 200、內容讀得到,再逐行看規則。重點是確認沒有 Disallow: / 這種全站封鎖,也沒有把內容目錄整個掃進去。這一步花不到一分鐘,卻能擋掉最嚴重的那類事故。

5.2 抽樣檢查主要模板的 meta robots

用檢視原始碼,分別抽首頁、列表頁、詳情頁,搜尋頁面裡有沒有 noindex 字樣。主力頁面出現 noindex 就是紅燈,要立刻追查是不是測試設定殘留。這一步和 robots.txt 的檢查互補:一個看抓取、一個看收錄,兩關都過才算安全。

5.3 用搜尋主控台交叉確認實際狀態

設定對不對,最終要以搜尋引擎的認定為準。我會用 Google Search Console 的網址檢查,看它回報這頁是「可被索引」還是被某條規則擋住,再對照自己的預期。工具說的和你以為的不一致時,以工具為準去追原因。這一步能抓到那些肉眼看不出、卻真實影響收錄的設定衝突。

6. 常見問題

6.1 用 robots.txt 擋住的頁面,為什麼還是出現在搜尋結果

因為 robots.txt 只管抓取、不管收錄。當這頁被別的頁面連到,搜尋引擎就算沒抓內容,也可能把這個網址列進結果,只是沒有描述。想讓它完全不出現,要放行抓取並在頁面掛 noindex,讓爬蟲讀到後把它移除。

6.2 我想讓一頁不被收錄,該用 robots.txt 還是 noindex

用 noindex,而且要確保這頁沒被 robots.txt 擋住。noindex 是明確告訴搜尋引擎不要列出這頁,但前提是爬蟲讀得到它。兩者同時使用反而會讓 noindex 失效。

6.3 robots.txt 要放在網站的哪個位置

它必須放在網域根目錄,也就是 https://example.com/robots.txt,而且要能回應 200。放在子目錄或回應錯誤狀態碼,搜尋引擎都不會採用。上線前直接在瀏覽器打開這個網址確認,是最保險的做法。

6.4 全站流量突然大跌,第一個該檢查什麼

先看 robots.txt 有沒有出現 Disallow: /,再抽查主要模板的原始碼有沒有殘留 noindex。這兩個是上線意外最常見的來源,也最容易在搬移設定時被一起帶過來。排除這兩項之後,再往其他方向查。

6.5 PDF 或圖片這類檔案要怎麼設 noindex

這類非 HTML 檔案放不了 meta 標籤,要改用 HTTP 回應標頭 X-Robots-Tag: noindex,在伺服器層級控制。效果和頁面裡的 meta robots 一樣,能套用在任何檔案類型上。