ThinkWo 开发文档DOCS v1.0.45
快速开始
文档首页 / 运营维护 / SEO 运维

SEO 运维

这套系统的 SEO 不是"装个插件"级别的,而是写在架构里:服务端直出、干净 URL、子目录多语言、结构化数据全部自动输出。你要做的只是"填对字段 + 别踩坑"。

一、系统内置了什么

能力默认状态说明
服务端直出 HTML始终不用 SPA,爬虫拿到的是完整内容
干净 URL始终/en/products/cnc-housing.html,无 ?id=
canonical 自指始终每个页面自动输出;支持栏目/内容单独覆盖
hreflang 互指多语言时含 x-default,指向默认语言版本
JSON-LD 结构化数据始终Organization / WebSite+SearchAction / BreadcrumbList / Product / Article / FAQPage
分语言 sitemap开启/sitemap.xml 是索引,/sitemap-en.xml 是单语言
robots.txt动态生成自动带 Sitemap 声明
真 404始终不存在的 URL 返回 HTTP 404 + 主题 404 页,不是 200 软 404
301 跳转表可配后台维护,老站链接迁移不丢权重
静态化 HTML开启整页缓存,TTFB 从 80ms 降到 5ms 级
图片优化上传即做转 WebP + 三尺寸 + 页面输出 width/height(防 CLS)
noindex 控制按内容内容可单独勾选 noindex(草稿、感谢页等)

二、每个页面输出什么

标题规则

<title>{页面标题} | {站点名称}</title>
优先级取值来源
1(最高)内容 / 栏目的 seo_title 字段
2内容 / 栏目的 title 或 name
3(兜底)站点设置里的 site_title

拼接格式可在后台改:站点设置 → seo_title_format,默认 {title} | {site_name}。首页不拼接,直接用 seo_index_title。

描述与关键词

URL 别名(slug)怎么生成

栏目和内容都有一个「URL 别名」字段,它直接决定页面地址。留空时系统自动生成,按外贸 SEO 规则处理:

顺序处理方式举例
1手工填了别名只保留 a-z 0-9 -,大写转小写,空格与下划线转 -,其余字符剔除
2标题含中文 → 自动译成英文再 slug 化「钕铁硼强磁 N35」→ neodymium-magnet-n35
3翻译不可用 → 中文转拼音「联系我们」→ lian-xi-wo-men
4以上都不行 → 哈希兜底p143535addb(保证唯一、不报错,但不建议留着)
https://site.com/en/products/neodymium-magnet-n35.html
https://site.com/en/news/how-to-choose-magnet-grade.html
为什么坚持英文短横线

Google 把 URL 里的关键词当作弱排名信号,也会在结果页把 URL 显示给用户。 拼音对海外买家完全不可读(lian-xi-wo-men 不如 contact-us), 所以系统优先译英;确实没有翻译引擎时才退回拼音,请人工改成英文。

改 slug = 换 URL

已收录的页面改别名等于换地址,旧地址会 404 掉权重。改之前先在「301 跳转」里加一条旧 → 新的映射。 另:同一语言下 slug 必须唯一,重复时系统会自动加后缀。

hreflang 怎么配对

栏目表和内容表都有一个 trans_key 字段。两个语言的"同一篇内容"填相同的 trans_key,系统就会自动生成互指的 hreflang 并补上 x-default。

<link rel="alternate" hreflang="en" href="https://site.com/en/products/cnc-housing.html">
<link rel="alternate" hreflang="zh-CN" href="https://site.com/zh-cn/products/cnc-housing.html">
<link rel="alternate" hreflang="x-default" href="https://site.com/en/products/cnc-housing.html">
hreflang 三条铁律

① 必须**互指**(A 指向 B,B 也要指向 A);② 必须**包含自身**;③ 必须有 x-default。系统已自动处理,你只要保证 trans_key 成对填写。

三、结构化数据

类型输出位置来源
Organization全站站点设置:公司名、logo、电话、邮箱、地址、社交链接
WebSite + SearchAction首页自动(站内搜索框)
BreadcrumbList内页面包屑数据自动转换
Product + Offer产品详情型号、价格、货币、库存状态
Article新闻/博客详情标题、图片、发布时间、作者
FAQPage手动Seo::faq(),插件或自定义模板调用

验证方式:Google 富媒体结果测试(search.google.com/test/rich-results)粘贴 URL,或浏览器查看源码搜 application/ld+json。

Product 结构化数据最容易出错的两处

价格必须是数字(不要带 $ 与千分位逗号);priceCurrency 必须与站点货币一致(后台设置 currency,默认 USD)。

四、静态化缓存

开启后,第一次访问生成 HTML 存到 runtime/html/{语言}/{hash}.html,后续访问直接输出文件,不查库、不渲染模板。

配置项默认说明
开关开后台 SEO 工具里一键切换
有效期 TTL3600 秒config/tw.php 的 html_cache.ttl,0 表示永久
排除路径search / message / api / captcha这些页面不缓存(有表单或随机内容)
带参数页面不缓存避免 ?page= 参数污染缓存

怎么确认命中了

浏览器 F12 → Network → 刷新首页 → 看响应头有没有 X-TW-Cache: HIT(未命中是 MISS 或没有该头)。也可以在 SEO 工具页看"缓存页面数"。

什么时候必须清缓存

入口:后台右上角「清缓存」或 SEO 工具 → 清理静态化缓存。按语言清理用 HtmlCache::clearLang('zh-cn')。

五、301 跳转

后台 → SEO 工具 → 301 跳转,一条记录四件事:

字段说明
来源路径老 URL 的路径部分,如 /old-products.html(不要写域名)
目标路径新 URL,可写站内路径或完整外链
状态码301 永久(推荐)/ 302 临时
状态启用 / 停用

命中顺序:请求进来 → 先查跳转表 → 再查静态化缓存 → 再走正常分发。所以跳转永远优先,且跳转本身不缓存。

老站迁移的正确姿势

逐条对应"老 URL → 新 URL",不要把老站所有页面 301 到首页(Google 判定为软 404,等于放弃这些页面的权重)。批量导可以用 SQL 直接写 tw_redirect 表。

六、sitemap 与 robots

地址内容
/sitemap.xml索引文件,列出各语言的子 sitemap
/sitemap-en.xml英文站全部栏目页 + 内容页(含 lastmod 与 priority)
/sitemap-zh-cn.xml中文站同上
/robots.txt动态生成,含 Sitemap: 声明;后台可关闭

提交入口:Google Search Console → 站点地图 → 填 sitemap.xml;Bing Webmaster 同理。提交索引文件即可,子文件会自动被发现。

七、多语言 SEO 要点

  1. 用子目录,不用子域名:/zh-cn/ 能继承主域权重,zh.site.com 等于从零开始
  2. 每语言独立内容,不要机翻整站:Google 对低质量翻译的容忍度极低
  3. 语言代码规范:en、zh-cn、de、ar;hreflang 用 zh-CN 这种带地区的格式(系统按语言的 region 字段输出)
  4. URL 结构一致:两种语言的 slug 可以不同,但层级要一致(/en/products/xxx.html ↔ /zh-cn/products/xxx.html)
  5. RTL 语言(阿拉伯语/希伯来语)会自动输出 dir="rtl",主题 CSS 要用逻辑属性(margin-inline-start 而不是 margin-left)

八、上线 SEO 检查清单

技术层

内容层

上线后

九、常见 SEO 错误

错误后果 / 修正
所有页面 title 一样系统会按页面取,但如果栏目都留空,就全用全站默认 → 逐栏目填 seo_title
空列表页被收录Google 判低质 → 给空栏目加 noindex 或先不发布
分页页 index,follow 且 canonical 指向第一页正确做法:分页页 canonical 自指(系统已这样做)
机翻内容全站铺开极易被判 spam → 至少保证核心产品页人工翻译
sitemap 里混入 noindex 页面系统已过滤草稿与 noindex,别手工改
老站直接换域名不做 301权重清零 → 用跳转表逐条映射
静态化开了但改内容不清理用户和爬虫看到的都是旧内容 → 后台改完就点清缓存

十、版本与升级

框架与后台 UI 都是新版本,不需要定期升级。真遇到更新时:

组件当前怎么办
ThinkPHP8.1.4(已是最新稳定)8.1.x 小版本可跟,替换 vendor/topthink/framework 后重建 autoload;8.2 以上主版本不升
LayUI2.12.0整目录替换 public/static/layui 即可;2.13 有 element 拆分破坏性变更,升级后必须验证后台菜单与表单
  1. 先备份(目录 + 数据库)
  2. 在测试站升级,跑一遍:首页 / 列表 / 详情 / 搜索 / 询盘 / 后台登录 / 上传 / 静态化
  3. 无误后再动正式站;出问题用备份回滚
一句话

能用就别升。升级的唯一理由是安全补丁或你需要的新特性。

ThinkWo CMS v1.0.45 开发文档 · 基于 ThinkPHP 8.1.4 + LayUI 2.12 · 文档随代码更新