AnQiCMS作为一款高度注重SEO优化的内容管理系统,为网站内容的搜索引擎表现提供了强大的支持。其中,TDK(Title、Description、Keywords,即标题、描述、关键词)是SEO优化的核心要素,正确地在网站模板中显示这些信息对于提升网站在搜索引擎中的可见度至关重要。本文将详细介绍如何在AnQiCMS模板中有效地显示这些TDK信息。

TDK信息的重要性与设置位置

在网站开发和内容运营中,TDK信息是直接向搜索引擎传达页面主题、内容摘要和核心关键词的重要元数据。它们通常放置在HTML页面的<head>标签内,对网站的排名和点击率有着直接影响。

在AnQiCMS中,TDK信息的设置非常灵活,涵盖了全局、分类、单页面、文章及标签等多个层面:

  1. 全局TDK设置(首页TDK): 这是网站层面的TDK,主要用于网站首页。您可以在AnQiCMS后台的“后台设置” -> “首页TDK设置”中进行配置,包括首页标题、首页关键词和首页描述。
  2. 内容级别的TDK设置:
    • 文章/产品详情页: 在发布或编辑文章/产品时,可以在“添加文档”或“编辑文档”界面中找到“SEO标题”、“文档关键词”和“文档简介”字段。其中,“文档简介”在未设置时会自动提取内容前150字作为描述。
    • 分类页: 在“文档分类”管理中,编辑分类时可以设置“SEO标题”、“关键词”和“分类简介”。“分类简介”同样会作为描述信息。
    • 单页面: 在“页面管理”中,编辑单页面时可以设置“SEO标题”、“关键词”和“单页面简介”。
    • 标签页: 在“文档标签”管理中,编辑标签时可以设置“SEO标题”、“标签关键词”和“标签简介”。

这种多层级的设置方式,确保了每个页面都能拥有最精准、最相关的TDK信息,从而提升SEO效果。

在AnQiCMS模板中显示TDK信息

AnQiCMS的模板系统基于类似Django的语法,使用双花括号{{变量}}来输出变量,使用单花括号和百分号{% 标签 %}来调用功能标签。显示TDK信息主要有两种方式:使用万能tdk标签或直接访问页面对象属性。

1. 推荐使用万能tdk标签

AnQiCMS提供了一个非常方便且强大的tdk万能标签,它可以根据当前页面的类型(首页、分类页、详情页等)自动获取并显示最合适的TDK信息。这大大简化了模板代码,避免了复杂的条件判断。

该标签通常用在HTML页面的<head>部分。以下是其主要用法:

  • 页面标题 (<title>标签)

    <title>{% tdk with name="Title" siteName=true sep=" - " %}</title>
    

    这里,name="Title"表示获取页面标题。 siteName=true会附加网站名称到标题后面,例如“页面标题 - 网站名称”。这对于品牌曝光非常有用。 sep=" - "可以自定义标题和网站名称之间的分隔符,默认为-showParent=true可以用于分类页等,显示父级分类的标题。

  • 页面关键词 (<meta name="keywords">标签)

    <meta name="keywords" content="{% tdk with name="Keywords" %}">
    

    name="Keywords"将获取当前页面的关键词。

  • 页面描述 (<meta name="description">标签)

    <meta name="description" content="{% tdk with name="Description" %}">
    

    name="Description"将获取当前页面的描述。需要注意的是,当页面描述可能包含HTML标签时(例如从内容简介中提取),为了避免页面渲染错误,通常需要配合safe过滤器使用:{% tdk with name="Description" %}{{description|safe}}。但tdk标签通常会自动处理这类转义,因此直接使用即可。

  • 页面的规范链接 (<link rel="canonical">标签): 规范链接对于避免重复内容、整合页面权重非常重要。

    {%- tdk canonical with name="CanonicalUrl" %}
    {%- if canonical %}
    <link rel="canonical" href="{{canonical}}" />
    {%- endif %}
    

    这里使用了一个条件判断,只有当规范链接存在时才输出,避免输出空的canonical标签。

完整示例(base.html或相应模板的<head>区域)

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    {# 显示页面标题,并附加网站名称 #}
    <title>{% tdk with name="Title" siteName=true sep=" - " %}</title>
    {# 显示页面关键词 #}
    <meta name="keywords" content="{% tdk with name="Keywords" %}">
    {# 显示页面描述 #}
    <meta name="description" content="{% tdk with name="Description" %}">
    {# 显示规范链接,如果存在的话 #}
    {%- tdk canonical with name="CanonicalUrl" %}
    {%- if canonical %}
    <link rel="canonical" href="{{canonical}}" />
    {%- endif %}
    {# 其他SEO元标签,如多语言hreflang #}
    {%- languages websites %}
    {%- for item in websites %}
    <link rel="alternate" href="{{item.Link}}" hreflang="{{item.Language}}">
    {%- endfor %}
    {%- endlanguages %}
    {# 可以在这里引入CSS文件 #}
    <link href="{% system with name="TemplateUrl" %}/css/style.css" rel="stylesheet">
</head>
<body>
    {# 网站内容 #}
</body>
</html>

使用tdk标签的好处在于,它会智能地按照AnQiCMS后台设置的优先级(内容详情页TDK > 分类/单页面/标签页TDK > 全局TDK)自动选择并输出最精确的TDK信息,无需您在模板中手动编写复杂的逻辑。

2. 特定内容页面直接访问对象属性

在文章详情页、分类页、单页面或标签页等特定类型的页面中,您可以直接访问当前页面的对应数据对象(如archivecategorypagetag)的TDK相关属性。这种方式适用于您需要更精细地控制或组合TDK信息,或者当tdk标签无法满足特定需求时。

  • 文章/产品详情页: 在文章(archive)或产品