作为一位资深的网站运营专家,我深知在当下内容营销和搜索引擎优化(SEO)日益重要的背景下,如何有效地向搜索引擎传达页面内容的核心信息至关重要。安企CMS(AnQiCMS)作为一个基于Go语言开发的企业级内容管理系统,凭借其高效、可定制的特点,为我们提供了极大的便利。今天,我们就来深入探讨一个在SEO中常常被提及,但又容易被忽视的细节:如何为AnQiCMS文章页面动态填充Json-LD中的authordatePublished字段。

Json-LD:搜索引擎理解内容的“身份证”

在搜索引擎的语境中,Json-LD(JavaScript Object Notation for Linked Data)扮演着内容“身份证”的角色。它是一种结构化数据标记语言,能够帮助搜索引擎更清晰地理解网页内容的含义、类型以及它们之间的关联。正确地使用Json-LD,不仅能提升搜索引擎对页面内容的理解深度,还有机会在搜索结果中获得“富文本摘要”(Rich Snippets),例如文章的发布日期、作者信息,甚至是评分等,这些都能显著提高点击率,为网站带来更多高质量的流量。

对于文章页面而言,author(作者)和datePublished(发布日期)这两个字段尤其重要。author字段有助于建立内容创作者的专业性、权威性和可信度(E-A-T原则的核心要素),在众多信息中脱颖而出。而datePublished则能清晰地告诉搜索引擎和用户内容的发布时间,这对于新闻、技术文章等时效性较强的内容至关重要,它能帮助搜索引擎判断内容的“新鲜度”和相关性。

为什么需要动态填充?

想象一下,如果您的网站有成百上千篇文章,每一篇都要手动去编辑Json-LD代码,不仅效率低下,还极易出错。当作者变更、发布日期调整时,手动维护更是一场噩梦。因此,动态填充这些字段是网站运营的必然选择,它能让您的网站在发布新内容时,自动生成并更新结构化数据,极大地提升运营效率。

安企CMS的模板引擎提供了强大的动态数据调用能力,结合其专为结构化数据设计的jsonLd标签,使得动态填充authordatePublished变得简单而高效。

AnQiCMS如何动态填充datePublished字段

在AnQiCMS中,每篇文章的发布和更新时间都存储在数据库中,并通过archiveDetail标签提供给模板使用。要填充datePublished字段,我们需要关注CreatedTime(创建时间)和UpdatedTime(更新时间)。这两个字段在AnQiCMS中通常以时间戳的形式存储。

Json-LD对日期格式有严格要求,通常推荐使用ISO 8601标准,例如2023-10-26T15:00:00+08:00。安企CMS的stampToDate(格式化时间戳)功能,正好可以帮助我们轻松实现这一转换。

我们可以在文章详情页的模板(通常是{模型table}/detail.html)中,利用archiveDetail标签获取当前文章的CreatedTimeUpdatedTime,然后通过stampToDate将其格式化为Json-LD所需的日期字符串。

例如,如果您想使用文章的创建时间作为datePublished

{%- archiveDetail articleCreatedTime with name="CreatedTime" %}
{%- set formattedDate = stampToDate(articleCreatedTime, "2006-01-02T15:04:05-07:00") %}

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "datePublished": "{{ formattedDate }}"
  // ... 其他Json-LD字段
}
</script>

在上面的代码中:

  • 我们首先使用{%- archiveDetail articleCreatedTime with name="CreatedTime" %}获取当前文章的创建时间戳,并赋值给articleCreatedTime变量。
  • 接着,{%- set formattedDate = stampToDate(articleCreatedTime, "2006-01-02T15:04:05-07:00") %}将时间戳格式化。这里需要注意的是,Go语言的时间格式化字符串非常独特,它不是Y-m-d H:i:s这样的占位符,而是以2006-01-02T15:04:05-07:00这个具体的日期时间字符串作为参考模板来定义格式的。
  • 最后,在script标签内,"datePublished": "{{ formattedDate }}"就完成了动态填充。

如果您希望优先使用文章的更新时间,可以替换为name="UpdatedTime"。通常,如果文章内容有实质性更新,使用UpdatedTime会更好地反映内容的最新状态。

AnQiCMS如何动态填充author字段

author字段的动态填充可能需要一点点额外的设置,因为安企CMS默认的文章模型可能没有直接对应“作者姓名”的字段。但不用担心,安企CMS的“灵活的内容模型”功能(AnQiCMS 项目优势.md中提到)正是为此而生。

步骤一:创建自定义作者字段

首先,您需要在安企CMS后台为您的文章模型添加一个自定义字段,用于存储作者信息。

  1. 进入安企CMS后台,找到“内容管理”下的“内容模型”。
  2. 编辑您正在使用的文章模型(例如,“文章模型”或您自定义的模型)。
  3. 在模型编辑界面,点击“内容模型自定义字段”,添加一个新的字段。
    • 参数名(显示名称):例如“文章作者”
    • 调用字段(模板调用名):例如articleAuthor (请使用英文小写字母)
    • 字段类型:选择“单行文本”
    • 您可以根据需要设置是否必填、默认值等。
  4. 保存模型配置。

完成这一步后,您在发布或编辑文章时,就可以填写“文章作者”这个自定义字段了。

步骤二:在模板中动态填充作者信息

有了自定义字段,我们就可以像获取其他文章信息一样,使用archiveDetail标签来获取作者信息。

Json-LD的author字段可以是一个字符串(作者姓名),也可以是一个更复杂的对象,如Person(个人)或Organization(组织),提供更多细节,例如作者的URL、社交媒体链接等。这里我们以Person类型为例。

{%- archiveDetail articleAuthorName with name="articleAuthor" %}
{%- archiveDetail articleAuthorLink with name="articleAuthorLink" %} {# 假设您也创建了作者链接的自定义字段 #}
{%- if not articleAuthorName %}
    {%- set articleAuthorName = "您的网站名称" %} {# 如果作者字段为空,提供一个默认值 #}
{%- endif %}

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  // ... 其他Json-LD字段

  "author": {
    "@type": "Person",
    "name": "{{ articleAuthorName }}",
    {%- if articleAuthorLink %}
    "url": "{{ articleAuthorLink }}"
    {%- endif %}
  }
}
</script>

在上述代码中:

  • {%- archiveDetail articleAuthorName with name="articleAuthor" %}用于获取自定义字段articleAuthor的值。
  • {%- archiveDetail articleAuthorLink with name="articleAuthorLink" %}则获取可能存在的自定义作者链接字段。
  • 我们还增加了一个if判断,如果articleAuthorName为空,则给它设置一个默认值,以避免Json-LD结构缺失。
  • "author": { ... }部分构建了一个Person类型的作者对象,包含了作者姓名和(如果存在)作者URL。

完整示例代码

现在,让我们将datePublishedauthor的动态填充整合到一个完整的Json-LD结构中,并建议放置在文章详情页模板的<head>标签内:

”`twig {# 获取当前文章对象,以便统一调用其属性 #} {%- archiveDetail currentArchive %}

{%- if currentArchive.Id %} {# 确保当前页面是文章详情页 #}

{# 格式化发布时间 #}
{%- set publishedDate = stampToDate(currentArchive.CreatedTime, "2006-01-02T15:04:05-07:00") %}
{# 格式化更新时间,如果文章有更新,优先使用更新时间 #}
{%- set modifiedDate = stampToDate(currentArchive.UpdatedTime, "2006-01-02T15:04:05-07:00") %}

{# 获取自定义作者信息,如果为空则使用网站名称作为默认作者 #}
{%- archiveDetail articleAuthorName with name="articleAuthor" id=currentArchive.Id %}
{%- if not articleAuthorName %}{%- set articleAuthorName = system.SiteName -%}{%- endif %}