重要原因
文化 URL 幫助使用者與爬蟲選擇正確頁面
Cookie 可能會在請求後改變語言。
URL 可被分享、爬取、索引、快取及審核。
文化路由適用於公開文章、產品頁、文件與工具。
目錄
核心概念
分離語言、區域、路由與內容版本
在撰寫路由程式碼前,請先分清這些術語。
使用語言呈現可讀文字。
英語、德語與法語是語言選項。
使用區域表達在地意圖。
en-us 與 en-gb 可能需要不同拼寫、範例與優惠。
使用路由以利發現。
像 /de-de/blazor/ 這樣的路由為所有人提供一個穩定地址。
當意圖不同時,使用內容。
當法律說明、價格或範例不同時,撰寫獨立版本。
SEO 訊號
將文化路由與 Canonical URL 及 hreflang 規則連結
URL 只是其中一個訊號,相關的 Metadata 必須相符。
Canonical URL
將每個在地化頁面指向其專屬的首選 URL。
hreflang
使用 hreflang 連結每個真實的語言或區域版本。
x-default
對中立選擇器或全球回退使用 x-default。
BreadcrumbList
保持麵包屑的文化感知,使結構化資料與可見路由階層相符。
相關參考
Metadata 與 schema 必須傳達相同訊息
新增 metadata 和結構化資料時,請使用這些指南。
實作方式
將路由規則拆解成小部分
從一個服務、一個重新導向和一個路由模式開始。
Culture 服務合約
集中管理支援的文化與 URL 解析。
public sealed class CultureRouteService
{
private static readonly string[] SupportedCultures = ["en-us", "en-gb", "de-de"];
public string ResolveCulture(string? routeCulture)
{
if (SupportedCultures.Contains(routeCulture, StringComparer.OrdinalIgnoreCase))
{
return routeCulture!.ToLowerInvariant();
}
return "en-us";
}
}Culture 重新導向端點
設定 cookie,然後返回 culture 路由。
[Route("culture")]
public sealed class CultureController : Controller
{
[HttpGet("set")]
public IActionResult Set(string culture, string returnUrl)
{
Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)));
return LocalRedirect(returnUrl);
}
}程式設定
在映射控制器路由前註冊本地化。
builder.Services.AddLocalization();
builder.Services.AddScoped<CultureRouteService>();
app.UseRequestLocalization(options =>
{
options.SetDefaultCulture("en-us");
options.AddSupportedCultures("en-us", "en-gb", "de-de");
options.AddSupportedUICultures("en-us", "en-gb", "de-de");
});
app.MapControllers();頁面路由
將 culture 段作為每個公開路由的一部分。
@page "/{Culture}/pricing/"
<a href="@BuildCultureLink(PageLinks.Blazor)">
Blazor guides
</a>路由現況
Blazor 可本地化內容,但無法本地化路由模板
文化段會變,slug 保持穩定。 翻譯 slug 需要自己的路由層。
Razor @page 路由使用字面模板。 本地化只翻譯頁面文字。 PageLinks 和 @page 字串仍由程式碼管理。
/de-de/seo-friendly-culture-links-in-blazor/
只有文化會改變。
/de-de/seo-freundliche-culture-links-in-blazor/
翻譯過的 slug 需要 slug 表。 它們也需要重定向、canonical、網站地圖和 hreflang。
BuildCultureLink(PageLinks.Blazor)
BuildCultureLink 會改變文化,不會改變 slug。
常見錯誤
大多數 culture URL 錯誤都是路由不匹配
路由範本通常不是困難的部分。
語言變更後,保持所有訊號一致。
不要無限重定向有效的文化設定。
文化設定正規化一次後,當路由已匹配時停止處理。
不要在後期猜測預設文化設定。
對路由、元資料、網站地圖與回退邏輯使用單一預設文化設定。
不要讓兩個頁面擁有相同的文化 slug。
集中管理的頁面連結讓意外路由衝突更容易檢視。
不要在僅客戶端狀態下隱藏語言路由。
爬蟲與使用者在 Blazor 互動前需要真實的 href 值。
- 為每個支援的文化至少開放一個 URL。
- 檢查渲染原始碼中的 canonical 與 hreflang 標籤。
- 確認 FAQ 架構符合可見的問題與答案。
- 爬取重定向以避免不支援文化的迴圈。
- 檢查已翻譯的標題、描述、H1 文字和關鍵字。
常見問題
文化 URL 是否比 Cookie 更適合 SEO?
是的。文化 URL 可建立可爬取且易於分享的頁面。
語言和地區有何不同?
語言控制文字內容,地區控制本地範例和優惠。
使用文化路由還需要 hreflang 嗎?
需要。文化路由讓 URL 清晰,hreflang 則用於連結它們。
本地化頁面的 canonical 應指向哪裡?
通常,canonical 指向相同的本地化頁面。
如何避免重定向迴圈?
對不支援的文化只重定向一次,然後停止。