在当今竞争激烈的网络环境中,让网站内容在搜索引擎结果页面(SERP)中脱颖而出至关重要。结构化数据,尤其是 JSON-LD 格式,正是实现这一目标的关键工具。它帮助搜索引擎更好地理解页面内容,从而有机会展示更丰富、更吸引人的“富媒体摘要”(Rich Snippets),例如文章的发布日期、作者、评分、产品价格等,这些都能显著提升点击率。
作为安企CMS(AnQiCMS)的用户,我们拥有强大的灵活性来优化网站的搜索引擎展示。安企CMS 在设计之初就非常注重 SEO 友好性,内置了许多高级 SEO 工具,包括 Sitemap 生成、关键词库管理、伪静态规则等。而在结构化数据方面,安企CMS 同样提供了便捷的自定义功能,让我们能够根据网站的实际内容,精确地告诉搜索引擎我们的页面究竟是关于什么的。
认识安企CMS中的JSON-LD功能
安企CMS 会在页面中自动生成一些基础的结构化数据,以确保网站的搜索引擎友好度。然而,对于希望在 SERP 中获得更具体、更丰富的展示效果的用户来说,仅仅依靠默认设置可能还不够。这时,自定义 JSON-LD 就显得尤为重要。
安企CMS 提供了一个非常直观的 {% jsonLd %} 模板标签,它允许我们在网站模板中嵌入自己的 JSON-LD 代码。这个标签的强大之处在于,它不仅能够让我们完全自定义结构化数据,还会与安企CMS 自身生成的默认数据进行智能合并。这意味着,如果我们的自定义代码与系统默认生成的代码有冲突,自定义代码会优先覆盖默认值,从而实现精细化的控制。
核心理念是利用安企CMS 强大的模板标签系统,动态地从网站内容中提取信息,然后将这些信息填充到 JSON-LD 结构中。这样一来,无论内容如何更新,结构化数据都能保持最新,无需手动修改每一页的代码。
如何为不同类型的内容自定义JSON-LD
自定义 JSON-LD 的过程通常涉及到在页面的 <head> 区域添加一个 <script type="application/ld+json"> 块。在安企CMS 中,我们可以在模板文件的 {% jsonLd %} 标签内部完成这一切。
1. 针对文章(Archive)页面
文章是最常见的内容类型之一,通常适用于 Article 或 BlogPosting 类型的 Schema。为了让文章在搜索结果中显示作者、发布日期、图片等信息,我们可以这样构建 JSON-LD:
{% jsonLd %}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "{{ archive.Link }}"
},
"headline": "{{ archive.Title }}",
"image": [
"{{ archive.Logo }}"
],
"datePublished": "{{ stampToDate(archive.CreatedTime, "2006-01-02T15:04:05Z07:00") }}",
"dateModified": "{{ stampToDate(archive.UpdatedTime, "2006-01-02T15:04:05Z07:00") }}",
"author": {
"@type": "Person",
"name": "{% system with name='SiteName' %}" {# 或者从contact标签获取作者信息 #}
},
"publisher": {
"@type": "Organization",
"name": "{% system with name='SiteName' %}",
"logo": {
"@type": "ImageObject",
"url": "{% system with name='SiteLogo' %}"
}
},
"description": "{{ archive.Description|truncatechars:150|replace:'"','\\"'|safe }}" {# 描述字段可能包含引号,需要转义 #}
}
</script>
{% endjsonLd %}
这里我们使用了 archiveDetail 标签隐含获取当前文章的 Title、Link、Logo、CreatedTime 和 UpdatedTime。stampToDate 函数将时间戳转换为符合 Schema 要求的 ISO 8601 格式。对于作者和发布者信息,我们则可以利用 system 标签获取网站名称和 Logo。archive.Description 字段可能会比较长或者包含 HTML 标签,使用 truncatechars:150 截断,replace:'"','\\"' 处理双引号转义,|safe 确保内容作为字符串输出。
2. 针对产品(Product)页面
如果是展示产品的页面,我们可以使用 Product 类型的 Schema,并包含价格、库存、品牌等详细信息:
{% jsonLd %}
<script type="application/ld+json">
{
"@context": "https://schema.org/",
"@type": "Product",
"name": "{{ archive.Title }}",
"image": [
"{% if archive.Images %}{{ archive.Images[0] }}{% else %}{{ archive.Logo }}{% endif %}"
],
"description": "{{ archive.Description|truncatechars:150|replace:'"','\\"'|safe }}",
"sku": "{% archiveDetail with name='SKU' %}", {# 假设SKU是自定义字段 #}
"brand": {
"@type": "Brand",
"name": "{% archiveDetail with name='Brand' %}" {# 假设Brand是自定义字段 #}
},
"offers": {
"@type": "Offer",
"url": "{{ archive.Link }}",
"priceCurrency": "USD", {# 假设货币为美元,可根据实际情况调整 #}
"price": "{% archiveDetail with name='Price' %}", {# 假设Price是自定义字段 #}
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/{% if archive.Stock > 0 %}InStock{% else %}OutOfStock{% endif %}"
}
}
</script>
{% endjsonLd %}
在产品页面,我们同样通过 archive 对象获取基本信息。对于 SKU、品牌、价格等,我们可以利用 {% archiveDetail with name='自定义字段名称' %} 或 {% archiveParams %} 标签来提取那些在安企CMS 后台内容模型中自定义的字段值。例如,如果产品模型中定义了 SKU 和 Brand 字段,我们就能直接调用。库存 archive.Stock 字段则可以用来判断产品的可用性。
3. 针对分类(Category)页面
分类页面通常是产品或文章列表,可以考虑使用 CollectionPage 或 ItemList 等 Schema 类型。这里我们以 CollectionPage 为例:
{% jsonLd %}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "CollectionPage",
"name": "{{ category.Title }}",
"description": "{{ category.Description|truncatechars:150|replace:'"','\\"'|safe }}",
"url": "{{ category.Link }}",
"image": {
"@type": "ImageObject",
"url": "{% if category.Logo %}{{ category.Logo }}{% else %}{% system with name='SiteLogo' %}{% endif %}"
}
}
</script>
{% endjsonLd %}
在这里,category 对象可以轻松提供分类的 Title、Description 和 Link。如果分类有自己的 Logo,我们就使用它,否则可以退回到网站的默认 Logo。
4. 针对首页(Homepage)
首页作为网站的门户,通常适合使用 WebSite 和 Organization Schema 来描述网站的基本信息和搜索功能:
{% jsonLd %}
<script type="application/ld+json">
[
{
"@context": "https://schema.org",
"@type": "WebSite",
"url": "{% system with name='BaseUrl' %}",
"name": "{% system with name='SiteName' %}",
"potentialAction": {
"@type": "SearchAction",
"target": "{% system with name='BaseUrl' %}/search?q={search_term_string}",
"query-input": "required name=search_term_string"
}
},
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "{% system with name='SiteName' %}",
"url": "{% system with name='BaseUrl' %}",
"logo": "{% system with name='SiteLogo' %}"
}
]
</script>
{% endjsonLd %}
首页的 JSON-LD 通常会包含 WebSite 类型来定义站点的搜索功能,以及 Organization 类型来描述网站所属的机构。这些信息都可以通过 system 标签轻松获取。
部署与**实践
- 确定模板位置: JSON-LD 代码通常应放置在页面的
<head>