# 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//sitemap_index.xml` - `storage/SiteMap//sitemap-main.xml` - `storage/SiteMap//sitemap-videos-*.xml` - `storage/SiteMap//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=...`