在 WordPress 網站裝上搜尋框,幾乎是預設動作。但很少人注意到,每一次有人在站內搜尋,瀏覽器網址列就會生出一個像 example.com/?s=關鍵字 的網址,而這類網址會無限增生——使用者搜什麼,就生出對應的一頁。如果放任不管,Google 會把這些站內搜尋結果頁一頁頁爬進索引,稀釋掉你真正想被搜到的內容,還可能在 Search Console 跳出一堆讓人摸不著頭緒的警告。
站內搜尋頁索引這件事,多數中文教學只講到「在 Search Console 看到 noindex 警告怎麼消掉」,卻沒說清楚這些頁面本來就該被擋在搜尋引擎外,也沒講 noindex、robots.txt、canonical 這三種手段到底差在哪、什麼情況該用哪一個。這篇會把整套邏輯拆開,從 ?s= 參數的運作講到實際的 WordPress 設定,再延伸到 WooCommerce 商品篩選那種更棘手的參數網址。
站內搜尋結果頁為什麼不該被 Google 索引
簡單講,站內搜尋結果頁對外部搜尋者沒有價值,而且會浪費 Google 的爬取資源。這兩個理由,一個關乎使用者體驗,一個關乎技術 SEO。
從使用者角度看,一個人在 Google 搜尋某個關鍵字,期待的是一篇文章、一項產品、一個明確的答案。如果他點進來看到的卻是「你的站內搜尋結果列表」,等於把他從一組搜尋結果丟到另一組搜尋結果,他還得再篩一次、再點一次。這種體驗很差,跳出率自然高,而負面的使用者行為訊號長期累積,反而可能讓 Google 認為你整個站的內容品質不佳。
從技術角度看,站內搜尋是一個典型的「無限空間」。使用者能搜的關鍵字組合是無窮的,每一種組合都會生出一個獨立網址。Googlebot 對每個網站分配的爬取資源有限,一旦它陷進這些搜尋結果頁的迷宮,就會把時間花在爬取大量重複、低價值的頁面上,排擠掉它本來該去爬的新文章或更新內容。結果就是:你發了新文章,Google 卻遲遲沒收錄。
還有一個常被忽略的副作用,是內容重複與權重分散。同一批文章,會因為使用者搜不同的詞而出現在好幾個搜尋結果頁裡。這些頁面內容高度雷同,Google 難以判斷該讓哪一頁排名,外部連結與內部連結的權重也被打散到一堆近乎相同的網址上,等於自己稀釋自己。
WordPress 搜尋結果頁的網址長什麼樣
WordPress 的站內搜尋走的是查詢參數機制,網址格式固定為 你的網域/?s=搜尋關鍵字,這裡的 s 是 search 的縮寫,後面接的就是使用者輸入的字串。
這個機制有個多數站長沒意識到的特性:搜尋頁是「天生存在」的,不是你建出來的。就算你的佈景主題沒有放搜尋框,只要有人手動在網址後面接上 ?s=任意字,WordPress 一樣會回傳一個搜尋結果頁。這代表你無法靠「不放搜尋框」來關掉搜尋功能,那條網址路徑一直都開著。
更麻煩的是,許多佈景主題根本沒有為搜尋結果頁做樣式設計,這些頁面被爬到、甚至被索引時,呈現出來的版面往往是殘缺而混亂的。如果真的完全不想要站內搜尋,得動到佈景主題的程式邏輯把這條路徑導掉,或借助專門關閉搜尋的外掛,單純拿掉搜尋框是不夠的。
搞清楚網址形態很重要,因為後面所有的控制手段——不論是 robots.txt 的封鎖規則,還是參數的處理——都得針對 ?s= 這個模式來寫。
noindex、robots.txt、canonical 三種手段各管什麼
控制索引常被混為一談的三個工具,其實管的是兩件不同的事:robots.txt 管「能不能爬」,noindex 管「能不能收進索引」,canonical 管「重複頁面之中哪一頁代表正本」。先把這層分工釐清,後面才不會用錯。
noindex:這是寫在頁面 HTML 裡的一個 meta robots 標記,內容通常是 noindex, follow。它告訴 Googlebot:這一頁不要放進搜尋結果,但頁面上的連結可以繼續跟著爬。對站內搜尋頁來說,noindex, follow 是最常見也最合理的選擇——既把搜尋頁擋在索引外,又不切斷它連往真正內容的路徑。要注意的前提是,Googlebot 必須先爬到這一頁、讀到 HTML 裡的標記,才知道要排除它。
robots.txt:這是放在網站根目錄的一個純文字檔,用來告訴爬蟲哪些路徑不准爬。針對站內搜尋,常見的寫法是:
Disallow: /*?s=
這條規則會擋住所有含 ?s= 的網址被爬取。但這裡有個關鍵陷阱:robots.txt 只擋爬取,不擋索引。如果 Google 早就從別的地方(例如外部連結)知道某個搜尋頁的存在,即使你用 robots.txt 擋住它,那一頁仍可能以「沒有內容描述」的形態留在索引裡。更要命的是,被 robots.txt 擋住的頁面,Googlebot 進不去、讀不到頁面裡的 noindex 標記,等於兩個手段互相打架。
canonical:這是用來處理「內容重複」的標記,告訴 Google 一組相似頁面之中,哪一頁是正本、權重該歸給誰。它的定位跟前兩者不同——canonical 不是用來把頁面踢出搜尋的,而是用來合併訊號的。Google 官方文件講得很明白:不要用 noindex 來做正規化(canonicalization),因為 noindex 會把頁面完全擋在搜尋之外;也不要用 robots.txt 來做正規化,因為被擋的網址 Google 可能照樣索引、只是沒有內容。
三者的選擇邏輯可以這樣記:
用 noindex, follow
擋索引、留連結
用 robots.txt
省爬取預算
用 canonical
合併排名訊號
在 WordPress 設定搜尋頁 noindex 的實際做法
對大多數 WordPress 網站,最省事而且最不會出錯的做法,是讓 SEO 外掛自動處理。Yoast SEO 與 Rank Math 預設就會把站內搜尋結果頁設成 noindex, follow,你通常什麼都不必動。
值得先記住的背景是,WordPress 從 5.7 版開始,本身就對搜尋結果頁輸出了 robots 的索引控制,再加上主流 SEO 外掛的預設行為,現代的 WordPress 站台在這件事上其實有不錯的基礎保護。問題往往出在「站長自己改了設定」或「裝了某些會覆蓋這項行為的外掛」。
如果你用 Yoast SEO,搜尋結果頁的 noindex 是內建且預設開啟的,一般情況不需要額外調整。Yoast 也提供進階的爬取清理(crawl cleanup)設定,讓你決定要不要更進一步用 robots.txt 封鎖這類網址。
如果你用 Rank Math,路徑在後台的 Titles & Meta 設定區。它預設同樣會處理搜尋頁,另外有一個建議開啟的選項是「不索引空的分類與標籤封存頁」(Noindex Empty Category and Tag Archives),因為空的分類或標籤頁被收錄一樣是在浪費爬取預算,邏輯與搜尋頁如出一轍。
至於 WordPress 後台「設定 → 閱讀」裡那個「阻擋搜尋引擎索引這個網站」的勾選框,請務必分清楚它的作用範圍:那是針對整站的開關,不是針對搜尋頁的。網站還在開發、不想被收錄時可以暫時勾選,但網站正式上線後一定要取消勾選,否則整站都會被擋在 Google 之外,這是新手最常踩的雷之一。
只有在你確定 SEO 外掛沒有正確處理,又想自己接管時,才需要動到佈景主題的 functions.php,依照搜尋頁的判斷條件輸出對應的 robots 標記。但對絕大多數人來說,與其手寫程式,不如先確認外掛設定是否正常。
參數網址與多面向篩選的索引控制
站內搜尋的 ?s= 只是參數網址的一種,當你的站台是 WooCommerce 商店、或有大量篩選功能時,會碰到更複雜的版本——多面向導覽(faceted navigation)。
多面向導覽指的是顏色、尺寸、價格區間、品牌這類篩選器。它對使用者是好事,能快速縮小選擇範圍;對搜尋引擎卻是惡夢,因為每一個篩選組合都會生出一個獨立網址。一家有一千件商品、五種篩選、每種十個選項的商店,理論上能組合出數百萬個網址。這些頁面彼此高度重複(「藍色鞋子依價格排序」跟「藍色鞋子依上架時間排序」其實是同一批商品),會造成索引膨脹、爬取陷阱、權重分散,甚至產生大量空結果的軟性 404。
處理這類參數網址,不是單靠一個手段,而是分層搭配:
- 單純改變排序或顯示方式的參數(例如
?sort=排序、每頁顯示幾筆):這些不該被獨立索引,適合用 robots.txt 直接擋掉爬取,或乾脆用 JavaScript 在前端處理、不生新網址。 - 會列出有價值商品、但本身不該排名的篩選頁:用
noindex, follow,把頁面擋在索引外,同時讓權重透過內部連結繼續流動。 - 真有搜尋需求的篩選組合(例如「紅色洋裝」這種大家真的會去搜的詞):反而該做成乾淨網址的固定頁面,加上獨特文案,讓它能被索引、能排名。
- 內容近乎重複、但因 UX 需要而必須存在的篩選頁:用 canonical 指回母分類頁,把排名訊號集中過去。
有一點要特別提醒:Google Search Console 過去的「網址參數」工具已經移除,你不能再靠 GSC 後台去告訴 Google 怎麼處理某個參數。現在這件事得回到伺服器端的規則、canonical 標記與 robots/meta 控制來做。設定 canonical 時也要避免訊號衝突——如果一部分變體指向自己、另一部分指向母頁,Google 會搞混,最後可能乾脆忽略你的 canonical。
對台灣多數中小型的 WordPress 或 WooCommerce 站台,不必一開始就上這套企業級的複雜架構。先確保站內搜尋頁與排序類參數有被擋好,已經能解決九成的索引污染問題。
GSC「已提交的網址含有 noindex 標記」怎麼判讀
很多人是在 Search Console 看到「已提交的網址含有 noindex 標記」這則警告,才開始研究站內搜尋頁索引這件事。先別緊張——這則訊息在絕大多數情況下是誤判,不是真的出問題。
要先看懂這句話的兩個關鍵詞。「已提交」指的是這個網址被放進了你提交給 Google 的 sitemap;「含有 noindex 標記」指的是這頁同時又被設了 noindex。問題的本質是訊號自相矛盾:你一邊在 sitemap 裡叫 Google「請收錄這頁」,一邊又在頁面裡叫它「別收錄這頁」。
判讀的第一步,是確認這個被點名的網址「到底該不該被索引」:
- 如果它本來就不該被索引(像站內搜尋頁、聯絡我們頁、隱私權政策頁、感謝頁),那 noindex 是對的,真正的錯在於它不該出現在 sitemap 裡。解法是把它從 sitemap 排除——通常檢查 SEO 外掛或 sitemap 外掛的設定,關掉這類頁面的 sitemap 輸出即可,不是去拿掉 noindex。
- 如果它是一篇你希望被收錄的文章,那就要進去檢查為什麼被加上了 noindex,可能是文章層級的 robots 設定被誤勾,或某個外掛覆蓋了設定。確認後把 noindex 移除。
不論是哪種情況,改完之後都要回到 Search Console 用「網址檢查」工具要求重新檢索,因為 Googlebot 必須再爬一次才會看到你的新設定。提交驗證後等幾天,警告就會自行消失。
另外提醒,「含有 noindex 標記」只是 Search Console 索引報表裡眾多狀態的其中一種。如果你還看到「已偵測到尚未建立索引」「robots.txt 封鎖」「軟性 404」這類其他狀態,每一種的判讀方式都不一樣,不能用同一招處理。先確認頁面該不該被收錄,再對應到該用的手段,才不會愈調愈亂。
把索引控制權收回自己手上
站內搜尋頁索引的核心,從來不是「怎麼消掉那則 GSC 警告」,而是想清楚一件事:哪些頁面值得被 Google 收錄、哪些只是技術上順帶生出來的雜訊。搜尋結果頁、排序參數頁、空的篩選頁,都屬於後者,把它們擋在索引外,Google 才有餘力把爬取資源花在你真正用心經營的文章與商品上。
實際動手時,記住手段的分工就不會錯:要擋索引用 noindex、要省爬取用 robots.txt、要合併重複內容用 canonical,三者不要互相打架。對一般 WordPress 站台,先確認 Yoast 或 Rank Math 有正常運作、後台閱讀設定的整站封鎖沒被誤勾,大概就處理掉多數問題。等站台規模長大、篩選功能變多,再進一步用分層策略管理參數網址。
下一步,建議你現在就打開自己的網站,在網址後面接上 ?s=test 看看搜尋頁長什麼樣,再到 Search Console 的網頁索引報表掃一遍被排除的網址清單。把該擋的擋好、該收錄的留著,你的爬取預算就會花在對的地方。