TeoSeo :从推送工具到 SEO 三件套
TeoSeo 是本站自研的 Typecho 1.3 SEO 插件,一路小步快跑:
- v1.0(Typecho1.3SEO插件TeoSeo:自动 sitemap + 发布即推送):sitemap.xml + IndexNow + 百度推送,发布即推送,一个不落;
- v1.1:推送历史面板,每条推送成败都能查;
- v1.2.0(本次):AI 内容优化——发布文章自动生成摘要与关键词,前台输出 meta description / keywords / JSON-LD 结构化数据,存量文章一键批量生成。
也就是说,一篇文章的 SEO 三件套(meta 描述、关键词、结构化数据)现在全自动了。
适配说明:插件的 AI 摘要、前台 meta 输出与编辑页字段联动目前主要针对本站主题(Inaline)适配;其他主题的输出样式可能不同,如遇问题欢迎到 GitHub 反馈。
新功能一:发布即自动生成摘要与关键词
支持任意 OpenAI 兼容接口
插件走的是通用的 /chat/completions 协议,所以 DeepSeek、通义千问、智谱 GLM、Kimi、OpenAI 都行,换平台只改 BaseURL 和模型名,代码不用动。本站实测用 智谱:
BaseURL = https://open.bigmodel.cn/api/paas/v4
模型名 = glm-4-flash-250414设置页配置项
在「设置 → TeoSeo」里新增了一组 AI 配置:
| 配置项 | 说明 |
|---|---|
| AI 开关 | 关闭时不调用任何接口 |
| AI 接口 BaseURL | OpenAI 兼容接口地址 |
| API Key | 存在本地数据库,不经过第三方 |
| 模型名 | deepseek-chat / qwen-plus / glm-4-flash 等 |
| 摘要长度(字) | 默认 120,建议 80~200 |
| 请求超时(秒) | 默认 30,长文接口一般要 20~40 秒 |
| SSL 校验 | 默认严格校验;虚拟主机 CA 链残缺导致失败时勾选,自动降级重试一次 |
两个设计细节
① 生成不卡发布。 AI 接口再快也要几秒到几十秒,如果发布文章要干等,体验就毁了。插件把生成挂到请求收尾阶段(shutdown 阶段)异步执行:发布响应先返回,AI 结果写完字段,下次刷新面板就能看到。生成失败也静默记日志,不影响发布本身。
② 已有摘要不覆盖。 发布钩子只对没有摘要的文章生成,你手动写好的摘要不会被 AI 冲掉;真想要 AI 重写,面板上有「强制覆盖」按钮。
新功能二:存量文章批量生成
后台新增「TeoSeo → AI 内容优化」面板:未生成摘要的文章排前面,显示最近 50 篇,支持单篇生成、强制重新生成、一键批量生成。
批量生成的实现有点"笨"但很稳:每处理一篇就 302 跳转一次续跑。为什么不循环一把梭?Typecho 部署在不同环境(虚拟主机 / VPS / Docker)性能差异很大,加上各家 AI 接口普遍有速率限制,几十篇一起跑很容易超时或被限流;一篇一跳转是最土也最稳的办法,还能顺便看进度。连续失败的同一篇文章不会反复重试(last 守卫防死循环),每次批量上限 200 篇。


新功能三:前台 SEO 输出实测
文章页现在会自动输出三样东西:
meta name="description" → AI 摘要(没配 AI 时从正文截取)
meta name="keywords" → AI 生成的关键词
JSON-LD Article → 标题/发布时间/修改时间/作者/发布者/链接
截图是直接在线上文章页抓的,JSON-LD 的 headline、datePublished、mainEntityOfPage 都是真实数据,搜索引擎拿到的就是这份。
和 Inaline 主题的协同
Inaline 主题自带 seo_description / seo_keywords 自定义字段支持,会自己输出 meta description。如果插件再输出一遍就变成两条 description——插件在钩子里先检查主题是否已输出,有就让主题的留下,避免重复标签被搜索引擎嫌弃。正文截取摘要时也会先把 markdown 的行首 # 和行内 **、反引号去掉,description 里不会出现一坨符号。
版本细节:上线前修掉的三个坑
v1.2.0 最初版本来自 AI 辅助开发(opencode),检查后修了三处再上线:
- JSON-LD 注入风险:AI 生成的摘要是外部接口返回的不可信内容,如果里面混进
</script>会提前闭合标签变成注入点。补了JSON_HEX_TAG转义; - SSL 校验全关:原版为了兼容虚拟主机把 TLS 校验整个关了——API Key 是钱,不能裸奔。改成默认严格校验,勾选开关后才在失败时降级重试;
- 发布同步阻塞:原版发布时同步调 AI,改成了 shutdown 异步,见上文。
升级方式
线上已经升级到 v1.2.0(GitHub Astararry-1127/TeoSeo 的 Ai 分支,后续合入 main)。其他站点升级:把 Plugin.php、Client.php、ai.php 三个文件覆盖到 usr/plugins/TeoSeo/,然后停用再启用一次插件重建钩子(注意:启用前先清空 options.plugins 再激活,重复激活会把钩子注册两遍,我们线上就踩过这个坑,症状是 JSON-LD 输出两条)。
升级后到设置页保存一次配置,让 AI 配置项写入数据库,然后就可以在面板里批量生成了。
评论 (1)