SuperAPI AI 工具集

setup-blazor-sitemaps

前端与建站

查看项目

更新于 10-24 10:02

技能介绍

setup-blazor-sitemaps 是一个面向 .NET 10 服务端托管 Blazor 的站点地图配置技能,基于 PinguApps.BlazorSitemap 包实现。它通过发现编译后的 RouteAttribute 元数据来识别可索引路由,并生成 /sitemap.xml 及按 URL 哈希前缀分片的子站点地图。该包不扫描已部署的 Razor 源码,也不渲染页面;独立 WebAssembly 需要托管端点或部署时生成的站点地图,服务端裁剪与 Native AOT 不受支持(普通 Auto 客户端裁剪可支持)。

使用方式:服务端安装 PinguApps.BlazorSitemap(会间接引入 Abstractions),每个包含可路由组件的客户端/Razor 库需显式引用 PinguApps.BlazorSitemap.Abstractions。通过常规 ASP.NET Core 配置设置 Sitemap:PublicBaseUrl,应使用真实可信的公开 HTTP(S) 源及可选挂载路径,不得使用请求 Host 头;凭据、查询、片段、空白和反斜杠均无效。注册示例:builder.Services.AddBlazorSitemap<App>(options => { options.PublicBaseUrl = builder.Configuration["Sitemap:PublicBaseUrl"]!; }); 随后调用 app.MapBlazorSitemap(); 仅注册服务不会暴露端点。_Imports.razor 中添加 @using PinguApps.BlazorSitemap。

主要能力:为公开可索引组件添加 @attribute [SitemapPage](私有、登录、noindex、重定向、错误和仅别名页面不加);路径只写在 @page 中。多个不同 @page 模板需用 CanonicalRouteIndex 指定。固定路由无需提供器,有限路由通过 options.RouteValues 展开(列表按笛卡尔积展开)。支持 bool、datetime、decimal、double、float、guid、int、long、nonfile 约束;复杂段、默认及其他约束不支持。

本地化:通过 options.Locales 复用应用语言列表,每个本地化 URL 有独立 loc;[SitemapPage(Hreflang = true)] 添加互惠 XHTML alternate(含自身),不隐式生成 x-default。运行时翻译需显式设置每个语言并设置稳定的 AlternateGroup,只返回已发布翻译。

运行时条目与新鲜度:实现 ISitemapEntryProvider 并通过 AddSitemapEntries 注册,返回解码参数值、LastModified 和 AlternateGroup;空结果会排除该页。页面级新鲜度用 AddSitemapLastModified 与 ISitemapLastModifiedProvider。日期优先级为条目值、页面新鲜度、允许的静态源码戳。动态内容页总需提供日期,返回 null 表示未知,不得编造。

静态源码估算:构建任务哈希 .razor(可选 .razor.cs)并维护 .razor.sitemap.json 状态(SHA-256 与 UTC 时间戳),需提交该状态并保证 CI 可写。默认 UseSourceLastModified 与 RequireLastModified 均为 true;可将 RequireLastModified 设为 false 以允许省略未知静态日期。

独立 URL:AddSitemapUrls 用于组件路由之外的公开资源,需转义的 Location 和显式 LastModified;相对路径以 / 开头并附加到应用基路径,绝对 HTTP(S) 必须在该基路径下。支持查询,禁止片段、凭据、空白、反斜杠、协议相对 URL 和畸形百分号转义;长度需小于 2048 字符。独立条目不生成服务端点、自动新鲜度或 hreflang。

程序集与 Auto:引用路由程序集需同时加入 options.AddAssembly、MapRazorComponents 的 AddAdditionalAssemblies 和 Router.AdditionalAssemblies。Interactive Auto 需在客户端安装 Abstractions,保留服务端 WASM Server 引用,且不在浏览器注册服务端站点地图服务。挂载路径需包含在 PublicBaseUrl 中,并在映射端点前调用 UsePathBase。

缓存与文档契约:默认快照有效期五分钟(options.CacheLifetime),零值表示每次请求重新生成;内容事务成功后调用 SitemapCache.Invalidate()。XML 使用 UTF-8、协议命名空间和 application/xml; charset=utf-8,位置全限定并转义,省略 priority/changefreq。文档上限为 50,000 条 URL 与 52,428,800 未压缩 UTF-8 字节,可调低;超限自动分片。索引省略 lastmod。生成时会为完整站点地图保留元数据/XML 以便分组、去重和缓存,需预留内存。

验证:构建实际消费项目,抓取 /sitemap.xml 及每个子站点地图,检查 MIME、命名空间、位置、日期、语言组,并通过缓存策略验证发布变更。仓库内验证可运行 pwsh -NoProfile -File eng/Verify.ps1(打包产物、恢复隔离本地源消费者并运行 Gherkin/Reqnroll 场景),eng/New-Demo.ps1 生成独立应用;演示目录下 dotnet run --project ./Consumer/Consumer.csproj 使用 localhost:5187 开发配置。发布/创建 release 需另行授权。

适用场景:目标为 .NET 10 服务端托管 Blazor 应用,需要为公开可索引组件路由或独立公开资源生成 XML 站点地图,并管理动态条目、最后修改日期与多语言 alternate。限制:不适用于独立 WASM 无托管端点场景,不支持服务端裁剪/Native AOT,无法解释任意 head 内容、重定向、授权策略或运行时渲染,站点地图排除也不等于页面安全保护。