Blume 会在每个页面的 <head> 中输出 schema.org JSON-LD,让搜索引擎理解你的内容。默认开启:
seo: {
structuredData: true,
}
每个页面包含:
- 一个用于标识站点的 WebSite 节点,
- 把页面本身作为 article —— blog 文章为
BlogPosting,更新日志和文档为TechArticle—— 带上它的描述和发布日期, - 一个由导航路径构建的 BreadcrumbList。
当 deployment.site 已设置时,URL 是绝对的。标记了 seo.noindex 的页面会被跳过。当 lastModified 开启时,每个页面的日期还会作为 dateModified 输出。
站点标识#
WebSite 节点只说明存在这样一个站点;它没说这是_什么_,也没说由_谁_运营 —— 而 AI 智能体在推荐或引用你之前,读 JSON-LD 正是为了这些。有两个可选配置块可以补上这些信息,它们都需要 deployment.site(这些节点带的是绝对标识符):
seo: {
organization: {
name: "Acme", // 默认为站点标题
email: "hello@acme.com",
telephone: "+1 555 0100",
address: { addressLocality: "Sydney", addressCountry: "AU" },
logo: "/logo.svg",
sameAs: ["https://github.com/acme", "https://x.com/acme"],
},
software: {
license: "MIT",
operatingSystem: "Node.js 22+",
price: 0, // 输出为 Offer;0 表示免费
sameAs: ["https://www.npmjs.com/package/acme"],
},
}
organization 会给每个页面加上一个 Organization 节点 —— WebSite 和 article 节点把它作为 publisher 引用 —— 其中邮箱和电话组成一个 ContactPoint(contactType 默认为 "customer support"),地址作为一个 PostalAddress,商业信息核验查的就是这两项。name 和 url 默认为站点的值;根相对的 logo 会像任何页面 URL 一样被转成绝对地址。
software 会给首页加上一个 SoftwareApplication 节点:产品名称和描述(默认取站点的)、applicationCategory(默认 "DeveloperApplication")、操作系统、许可证、设置了 price 时的 Offer,以及 sameAs 中的注册表或仓库 URL。传入 software: true 即可采用全部默认值。若配置了 organization,它会作为该节点的 publisher 被引用。
自定义页面#
通过 PageLayout 渲染的自定义 .astro 页面会输出同样的 WebSite 图谱,因此营销首页不会是唯一没有结构化数据的那个 URL。传入 structuredDataEnabled={config.structuredData} 让它与本设置保持同步,或传入 structuredDataEnabled={false} 单独为该页面关闭。