Files
SEONexus/docs/2026-04-17-spider-nginx-运维摘要.md

560 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2026-04-17 Spider / Nginx 运维摘要
## 接手前必读 5 条
任何新的 Codex / 运维 / 人工接手这一段工作前,先遵守这 5 条:
1. 先看当前线上复测,再看历史日志
2. 先确认真实路由,再判断是否还存在问题
3. 前端排障先看 `X-Cache-Status / X-Cache-Mode / X-Managed-Spider`
4. 不要把旧路径残留误判成前端蜘蛛拦截
5. 如果需要完整证据链,再去看:
[1270-SEONexus-Codex多版本协作交接总文档.md](/www/wwwroot/diff-maccms/SEONexus/docs/1270-SEONexus-Codex多版本协作交接总文档.md)
## 1. 当前结论
截至 `2026-04-17` 晚间,这轮前端 nginx 优化已经从“问题排查期”进入“效果验证期”。
当前更准确的整体判断:
1. `baiduspider`
- 恢复最好
- 首页、详情、播放均已有稳定 `200` 样本
2. `sogou`
- 正在恢复初期
- 历史累计仍有较多 `403`
- 但最新窗口已出现多个真实 `200` 深页样本
3. `bytespider`
- 目前仍主要停留在 `robots`
- 当前实测 `robots.txt` 已基本可通
- 但暂未进入 `managed spider` 标签链
## 2. 当前长期标准方案
前端 nginx 当前建议统一采用:
- [站点伪静态-受管蜘蛛放行版-动态页安全缓存.txt](/www/wwwroot/diff-maccms/前端站群服务器nginx配置/站点伪静态-受管蜘蛛放行版-动态页安全缓存.txt)
核心规则:
1. 搜索页 `/get-index``/get/index` 或对应搜索入口
- cache key 带 `$args`
2. 详情页 / 播放页 / 分类页 / 榜单页
- cache key 不带 `$args`
3. 所有动态页支持:
- `?__nocache=1`
4. 排障优先顺序:
- 先看 `X-Cache-Status`
- 再看 `X-Cache-Mode`
- 最后再决定是否需要清前端缓存
## 2.1 2026-04-17 晚间抽测补充
新增线上抽测结果:
1. `www.jpjdxs.com` 详情页、播放页
- `200`
- `X-Cache-Status: STALE`
- `X-Cache-Mode: path-only`
- `X-Managed-Spider: managed`
2. `www.lgyz.net` 详情页
- `200`
- `X-Cache-Status: STALE`
- `X-Cache-Mode: path-only`
- `X-Managed-Spider: managed`
3. `www.glae.cc` 首页Baiduspider
- `200`
- `X-Cache-Status: STALE`
- `X-Managed-Spider: managed`
4. `www.hyjssb.com` 搜索页 `/get/index?wd=test`
- `200`
- `X-Cache-Status: MISS`
- `X-Cache-Mode: path-only`
- `X-Managed-Spider: managed`
5. `www.hyjssb.com` 搜索页 `/get/index?wd=cachetest&__nocache=1`
- `200`
- `X-Cache-Status: BYPASS`
- `X-Cache-Mode: bypass`
- `X-Cache-Bypass: 1`
这一轮最重要的新结论:
1. 当前“受管蜘蛛放行 + 动态页缓存安全版”总体仍然生效
2. 但搜索页规则不能只匹配 `/get-index`
3. 至少部分站点真实搜索入口是 `/get/index`
4. 如果 nginx 只写 `/get-index`,这类站点搜索页仍会误走 `path-only`
### 2.2 搜索入口批量识别补充
补充做了一轮站点级搜索入口识别,当前得到的结论如下:
#### 已明确识别到真实入口
1. `www.jpjdxs.com`
- 首页直接识别到:`/get-index`
2. `www.jingxifa.com`
- 首页直接识别到:`/get-index`
3. `www.hyjssb.com`
- 首页直接识别到:`/get/index`
#### 首页未直接露出入口,但规则探测结果明确
下列站点对两个候选路径做了头部探测:
1. `www.lgyz.net`
2. `www.glae.cc`
3. `www.lcdchq.com`
4. `www.oronorent.com`
5. `www.cnzhenbang.com`
6. `www.vikau.com`
共同现象:
1. 访问 `/get-index?wd=test`
- 返回 `404`
-`X-Cache-Mode: with-args`
2. 访问 `/get/index?wd=test`
- 返回 `404`
-`X-Cache-Mode: path-only`
这个结果说明:
1. 当前前端模板已经把 `/get-index` 识别成“搜索页规则”
2. 没补兼容时,`/get/index` 仍会落回普通动态页规则
3. 所以正式模板同时兼容 `/get-index``/get/index` 是必要项,不是冗余项
### 2.3 最新日志窗口读取口径补充
`domain-spider-crawl` 这批 summary 文件当前已经出现结构切换:
1. 旧口径常看 `by_bot`
2. 新口径改成:
- `bot_buckets`
- `summary_status_buckets`
- `summary_records`
因此后续如果直接按旧脚本读取 `by_bot`,很容易误判成:
1. `latest` 没数据
2. `baiduspider / sogou / bytespider` 当天都是 0
这不一定是真的“没有样本”,而可能只是读取字段错了。
#### 当前已确认的最近窗口
1. `2026-04-17T17:30:02+08:00`
- `googlebot: 34`
- `sogou: 10`
- `bytespider: 6`
- `bingbot: 4`
- `baiduspider: 1`
- 状态桶:
- `444: 38`
- `200: 14`
- `301: 1`
- `403: 1`
- `404: 1`
2. `2026-04-17T17:50:02+08:00`
- 这波窗口又明显偏向:
- `googlebot: 33`
- `bingbot: 1`
- `bytespider: 1`
- `baiduspider: 1`
- 状态桶:
- `444: 35`
- `200: 1`
#### 当前结论
1. `latest` 仍然不能机械地当成“国内蜘蛛当前总貌”
2. 需要结合最近几个 run 一起看
3. 读取 summary 时,优先按新结构字段解析,不要再只认 `by_bot`
### 2.4 `17:30` 窗口国内蜘蛛明细补充
`2026-04-17T17:30:02+08:00` 这个窗口继续下钻后,国内蜘蛛样本可以直接拆成下面这样:
#### `sogou`
1. 总请求数:`10`
2. 状态分布:
- `200: 9`
- `404: 1`
3. 页面类型:
- `home: 4`
- `category: 2`
- `detail: 2`
- `play: 1`
- `other: 1`
命中的代表样本:
1. `www.jingxifa.com /video-detail/cheng-shi-jian-ke-190614 => 200`
2. `www.vikau.com /vodplay/xiu-zhen-zhe-zhi-fu-qin-de-cai-fu-110943-maotai-36 => 200`
3. `www.cnzhenbang.com /category/dong-man => 200`
4. `www.hyjssb.com /movie/yi-gua-ding-qing-yuan-ye-ya-tou-jin-cheng-bei-tuan-chong/154180 => 200`
5. `www.hyjssb.com /genres/dian-ying/home => 200`
唯一的 `404`
1. `www.hyjssb.com /shipinfenlei-dian-ying/shao-shi-dian-ying-2012-all-all/all-page1`
这个 `404` 与前面结论一致:
1. 它是旧路径残留
2. 不代表当前真实分类路由仍被前端拦截
#### `bytespider`
1. 总请求数:`6`
2. 状态分布:
- `200: 4`
- `301: 1`
- `403: 1`
3. 主要页面类型:
- `robots: 5`
- `home: 1`
代表样本:
1. `www.lgyz.net /robots.txt => 200`
2. `www.jpjdxs.com /robots.txt => 200`
3. `www.oronorent.com /robots.txt => 200`
4. `www.lgyz.net / => 200`
当前更像:
1. 字节系开始有可通样本
2. 但整体仍主要集中在 `robots`
3. 还没到像 `sogou` 那样明显进入深页恢复阶段
#### `baiduspider`
1. 当前窗口样本数:`1`
2. `www.sdxtwnc.com / => 200`
说明:
1. 这个窗口里百度样本偏少
2. 不能单独用这一窗否定百度恢复
3. 百度恢复判断仍应结合前面更长时间段和线上复测一起看
### 2.5 `17:40` 窗口补充:`sogou` 恢复不是单窗偶发
继续下钻 `2026-04-17T17:40:03+08:00` 这个紧邻窗口后,可以看到:
#### `sogou`
1. 总请求数:`5`
2. 状态分布:
- `200: 5`
3. 命中样本:
- `www.jpjdxs.com /neirong-154229-xiang-feng-bu-shi-jiu-shi-ren => 200`
- `www.jpjdxs.com /bf-154229-xiang-feng-bu-shi-jiu-shi-ren/default-1 => 200`
- `www.lgyz.net /movie/154223-wo-zai-nv-zong-dang-nan-xiu => 200`
- `www.hyjssb.com /get/index?wd=test => 200`
- `www.hyjssb.com /get/index?wd=cachetest&__nocache=1 => 200`
对应缓存信号也符合当前前端规则:
1. `www.jpjdxs.com` 详情 / 播放页:
- `cache_status = STALE`
2. `www.lgyz.net` 详情页:
- `cache_status = STALE`
3. `www.hyjssb.com /get/index?wd=test`
- `cache_status = MISS`
4. `www.hyjssb.com /get/index?wd=cachetest&__nocache=1`
- `cache_status = BYPASS`
#### 当前更强的阶段性判断
现在不只是单个 `17:30` 窗口成立,而是:
1. `17:30` 窗口里,`sogou` 已出现首页 / 分类 / 详情 / 播放 `200`
2. `17:40` 紧邻窗口里,`sogou` 继续出现详情 / 播放 / 搜索排障路径 `200`
因此当前更稳妥的说法是:
1. `sogou` 恢复已不是单窗偶发
2. 而是已经出现连续窗口的真实 `200` 样本
### 2.6 `bytespider` 当前阶段补充
继续下钻最近几个窗口并结合线上实时请求头后,`bytespider` 当前更准确的阶段判断如下:
#### 日志侧
当天聚合样本目前大致表现为:
1. 总请求:`78`
2. 状态分布:
- `444: 25`
- `403: 35`
- `301: 10`
- `200: 8`
3. 页面类型:
- `robots: 73`
- `home: 4`
- `other: 1`
最近窗口的可通样本主要是:
1. `2026-04-17T17:30:02+08:00`
- `www.lgyz.net /robots.txt => 200`
- `www.jpjdxs.com /robots.txt => 200`
- `www.oronorent.com /robots.txt => 200`
- `www.lgyz.net / => 200`
2. `2026-04-17T17:40:03+08:00`
- `www.codohealth.com /robots.txt => 200`
- `www.vikau.com /robots.txt => 200`
- `www.lmjcg.com /robots.txt => 200`
- `www.gz-yxsw.com /robots.txt => 200`
#### 线上实时请求头
补测结果:
1. `https://www.lgyz.net/`
- `200`
- `X-Cache-Status: STALE`
- `X-Managed-Spider: normal`
2. `https://www.lgyz.net/robots.txt`
- `200`
- `X-Cache-Status: HIT`
- `X-Managed-Spider: normal`
3. `https://www.jpjdxs.com/robots.txt`
- `200`
- `X-Cache-Status: HIT`
- `X-Managed-Spider: normal`
4. `https://www.oronorent.com/robots.txt`
- `200`
- `X-Cache-Status: HIT`
- `X-Managed-Spider: normal`
#### 当前判断
1. `bytespider` 不是完全不可通
2. 最近窗口里已经开始出现 `robots.txt` 与个别首页 `200`
3. 但当前仍明显以 `robots` 层为主
4. 且实时响应头里仍是 `X-Managed-Spider: normal`
5. 所以更像“部分可通、尚未进入受管蜘蛛深页恢复阶段”
#### 再补一条更硬的结论
继续扫当天所有 run 后,`bytespider` 的非 `robots` 样本只有 `5` 条:
1. `www.hyjssb.com /news_detail1/newsId=51.html => 444`
2. `vikau.com / => 444`
3. `www.nblssy.com / => 301`
4. `visitsumenep.com / => 444`
5. `www.lgyz.net / => 200`
同时按路径启发式继续筛查:
1. 没扫到任何稳定的详情页样本
2. 没扫到任何稳定的播放页样本
3. 没扫到任何稳定的分类页样本
所以当前可以更明确地说:
1. `bytespider` 现在还没有进入像 `sogou` 那样的深页恢复阶段
2. 当前观察重点仍应放在:
- `robots.txt`
- 首页
3. 如果后续字节系要重点推进,应继续观察它是否开始出现真实详情 / 播放 / 分类 `200`
## 3. 已验证通过的站点
当前已人工复测通过的代表站点:
1. `www.jpjdxs.com`
2. `www.lgyz.net`
3. `www.lcdchq.com`
4. `www.oronorent.com`
5. `www.glae.cc`
6. `www.cnzhenbang.com`
7. `www.jingxifa.com`
8. `www.vikau.com`
9. `www.hyjssb.com`
这些站点已验证到以下至少一项或多项:
1. 首页 `200`
2. `Sogou` 首页 `200`
3. 真实详情页 / 播放页 / 分类页 `200`
4. `?__nocache=1` 绕缓存正常
5. `X-Managed-Spider` / `X-Cache-Mode` / `X-Cache-Status` 头部符合预期
## 4. 需要特别记住的误判点
### 4.1 不要把旧日志直接当成当前状态
历史 run 中的大量:
1. `sogou 403`
2. `bytespider 403/444`
3. 某些 `301`
很多已经被当前线上复测推翻。
因此规则是:
1. 先看历史日志趋势
2. 再用真实 URL + 真实 UA 做当前线上复测
3. 以“当前线上复测”作为最终判断依据
### 4.2 不要把旧路径残留误判为前端拦截
典型案例:
1. `hyjssb`
- 历史日志里的旧路径:
- `/shipinfenlei-...`
- 当前真实路由已经变成:
- `/genres/...`
- `/movie/...`
- 因此旧路径 `404` 不代表当前蜘蛛拦截
## 5. 当前最有价值的阶段性判断
### 5.1 `sogou`
历史大盘仍难看,但最新窗口已出现真实恢复样本:
1. `www.jpjdxs.com`
- `/robots.txt => 200`
- `/ => 200`
- 真实详情页 `200`
- 真实播放页 `200`
2. `www.lgyz.net`
- 真实详情页 `200`
3. `www.lcdchq.com`
- 真实详情页 `200`
4. `www.oronorent.com`
- 真实详情页 `200`
结论:
1. `sogou` 正在从旧的 `403` 状态切换到新规则生效后的 `200`
2. 当前处于恢复初期,旧日志权重仍然偏高
### 5.2 `bytespider`
当前判断:
1. 尚未明显进入 `managed spider` 映射链
2. 但当前复测的 `robots.txt` 已基本可通
3. 不是当前主矛盾
如果后续要主动加强字节系抓取,再考虑把 `bytespider` 纳入 managed spider 映射。
## 6. 后续执行建议
### 优先级 A
继续观察下一轮蜘蛛日志,重点看:
1. `sogou 200` 是否继续增加
2. `sogou 403` 是否自然下降
3. 是否开始出现更多 `detail / play / category` 的正向样本
### 优先级 B
如果某个站又在日志里报异常,排障顺序统一为:
1. 先确认是不是旧路径残留
2. 再确认当前真实路由
3. 再用真实 UA 线上复测
4. 最后才判断是否需要改 nginx 或后端
### 优先级 C
只有在明确要做字节系 SEO 时,才考虑:
1.`bytespider` 纳入 managed spider 映射
2. 再观察其 `robots/home` 命中变化
## 7. 常用复测命令
后续人工或新的 Codex 接手时,优先直接用下面这些命令做快速验证。
### 7.1 看普通访问是否仍被前端缓存命中
```bash
curl -I -s 'https://你的域名/真实详情或播放页'
```
重点看:
1. `X-Cache-Status`
2. `X-Cache-Mode`
3. `X-Managed-Spider`
### 7.2 强制绕过前端缓存看最新真实输出
```bash
curl -I -s 'https://你的域名/真实详情或播放页?__nocache=1'
```
期望看到:
1. `X-Cache-Status: BYPASS`
2. `X-Cache-Mode: bypass`
3. `X-Cache-Bypass: 1`
### 7.3 测 `Sogou` 是否已进入放行链
```bash
curl -I -s \
-A 'Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)' \
'https://你的域名/真实首页或深页'
```
重点看:
1. HTTP 状态是否为 `200`
2. `X-Managed-Spider` 是否为 `managed`
### 7.4 测 `Baiduspider` 是否已正常命中
```bash
curl -I -s \
-A 'Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)' \
'https://你的域名/真实首页或深页'
```
### 7.5 测 `Bytespider`
```bash
curl -I -s \
-A 'Mozilla/5.0 (compatible; Bytespider; +http://spider.bytedance.com/)' \
'https://你的域名/robots.txt'
```
当前预期:
1. 多数站 `robots.txt` 已能拿到 `200`
2.`X-Managed-Spider` 可能仍为 `normal`
### 7.6 看首页里当前真实路由模式
```bash
curl -s 'https://你的域名/' | rg -o 'href=["'\"'\"']/[^"'\"'\"']+' | head -n 80
```
用途:
1. 快速确认当前站是真实使用 `/movie/...``/neirong-...``/shipin/...` 还是别的路由族
2. 避免把旧日志路径当成当前真实路径
## 8. 长文档入口
完整细节、样本、时间线、实测证据统一在:
- [1270-SEONexus-Codex多版本协作交接总文档.md](/www/wwwroot/diff-maccms/SEONexus/docs/1270-SEONexus-Codex多版本协作交接总文档.md)
建议后续接手顺序:
1. 先读本摘要
2. 再按需要跳转 `1270` 查看详细证据