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 小时)
- GSC「网页」报告:已编入索引数量、未收录原因分类有没有变化
- 处理"已排除"类问题(重复、被 robots 屏蔽、重定向)
- 检查是否有新产生的死链(改过 URL 但忘了更新 sitemap/内链)
- 抽查 5 个重点页面的 title/description/canonical 是否仍然一致
- 看一次「核心网页指标」的现场数据是否退化
每半年一次
- 证书状态与续期流程(上一门课第 08 章)
- 站定结构与 URL 是否有调整需求(如需调整,务必 301 并同步 sitemap)
- 回顾内容质量:有没有该合并的近义页面、该删除的过时内容
- 重新审视 robots.txt 对 AI 爬虫的策略
二、需要告警的三件事
不要靠"想起来才看"。配置外部监控,覆盖:
| 监控项 | 阈值 | 为什么 |
|---|---|---|
| 首页 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 | — |
看的是趋势,不是绝对值。 两个月没有增长才需要介入排查;单周不动完全正常。
增速停滞时的排查顺序
- 日志:爬虫还来吗?抓取频率有没有下降?(第 05 章)
- sitemap:新增内容有没有进 sitemap?lastmod 有没有更新?(第 01 章)
- 质量信号:新页面是不是与已有页面重复?有没有真实增量?(第 06 章)
- 技术回归:有没有不小心加了
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 已更新
- [ ] 无新增孤儿页面
六、全课程收尾
到这里,两门课覆盖了从"买一个域名"到"半年后还能稳定增长"的完整链路。回过头看,真正决定成败的其实只有几件事:
- HTTPS 是前提 ——没有它,很多入口直接不可用
- 正文必须在 HTML 里 ——不执行 JS 的爬虫抓不到 SPA
- 必须主动提交 ——搜索引擎不会凭空发现新站点
- canonical 三处一致 ——sitemap / 页面标签 / 内链
- 用日志而不是感觉判断 ——"搜不到"有十几种原因,日志能一次定位
剩下的内容质量、内链、性能,都是在以上五条成立之后的增益项。
最后一句:不要用"搜原文"判断收录,用 site: 查询。
原文搜不到有两种完全不同的原因(没收录 vs 排名靠后),混淆它们会导致你把时间花在错误的地方。