在网站内容日益丰富的今天,如何让搜索引擎更准确地理解网页内容,并以更友好的方式展示给用户,成为了网站运营的关键一环。结构化数据(通常采用Json-LD格式)正是实现这一目标的重要工具。通过在页面中嵌入Json-LD代码,我们可以为搜索引擎提供文章、产品、评论等各种内容的标准化信息,从而有机会获得更丰富的搜索结果展示,也就是我们常说的“富摘要”或“富结果”。
AnQiCMS作为一个专注于企业级内容管理的系统,深知SEO优化的重要性。它在设计之初就考虑到了结构化数据的应用,不仅内置了自动生成基础Json-LD的功能,更提供了灵活的方式让用户可以根据实际需求,在模板中自定义和调用后台配置的结构化数据,确保您的网站在搜索引擎中拥有**表现。
认识AnQiCMS的Json-LD处理机制
AnQiCMS在处理Json-LD结构化数据方面,提供了一个非常贴心的机制。当您在后台开启了结构化数据功能后,系统会默认在您网站的页面头部自动生成一份基础的Json-LD代码。这份代码通常会包含页面类型、URL、标题、描述等基本信息,这对于大多数网站来说已经足够应对日常的SEO需求。
然而,在某些场景下,您可能需要更精细地控制Json-LD的内容,比如为特定的文章类型定义更具体的Schema属性,或者补充一些AnQiCMS默认未涵盖的字段。AnQiCMS充分考虑了这种高级定制的需求,允许您在模板中手动介入,调用并扩展这些结构化数据。
在AnQiCMS模板中调用和自定义Json-LD
要在AnQiCMS模板中自定义Json-LD结构化数据,我们需要利用到一个专用的模板标签:{% jsonLd %}。这个标签的作用是作为一个容器,您可以在它的开始和结束标签之间,编写您自己的Json-LD代码。AnQiCMS的智能之处在于,它会将您自定义的Json-LD与系统默认生成的Json-LD进行合并。如果两者之间存在字段冲突,您自定义的字段将会覆盖系统默认的字段,从而让您拥有最终的控制权。
让我们通过一个简单的例子来理解这个过程。假设您想为某个页面添加一个自定义的作者信息,并指定一个特定的图片作为Json-LD的一部分:
{%- jsonLd -%}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebPage",
"name": "自定义页面名称,覆盖默认",
"description": "这是自定义的页面描述,会覆盖默认的页面描述。",
"author": {
"@type": "Organization",
"name": "AnQiCMS运营团队"
},
"image": [
"https://您的网站域名/static/images/custom-logo.png"
]
}
</script>
{%- endjsonLd -%}
在这段代码中,{%- jsonLd -%} 和 {%- endjsonLd -%} 包裹了我们自定义的 <script type="application/ld+json"> 标签。Json-LD代码本身遵循JSON语法,所以键值对、数组和对象都需要严格按照JSON格式书写。其中的 name 和 description 字段会覆盖系统默认生成的值,而 author 和 image 字段则会作为新增或更新的信息合并到最终的Json-LD数据中。使用 {%- 和 -%} 可以在标签两侧移除空白符,让生成的HTML更加紧凑。
结合实际内容进行动态调用
Json-LD的强大之处在于能够动态地反映页面内容的具体信息。在AnQiCMS中,我们可以结合其丰富的模板标签,将后台输入的文档标题、图片、发布时间等动态内容引入到Json-LD结构中,构建出更准确、更具有语义化的数据。
例如,我们希望在文章详情页中,为每篇文章生成一个符合 Article 类型的Json-LD数据,其中包含文章的标题、缩略图、发布时间、作者、描述等信息。我们可以这样实现:
{%- jsonLd -%}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "{{- archive.Title -}}", {# 调用当前文章标题 #}
"image": [
"{{- archive.Logo -}}" {# 调用当前文章封面首图 #}
],
"datePublished": "{{- stampToDate(archive.CreatedTime, "2006-01-02T15:04:05Z") -}}", {# 格式化文章创建时间为ISO 8601格式 #}
"dateModified": "{{- stampToDate(archive.UpdatedTime, "2006-01-02T15:04:05Z") -}}", {# 格式化文章更新时间 #}
"author": {
"@type": "Person",
"name": "{%- system with name='SiteName' -%}" {# 调用后台设置的网站名称作为作者 #}
},
"publisher": {
"@type": "Organization",
"name": "{%- system with name='SiteName' -%}", {# 调用后台设置的网站名称作为发布者 #}
"logo": {
"@type": "ImageObject",
"url": "{%- system with name='SiteLogo' -%}" {# 调用后台设置的网站Logo作为发布者Logo #}
}
},
"description": "{{- archive.Description | truncatechars:200 -}}", {# 调用文章简介,并截取前200字 #}
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "{{- archive.Link -}}" {# 调用文章链接 #}
}
}
</script>
{%- endjsonLd -%}
在这段代码中:
- 我们使用了
archive.Title、archive.Logo、archive.Description和archive.Link直接获取当前页面的文章标题、封面图、描述和链接。 stampToDate过滤器将Unix时间戳格式的archive.CreatedTime和archive.UpdatedTime转换成了Json-LD所需的ISO 8601格式("2006-01-02T15:04:05Z"是Go语言中用于格式化时间的一种特殊模板