ASP.NET 2.0 強化 Page.Header 控制項集合,讓開發者在 Page_Load 階段以程式碼動態新增/修改 <title>、<meta>、<link> 等頭部元素,完美支援單一頁面多內容 (如 CMS、商品詳情) 的 SEO 需求。本文提供完整、可直接複製的實作範本。
Page.Title:直接設定頁面標題。Page.Header.Controls:ControlCollection,可 Add() 任意 HtmlControl。HtmlMeta:對應 <meta>,屬性 Name、HttpEquiv、Content。HtmlLink:對應 <link>,屬性 Href、Attributes (rel, type 等)。protected void Page_Load(object sender, EventArgs e)
{
// 1. 標題
Page.Title = "商品詳情 - 我的購物網";
// 2. 編碼宣告 (建議在 MasterPage 或 PreInit 更早設定)
var metaCharset = new HtmlMeta { HttpEquiv = "Content-Type", Content = "text/html; charset=utf-8" };
Page.Header.Controls.AddAt(0, metaCharset); // 插入最前
// 3. 語言
var metaLang = new HtmlMeta { HttpEquiv = "Content-Language", Content = "zh-TW" };
Page.Header.Controls.Add(metaLang);
// 4. Description
var metaDesc = new HtmlMeta { Name = "Description", Content = "最新款輕量筆記型電腦,搭載 Intel i7 處理器,16GB 記憶體,512GB SSD。" };
Page.Header.Controls.Add(metaDesc);
// 5. Keywords
var metaKw = new HtmlMeta { Name = "keywords", Content = "筆記型電腦,購物,優惠,Intel,i7,SSD" };
Page.Header.Controls.Add(metaKw);
// 6. CSS 連結
var cssLink = new HtmlLink { Href = "~/Styles/product.css" };
cssLink.Attributes.Add("rel", "stylesheet");
cssLink.Attributes.Add("type", "text/css");
Page.Header.Controls.Add(cssLink);
// 7. Favicon
var icoLink = new HtmlLink { Href = "~/favicon.ico" };
icoLink.Attributes.Add("rel", "shortcut icon");
Page.Header.Controls.Add(icoLink);
// 8. Open Graph / Twitter Card (社群分享優化)
AddMetaProperty("og:title", Page.Title);
AddMetaProperty("og:description", metaDesc.Content);
AddMetaProperty("og:image", "https://myshop.com/images/product-main.jpg");
AddMetaProperty("og:url", Request.Url.AbsoluteUri);
}
private void AddMetaProperty(string property, string content)
{
var meta = new HtmlMeta { Name = property, Content = content };
Page.Header.Controls.Add(meta);
}
| 議題 | 建議做法 |
|---|---|
| MasterPage 統一管理 | 在 MasterPage Page_Load 設定共用 meta (charset, viewport, favicon),內容頁面只補充差異化 meta。 |
| 避免重複新增 | 使用 Page.Header.FindControl 或維護 Dictionary<string, HtmlMeta> 檢查是否已存在再決定新增或更新。 |
| 動態 Canonical URL | var canonical = new HtmlLink { Href = Request.Url.GetLeftPart(UriPartial.Path) }; canonical.Attributes["rel"] = "canonical"; Page.Header.Controls.Add(canonical); |
| 效能 | Head 控制項較少,動態新增開銷可忽略;若極度追求效能,可改用 Literal 在 MasterPage 直接輸出字串。 |
| ASP.NET 4.0+ 新語法 | <%: Page.Title %>、<%: Html.Meta(...) %> (MVC) 或 Page.MetaKeywords, Page.MetaDescription 屬性 (Web Forms 4.5+)。 |
<title> (含關鍵字,< 60 字元)meta name="description" (150-160 字元,含行動呼籲)meta name="keywords" (雖權重低,仍建議保留 5-8 核心詞)rel="canonical" 指向標準化 URLviewport、charset=utf-8 正確善用 Page.Header.Controls 動態建構 Head 區塊,是 Web Forms 時代實現 SEO 友善動態頁面的標準做法。配合 MasterPage 集中管理共用標籤,內容頁專注差異化資料,即可構建完整、可維護的 SEO 基礎設施。