作为一名资深的网站运营专家,我深知在当今搜索引擎优化(SEO)日益精细化的背景下,结构化数据,特别是Json-LD,对网站内容可见性和丰富结果呈现的重要性。安企CMS(AnQiCMS)作为一个高效灵活的内容管理系统,自然也为我们提供了强大的工具来实现这一目标。

今天,我们就来深入探讨一个在实际运营中经常会遇到的问题:“Json-LD自定义标签是否支持从diy自定义内容标签获取数据?”简而言之,答案是肯定的。安企CMS的设计哲学就是灵活性和可定制性,其模板引擎允许标签的嵌套使用,从而实现更复杂、更动态的数据集成。

Json-LD的重要性与安企CMS的灵活基石

在深入细节之前,我们先来回顾一下Json-LD的价值。Json-LD是一种基于JSON格式的轻量级数据互联方法,它能帮助搜索引擎更好地理解网页内容的含义,例如一篇文章的作者、发布日期、产品价格、评论星级等。通过在网页中嵌入Json-LD代码,网站可以获得更丰富的搜索结果展示(Rich Snippets),从而提高点击率,增加流量。

安企CMS作为一款基于Go语言开发的CMS,其强大的内容模型、自定义字段以及类Django的模板引擎语法,为我们提供了高度定制化的内容发布能力。无论是全局的系统设置(如公司联系方式)、特定内容模型(如文章或产品)的自定义属性,还是通用性的自定义内容(通过diy标签管理),AnQiCMS都能通过其内置的模板标签轻松调用。这种数据调用的灵活性,正是我们实现动态Json-LD结构化数据的关键。

探究Json-LD自定义标签

安企CMS内置了jsonLd自定义标签,允许我们在模板中直接定义Json-LD代码块。其基本使用方式如文档所示:

{% jsonLd %}
<script type="application/ld+json">
{
	"author": "AnQiCMS",
	"image": [
		"https://www.anqicms.com/anqicms.png"
	]
}
</script>
{% endjsonLd %}

这个标签的巧妙之处在于,它不仅仅是简单地输出静态JSON-LD代码。文档中提到,“你只需要在包裹的内容中{...}里写上你需要自定义的字段即可,安企CMS会自动合并处理它们的数据,如果你定义的字段和默认的字段有冲突,则默认的字段会被覆盖。” 这句话暗示了其内部处理的动态性,即它能够解析并合并我们提供的内容。

而安QiCMS模板引擎的强大之处在于,它支持标签的嵌套使用。这意味着,我们完全可以在jsonLd标签内部的<script>块中,继续使用其他的AnQiCMS模板标签来动态地获取数据。

diy自定义内容标签获取数据并融入Json-LD

diy自定义内容标签是AnQiCMS中一个非常实用的功能,它允许我们在后台灵活地添加全局或特定于站点的自定义参数,例如客服电话、公司统一邮箱、特定公告文本等。这些信息往往需要出现在网站的多个地方,包括Json-LD中。

假设我们在后台通过diy自定义内容设置了一个名为CustomerServicePhone的参数,用于存储公司的客服电话。如果我们希望在Json-LD中将网站标记为“Organization”类型,并包含这个客服电话,可以这样做:

{% jsonLd %}
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "{% system with name='SiteName' %}", {# 调用系统设置中的网站名称 #}
  "telephone": "{% diy with name='CustomerServicePhone' %}", {# 从diy自定义内容中获取客服电话 #}
  "url": "{% system with name='BaseUrl' %}" {# 调用系统设置中的网站基础URL #}
}
</script>
{% endjsonLd %}

在这个示例中,{% diy with name='CustomerServicePhone' %} 标签被巧妙地嵌入到了Json-LD的JSON结构中。当AnQiCMS渲染页面时,它会首先解析diy标签,获取到后台配置的客服电话,然后将该电话号码作为字符串插入到telephone字段的值中,最终生成完整的Json-LD代码。

内容模型自定义字段与Json-LD的结合

除了全局的diy标签,我们更常使用的是内容模型中的自定义字段。例如,一篇文章可能有自定义的“作者简介”字段,一个产品可能有“生产地”或“保质期”等自定义属性。这些信息都是Json-LD中非常重要的结构化数据。

假设我们有一个“文章模型”,其中包含一个自定义字段articleAuthor来存储文章作者的姓名,并且我们想在文章详情页的Json-LD中体现这一点:

{# 确保在文章详情页面的上下文中使用,以获取当前文档的数据 #}
{% archiveDetail currentArticle with name="Id" %} {# 确保我们处于文档详情页的正确上下文 #}
{% jsonLd %}
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "{% archiveDetail with name='Title' %}",
  "description": "{% archiveDetail with name='Description' %}",
  "image": "{% archiveDetail with name='Logo' %}",
  "datePublished": "{{ stampToDate(archive.CreatedTime, '2006-01-02T15:04:05-07:00') }}",
  "author": {
    "@type": "Person",
    "name": "{% archiveDetail with name='articleAuthor' %}" {# 假设articleAuthor是自定义字段 #}
  },
  "publisher": {
    "@type": "Organization",
    "name": "{% system with name='SiteName' %}",
    "logo": {
      "@type": "ImageObject",
      "url": "{% system with name='SiteLogo' %}"
    }
  }
}
</script>
{% endjsonLd %}

在这里,{% archiveDetail with name='articleAuthor' %} 直接从当前文章的自定义字段中提取作者姓名。同样的原理也适用于其他自定义字段,无论是文本、数字、链接还是图片URL。

如果自定义字段是多行文本或富文本,并且可能包含HTML标签,为了符合Json-LD纯文本值的要求,我们可能需要使用过滤器进行处理,例如striptags来移除HTML标签,或truncatechars来截断过长的文本,以避免Json-LD解析错误:

”`twig {# 假设自定义字段”产品亮点” (productHighlights)是一个富文本内容 #} {% archiveDetail productHighlights with name=“productHighlights” %} {% jsonLd %}