
這篇舊版教的是:把 WordPress 內建的站內搜尋關掉,改用 Google 的站內搜尋,理由是可以「降低虛擬主機的負擔」。
實際上,大部分網站不需要這樣做。下面先說明原因,再整理真的需要時的正確做法。另外,舊版的程式碼在 PHP 8 會讓網站直接當機,請不要再使用。
大部分網站不需要關閉內建搜尋
WordPress 的站內搜尋,是在資料庫裡比對文章的標題、內文與摘要。文章數量在幾百、幾千篇的網站,搜尋一次的負擔很小,而且訪客真正使用搜尋的次數,通常遠少於一般的瀏覽。
改用 Google 搜尋也有代價:
- 只搜得到 Google 已經收錄的網頁:新文章要等 Google 收錄之後才找得到;設定為不收錄(noindex)的頁面則永遠找不到。
- 可能出現廣告:免費版的搜尋結果會顯示 Google 的廣告,你沒辦法完全控制出現什麼內容。
- 外觀跟網站不一致:只能在 Google 提供的範圍內調整樣式。
- 多載入 Google 的程式:會用到 Cookie,網站如果需要處理隱私權同意,也要一併考慮。
真正讓主機吃不消的,常常不是真人在搜尋,而是機器人大量亂打搜尋網址(/?s= 後面接一堆垃圾字)。這種情況用 Cloudflare 等防火牆或安全性外掛限制請求頻率,比拿掉整個搜尋功能更有效。新版 WordPress 也會自動在搜尋結果頁加上 noindex,這些頁面不會被搜尋引擎收錄。
什麼情況適合改用 Google?
- 網站內容非常多,內建搜尋明顯變慢,或結果排序很不理想。
- 想一次搜尋好幾個網站,例如主站加上另一個部落格子網域。
- 想讓訪客搜尋到 PDF 文件裡的內容(內建搜尋只搜文章與頁面,不會搜附件檔案的內容)。
如果只是覺得內建搜尋「找不準」,也可以先試試 Relevanssi 這類搜尋強化外掛。它會建立自己的搜尋索引,結果排序比內建的好,而且訪客一樣留在你的網站上。
設定 Google 可程式化搜尋引擎
Google 提供給網站使用的站內搜尋服務,現在叫「可程式化搜尋引擎」(Programmable Search Engine),舊名是「自訂搜尋引擎」。
步驟一:建立搜尋引擎
- 用 Google 帳號登入 Programmable Search Engine。
- 新增一個搜尋引擎,填入名稱。
- 搜尋範圍選擇搜尋特定網站或網頁,輸入
example.com/*(換成你的網域),代表搜尋整個網站。有子網域也要一起搜尋的話,另外把子網域加進去。 - 建立完成後,會看到一段程式碼與搜尋引擎 ID,先複製下來。
- 控制台的外觀設定(Look and feel)可以調整版面與顏色,之後隨時可以修改。
步驟二:建立搜尋結果頁
到「頁面 → 新增頁面」,標題可以叫「搜尋結果」,網址代稱(slug)設成 site-search。在內容加入一個「自訂 HTML」區塊,貼上下面的程式碼,把 你的搜尋引擎ID 換成步驟一取得的 ID,然後發布頁面:
<script async src="https://cse.google.com/cse.js?cx=你的搜尋引擎ID"></script>
<div class="gcse-searchresults-only"></div>gcse-searchresults-only 是「只顯示搜尋結果」的元件,它會讀取網址上的 q 參數自動搜尋,例如打開 /site-search/?q=網頁設計,就會直接顯示「網頁設計」的搜尋結果。
舊版文章用的頁面網址是 search。WordPress 內建搜尋本身也會用到 /search/ 開頭的網址,建議改用 site-search 這類不會混淆的名稱。
步驟三:讓原本的搜尋框改用 Google 結果頁
最簡單的做法是不動主題的搜尋框,只把送出的搜尋轉到剛剛建立的頁面。在子主題的 functions.php(或 Code Snippets 外掛)加入:
add_action( 'parse_query', function ( $query ) {
// 只處理前台的主要查詢
if ( is_admin() || ! $query->is_main_query() || ! $query->is_search() ) {
return;
}
$keyword = wp_unslash( (string) $query->get( 's' ) );
if ( ! isset( $_GET['s'] ) ) {
// /search/關鍵字/ 這種網址的關鍵字是編碼過的
$keyword = urldecode( $keyword );
}
$keyword = trim( $keyword );
$target = home_url( '/site-search/' );
if ( '' !== $keyword ) {
$target = add_query_arg( 'q', rawurlencode( $keyword ), $target );
}
wp_safe_redirect( $target );
exit;
} );這樣一來:
- 主題原本的搜尋框、搜尋小工具、區塊主題的「搜尋」區塊都不用改,送出後會自動跳到 Google 的搜尋結果頁。
- 程式在 WordPress 開始查詢資料庫之前就轉走,不會執行內建的搜尋。
- 後台的搜尋(例如文章列表、媒體庫裡的搜尋)不受影響。
之後想換回 WordPress 內建搜尋,把這段程式碼刪掉就好。
如果完全不需要搜尋功能
有些網站內容不多,根本用不到搜尋框,把它從版面上拿掉就好:
- 傳統主題:到「外觀 → 小工具」刪除搜尋小工具。
- 區塊主題:到「外觀 → 編輯器」,在頁首等範本裡刪除「搜尋」區塊。
傳統主題如果把搜尋框直接寫死在版面裡,可以加上這一行,讓它不要輸出:
add_filter( 'get_search_form', '__return_empty_string' );舊版程式碼的問題
create_function()在 PHP 8 已經被移除,放進去網站會直接出現嚴重錯誤。$query->query_vars[s]少了引號,PHP 8 會把s當成未定義的常數而出錯。- 搜尋框的 CSS 是針對特定網站的主題寫的,套到別的網站並不適用。
延伸閱讀
- WordPress 網站地圖(XML Sitemap)怎麼做?內建功能、SEO 外掛與提交 Google 教學
- WordPress 網站加速完整攻略:測速、主機、快取、圖片、外掛與資料庫清理
- WordPress robots.txt 怎麼寫?虛擬 robots.txt、Sitemap 設定與 noindex 正確用法
網站好不好找,站內搜尋和在 Google 上的能見度一樣重要。正威網路行銷是 25 年經驗的基隆網頁設計工作室,提供 SEO 搜尋引擎優化與網站維護託管,歡迎來聊聊。







發表留言
還沒有人留言,歡迎第一個分享你的想法或問題。留言經審核後才會顯示,Email 不會公開。