在thinkphp中通过config/seo.php统一配置tdk占位符结构,控制器assign动态变量,模板中用str_replace替换占位符生成最终tdk,确保seo友好且维护成本低。

在ThinkPHP项目中实现页面TDK(Title、Description、Keywords)动态拼接,需避开模板硬编码和控制器重复赋值,确保SEO友好且维护成本低。
统一入口配置TDK基础字段
在应用公共配置文件config/seo.php中定义默认TDK结构,避免每个控制器手动写死。该文件需返回关联数组,键名为title、description、keywords,值支持占位符如{site_name}、{page_title}。
这一步必须做,否则后续动态拼接将失去统一基准,不同模块标题风格混乱、关键词重复率高。
创建config/seo.php,内容为:
return [
'title' => '{page_title} - {site_name}',
'description' => '{page_desc} | {site_name}提供专业服务',
'keywords' => '{page_keywords}, {site_name}'
];
控制器中注入动态变量并渲染
在具体控制器方法内,通过view()->assign()向模板传递实际变量值,而非拼接后的完整字符串。ThinkPHP会自动替换配置中的占位符。
方法一:使用assign批量传参
→ 在控制器action中调用 $this->assign('page_title', '用户中心')->assign('page_desc', '管理您的账户信息')->assign('page_keywords', '账号,安全,绑定');
方法二:构造关联数组一次性赋值
→ $seoData = ['page_title' => '订单详情', 'page_desc' => '查看2024年最新订单状态与物流信息', 'page_keywords' => '订单查询,物流跟踪,支付记录'];
→ $this->assign($seoData);
【page_title必须非空,否则title字段将残留{page_title}占位符,搜索引擎抓取时显示异常】
模板中调用最终TDK内容
第一步:在模板头部引入SEO配置
{php}$seo = config('seo');{/php}
第二步:逐项解析并替换占位符
{foreach name="seo" item="v" key="k"}
{php}$v = str_replace(['{site_name}', '{page_title}', '{page_desc}', '{page_keywords}'], [config('app.name'), $page_title ?: '', $page_desc ?: '', $page_keywords ?: ''], $v);{/php}
{if $k === 'title'}
{if $k === 'description'}{/if}
{if $k === 'keywords'}{/if}
{/foreach}
这一步操作起来很简单,直接把上述代码块复制进template/layout/base.html的区域即可生效。注意不要漏掉{php}标签闭合,否则模板解析失败。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











