預設的伺服器 404 頁面通常極其簡陋,甚至洩露伺服器版本資訊。自訂 404 頁面不僅能維持品牌視覺一致性,更能引導迷途用戶回到有效內容,降低跳出率。雖然 Google 官方聲稱 404 不直接影響排名,但良好的用戶體驗間接提升網站信任度與留存。
關鍵在於 必須在輸出任何內容前 發送 HTTP 404 狀態碼,否則搜尋引擎會誤判為 200 OK(軟 404),導致無效頁面被收錄。
<?php
// 1. 發送標準 HTTP/1.1 404 狀態碼(必須最先執行)
http_response_code(404); // PHP 5.4+ 推薦寫法
// 兼容舊版 PHP 或特定 SAPI 的備用寫法
// header('HTTP/1.1 404 Not Found');
// header('Status: 404 Not Found'); // FastCGI 環境有時需要
// 2. 載入自訂錯誤頁面模板
$template = __DIR__ . '/../templates/404.php';
if (is_readable($template)) {
include $template;
} else {
// 兜底:極簡 HTML 回應
echo '<!DOCTYPE html><html><head><meta charset="utf-8"><title>404 Not Found</title></head>';
echo '<body><h1>頁面不存在</h1><p>返回首頁</p></body></html>';
}
exit;
?>
<!DOCTYPE html>
<html lang="zh-Hant">
<head>
<meta charset="UTF-8">
<title>找不到頁面 - 網站名稱</title>
<meta name="robots" content="noindex, nofollow"> <!-- 防止搜尋引擎收錄錯誤頁 -->
<style>/* 這裡放入與主站一致的 CSS */</style>
</head>
<body>
<div class="container">
<h1>404 - 頁面走失了</h1>
<p>抱歉,您訪問的頁面不存在或已被移動。</p>
<nav aria-label="錯誤頁導航">
<a href="/" class="btn">回首頁</a>
<a href="/sitemap" class="btn">查看網站地圖</a>
<a href="/search" class="btn">站內搜尋</a>
</nav>
<!-- 可選:熱門文章推薦、站內搜尋框、幽默插圖 -->
</div>
</body>
</html>
對於靜態資源(圖片、CSS、JS)不存在的情況,由 Web Server 直接處理比透過 PHP 處理效能高得多。
ErrorDocument 404 /error/404.php
# 確保錯誤頁面本身不會觸發 404 循環
ErrorDocument 404 /error/404.html # 純靜態頁更佳
server {
# ...
error_page 404 /error/404.html;
location = /error/404.html {
internal; # 防止直接訪問
root /var/www/html;
}
}
核心原則:優先考量用戶體驗,而非單純為 SEO。
- 不要將所有 404 重導向首頁(軟 404,Google 會懲罰)。
- 要提供清晰導航、搜尋入口、熱門內容推薦。
- 要監控 404 日誌(Google Search Console / 伺服器 Log),修復高頻率的斷鏈(設定 301 重導向)。
正確的 404 實作 = http_response_code(404) + 友善模板 + 伺服器層面靜態資源處理 + 持續監控修復。這不只是技術細節,更是尊重用戶時間的體現。