# 1292-SEONexus 老模板逐文件改动蓝图 - 2026-04-17
## 目的
这份文档不是再讲“为什么要改”,而是给主 Codex 一个几乎可以直接照着写 patch 的蓝图。
使用方式:
1. 先看 [21-老模板实施安全边界与GPT隔离说明-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/21-老模板实施安全边界与GPT隔离说明-2026-04-17.md)
2. 再看 [22-老模板第一批实施任务单与验收矩阵-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/22-老模板第一批实施任务单与验收矩阵-2026-04-17.md)
3. 最后按本文件逐文件落 patch
## 一、分类页 `getCategoryType.html` 改动蓝图
### 适用文件
- `videoDadi/video/getCategoryType.html`
- `videoDingZhu/video/getCategoryType.html`
- `videoBoKu/video/getCategoryType.html`
- `videoLaoNiu/video/getCategoryType.html`
- `videoNuNu/video/getCategoryType.html`
### 当前问题
共同问题:
- `og:url` 指首页
- `CollectionPage.url` 指首页
- 缺 canonical
### 目标状态
分类页 head 里至少统一成:
1. `canonical = 当前分类页真实 URL`
2. `og:url = 当前分类页真实 URL`
3. `CollectionPage.url = 当前分类页真实 URL`
### 最稳参考
直接参考 `videoGpt1` 当前写法:
- [videoGpt1/getCategoryType.html:15](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getCategoryType.html:15)
- [videoGpt1/getCategoryType.html:19](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getCategoryType.html:19)
- [videoGpt1/getCategoryType.html:46](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getCategoryType.html:46)
### 建议实现结构
在 `head` block 最前面补一条分类页 canonical:
```tpl
```
然后把现有:
```tpl
```
统一改成:
```tpl
```
再把 JSON-LD 里的:
```tpl
"url": "https://{$DomainModel->d_domain}",
```
改成:
```tpl
"url": "https://{$DomainModel->d_domain}{site:vciurl parent_category="$Request.route.strParentCategory" /}",
```
### 可顺手补的项
如果改动很顺,也建议补:
```tpl
```
这不是当前最核心收益点,但与分类页聚合定位是一致的。
### 改后页面级验收
打开任一分类页,确认:
1. 页面源代码出现 canonical
2. canonical 指向分类页自己
3. `og:url` 指向分类页自己
4. JSON-LD `CollectionPage.url` 指向分类页自己
## 二、播放页 `getVideoPlayUrl.html` 改动蓝图
### 适用文件
- `videoDadi/video/getVideoPlayUrl.html`
- `videoDingZhu/video/getVideoPlayUrl.html`
- `videoBoKu/video/getVideoPlayUrl.html`
- `videoLaoNiu/video/getVideoPlayUrl.html`
- `videoNuNu/video/getVideoPlayUrl.html`
### 当前问题
共同问题:
- canonical 指播放页
- `og:url` 指详情页
- JSON-LD `url` 指详情页
### 目标状态
播放页三件套统一:
1. canonical 指播放页自己
2. `og:url` 指播放页自己
3. JSON-LD `url` 指播放页自己
### 最稳参考
参考 `videoGpt1` 播放页:
- [videoGpt1/getVideoPlayUrl.html:117](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getVideoPlayUrl.html:117)
- [videoGpt1/getVideoPlayUrl.html:143](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getVideoPlayUrl.html:143)
- [videoGpt1/getVideoPlayUrl.html:202](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getVideoPlayUrl.html:202)
### 建议实现结构
老模板现在已经有 canonical,例如:
- [videoDadi/getVideoPlayUrl.html:58](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/video/getVideoPlayUrl.html:58)
第一批最稳做法不是大改数据流,而是先把现有 `site:vpurl ...` 结果复用起来。
如果模板表达式可读性允许,直接统一为:
```tpl
{assign name="strPlayCanonicalUrl" value='https://`$DomainModel->d_domain`{site:vpurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en" play_type="default" play_index="1" /}' /}
```
如果 `assign` 混模板标签不稳,就直接把原地三处替换成同一条 `site:vpurl ...` 写法。
将当前:
```tpl
```
改成:
```tpl
```
将 JSON-LD 里的:
```tpl
"url": 'https://{$DomainModel->d_domain}{site:vurl ...}',
```
改成:
```tpl
"url": 'https://{$DomainModel->d_domain}{site:vpurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en" play_type="default" play_index="1" /}',
```
### 当前第一批的保守策略
这里有一个需要主 Codex 注意的地方:
当前老模板 canonical 写死的是:
- `play_type="default"`
- `play_index="1"`
这并不一定等于当前访问中的真实线路和集数。
所以第一批有两种路线:
#### 路线 A:保守收口
目标:
- 先让三件套一致
- 即使先全部收口到默认播放页,也比 detail/play 信号分裂更好
优点:
- 改动小
- 风险低
- 更快看到 `play|301` 收敛
#### 路线 B:精确收口
目标:
- canonical / `og:url` / JSON-LD 精确指向当前播放中的真实 `play_type + play_index`
优点:
- 信号最准确
风险:
- 老模板当前 `Request.route` 和数据链未必完全统一
- 更容易把第一批改动做复杂
当前建议:
- 第一批先走路线 A
- 第二批再考虑是否升级到路线 B
### 改后页面级验收
打开任一播放页,确认:
1. canonical 存在
2. `og:url` 与 canonical 一致
3. JSON-LD `url` 与 canonical 一致
## 三、`sitemap-main.xml` 改动蓝图
### 适用文件
- `videoDadi/sitemap/sitemap-main.xml`
- `videoDingZhu/sitemap/sitemap-main.xml`
- `videoBoKu/sitemap/sitemap-main.xml`
- `videoLaoNiu/sitemap/sitemap-main.xml`
- `videoNuNu/sitemap/sitemap-main.xml`
### 当前问题
共同问题:
1. 输出 host 带 `www`
2. 目录明明是视频站,却用了:
- `novel:category`
- `site:nflurl`
### 第一批目标
第一批不追求“一步做出终极 sitemap”,先做两件事:
1. 不继续输出明显错误的小说站 URL
2. host 口径与当前主模板输出一致
### 建议改法
#### 最保守版本
如果主 Codex 当前对视频站 sitemap 真实结构还没完全确认,第一批可以先把 `sitemap-main.xml` 收缩成最小正确集:
- 首页
- 榜单页
也就是保留:
- [sitemap-main.xml:3-15](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/sitemap/sitemap-main.xml:3)
但把:
- [sitemap-main.xml:17-31](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/sitemap/sitemap-main.xml:17)
这一整段小说站逻辑先移除或注释为待重建。
同时把:
```xml
https://www.{$DomainModel->d_domain}
```
统一改成:
```xml
https://{$DomainModel->d_domain}
```
#### 更积极版本
如果主 Codex 很快确认了视频分类页应走 `site:vciurl` 或其他视频路由,那就直接按视频分类 URL 重建分类 sitemap。
当前我建议第一批先别赌这一步,先走最保守版本更稳。
### 改后页面级验收
访问 `sitemap-main.xml`,确认:
1. 返回正常 XML
2. 没有 `novel`/`nflurl` 这类错误视频站路径
3. host 输出与页面主输出一致
## 四、逐文件施工顺序
建议主 Codex 严格按下面顺序:
1. 五套 `getCategoryType.html`
2. 五套 `getVideoPlayUrl.html`
3. 五套 `sitemap-main.xml`
不要交叉着零散改。
原因:
- 先收聚合页
- 再收播放页
- 最后再收 sitemap
这样每一步的日志变化更容易归因。
## 五、改动后的优先复测域名
### 分类页优先复测
- `ningxiaowei.com`
- `www.ningxiaowei.com`
- `sctyjz.com`
- `www.ap-hulan.com`
### 播放页优先复测
- `yagyjt.com`
- `ningxiaowei.com`
### sitemap 优先复测
- `sctyjz.com`
- `hymdrz.com`
- `www.ap-hulan.com`
## 六、一句话交接
> 主 Codex 如果现在开始动老模板第一批 patch,最稳方法就是:分类页直接参考 `videoGpt1` 的分类页写法做 URL 收口;播放页先保守统一到同一条 `site:vpurl`;sitemap-main 第一批先去掉明显错误的小说逻辑并收口 host。先把信号统一,再追求更精细化。