封存頁、搜尋結果頁與 404 頁,是三個最常被佈景主題草草帶過的版型。多數主題裝好就能跑,但這三頁往往直接套用 index.php 或預設樣式,結果封存頁標題寫著「彙整」卻看不出是哪個分類,搜尋結果頁不顯示使用者剛剛打的關鍵字,404 頁只丟一句冷冰冰的「找不到頁面」就把人趕走。這些頁面流量不低,卻最少人花心思設計。
自訂封存搜尋頁版型的關鍵,不在於塞多少特效,而在於先搞懂 WordPress 的範本層級(template hierarchy)怎麼決定要載入哪支檔案,再針對封存(archive)、搜尋(search)、404 三種情境寫出對應的 archive.php、search.php、404.php。底下會把這套機制拆開講清楚,並給出每一頁該放什麼、版型怎麼排、容易踩的雷在哪。
WordPress 怎麼決定要載入哪支版型檔案?
WordPress 不是隨機挑檔案,而是依照一套固定的「範本層級」由特定到通用逐層尋找,找到第一個存在的檔案就用它。理解這條鏈,是自訂任何版型的前提,否則你改了 archive.php,分類頁卻沒變,會以為是改錯地方。
當訪客打開一個網址,WordPress 先解析這個請求屬於哪種查詢類型(單篇文章、分類彙整、搜尋、找不到內容等),再沿著對應的層級往下找範本。以本文的三種頁面為例,傳統佈景主題(classic theme)的尋找順序是:
- 分類彙整頁:
category.php→archive.php→index.php - 標籤彙整頁:
tag.php→archive.php→index.php - 作者 / 日期彙整頁:
author.php或date.php→archive.php→index.php - 搜尋結果頁:
search.php→index.php - 找不到內容:
404.php→index.php
這裡有兩個常被誤解的點。第一、搜尋結果頁雖然也是「列出多篇文章」,看起來很像彙整,但它不走 archive.php,WordPress 把搜尋當成獨立查詢,只認 search.php,沒有就退回 index.php。第二、category.php 的優先序高於 archive.php,所以你若只改 archive.php,但主題裡同時存在 category.php,分類頁會優先吃 category.php,你的修改不會生效。
區塊主題(block theme,即全站編輯 FSE)邏輯相同,只是副檔名從 .php 換成 .html,並改在「外觀 → 編輯器 → 範本」裡視覺化編輯,對應的就是 archive、search、404 這幾個範本。判斷自己的主題屬於哪一種很簡單:佈景主題資料夾裡有 templates/ 目錄與 theme.json 的多半是區塊主題,只有一堆 .php 檔的是傳統主題。
封存頁版型(archive.php)該怎麼排?
封存頁的核心任務,是讓訪客一眼看出「現在在看的是哪一組文章」,再用清楚的列表把這組文章排出來。預設 index.php 通病是標題含糊、看不出分組依據,這正是自訂 archive.php 最該補的洞。
版型上,封存頁建議拆成三段:彙整標題區、文章列表區、分頁區。
彙整標題區放在最上方,用 the_archive_title() 這個函式自動輸出當前彙整的名稱,分類頁會顯示「分類:主題與外觀」、標籤頁顯示「標籤:xxx」、作者頁顯示作者名。搭配 the_archive_description() 還能帶出分類或標籤的描述文字,讓頁面不只是清單,也有脈絡。比起手動寫死標題,這兩個函式會依當前查詢自動變化,一支 archive.php 就能服務所有彙整情境。
文章列表區用主迴圈(the Loop)跑出該分組底下的文章。版型要選網格(grid)還是條列(list),取決於內容性質:圖片導向的內容(作品集、商品、攝影)適合網格,每張卡片放縮圖加標題;文字導向的部落格適合條列,每筆放標題、日期、摘要(the_excerpt())與「閱讀更多」連結。一個典型的條列卡片結構如下:
標題
日期 + 摘要
文章卡片 1
標題
日期 + 摘要
文章卡片 2
更多文章
分頁區放在列表最後,用 the_posts_pagination() 自動產生上一頁/下一頁與頁碼。彙整頁文章一多就需要分頁,少了它讀者只能看到第一頁的內容,後面的文章等於被埋掉。要注意若用了自訂查詢(WP_Query)卻沿用預設的每頁筆數設定,分頁容易算錯、甚至點到第二頁變成 404,這是封存頁最常見的踩雷,下面會再談。
側邊欄要不要留,看整站排版一致性。彙整頁通常維持與部落格列表相同的單欄或左右欄結構,讓使用者在不同頁面間有連貫的閱讀節奏,不必為彙整頁另創一套版型語言。
搜尋結果頁版型(search.php)的重點在哪?
搜尋結果頁最該做、卻最常被漏掉的一件事,是把使用者剛打的關鍵字顯示出來。少了這一步,訪客不確定系統有沒有讀到他的輸入,體驗會卡住。
關鍵函式是 get_search_query(),它會回傳使用者在搜尋框裡輸入的字串。把它放進頁面標題,寫成「『關鍵字』的搜尋結果」這種句型,訪客一眼就知道系統理解了他要找什麼。版型上,搜尋結果頁的骨架和封存頁很接近,同樣是標題區、結果列表、分頁三段,差別在標題區改用搜尋關鍵字、而非彙整名稱。
真正考驗版型功力的是沒有結果時的空狀態(empty state)。主迴圈跑完發現一篇都沒有時,不能只丟一句「查無結果」就結束,那等於把人逼回上一頁。空狀態版型至少要放三個元素:
- 一句友善的說明:用平實口吻說明這個關鍵字沒有對應內容,例如「找不到符合『關鍵字』的文章」,避免冷硬的系統錯誤語氣
- 一個再次搜尋的輸入框:用
get_search_form()直接帶出搜尋表單,讓使用者當場改字重查,不必離開頁面 - 替代出路:列出熱門文章、主要分類或網站地圖連結,給找不到目標的人別的去處
結果列表本身的版型,用主迴圈搭配 the_title()、the_permalink() 與 the_excerpt() 即可,每筆結果至少給標題與摘要,讓使用者在點進去之前就能判斷這篇是不是他要的。搜尋結果頁同樣需要分頁,the_posts_pagination() 對搜尋查詢一樣有效,不必另外處理。
值得提醒的是,WordPress 預設的搜尋只比對標題與內文,範圍偏窄。若站上內容靠自訂欄位或商品屬性承載資訊,預設搜尋可能漏掉,這時版型再漂亮也救不了相關度。這屬於搜尋功能強化的範疇,與版型設計是兩件事,先把版型的關鍵字回顯與空狀態做好,才是 search.php 的本分。
404 頁版型(404.php)要放哪些元素才有用?
404 頁的設計目標只有一個:在訪客撞到死路時,立刻給他下一步可走的路,而不是讓他直接關掉分頁離開。預設 404 頁通常只有一行錯誤訊息,跳出率自然偏高;一個設計過的 404 頁,能把這個失誤轉成把人留在站內的機會。
版型上,一個堪用的 404 頁至少包含這幾塊:
- 明確但不冷硬的提示:用人話說明這個頁面不存在或已搬移,避免直接丟「404 Not Found」這種純技術術語,讓使用者知道發生了什麼,又不會被嚇到
- 回首頁的連結:最基本也最重要的出口,確保位置明顯
- 搜尋框:用
get_search_form()放一個搜尋框,讓訪客直接找他原本要的內容,這是 404 頁最實用的單一元素 - 熱門文章或主要分類:給沒有明確目標的訪客一些可以點下去的方向
- 品牌一致的視覺:配色、字體、Logo 與全站一致,404 頁也是品牌的一部分,不該長得像另一個網站
要不要用幽默的文案或插圖,看品牌調性。輕鬆的口吻能緩和使用者撞牆的挫折感,但要與整站氣質相符,過於滑稽的內容不適合所有類型的網站。
技術面有個版型之外、卻會連帶影響的關鍵:確認伺服器真的回傳 HTTP 404 狀態碼。有些自訂做法(特別是用一般頁面或外掛硬做 404 內容)會讓伺服器回傳 200 OK,這叫「軟 404」(soft 404)——畫面上寫著找不到頁面,搜尋引擎卻把它當成一個正常存在的頁面去索引,長期會稀釋網站的索引品質。正規的 404.php 由 WordPress 觸發時會自動帶 404 狀態碼,這也是優先用範本檔、而非用一般頁面假造 404 的理由之一。
至於該不該把失效網址用 301 轉址導到相關內容,那是網址維護策略,與 404 版型設計是兩條線:301 處理「這個舊網址有對應新位置」的情況,404.php 處理「真的沒有對應內容」的情況,兩者並存,不互相取代。
改這三支版型前,怎麼動才不會出事?
動手改 archive.php、search.php、404.php 之前,先做兩件保命的事:用子主題(child theme),以及備份。這兩步能擋掉初學者最常見的兩種損失——主題更新覆蓋掉修改,以及改壞版面卻回不去。
子主題的作用,是讓你的修改獨立於原主題之外。直接改原主題(父主題)的範本檔,下次主題一更新,所有改動會被覆蓋清空。正確做法是建一個子主題,把要自訂的 archive.php、search.php、404.php 複製進子主題資料夾再改;WordPress 載入時會優先用子主題裡的同名檔案,父主題更新也動不到它們。若用的是區塊主題,等效做法是在「外觀 → 編輯器」裡編輯範本,WordPress 會把你的版本存進資料庫,同樣不受主題更新影響。
備份則是改任何 PHP 檔之前的標準動作。範本檔是 PHP,一個括號漏掉、一個函式拼錯,整頁可能直接白畫面。改之前先用外掛或主機面板備份一份,改壞了能立刻還原,比事後逐行除錯省事得多。
最後回到前面提過的分頁踩雷。彙整頁與搜尋頁若沿用主查詢(main query),分頁交給 the_posts_pagination() 就會正常運作;但只要你在範本裡自己建了一個 WP_Query 來抓特定內容、又想對它分頁,就得把當前頁碼(paged 參數)正確傳進查詢裡,否則點到第二頁會出現 404。判斷原則很單純:能用主查詢解決的列表,就別另開自訂查詢,版型會單純很多,分頁也不會出錯。
把範本層級的覆蓋順序搞懂、三支版型各自補上預設版型最缺的那塊——封存頁的清楚標題與分頁、搜尋頁的關鍵字回顯與空狀態、404 頁的出路與正確狀態碼——再用子主題包好,這三個被忽略的頁面就能從扣分項變成留住訪客的環節。先從你站上流量最高的那一頁開始改,逐支驗證沒問題再動下一支,比一次全改更穩。