KEEL · 龙骨 · A CURRICULUM FOR THE AI ERA

08 · 长期运维:让结果不退化 — keel 龙骨

本章目标:把前面七章的动作变成可重复执行的例行检查。 验收标准:有一份月度清单、一套告警,以及对"收录量"这个指标的持续记录。

本章目标:把前面七章的动作变成可重复执行的例行检查。
验收标准:有一份月度清单、一套告警,以及对"收录量"这个指标的持续记录。

SEO 不是一次性项目。做一次提交只是开始,真正决定结果的是接下来半年有没有稳定维护。这一章给出可执行的节奏与清单。


一、三个时间尺度的例行动作

每月一次(约 15 分钟)

# 1. 站点健康(上一门课第 08 章的 verify-site.sh)
./verify-site.sh

# 2. sitemap 抽样:随机 10 条,全部应为 200
grep -o '<loc>[^<]*</loc>' <(curl -s https://www.xxxxxx.cn/learning/sitemap.xml) \
  | sed 's/<[^>]*>//g' | shuf -n 10 \
  | while read -r u; do printf "%s " "$(curl -s -o /dev/null -w '%{http_code}' "$u")"; echo "$u"; done

# 3. 爬虫来访统计
grep -iE 'googlebot|bingbot|baiduspider|bytespider|GPTBot|ClaudeBot' \
  /var/log/nginx/learning.access.log \
  | grep -oiE 'Googlebot|Bingbot|Baiduspider|Bytespider|GPTBot|ClaudeBot' \
  | sort | uniq -c | sort -rn

# 4. 爬虫遇到的非 2xx
grep -iE 'googlebot|bingbot|baiduspider' /var/log/nginx/learning.access.log \
  | awk '$9>=400 {print $9}' | sort | uniq -c | sort -rn

记录爬虫抓取量这一列数字,它是趋势数据:抓取量持续上升通常先于收录量上升。

每季度一次(约 1 小时)

每半年一次


二、需要告警的三件事

不要靠"想起来才看"。配置外部监控,覆盖:

监控项 阈值 为什么
首页 HTTPS 可用性 连续 2 次失败告警 站点挂了而你不自知是最糟的情况
证书到期 到期前 21 天 上一门课第 08 章
sitemap 可访问性 返回非 200 告警 sitemap 挂了会让搜索引擎停止发现新内容

免费方案很多(UptimeRobot、Better Uptime、云厂商的站点监控)。重点是"告警要能到达你"——配了但从不看的通知等于没配。


三、唯一值得持续记录的指标:收录量

site:www.xxxxxx.cn

每月记录一次结果条数:

月份 site: 条数 GSC 已编入索引 备注
第 1 月 0 0 刚提交 sitemap
第 2 月 3 12 首批收录
第 3 月 47 88 长尾开始进
第 6 月 260 310 —

看的是趋势,不是绝对值。 两个月没有增长才需要介入排查;单周不动完全正常。

增速停滞时的排查顺序

  1. 日志:爬虫还来吗?抓取频率有没有下降?(第 05 章)
  2. sitemap:新增内容有没有进 sitemap?lastmod 有没有更新?(第 01 章)
  3. 质量信号:新页面是不是与已有页面重复?有没有真实增量?(第 06 章)
  4. 技术回归:有没有不小心加了 noindex?canonical 有没有漂移?(第 02 章)

绝大多数停滞都能在前两步找到原因。


四、发版时不要破坏 SEO 的四条约束

在部署流程里固定下来,比事后检查有效得多:

1. 发布内容后必须重新生成 sitemap 与预渲染 shell
内容变了但 sitemap 没变,等于告诉搜索引擎"没有新东西"。

2. URL 不要随意变更
必须改时:301 旧 → 新,同时更新 sitemap、canonical、内链。三处一起改,缺一会产生重复内容。

3. 不要在生产环境遗留 noindex
预发环境常带这个标记。在发布检查里加一条:

curl -s https://www.xxxxxx.cn/learning/ | grep -ci noindex || echo "OK"

4. 改前端源码后要确认线上真的更新了
一条真实教训:发布脚本只发布内容(Markdown → JSON),不传前端源码,于是本地改了元信息生成逻辑,线上仍是旧构建产物。

验证方法(抓版本特征,不要抓通用属性):

curl -s https://www.xxxxxx.cn/learning/ | grep -oE 'assets/[A-Za-z0-9._-]+\.js'

与本地 dist/assets/ 比对文件名。对不上说明线上是旧版本。


五、一份可以直接抄的月度清单

## 月度 SEO 检查(2026-__)

### 可用性
- [ ] verify-site.sh 全绿
- [ ] sitemap 抽样 10 条全 200
- [ ] 证书剩余天数 > 30

### 收录
- [ ] `site:www.xxxxxx.cn` 条数:____(上月:____)
- [ ] GSC 已编入索引:____(上月:____)
- [ ] GSC 未收录原因:无明显新增异常

### 爬虫
- [ ] Googlebot 抓取量:____(上月:____)
- [ ] Baiduspider 抓取量:____(上月:____)
- [ ] AI 爬虫抓取量:____(上月:____)
- [ ] 爬虫遇到的 404/5xx:____ 条(应接近 0)

### 一致性
- [ ] 抽 3 个页面:title / description / canonical / og:url 一致
- [ ] 无 noindex 残留
- [ ] 线上构建产物与本地一致(assets 文件名比对)

### 内容
- [ ] 本月新增内容已进 sitemap,lastmod 已更新
- [ ] 无新增孤儿页面

六、全课程收尾

到这里,两门课覆盖了从"买一个域名"到"半年后还能稳定增长"的完整链路。回过头看,真正决定成败的其实只有几件事:

  1. HTTPS 是前提 ——没有它,很多入口直接不可用
  2. 正文必须在 HTML 里 ——不执行 JS 的爬虫抓不到 SPA
  3. 必须主动提交 ——搜索引擎不会凭空发现新站点
  4. canonical 三处一致 ——sitemap / 页面标签 / 内链
  5. 用日志而不是感觉判断 ——"搜不到"有十几种原因,日志能一次定位

剩下的内容质量、内链、性能,都是在以上五条成立之后的增益项。

最后一句:不要用"搜原文"判断收录,用 site: 查询。
原文搜不到有两种完全不同的原因(没收录 vs 排名靠后),混淆它们会导致你把时间花在错误的地方。

进入 keel 阅读