我可以在架构标记中使用 Razor 呈现的内容吗?

Can I Use Razor Rendered Content in Schema Markup?

我的网站上有将近 1000 篇文章,这些文章是用 Umbraco 构建的,我想用 Article Schema 标记来实现。

我遇到的麻烦是大部分内容都是由剃须刀动态生成的(例如@Umbraco.Field("Title"))。我试图将这些剃刀放入相关代码中以用于我的标记,但 Google 的结构化数据测试工具显示所有这些剃刀均有错误。

这部作品会上线吗?或者是否有一种变通方法可以在站点上标记多篇文章以从页面上的其他区域提取数据?

感谢任何建议。

是的,你应该能够做到这一点。我假设您遇到的问题是您正在尝试使用 JSON-LD - 这会增加复杂性,因为它使用 Razor 语法也依赖的 @ 符号。在 Razor 中,您可以使用 @@ 转义它。这是我如何让它工作的示例(这不是 Umbraco 特定的,但它仍然是标准的 Razor):

<script type="application/ld+json">
{
    "@@context": "http://schema.org",
    "@@type": "article",
    "@@id": "@newsItem.DefaultUrl",
    "mainEntityOfPage": {
        "@@type": "WebPage",
        "@@id": "@newsItem.DefaultUrl"
    },
    "headline": "@newsFields.Title",
    "datePublished": "@newsItem.GetDateTime("PublicationDate", "MMM d, yyyy, HH:mm tt")",
    "dateModified": "@newsItem.GetDateTime("LastModified", "MMM d, yyyy, HH:mm tt")",
    "author": {
        "@@type": "Person",
        "name": "@newsItem.Author"
    }
}
</script>

JSON-LD 在 body 中的任何地方都有效,因此您不必担心将任何东西注入头部。对我来说,上面呈现的标准 JSON-LD 代码并通过了结构化数据测试工具。这是一个基本的例子。根据领域的不同,它可能会有点棘手,但我还没有 运行 进入任何墙壁。

当然,另一个可行的选择(至少在撰写本文时)是在 HTML 上使用 RDFa,这不是理想的方法,但绝对可以更灵活。