開網頁跳出「404 Not Found」?這是 HTTP 標準回應碼,代表**伺服器找不到對應的網頁資源**。原因通常有三:1️⃣ 網址輸入錯誤;2️⃣ 頁面已被刪除/移動;3️⃣ DNS/防火牆攔截。本文詳細解析 404 成因、專業層面三大技術原因,並教您在 IIS/Apache 設定自訂 404 頁面(含 301 重導向、正確狀態碼輸出),提升使用者體驗與 SEO。
404 Not Found 是什麼?
當使用者請求一個 URL,IIS/Apache 先檢查該路徑是否存在對應檔案/腳本。若不存在,伺服器回傳 HTTP 404 狀態碼並顯示預設或自訂錯誤頁面。友善的 404 頁面應告知使用者「頁面不存在」、提供站內搜尋/網站地圖/首頁連結,引導留存而非直接離開。
常見成因
- 使用者端: 網址拼寫錯誤、書籤過期、大小寫敏感路徑錯誤。
- 伺服器端: 頁面已刪除/更名/移動、CMS 產生錯誤連結、虛擬目錄對應遺失。
- 網路層: DNS 污染/劫持、防火牆/ISP 封鎖特定網站(回傳偽造 404)。
專業技術層面三大原因 (IIS 為例)
- 無法在請求的連接埠存取 Web 站台。
- Web 服務擴充鎖定原則封鎖請求。
- MIME 對應原則封鎖請求(副檔名未註冊 MIME 類型)。
自訂 404 頁面設定指南
IIS 6.0 (Windows XP/Server 2003)
- 開啟 IIS 管理員 → 右鍵網站 → 「內容」→ 「自訂錯誤」索引標籤。
- 選中 404 → 「編輯內容」→ 選擇 **「URL」** → 輸入
/err404.html(或 .asp/.aspx 動態頁)。
- ⚠ **關鍵:訊息類型必須選「檔案」或「預設值」,絕不可選「URL」**,否則 IIS 會回傳 HTTP 200 而非 404,誤導搜尋引擎。
- 將製作好的
err404.html 放置於網站根目錄。
動態頁面 (ASP/PHP/ASPX) 必須手動輸出 404 狀態碼
<% Response.Status = "404 Not Found" %> ' ASP
header("HTTP/1.0 404 Not Found"); // PHP
Response.StatusCode = 404; // ASP.NET
否則動態頁面預設回傳 200 OK,導致搜尋引擎誤判頁面存在。
Apache (.htaccess)
ErrorDocument 404 /notfound.php
最佳實務建議
- ✅ 404 頁面包含:清楚錯誤訊息、站內搜尋框、熱門分類連結、首頁按鈕、幽默/品牌化設計降低挫折感。
- ✅ 定期用 Google Search Console / 站長工具檢查 404 錯誤報表,修正斷連結或設定 301 永久重導向到新 URL。
- ✅ 避免使用 Meta Refresh / JavaScript 重導向,務必用伺服器端 301/302。
把 404 從「死胡同」變成「轉彎處」,使用者體驗與 SEO 雙贏!