507 lines
15 KiB
Markdown
507 lines
15 KiB
Markdown
# 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=...`
|