前言
PbootCMS 的 SEO 信息体系由站点基础信息和标题样式规则两层构成。很多站长在使用过程中对标题的生成逻辑存在误解,比如"首页标题无法自定义""副标题不写会不会出现多余横线""栏目没填关键词会不会空着"等问题。
本文从源码层面拆解 PbootCMS 标题、Keywords、Description 的完整生成规则,配合后台实际配置界面,帮你彻底搞懂每一处配置的作用。

一、站点基础 SEO 信息设置
入口:后台 → 内容管理 → 站点信息
这是全站 SEO 的基石,所有页面的关键词和描述最终都会回退到这里。
字段 | 模板标签 | 说明 |
|---|---|---|
站点标题 |
| 网站名称,如"PbootBiz" |
站点副标题 |
| 网站 slogan,如"PbootCMS建站资源与开发工具" |
关键词 |
| 全站默认关键词,逗号分隔 |
描述 |
| 全站默认描述,建议 80-120 字 |
关键点: 站点副标题不是必填项。如果不填写,系统会自动处理标题拼接时的多余横线(详见第三节)。
二、标题样式配置:各页面标题生成规则
入口:后台 → 系统配置 → 标题样式
这个页面允许你为不同类型的页面分别定义标题格式。所有输入框均支持使用动态标签组合,留空则使用系统默认规则。
2.1 首页标题
配置项:index_title
源码逻辑(IndexController.php 第258行):
$content = str_replace('{pboot:pagetitle}',
$this->config('index_title') ?: '{pboot:sitetitle}-{pboot:sitesubtitle}',
$content);规则说明:
填写了自定义标题 → 直接使用你填写的内容(支持动态标签)
留空 → 默认使用
站点标题-站点副标题
示例配置:
PbootBiz - PbootCMS建站资源与开发工具
关于"首页标题无法自定义"的说明: 早期部分教程或低版本可能给人造成首页标题只能用默认值的印象。实际上从 v3.x 开始,后台"标题样式"中的"首页"输入框就是专门用来自定义首页标题的,完全支持静态文本和动态标签组合。如果你发现首页标题改了没生效,请检查是否开启了静态缓存,更新缓存后再看。
2.2 列表页标题
配置项:list_title
源码逻辑(IndexController.php 第278-279行):
$pagetitle = $sort->title ? "{sort:title}" : "{sort:name}";
$content = str_replace('{pboot:pagetitle}',
$this->config('list_title') ?: ($pagetitle . '-{pboot:sitetitle}-{pboot:sitesubtitle}'),
$content);规则说明:
栏目设置了"自定义标题"(title字段) → 用
{sort:title}栏目没设置自定义标题 → 用栏目名称
{sort:name}留空默认格式:
栏目标题/栏目名 - 站点标题 - 站点副标题
示例配置:
{sort:title} - {pboot:sitetitle}2.3 内容页标题
配置项:content_title
源码逻辑(IndexController.php 第310行):
$content = str_replace('{pboot:pagetitle}',
$this->config('content_title') ?: '{content:title}-{sort:name}-{pboot:sitetitle}-{pboot:sitesubtitle}',
$content);规则说明:
留空默认格式:
内容标题 - 栏目名 - 站点标题 - 站点副标题这是默认标题最长的页面类型,SEO 上需要注意标题长度控制(建议不超过 60 个汉字)
示例配置:
{content:title} - {sort:name} - {pboot:sitetitle}2.4 单页/专题页标题
配置项:about_title
源码逻辑(IndexController.php 第341-342行):
$pagetitle = $sort->title ? "{sort:title}" : "{content:title}";
$content = str_replace('{pboot:pagetitle}',
$this->config('about_title') ?: ($pagetitle . '-{pboot:sitetitle}-{pboot:sitesubtitle}'),
$content);规则说明:
栏目设置了自定义标题 → 用
{sort:title}没设置 → 用单页内容标题
{content:title}留空默认格式:
栏目标题/内容标题 - 站点标题 - 站点副标题
2.5 其他页面标题
页面类型 | 配置项 | 默认行为 |
|---|---|---|
搜索结果页 |
| 搜索关键字 - 站点标题 - 站点副标题 |
会员注册页 |
| 系统默认 |
会员登录页 |
| 系统默认 |
个人中心页 |
| 系统默认 |
资料修改页 |
| 系统默认 |
其它页 |
| 系统默认 |
三、副标题为空时的自适应机制(核心亮点)
这是 PbootCMS 设计得比较贴心的一个细节,很多人不知道它的存在。
源码位置:ParserController.php 第218-223行
// 页面自适应标题避免多横线
if (preg_match($pattern, $content)) {
$data = $this->model->getSite();
if (!$data->subtitle) {
$content = str_replace('{pboot:sitetitle}-{pboot:sitesubtitle}', '{pboot:sitetitle}', $content);
}
}工作原理:
系统检测到模板中存在
{pboot:sitetitle}-{pboot:sitesubtitle}这样的组合查询站点副标题是否为空
如果副标题为空,自动把整个
站点标题-站点副标题组合替换成只有站点标题最终输出不会出现
PbootBiz-这种带尾巴横线的难看标题
这意味着:
副标题写了 → 标题显示为
站点标题-站点副标题副标题没写 → 标题自动显示为
站点标题,不会有多余横线这个自适应对所有页面的默认标题规则都生效
四、Keywords 与 Description 的三级继承规则
PbootCMS 的关键词和描述采用逐级回退机制,确保任何页面都不会出现空的 keywords 和 description。
4.1 首页
源码逻辑: 首页直接使用站点全局设置的 keywords 和 description,没有单独的页面级覆盖。
首页 keywords = 站点关键词 首页 description = 站点描述
4.2 列表页
源码位置:IndexController.php 第280-281行 + ParserController.php 第702-714行
// 控制器中指定
$content = str_replace('{pboot:pagekeywords}', '{sort:keywords}', $content);
$content = str_replace('{pboot:pagedescription}', '{sort:description}', $content);
// 标签解析时回退
case 'keywords': // 如果栏目关键字为空,则自动使用全局关键字
if ($sort->keywords) {
$content = str_replace($matches[0][$i], $sort->keywords, $content);
} else {
$content = str_replace($matches[0][$i], '{pboot:sitekeywords}', $content);
}
break;继承链:
列表页 keywords = 栏目关键词 ? 栏目关键词 : 站点关键词 列表页 description = 栏目描述 ? 栏目描述 : 站点描述
4.3 内容页
源码位置:IndexController.php 第311-312行 + ParserController.php 第4004-4016行
// 控制器中指定
$content = str_replace('{pboot:pagekeywords}', '{content:keywords}', $content);
$content = str_replace('{pboot:pagedescription}', '{content:description}', $content);
// 标签解析时回退
case 'keywords': // 如果内容关键字为空,则自动使用全局关键字
if ($data->keywords) {
$content = str_replace($search, $data->keywords, $content);
} else {
$content = str_replace($search, '{pboot:sitekeywords}', $content);
}
break;继承链:
内容页 keywords = 内容关键词 ? 内容关键词 : 站点关键词 内容页 description = 内容描述 ? 内容描述 : 站点描述
4.4 继承规则汇总表
页面类型 | Keywords 优先级 | Description 优先级 |
|---|---|---|
首页 | 站点关键词(唯一来源) | 站点描述(唯一来源) |
列表页 | 栏目关键词 → 站点关键词 | 栏目描述 → 站点描述 |
内容页 | 内容关键词 → 站点关键词 | 内容描述 → 站点描述 |
单页/专题页 | 内容关键词 → 站点关键词 | 内容描述 → 站点描述 |
注意: 内容页的 keywords/description 不会回退到栏目级,而是直接回退到站点级。这是 PbootCMS 当前版本的设计,如果你需要"内容→栏目→站点"三级回退,需要通过二开或插件实现(详见本文后续插件方案思考)。
五、常用组合标签速查表
在"标题样式"配置中可以使用以下动态标签:
标签 | 含义 | 可用页面 |
|---|---|---|
| 站点标题 | 全部 |
| 站点副标题 | 全部 |
| 站点关键词 | 全部 |
| 站点描述 | 全部 |
| 栏目名称 | 列表页、内容页、单页 |
| 栏目自定义标题 | 列表页、内容页、单页 |
| 内容标题 | 内容页、单页 |
| 搜索关键字 | 搜索结果页 |
| 会员昵称 | 会员中心页面 |
六、实际配置示例与 SEO 最佳实践
6.1 推荐配置方案
以资源下载站为例,推荐如下配置:
页面 | 标题样式配置 | 效果示例 |
|---|---|---|
首页 |
| PbootBiz - PbootCMS建站资源与开发工具 |
列表页 |
| PbootCMS插件 - PbootBiz |
内容页 |
| 安全卫士插件 - 插件资源 - PbootBiz |
单页 |
| 关于我们 - PbootBiz |
搜索页 |
| 搜索结果 - PbootBiz |
6.2 SEO 最佳实践
标题长度控制:建议核心关键词前置,总长度不超过 60 个汉字(搜索引擎显示约 30 个汉字)
关键词分层:站点关键词放品牌词+核心业务词;栏目关键词放栏目主题词;内容关键词放文章长尾词
描述唯一性:每个内容页尽量单独填写 description,避免全站重复
副标题善用:副标题可以放 slogan 或核心业务描述,增强品牌识别
避免关键词堆砌:keywords 字段 3-5 个词即可,description 自然通顺地包含关键词
七、常见问题与注意事项
Q1:改了标题样式后前台不生效?
检查是否开启了静态缓存或模板缓存,到后台 → 系统配置 → 缓存配置中清理缓存
如果生成了静态 HTML,需要重新生成
Q2:副标题不写,标题后面会出现"-"吗?
不会。PbootCMS 内置了自适应处理,副标题为空时自动去掉横线和副标题部分
Q3:内容页没填关键词,会用栏目的关键词吗?
当前版本不会。内容页 keywords/description 为空时直接回退到站点级,跳过了栏目级。需要三级回退需二开或使用插件
Q4:首页标题可以用动态标签吗?
可以。首页标题输入框支持
{pboot:sitetitle}、{pboot:sitesubtitle}等所有站点级标签
Q5:栏目自定义标题在哪里设置?
后台 → 内容管理 → 栏目管理 → 编辑栏目 → SEO设置 → 标题(非"栏目名称"字段)
Q6:模板中标题、关键词、描述用什么标签输出?
<title>{pboot:pagetitle}</title>
<meta name="keywords" content="{pboot:pagekeywords}">
<meta name="description" content="{pboot:pagedescription}">八、当前体系的不足与改进空间
通过源码分析,PbootCMS 现有 SEO 体系存在以下可改进点:
首页缺少独立的 keywords/description:首页只能用全局站点的,无法针对首页单独优化
内容页缺少栏目级回退:内容关键词为空时直接跳到站点级,浪费了栏目关键词这一层
缺少标题长度预警:后台没有标题字数统计和超长提醒
缺少批量编辑能力:无法批量设置栏目/内容的 SEO 信息
缺少 SEO 诊断:没有自动检测空描述、重复标题、关键词堆砌等问题
本文基于 PbootCMS v3.2.14 源码整理,不同版本可能存在细微差异,以实际源码为准。