用 Blazor Server 開發內容網站時,我為什麼不強求 HTTP 404

| .NET | 8 Reads

在用 Blazor Server 建立自己的內容網站時,我曾經面臨一個看似簡單、實際卻頗為麻煩的問題:當使用者請求一篇不存在的文章時,我該怎麼處理?

一般來說,網站都會回傳 404 Not Found 狀態碼,讓使用者與搜尋引擎都清楚這個資源不存在。但在 Blazor Server 中,事情沒有這麼簡單。


Blazor Server 不適合處理傳統的 404

在 Razor Page 或 ASP.NET MVC 中,我們可以很直覺地這麼做:

Response.StatusCode = 404;
return View("NotFound");

但在 Blazor Server 中,頁面是透過 SignalR 長連線 不斷即時互動的。當你在 .razor 頁面中想設定 Response.StatusCode = 404,不但不可行,還可能會拋出例外。

所以最常見、也最簡單的做法是:

@if (IsNotFound)
{
    <h1>404 - Not Found</h1>
    <p>文章不存在或已被刪除。</p>
}
else
{
    <!-- 顯示文章內容 -->
}

這樣,使用者會看到像 404 的頁面,但實際回傳的是 HTTP 200


這樣對 SEO 有沒有影響?

老實說,有影響,但不大,端看你的流量來源是什麼。

如果你的網站仰賴 Google 搜尋帶來自然流量,那這種做法會讓搜尋引擎誤以為一個其實「沒有內容」的頁面是有效的(因為是 200),從而降低網站的整體搜尋品質。

但——這並不是我的網站情況。


我的流量來源不靠 Google

我網站的主要訪問者都是來自:

  • 我的 YouTube 頻道

  • 我手動分享的連結

  • 訂閱 RSS 的用戶

我自己也寫好了 sitemap.xml,把所有有效的網址都明確列出,確保搜尋引擎抓到的都是有內容的頁面。RSS 也有同步更新,讓訂閱者能即時看到最新文章。

那麼 Google 還會去爬我沒寫進 sitemap 的頁面嗎?答案是:

會。

Googlebot 會試著預測我網站的 URL 規則,甚至會根據外部錯誤連結或內部誤連接去嘗試請求不存在的文章編號。這屬於「預測性爬蟲行為」,很常見。

但因為我 sitemap 控得乾淨、網址設計有規律,這個問題的影響很小。


所以我不打算為了 404 扭曲架構

Blazor Server 的設計本來就不是為了「SEO 最佳化」或「靜態網站生成」而生的。它更像是建立 Web App 的框架。既然如此,我不會硬是為了搜尋引擎去改變整個架構。

目前我選擇的策略是:

  • 網址無內容時,以 UI 呈現「找不到文章」畫面。

  • 不回傳 404,避免頁面拋錯。

  • 僅透過 sitemap 和 RSS 控制曝光頁面。

對於我的需求來說,這樣就已經非常足夠。


如果你也用 Blazor Server,該怎麼考慮?

  • 如果你靠社群、私域流量(像我一樣) 👉 不必執著 404 回傳碼,UI 做好就行。

  • 如果你靠搜尋引擎吃飯(例如公開技術網站) 👉 請考慮混用 Razor Pages 或 API 判斷方式,讓不存在的資源真的回 404。


最後補一點:不要小看 sitemap 和 RSS

很多人會跳過這兩個東西,結果網站 SEO 一團亂。Blazor 不管哪種模式,你都能輕鬆生成 sitemap 和 RSS,我推薦你花點時間把它們設計好,反而比硬要回 404 實用多了。


有一天如果真的需要更完整的 SEO 架構,我可能會把公開文章區段改寫為 Razor Pages,但那會是另一個架構層級的事情。現在,這樣的平衡點剛剛好。


有任何關於 Blazor 架構設計或內容站優化的問題,歡迎留言或來信討論!

This article was last edited at