在当今竞争激烈的网络环境中,让网站内容在搜索引擎结果页面(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)页面

文章是最常见的内容类型之一,通常适用于 ArticleBlogPosting 类型的 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 标签隐含获取当前文章的 TitleLinkLogoCreatedTimeUpdatedTimestampToDate 函数将时间戳转换为符合 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 后台内容模型中自定义的字段值。例如,如果产品模型中定义了 SKUBrand 字段,我们就能直接调用。库存 archive.Stock 字段则可以用来判断产品的可用性。

3. 针对分类(Category)页面

分类页面通常是产品或文章列表,可以考虑使用 CollectionPageItemList 等 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 对象可以轻松提供分类的 TitleDescriptionLink。如果分类有自己的 Logo,我们就使用它,否则可以退回到网站的默认 Logo。

4. 针对首页(Homepage)

首页作为网站的门户,通常适合使用 WebSiteOrganization 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 标签轻松获取。

部署与**实践

  1. 确定模板位置: JSON-LD 代码通常应放置在页面的 <head>