Files
SEONexus/docs/2026-04-17-当前阶段总结.md
2026-04-18 01:31:44 +08:00

507 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 当前阶段总结
这份文档用于把本轮关于前端 nginx、搜索页缓存、安全排障、国内蜘蛛恢复的关键结论压缩成一页。
适用场景:
1. 你想快速回顾“现在到底定下了什么”
2. 新的 Codex 会话需要 1 分钟接手
3. 需要把这轮结论转发给同事或运维
## 一句话结论
当前这轮工作已经从“问题排查”进入“规则固化 + 证据补强”阶段:
1. 前端 nginx 长期规则已经定型
2. 搜索页双入口兼容已经确认必要
3. `?__nocache=1` 已作为标准排障入口固定下来
4. `sogou` 恢复已拿到真实深页 `200` 样本,不再只是推测
## 1. 前端 nginx 当前正式规则
当前正式上线入口:
- [/www/wwwroot/diff-maccms/前端站群服务器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`
- `X-Managed-Spider`
## 2. 为什么搜索页必须双入口兼容
已经确认:
1. `www.jpjdxs.com`
- 搜索入口:`/get-index`
2. `www.jingxifa.com`
- 搜索入口:`/get-index`
3. `www.hyjssb.com`
- 搜索入口:`/get/index`
同时还通过规则探测确认:
1. `/get-index?wd=test`
- 会走 `X-Cache-Mode: with-args`
2. `/get/index?wd=test`
- 如果不单独兼容,仍可能落回 `path-only`
因此:
1. 双兼容不是冗余项
2. 是站群真实路由差异决定的必要项
## 3. 当前最实用的排障规则
以后再遇到“代码像没生效”“页面像串页”“蜘蛛像异常”时,统一按这个顺序:
1. 先看 `X-Cache-Status`
2. 再看 `X-Cache-Mode`
3. 再看 `X-Managed-Spider`
4. 若仍怀疑前端缓存顶旧 HTML
- `?__nocache=1`
5. 如果 `?__nocache=1` 正常,而普通访问异常,优先清前端缓存
## 4. 受管蜘蛛映射当前正确读法
当前需要特别注意:
1. `managed_spiders.map.conf.example`
2. `受管蜘蛛映射-最优方案.txt`
更接近“样例”和“推荐结构”,不是线上实时快照。
所以以后判断某蜘蛛当前是否已纳入 managed spider不要只看样例文件。
正确优先级:
1. 先看线上真实响应头 `X-Managed-Spider`
2. 再看线上真实 `managed_spiders.map.conf`
3. 最后才参考样例文件
## 5. 国内蜘蛛当前阶段判断
### `baiduspider`
1. 恢复结论仍成立
2. 但单个时间窗样本有时很少
3. 不要用某一个小窗口直接否定百度恢复
### `sogou`
当前已不宜再简单说成“还是 403 为主”。
`2026-04-17T17:30:02+08:00` 这个窗口里:
1. 总请求数:`10`
2. `200: 9`
3. `404: 1`
命中的 `200` 深页样本包括:
1. `www.jingxifa.com /video-detail/cheng-shi-jian-ke-190614`
2. `www.vikau.com /vodplay/xiu-zhen-zhe-zhi-fu-qin-de-cai-fu-110943-maotai-36`
3. `www.cnzhenbang.com /category/dong-man`
4. `www.hyjssb.com /movie/.../154180`
唯一 `404` 仍是 `hyjssb` 旧路径残留,不代表当前真实路由异常。
因此当前更准确的说法是:
1. `sogou` 已经进入恢复初期
2. 已拿到真实首页、分类、详情、播放 `200` 样本
3. 历史旧 `403` 仍然会拖累整体统计观感
### `bytespider`
1. 已出现 `200` 样本
2. 但当前主要还是 `robots` / 首页层
3. 还没到像 `sogou` 那样有明显多站深页恢复
## 6. 最新日志读取口径
当前 `domain-spider-crawl` 的 summary 结构已经变更。
旧口径常用字段:
1. `by_bot`
新口径应优先看:
1. `bot_buckets`
2. `summary_status_buckets`
3. `summary_records`
所以如果后续看到:
1. `by_bot` 为空
2. `latest` 看起来像没国内蜘蛛
不要立刻下结论。
先确认:
1. 是否是 summary 字段结构变了
2. 是否需要结合最近几个 run 一起看
## 7. 当前阶段最稳的结论
如果只保留 5 句,当前最稳的是:
1. 正式上线模板优先用 `站点伪静态-最终发布版.txt`
2. 搜索页必须兼容 `/get-index``/get/index`
3. 排障先看响应头,不要先怀疑代码
4. `sogou` 恢复已拿到真实深页 `200` 样本
5. 日志摘要读取已经换字段,不能再只看 `by_bot`
## 8. 详情页 slug-only 404 修复
`2026-04-17` 已补一轮详情页历史坏链接兜底,重点针对:
1. `/detail/pinyin-xxx`
2. `/detail/xxx`
3. 没有 `id`、只有 slug 的旧外链或旧 sitemap 残留
当前修复口径:
1. 路由层补放行,不再让这类 URL 直接死在路由 404
2. 服务层会先做 slug 归一化:
- 例如把 `pinyin-se-ji-shi-kong-yuan-sheng-ban` 继续尝试成 `se-ji-shi-kong-yuan-sheng-ban`
3. 如果库里仍查不到对应 slug
- 不直接 404
- 按域名做稳定随机绑定,后续同 slug 重复访问会尽量落到同一个视频
这条规则的目标不是“技术上兼容一下”,而是:
1. 先把历史坏入口从 404 池里移出来
2. 降低蜘蛛撞到硬 404 的概率
3. 给后续 7 日收录和首页词冲量留入口
## 2026-04-17 线上补修:`liangzuan.net` 域名恢复、无 id 详情兜底、HEAD 兼容修复
### 现象
- `liangzuan.net` 整站一度出现首页、分类、详情、播放、搜索全部 404。
- 用户重点反馈这类 URL 不允许再 404
- `https://www.liangzuan.net/detail/pinyin-se-ji-shi-kong-yuan-sheng-ban`
- 同时线上探测发现一个隐蔽问题:
- 浏览器 `GET` 可以打开的深层详情页,`HEAD` 请求仍然返回 404。
- 这会导致监控、探测器、部分抓取链路把页面误判为失效。
### 根因
#### 1. 站点域名配置丢失
- 数据库 `domain` 表中,`liangzuan.net` 记录已经消失。
- 这不是模板渲染问题,而是域名上下文直接丢了,导致整站路由命中后仍无法正确解析站点配置。
#### 2. 站点上下文仍走旧域名解析方式
- `SiteContext` 里部分逻辑还在用旧的:
- `rootDomain()`
- `DomainModel::getDomainOnCacheByDomain(...)`
-`www`、裸域、运行时 host 的兼容不够稳。
#### 3. GPT 模板路由只注册了 `GET`
- 详情页、播放页、历史兼容深链都能被浏览器正常访问。
-`HEAD` 请求没有命中路由,所以会直接落到 404。
### 已完成修复
#### 1. 恢复 `liangzuan.net` 域名记录
- 基于历史 bootstrap 包重新注册域名。
- 重新绑定模板 `videoGpt1`
- 重新应用该域名的 SEO bootstrap 配置。
结果:
- 站点首页重新恢复 `200`
- 域名上下文重新可用。
#### 2. 修复 `SiteContext` 域名解析
文件:
- `/www/wwwroot/diff-maccms/SEONexus/code/app/services/SiteContext.php`
调整:
- `getViewConfig()``getTemplate()` 改为优先使用 `DomainModel::resolveDomainContextByHost(...)`
- 对当前请求 host 做运行时解析
- 旧缓存解析方式保留为兜底
效果:
- 裸域、`www`、运行时 host 命中更稳
- 不再因为旧解析链导致模板/站点配置取错
#### 3. 修复“无 id 的详情页”兜底策略
文件:
- `/www/wwwroot/diff-maccms/SEONexus/code/app/services/VideoService.php`
- `/www/wwwroot/diff-maccms/SEONexus/code/app/home/config/router.php`
调整:
- 详情路由支持仅 slug 访问
- 支持 `pinyin-` 前缀 slug 归一化
- 当 URL 不带 id、数据库没有直接匹配记录时进入稳定兜底绑定
- 避免再因 `requestedVId = 0` 写入错误绑定
效果:
- `detail/pinyin-...` 这类旧深链不再直接 404
- 即使缺少 id也会落到可展示的详情内容
#### 4. 修复 GPT 模板深链 `HEAD` 返回 404
文件:
- `/www/wwwroot/diff-maccms/SEONexus/code/app/home/config/router.php`
调整:
-`videoGpt1` 分支新增统一注册器:
- `Route::rule(..., 'GET|HEAD')`
- 公共路由与冻结 family 路由统一支持 `GET``HEAD`
- 历史兼容深链注册器也一起继承该行为
效果:
- 之前 `GET=200 / HEAD=404` 的详情深链,现在两者都为 `200`
### 线上复测结果
#### 1. 无 id 详情页
- `GET https://www.liangzuan.net/detail/pinyin-se-ji-shi-kong-yuan-sheng-ban`
- 已返回 `200`
#### 2. 常规详情页
- `GET https://www.liangzuan.net/film/sheng-dan-bu-du-xing-meng-fei-si-lian-qu/154124`
- 已返回 `200`
#### 3. 深链 `HEAD` 探测
- `HEAD https://www.liangzuan.net/detail/pinyin-se-ji-shi-kong-yuan-sheng-ban`
- 已返回 `200`
- `HEAD https://www.liangzuan.net/film/sheng-dan-bu-du-xing-meng-fei-si-lian-qu/154124`
- 已返回 `200`
### 对 7 日收录目标的直接价值
- 站点不再因为域名配置丢失而整站失活
- 旧深链、无 id 深链、历史兼容详情页不再轻易 404
- 抓取探针和监控不会再把可访问详情页误判为失效页
- 这一步属于收录链路里的基础设施修复,已经把“入口级拦路虎”清掉了
### 下一阶段建议主线
1. 批量扫描 GPT 模板所有详情/播放/分类深链,清理剩余 404 模式。
2. 针对 `/detail/pinyin-*``/film/*``/play/*` 输出结构化 URL 巡检报表。
3. 补做站群级 sitemap、robots、内链入口一致性检查优先服务 7 日收录目标。
## 2026-04-17 站群收录入口补修Sitemap 统一恢复
### 扫描发现
- GPT 站群首页和 `robots.txt` 普遍可访问。
- 但多站点 `sitemap.xml``sitemap_index.xml``sitemap-main.xml``sitemap-videos-1.xml` 统一返回 404。
- 模板页脚和 `robots.txt` 实际都在输出:
- `/sitemap_index.xml`
- 这意味着蜘蛛会被主动引导到 404 的 XML 入口,直接拖累 7 日收录目标。
### 深层根因
#### 1. 标准 sitemap 入口缺少显式兼容
文件:
- `/www/wwwroot/diff-maccms/SEONexus/code/app/home/config/router.php`
处理:
- 补了以下标准入口兼容:
- `/sitemap.xml`
- `/sitemap_index.xml`
- `/sitemap-main.xml`
- `/sitemap-videos-:page.xml`
#### 2. 生成目录缺失导致 sitemap 任务直接失败
文件:
- `/www/wwwroot/diff-maccms/SEONexus/code/app/task/logic/VideoSiteMapLogic.php`
- `/www/wwwroot/diff-maccms/SEONexus/code/app/task/logic/SiteMapLogic.php`
问题:
- `storage/SiteMap/` 目录当时不存在
- 逻辑里仅 `mkdir($strDomainDir)`,不会递归创建父目录
- 所以首次生成会直接报错,整个 XML 文件链路断掉
修复:
- 改为 `mkdir($strDomainDir, 0777, true)`
### 已完成验证
#### liangzuan.net
- `https://www.liangzuan.net/sitemap_index.xml` => 200
- `https://www.liangzuan.net/sitemap-main.xml` => 200
- `https://www.liangzuan.net/sitemap-videos-1.xml` => 200
#### chuanjiafeng.net
- `https://www.chuanjiafeng.net/sitemap_index.xml` => 200
### 当前执行状态
- 已启动 GPT 站群全量 `VideoSiteMap` 生成任务
- 任务正在逐域名落盘:
- `storage/SiteMap/<domain>/sitemap_index.xml`
- `storage/SiteMap/<domain>/sitemap-main.xml`
- `storage/SiteMap/<domain>/sitemap-videos-*.xml`
- `storage/SiteMap/<domain>/video-list-*.json`
### 对 7 日收录目标的价值
- 站群不再把蜘蛛导向失效的 XML 入口
- 每个域名开始具备可提交、可抓取、可扩展的视频 XML 分页
- 这一步是“收录入口层”的关键修复,优先级非常高
### 二次修正sitemap 详情 URL 空 slug 问题
在恢复 XML 后继续抽检时,又发现一类会伤收录质量的问题:
- 部分 `sitemap-videos-1.xml` 中详情链接出现空 slug
- 例如:
- `/film//210`
- `/detail/-210`
根因:
- `VideoSiteMapLogic` 直接用 `v_name_en` 生成详情 URL
- 但部分视频数据的 `v_name_en` 为空
修复:
-`VideoSiteMapLogic` 内新增 `normalizeVideoSlug(...)`
- 优先使用 `v_name_en`
- 若为空,则回退到 `v_name`
- 再做稳定 slug 归一化,保证至少输出可抓取的详情路径
修复后抽样结果:
- `https://www.liangzuan.net/film/wei-xian-de-fei-pang/210` => GET 200 / HEAD 200
- `https://www.cnzhenbang.com/detail/wei-xian-de-fei-pang-210` => GET 200 / HEAD 200
- `https://www.liangzuan.net/film/mo-li-mei/213` => GET 200 / HEAD 200
- `https://www.cnzhenbang.com/detail/mo-li-mei-213` => GET 200 / HEAD 200
### 轨迹探针验收5 个 GPT 站首页→搜索→详情→播放全通过
已使用自动样本发现 + 轨迹探针,对以下 5 个站做真实链路验收:
- `liangzuan.net`
- `cnzhenbang.com`
- `codohealth.com`
- `jingxifa.com`
- `gz-yxsw.com`
结果:
- 首页:全部 `200`
- 搜索:全部 `200`
- 详情:全部 `200`
- 播放:全部 `200`
- `all_passed = 1`
这说明当前 GPT 站群至少在抽样层面,已经不是“只有 sitemap 文件可用”,而是“收录入口 -> 搜索承接 -> 详情页 -> 播放页”这一条真实访问链路可用。
### 扩样验收15 个 GPT 站真实链路全通过
在 5 个样板站通过后,继续扩样到 15 个 GPT 域名:
- `liangzuan.net`
- `cnzhenbang.com`
- `codohealth.com`
- `jingxifa.com`
- `gz-yxsw.com`
- `glae.cc`
- `gxhongzhuang.com`
- `jpjdxs.com`
- `jxxgygy.com`
- `lcdchq.com`
- `leici1940.com`
- `lgyz.net`
- `oronorent.com`
- `pcslcl.com`
- `sdxtwnc.com`
结果:
- 自动样本发现全部 `sample_status=passed`
- 15 站首页全部 `200`
- 15 站搜索页全部 `200`
- 15 站详情页全部 `200`
- 15 站播放页全部 `200`
- 15 站 `all_passed=1`
说明:
- 当前 GPT 站群的主链路并不是零星恢复,而是已经具备批量稳定性
- URL family 虽然各不相同,但都已经通过真实轨迹验收
### 搜索页 H1 二次收口
在搜索链路复查时,又发现一类“可访问但不够强 SEO”的问题
- 部分搜索页虽然已返回 `200`
-`h1` 只输出裸关键词,或输出“相关内容 / 查询词 / 结果页”这类弱意图标题
- 这会削弱搜索页对关键词与搜索意图的直接承接,不利于收录页稳定识别
本轮已统一修正 `videoGpt1` 搜索头模板:
- `app/home/view/videoGpt1/module/search/search_header_simple.html`
- `app/home/view/videoGpt1/module/search/search_header_seo.html`
- `app/home/view/videoGpt1/module/search/search_header_rich.html`
- `app/home/view/videoGpt1/module/search/search_header_centered.html`
修正原则:
- 搜索页 `h1` 不再只显示裸关键词
- 搜索页 `h1` 不再只显示“搜索结果 / 查询词 / 站内搜索 / 相关内容”这类空壳文案
- 统一改为“关键词 + 搜索结果 / 搜索意图词”的可索引表达
线上 `?__nocache=1` 抽样结果:
- `https://www.liangzuan.net/get/index?keyword=liangzuan.net&__nocache=1`
- `h1 => “liangzuan.net” 搜索结果`
- `https://www.cnzhenbang.com/query?keyword=菜鸟臻榜&__nocache=1`
- `h1 => 菜鸟臻榜 搜索结果`
- `https://www.jingxifa.com/get-index?keyword=京淅发影院&__nocache=1`
- `h1 => 京淅发影院 搜索结果`
附带确认:
- 各域名搜索入口并不统一,不能用单一 `/search?keyword=` 判断线上是否异常
- 当前已确认示例:
- `liangzuan.net => /get/index?keyword=...`
- `cnzhenbang.com => /query?keyword=...`
- `jingxifa.com => /get-index?keyword=...`