新網站上線兩三個月,商品頁一篇篇補齊,Search Console 裡的曝光次數卻幾乎掛零。網址打得開,頁面看起來也正常,問題往回查,追到的是最基礎的 robots.txt 設定。開站時順手複製貼上、沒有人仔細看過的一份檔案裡多打了一個符號,就把整個網站的商品分類頁全部擋在搜尋引擎門外,而且系統不會跳出任何訊息提醒哪裡出了錯。
robots.txt 管的是搜尋引擎要不要花力氣爬你的網站,meta robots 則管單一頁面要不要被收進搜尋結果,兩個機制各自負責不同階段,卻常被當成同一件事在用。搞混了會怎樣?輕則某幾個頁面莫名其妙沒被收錄,流量少一截還抓不到原因;重則像前面這個案例,一整批頁面直接從搜尋結果消失。
先從這兩個機制實際上各自管什麼講起,再一路拆到語法怎麼寫、有哪些常見誤設,最後看設定改完要怎麼確認真的生效。
robots.txt 和 meta robots,各自在管什麼?
把搜尋引擎找到並收錄一個網頁,想成兩道分開的關卡。第一關是要不要讓爬蟲進門(爬取,crawl),第二關是進門之後,值不值得被記進搜尋結果的名冊(索引,index)。robots.txt 管的是第一關,meta robots(或 X-Robots-Tag)管的是第二關,職責完全不重疊。
這兩者管的範圍也不一樣。robots.txt 是放在網站根目錄的一份純文字檔,一次可以管整個網站,也可以只針對某個路徑下指令,改一次就是全站或整個路徑生效;meta robots 則寫在單一頁面的 HTML 裡,或藏在該頁面的 HTTP 回應標頭中,一次只管那一頁,沒有一次擋掉一整個資料夾這種用法,每一頁都得各自寫一次。

為什麼會有「網址被收錄卻沒有摘要」的情況?
這裡有一個反直覺的地方,很多人以為 robots.txt 擋住的頁面就等於徹底消失在搜尋結果裡,其實不一定。如果網路上還有其他地方連結到這個被擋住的網址,Google 讀不到頁面內容,卻還是可能把這個網址收進搜尋結果,只是畫面上只會看到光禿禿的網址,沒有平常那段描述文字,因為 Google 根本沒進去讀過內容,沒辦法生成摘要顯示。
如果目的真的是完全不想讓某個頁面出現在搜尋結果裡,該用的工具其實是 meta robots 的 noindex,不是 robots.txt。這個判斷邏輯,後面在拆「該用哪一個」那節會展開講。
robots.txt 檔案的位置與格式規定
搞懂兩者的分工之後,接下來要真的動手寫一份 robots.txt,格式上有幾個死規定得先搞定,錯一個檔案就等於不存在。檔名必須整個是小寫的 robots.txt,大小寫錯一個字母搜尋引擎就認不出來;檔案位置一定要放在網域的根目錄下,像 www.example.com/robots.txt 這樣,放進子目錄(像 www.example.com/blog/robots.txt)不會被讀到,等於沒設定。有子網域的網站要注意,每個子網域都得各自放一份,母網域的 robots.txt 管不到子網域。
檔案本身要存成 UTF-8 編碼的純文字檔,用記事本或程式碼編輯器就夠,別拿 Word 這類文書軟體存,容易夾帶不相容的字元讓解析出錯。Google 對單一 robots.txt 檔案設有 500 KiB 的大小上限,超過的部分會直接被忽略,一般網站的規則量遠遠用不到這個上限,但如果規則是自動產生、又沒設好去重機制,還是有可能把檔案越養越大。
沒有放 robots.txt 檔案時,搜尋引擎預設會把整站當成開放爬取,不是自動封鎖,這點常被想反。開新站的人常常以為沒放這份檔案,等於保守起見全部擋住,其實剛好相反。
robots.txt 核心語法:User-agent、Disallow、Allow、Sitemap 逐一拆解
檔案位置和格式都對了,才輪到規則本身怎麼寫。Google 目前只承認四個 robots.txt 欄位真正有效,分別是 user-agent、disallow、allow、sitemap。坊間不少教學會提到的 crawl-delay(用來要求爬蟲放慢爬取速度),Google 其實根本不支援,寫了也不會有任何效果,雖然 Bing、Yandex 這類搜尋引擎有支援這個指令,但只針對 Google 優化的話,這行可以直接省略。下面把這四個欄位逐一拆開講。
User-agent,指定規則要給哪個爬蟲看
每一組規則都要從 user-agent 這一行開始,用來指定這組規則要給哪個爬蟲看。寫成星號 * 代表套用給所有爬蟲,也可以針對特定爬蟲個別設規則,像 Googlebot、Bingbot 各自寫一組。容易被搞錯的是,搜尋引擎不會把每一組相符的規則都拿來套用,而是只挑一組跟自己名字最相符的規則來遵守。如果同時寫了給 * 的通用規則,又寫了給 Googlebot 的專屬規則,Googlebot 只會照著寫給它的那組走,不會把兩組疊加起來一起套用。
Disallow 和 Allow,一個擋一個放行
Disallow 指定的是不給爬的路徑,Allow 則是在被擋住的資料夾裡再開一個例外,讓某個檔案或子路徑仍然可以被讀取。兩者的路徑值都要以斜線 / 開頭,而且大小寫要完全一致,/Photo 和 /photo 對搜尋引擎來說是兩個完全不同的路徑,錯置大小寫等於規則沒生效。
常見的實際寫法是整個資料夾先擋住,再放行其中特定的檔案或子路徑,例如把存放技術資源的 /includes/ 目錄整個擋掉,但另外針對 Googlebot 開放它需要讀取的部分,確保頁面能正常渲染。
User-agent: *
Disallow: /includes/
User-agent: Googlebot
Allow: /includes/Code language: plaintext (plaintext)
萬用字元「*」和「$」怎麼用?
robots.txt 支援兩個萬用字元,意思差很多,搞混了很容易誤傷不該擋的網址。星號 * 代表任意一段字元,可以是零個或多個;錢字號 $ 代表網址在這裡結束,後面不能再接任何字元。
想擋掉所有 PDF 檔案,正確寫法是 /*.pdf$。如果漏掉結尾的 $,規則會變成連 /*.pdf 後面還帶著參數的網址,像 /file.pdf?download=1,都一併被擋住,造成非預期的誤傷。這是萬用字元最容易寫錯、也最容易不小心波及不該擋的網址的地方,設定完最好抓幾個實際網址測試一遍。
規則衝突時,搜尋引擎聽誰的?
同一個路徑如果同時被 Allow 和 Disallow 命中,搜尋引擎採用的原則是路徑字元最長、最具體的規則優先,不是照著寫在前面或後面的那條規則算,這跟很多人直覺以為的「由上到下讀取,先寫的先算」並不一樣。
有一個經典例子可以看出這個邏輯怎麼運作。當 allow: /p 對上 disallow: / 時,網址 /page 適用的其實是 allow 規則,因為 /p 比對到 /page 的部分,比 / 對到的部分更具體。掌握這個邏輯後,想保留某個路徑不被擋,可以刻意把它寫得更具體、更長,確保它會贏過範圍較大的封鎖規則。
Sitemap,把網站地圖位置告訴爬蟲
sitemap 這一行跟前面幾個欄位不一樣,它不綁定特定的 user-agent,可以放在檔案裡任何位置,也可以同時列出不只一份 sitemap。網址一定要寫成完整的絕對路徑,不能用相對路徑省略網域,例如要寫 https://www.example.com/sitemap.xml,不能只寫 /sitemap.xml。
加了 sitemap 不是加速收錄的萬靈丹,只是多一個讓爬蟲主動發現網址的管道,跟在 Search Console 裡直接提交 sitemap 是互補關係,不是二選一,兩邊都設定會更保險。
該用 robots.txt,還是該用 meta robots noindex?
前面的語法都學會了,真正常卡住的其實是判斷。同一個頁面不想被搜尋引擎收錄,該用 robots.txt 擋掉,還是該用 meta robots 的 noindex?這個選擇要看真實目的是什麼,分三種情境來看最清楚。

- 只是不想讓爬蟲把力氣浪費在沒意義的頁面:購物車、篩選參數頁、內部搜尋結果、後台管理頁這類頁面本身沒有值得被搜尋到的內容,只會白白消耗爬蟲配額。這種情況用 robots.txt 的 Disallow 最合適,直接把整條路徑擋在門外。
- 想讓頁面能被爬到,但不希望它出現在搜尋結果:像標籤頁、感謝頁、需要登入才看得到的頁面,這類頁面希望保留頁面本身被連結、繼續傳遞內部連結權重的效果,只是不想它出現在搜尋結果裡。這種情況要用 meta robots 的
noindex, follow,而且這種頁面絕對不能同時被 robots.txt 擋住,不然 Google 根本沒機會讀到頁面裡的 noindex 標籤,設定等於白做。 - 真正機密、不該被任何人看到的內容:這種情況 robots.txt 和 noindex 兩個都不是正確答案,要靠密碼保護或權限控管才行。原因是 robots.txt 檔案內容本身是公開可查的純文字,任何人都可以直接打開網址看到裡面寫了什麼,把敏感路徑寫進去,等於直接公告「這裡有東西」,反而更容易被找到。
這三種情境混用最容易出的錯,就是把第二種和第一種搞混,同時用了 robots.txt 擋住又寫了 noindex,結果 noindex 完全沒發生作用,頁面照樣可能被收錄。
meta robots 標籤怎麼寫?noindex 之外還有哪些指令?
決定要用 meta robots 之後,接下來就是把標籤寫對。meta robots 最常用的指令是 noindex,單獨使用代表這一頁不要出現在搜尋結果裡,但頁面上的連結還是可以被跟隨,如果連連結都不想被跟隨,就加上 nofollow。這兩個合起來還有一個簡寫寫法 none,效果等同同時寫 noindex, nofollow。
除了這三個最基本的,還有幾個進階指令,各自用途不同。nosnippet 不讓搜尋結果顯示這頁的文字摘要或影片預覽;max-snippet 可以限制摘要最多顯示幾個字元;noimageindex 讓頁面上的圖片不被收進 Google 圖片搜尋;unavailable_after 則是指定一個日期,過了那天這個頁面就自動從搜尋結果下架,適合限時活動頁這類有明確截止日的內容。這幾個指令知道用途、需要時查回來用就好,不用每個都背熟。
標籤本身要寫在 HTML 的 <head> 裡,多個規則可以用半形逗號合併在同一個標籤裡,也可以拆成好幾個 <meta name="robots"> 標籤分開寫,效果一樣。如果一個頁面完全沒有寫這個標籤,預設行為就是 index, follow,也就是可以被索引、連結也可以被跟隨。
非 HTML 檔案,像 PDF 和圖片,要怎麼設定不被索引?
meta 標籤只能寫在 HTML 頁面的 <head> 裡,但 PDF、圖片這類非 HTML 檔案根本沒有 head 可以放標籤,這時候要改用伺服器回應的 X-Robots-Tag HTTP 標頭來做到同樣的效果。
以 Apache 主機為例,可以在 .htaccess 裡針對特定副檔名套用這個標頭。
<Files ~ "\.pdf$">
Header set X-Robots-Tag "noindex, nofollow"
</Files>Code language: plaintext (plaintext)
這樣設定之後,伺服器每次回應 PDF 檔案的請求時,都會附上這個標頭,效果跟在 HTML 頁面寫 meta robots 一樣,只是換了一個機制去傳遞同樣的指令。不同主機環境的設定方式不太一樣,這裡只提供概念,實際動手前建議先跟主機商或工程師確認語法。
架站工具的「阻擋搜尋引擎」開關,勾錯會讓全站被 noindex
不少架站工具與內容管理系統,後台都留了一個「拒絕搜尋引擎收錄本網站」之類的勾選框,位置多半藏在網站設定或閱讀設定裡。勾起來之後,系統會自動在全站每個頁面插入下面這一行標籤,讓搜尋引擎不要索引、也不要繼續爬這個網站。
<meta name="robots" content="noindex,nofollow" />Code language: HTML, XML (xml)
這個設定常見的踩雷情境,是架站、搬家、或做測試站時先勾起來避免半成品被搜尋到,正式上線後卻忘記取消。結果網站打得開、看起來一切正常,卻永遠不會出現在搜尋結果裡,而這種狀況很容易被誤以為是排名不好、內容不夠好,拖了好一段時間才被發現真正的原因,其實只是這個勾選框沒有取消。上線前務必回頭檢查這個設定有沒有打勾。
robots.txt 最常見的重大誤設,一次看懂怎麼避免
前面把語法和判斷邏輯都拆開講過一輪,這裡收斂成幾個一旦出錯代價很大的誤設,也是文章開頭那個商品頁消失案例背後,最常見的幾個成因。
一個多打的斜線,Disallow: / 擋掉整個網站
Disallow: / 是最常見、也最嚴重的一種誤設。這個路徑等於整個網站的根目錄,依照前面「規則衝突」那節講過的路徑比對邏輯,它會匹配根目錄下所有網址,等於把整個網站都擋住。
這種狀況最常發生在兩種情況,一種是把測試環境用的 robots.txt 誤搬上正式站,另一種是工程師忘記把開發階段特地加上的封鎖規則拿掉。一旦發生,後果是全站從 Google 完全消失,而且不會有任何錯誤訊息主動提醒。每次網站搬家、換主機、正式上線前,都該親自打開 robots.txt 確認內容,不能只憑印象覺得應該沒問題。

誤擋 CSS 或 JS,Google 看不懂網站長什麼樣子
現代網站高度依賴 CSS 和 JavaScript 來把版面渲染出來,如果 robots.txt 把存放這些資源的目錄整個擋住,Google 進來讀取頁面時看到的就會是一團排版跑掉的畫面。常見的誤設路徑像是佈景主題或外掛的資源資料夾。就算頁面實際內容完全正常,也可能因此被判斷成使用者體驗不佳,連帶影響排名。
以為在 robots.txt 裡寫 Noindex 就能生效
這是一個流傳很廣的迷思。過去確實有些教學會教在 robots.txt 裡直接寫一行 Noindex: /path,Google 早期也曾非正式地讀取這個寫法,但從 2019 年 9 月起就已經明確不再支援。
現在 Google 唯一支援的欄位只有 user-agent、disallow、allow、sitemap 四個,前面「核心語法」那節已經拆過,Noindex 這樣寫在 robots.txt 裡完全不會有任何作用。真正要讓頁面不被收錄,一定要用前面講過的 meta robots noindex 標籤,或是針對非 HTML 檔案用 X-Robots-Tag。
設定改完,怎麼確認真的生效了?
把常見誤設都排查過一輪,設定改完不代表真的生效,直接動手驗證,比憑感覺覺得應該沒問題可靠得多。分三個層次確認最完整。
- 直接打開檔案網址:在瀏覽器網址列輸入「網域名稱/robots.txt」,確認內容跟預期的一樣,沒有顯示 404 或其他錯誤。
- 用 Search Console 的 robots.txt 報表確認:在「設定」裡的檢索相關項目下,可以看到 Google 實際讀到的版本,以及有沒有讀取失敗。
- 用「網址檢查工具」貼上特定網址反查:看 Google 回報的狀態是「已建立索引」、「已排除」,還是被「封鎖」,藉此確認設定有沒有套用在要查的那個頁面上。
如果想確認 meta robots 標籤真的有輸出到正確的頁面,不需要額外工具,直接在瀏覽器裡對著該頁面按右鍵「檢視網頁原始碼」,搜尋 robots 這個關鍵字最快,能立刻看到標籤內容是不是設定的那樣。
robots.txt 的設定和 meta robots 一樣,都不是設定一次就永久有效的東西,尤其在網站改版、換主機、把測試環境搬上正式站的那個當下,最容易被遺留成不該存在的封鎖規則。養成每次改版上線後都回頭打開 robots.txt、順手用網址檢查工具核對幾個重要頁面的習慣,比事後花好幾週排查「為什麼流量突然掉到零」划算得多。
