重要原因
文化 URL 帮助用户和爬虫选择正确的页面
Cookie 可以在请求后更改语言。
URL 可以被分享、爬取、索引、缓存和审计。
文化路由适用于公开文章、产品页面、文档和工具。
目录
核心概念
分离语言、区域、路由和内容版本
在编写路由代码前保持这些术语分开。
使用语言表示可读文本。
英语、德语和法语是语言选项。
使用地区表示本地意图。
en-us 和 en-gb 可能需要不同的拼写、示例和优惠。
使用路由实现内容发现。
像 /de-de/blazor/ 这样的路由为所有人提供一个稳定地址。
当意图不同,请使用内容。
当法律说明、价格或示例不同,请编写单独版本。
SEO 信号
将文化路由与 Canonical URL 和 hreflang 规则连接
URL 只是一个信号。元数据必须与之匹配。
Canonical URL
将每个本地化页面指向其各自的首选 URL。
hreflang
使用 hreflang 关联每个真实语言或地区版本。
x-default
对中性选择器或全局回退使用 x-default。
BreadcrumbList
保持面包屑的文化感知,以使 schema 与可见路由层级匹配。
相关参考
元数据和 schema 必须传达一致的信息
添加元数据和结构化数据时,请使用这些指南。
实现
将路由规则拆分成小块构建
从一个服务、一个重定向和一个路由模式开始。
文化服务契约
集中管理支持的文化和 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";
}
}文化重定向端点
设置 cookie,然后返回文化路由。
[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();页面路由
使文化段成为每个公开路由的一部分。
@page "/{Culture}/pricing/"
<a href="@BuildCultureLink(PageRegistryKey.Blazor)">
Blazor guides
</a>路由现实
Blazor可以本地化内容,但不能本地化路由模板
文化段会变化;slug保持稳定。 翻译slug需要自己的路由层。
Razor @page 路由使用字面模板。 本地化仅翻译页面文本。 PageRegistry和@page字符串由代码维护。
/de-de/seo-friendly-culture-links-in-blazor/
只有文化部分会变化。
/de-de/seo-freundliche-culture-links-in-blazor/
翻译的slug需要slug表。 它们还需要重定向、规范链接、站点地图和hreflang。
BuildCultureLink(PageRegistryKey.Blazor)
BuildCultureLink改变文化,不改变slug。
常见错误
大多数文化 URL 错误都是路由不匹配
路由模板很少是难点。
语言更改后保持所有信号一致。
不要对有效文化无限重定向。
规范化文化一次,然后当路由已匹配时停止。
不要在后期猜测默认文化。
为路由、元数据、站点地图和回退逻辑使用一个默认文化。
不要让两个页面拥有相同的文化 slug。
集中页面链接使意外路由冲突更易于审查。
不要在仅客户端状态下隐藏语言路由。
爬虫和用户在 Blazor 变为交互式之前需要真实的 href 值。
- 为每个支持的文化至少开放一个 URL。
- 检查渲染源代码中的 canonical 和 hreflang 标签。
- 确认 FAQ schema 与可见的问题和答案匹配。
- 爬取重定向,避免不支持的文化循环。
- 审核已翻译的标题、描述、H1文本和关键词。
常见问题
文化URL比Cookies更适合SEO吗?
是的。文化URL创建了可抓取且易于分享的页面。
语言和地区有什么区别?
语言控制文本,地区控制本地示例和优惠。
使用文化路由还需要hreflang吗?
需要。文化路由使URL更清晰,hreflang用于连接它们。
本地化页面的规范链接应指向哪里?
通常,规范链接指向相同的本地化页面。
如何避免重定向循环?
对不支持的文化进行一次重定向,然后停止。