diff --git a/code/app/common/helper/DomainSpiderCrawlLogHelper.php b/code/app/common/helper/DomainSpiderCrawlLogHelper.php
index 4beee24..8b544b1 100644
--- a/code/app/common/helper/DomainSpiderCrawlLogHelper.php
+++ b/code/app/common/helper/DomainSpiderCrawlLogHelper.php
@@ -15,6 +15,9 @@ class DomainSpiderCrawlLogHelper
$arrItem['host'] = strtolower(trim((string)($arrItem['host'] ?? '')));
$arrItem['path'] = trim((string)($arrItem['path'] ?? ''));
$arrItem['page_type'] = DomainSpiderCrawlLogSchemaHelper::normalizePageType((string)($arrItem['page_type'] ?? 'other'));
+ if ($arrItem['page_type'] === 'other') {
+ $arrItem['page_type'] = DomainSpiderCrawlLogSchemaHelper::inferPageTypeFromPath((string)$arrItem['path'], 'other');
+ }
$arrItem['bot_name'] = DomainSpiderCrawlLogSchemaHelper::normalizeBotName((string)($arrItem['bot_name'] ?? 'other_bot'));
$arrItem['status'] = (int)($arrItem['status'] ?? 0);
$arrItem['count'] = max(0, (int)($arrItem['count'] ?? 0));
@@ -26,6 +29,9 @@ class DomainSpiderCrawlLogHelper
$arrItem['host'] = strtolower(trim((string)($arrItem['host'] ?? '')));
$arrItem['url'] = trim((string)($arrItem['url'] ?? ''));
$arrItem['page_type'] = DomainSpiderCrawlLogSchemaHelper::normalizePageType((string)($arrItem['page_type'] ?? 'other'));
+ if ($arrItem['page_type'] === 'other') {
+ $arrItem['page_type'] = DomainSpiderCrawlLogSchemaHelper::inferPageTypeFromPath((string)$arrItem['url'], 'other');
+ }
$arrItem['bot_name'] = DomainSpiderCrawlLogSchemaHelper::normalizeBotName((string)($arrItem['bot_name'] ?? 'other_bot'));
$arrItem['status'] = (int)($arrItem['status'] ?? 0);
$arrItem['cache_status'] = self::normalizeCacheStatus((string)($arrItem['cache_status'] ?? ''));
diff --git a/code/app/common/helper/DomainSpiderCrawlLogSchemaHelper.php b/code/app/common/helper/DomainSpiderCrawlLogSchemaHelper.php
index f5ed068..afc29bf 100644
--- a/code/app/common/helper/DomainSpiderCrawlLogSchemaHelper.php
+++ b/code/app/common/helper/DomainSpiderCrawlLogSchemaHelper.php
@@ -202,6 +202,60 @@ class DomainSpiderCrawlLogSchemaHelper
return in_array($strPageType, self::buildSchema()['page_type_enum'], true) ? $strPageType : 'other';
}
+ public static function inferPageTypeFromPath(string $strPath, string $strFallback = 'other'): string
+ {
+ $strPath = strtolower(trim($strPath));
+ if ($strPath === '') {
+ return self::normalizePageType($strFallback);
+ }
+
+ $strPath = parse_url($strPath, PHP_URL_PATH) ?: $strPath;
+ $strPath = '/' . ltrim($strPath, '/');
+ $strNormalized = trim($strPath, '/');
+
+ if ($strNormalized === '' || $strNormalized === 'index.php') {
+ return 'home';
+ }
+
+ if ($strNormalized === 'robots.txt') {
+ return 'robots';
+ }
+
+ if (str_contains($strNormalized, 'sitemap')) {
+ return 'sitemap';
+ }
+
+ if (str_starts_with($strNormalized, 'search') || str_starts_with($strNormalized, 'get-index')) {
+ return 'search';
+ }
+
+ if (
+ str_contains($strNormalized, 'videotype')
+ || str_contains($strNormalized, 'vodtype')
+ || str_contains($strNormalized, 'fenlei')
+ ) {
+ return 'category';
+ }
+
+ if (
+ str_starts_with($strNormalized, 'voddetail/')
+ || str_starts_with($strNormalized, 'video-info/')
+ || str_starts_with($strNormalized, 'neirong-')
+ ) {
+ return 'detail';
+ }
+
+ if (
+ str_starts_with($strNormalized, 'vodplay/')
+ || str_starts_with($strNormalized, 'video-play/')
+ || str_starts_with($strNormalized, 'bf-')
+ ) {
+ return 'play';
+ }
+
+ return self::normalizePageType($strFallback);
+ }
+
public static function normalizeBotName(string $strBotName): string
{
$strValue = strtolower(trim($strBotName));
diff --git a/code/app/home/view/videoBoKu/sitemap/sitemap-main.xml b/code/app/home/view/videoBoKu/sitemap/sitemap-main.xml
index 9027552..d4710d8 100644
--- a/code/app/home/view/videoBoKu/sitemap/sitemap-main.xml
+++ b/code/app/home/view/videoBoKu/sitemap/sitemap-main.xml
@@ -1,35 +1,16 @@
- https://www.{$DomainModel->d_domain}/
+ https://{$DomainModel->d_domain}/
{:date('Y-m-d')}
daily
1.0
- https://www.{$DomainModel->d_domain}{$strRankUrlTemp}
+ https://{$DomainModel->d_domain}{$strRankUrlTemp}
{:date('Y-m-d')}
daily
1.0
-
-
- {novel:category d_key="strCategoryPinyin" d_val="strCategoryName"}
-
- {novel:sort d_key="sort_key" d_val="strSortName"}
-
- {novel:status d_key="status_key" d_val="strStatusName"}
-
- https://www.{$DomainModel->d_domain}{site:nflurl category="$strCategoryPinyin" order="$sort_key" status="$status_key" /}
- {:date('Y-m-d')}
- weekly
- 0.8
-
- {/novel:status}
- {/novel:sort}
- {/novel:category}
-
-
-
-
\ No newline at end of file
+
diff --git a/code/app/home/view/videoBoKu/video/getCategoryType.html b/code/app/home/view/videoBoKu/video/getCategoryType.html
index ddb297f..e96a030 100644
--- a/code/app/home/view/videoBoKu/video/getCategoryType.html
+++ b/code/app/home/view/videoBoKu/video/getCategoryType.html
@@ -13,10 +13,12 @@
{block name="description"}{site:replace code="VIDEO@GETCATEGORYINDEX@DESCRIPTION"}{/block}
{block name="head"}
+
+
-
+
{switch $Request.route.strParentCategory }
{case 'dian-ying' }
@@ -45,7 +47,7 @@
"@context": "https://schema.org",
"@type": "CollectionPage",
"name": "{$DomainModel->d_name} - 最新{site:getval code="strVideoParentCategoryName" /}推荐",
- "url": "https://{$DomainModel->d_domain}",
+ "url": "https://{$DomainModel->d_domain}{site:vciurl parent_category="$Request.route.strParentCategory" /}",
"description": "{site:replace code="VIDEO@GETCATEGORYINDEX@DESCRIPTION"}",
"potentialAction": {
"@type": "SearchAction",
@@ -192,4 +194,4 @@
{/block}
{block name="customize"}
-{/block}
\ No newline at end of file
+{/block}
diff --git a/code/app/home/view/videoBoKu/video/getVideoPlayUrl.html b/code/app/home/view/videoBoKu/video/getVideoPlayUrl.html
index 3bea718..abd86b0 100644
--- a/code/app/home/view/videoBoKu/video/getVideoPlayUrl.html
+++ b/code/app/home/view/videoBoKu/video/getVideoPlayUrl.html
@@ -44,7 +44,7 @@
{/switch}
+ content='https://{$DomainModel->d_domain}{site:vpurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en" play_type="default" play_index="1" /}'>
@@ -69,7 +69,7 @@ href='https://{$DomainModel->d_domain}{site:vpurl v_id="$arrVideo.v_id" v_py="$a
"description": "{$arrVideo.v_description}",
"thumbnailUrl": "{$arrVideo.v_pic}",
"uploadDate": "{:date('Y-m-d')}",
- "url": 'https://{$DomainModel->d_domain}{site:vurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en"/}',
+ "url": 'https://{$DomainModel->d_domain}{site:vpurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en" play_type="default" play_index="1" /}',
"inLanguage": [
{volist name='$arrVideo.v_lang' id='strVideoLang' key='index'}
@@ -521,4 +521,4 @@ href='https://{$DomainModel->d_domain}{site:vpurl v_id="$arrVideo.v_id" v_py="$a
defer> -->
-{/block}
\ No newline at end of file
+{/block}
diff --git a/code/app/home/view/videoDadi/sitemap/sitemap-main.xml b/code/app/home/view/videoDadi/sitemap/sitemap-main.xml
index 9027552..d4710d8 100644
--- a/code/app/home/view/videoDadi/sitemap/sitemap-main.xml
+++ b/code/app/home/view/videoDadi/sitemap/sitemap-main.xml
@@ -1,35 +1,16 @@
- https://www.{$DomainModel->d_domain}/
+ https://{$DomainModel->d_domain}/
{:date('Y-m-d')}
daily
1.0
- https://www.{$DomainModel->d_domain}{$strRankUrlTemp}
+ https://{$DomainModel->d_domain}{$strRankUrlTemp}
{:date('Y-m-d')}
daily
1.0
-
-
- {novel:category d_key="strCategoryPinyin" d_val="strCategoryName"}
-
- {novel:sort d_key="sort_key" d_val="strSortName"}
-
- {novel:status d_key="status_key" d_val="strStatusName"}
-
- https://www.{$DomainModel->d_domain}{site:nflurl category="$strCategoryPinyin" order="$sort_key" status="$status_key" /}
- {:date('Y-m-d')}
- weekly
- 0.8
-
- {/novel:status}
- {/novel:sort}
- {/novel:category}
-
-
-
-
\ No newline at end of file
+
diff --git a/code/app/home/view/videoDadi/video/getCategoryType.html b/code/app/home/view/videoDadi/video/getCategoryType.html
index 70d45c1..a6a5b7b 100644
--- a/code/app/home/view/videoDadi/video/getCategoryType.html
+++ b/code/app/home/view/videoDadi/video/getCategoryType.html
@@ -13,10 +13,12 @@
{block name="description"}{site:replace code="VIDEO@GETCATEGORYINDEX@DESCRIPTION"}{/block}
{block name="head"}
+
+
-
+
{switch $Request.route.strParentCategory }
{case 'dian-ying' }
@@ -45,7 +47,7 @@
"@context": "https://schema.org",
"@type": "CollectionPage",
"name": "{$DomainModel->d_name} - 最新{site:getval code="strVideoParentCategoryName" /}推荐",
- "url": "https://{$DomainModel->d_domain}",
+ "url": "https://{$DomainModel->d_domain}{site:vciurl parent_category="$Request.route.strParentCategory" /}",
"description": "{site:replace code="VIDEO@GETCATEGORYINDEX@DESCRIPTION"}",
"potentialAction": {
"@type": "SearchAction",
@@ -218,4 +220,4 @@
{/block}
{block name="customize"}
-{/block}
\ No newline at end of file
+{/block}
diff --git a/code/app/home/view/videoDadi/video/getVideoPlayUrl.html b/code/app/home/view/videoDadi/video/getVideoPlayUrl.html
index 5764a6f..9c2e00a 100644
--- a/code/app/home/view/videoDadi/video/getVideoPlayUrl.html
+++ b/code/app/home/view/videoDadi/video/getVideoPlayUrl.html
@@ -43,7 +43,7 @@
{default /}
{/switch}
-
+
@@ -68,7 +68,7 @@ href='https://{$DomainModel->d_domain}{site:vpurl v_id="$arrVideo.v_id" v_py="$a
"description": "{$arrVideo.v_description}",
"thumbnailUrl": "{$arrVideo.v_pic}",
"uploadDate": "{:date('Y-m-d')}",
- "url": 'https://{$DomainModel->d_domain}{site:vurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en"/}',
+ "url": 'https://{$DomainModel->d_domain}{site:vpurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en" play_type="default" play_index="1" /}',
"inLanguage": [
{volist name='$arrVideo.v_lang' id='strVideoLang' key='index'}
@@ -422,4 +422,4 @@ href='https://{$DomainModel->d_domain}{site:vpurl v_id="$arrVideo.v_id" v_py="$a
-{/block}
\ No newline at end of file
+{/block}
diff --git a/code/app/home/view/videoDingZhu/sitemap/sitemap-main.xml b/code/app/home/view/videoDingZhu/sitemap/sitemap-main.xml
index 9027552..d4710d8 100644
--- a/code/app/home/view/videoDingZhu/sitemap/sitemap-main.xml
+++ b/code/app/home/view/videoDingZhu/sitemap/sitemap-main.xml
@@ -1,35 +1,16 @@
- https://www.{$DomainModel->d_domain}/
+ https://{$DomainModel->d_domain}/
{:date('Y-m-d')}
daily
1.0
- https://www.{$DomainModel->d_domain}{$strRankUrlTemp}
+ https://{$DomainModel->d_domain}{$strRankUrlTemp}
{:date('Y-m-d')}
daily
1.0
-
-
- {novel:category d_key="strCategoryPinyin" d_val="strCategoryName"}
-
- {novel:sort d_key="sort_key" d_val="strSortName"}
-
- {novel:status d_key="status_key" d_val="strStatusName"}
-
- https://www.{$DomainModel->d_domain}{site:nflurl category="$strCategoryPinyin" order="$sort_key" status="$status_key" /}
- {:date('Y-m-d')}
- weekly
- 0.8
-
- {/novel:status}
- {/novel:sort}
- {/novel:category}
-
-
-
-
\ No newline at end of file
+
diff --git a/code/app/home/view/videoDingZhu/video/getCategoryType.html b/code/app/home/view/videoDingZhu/video/getCategoryType.html
index dea9f4d..470878a 100644
--- a/code/app/home/view/videoDingZhu/video/getCategoryType.html
+++ b/code/app/home/view/videoDingZhu/video/getCategoryType.html
@@ -13,10 +13,12 @@
{block name="description"}{site:replace code="VIDEO@GETCATEGORYINDEX@DESCRIPTION"}{/block}
{block name="head"}
+
+
-
+
{switch $Request.route.strParentCategory }
{case 'dian-ying' }
@@ -45,7 +47,7 @@
"@context": "https://schema.org",
"@type": "CollectionPage",
"name": "{$DomainModel->d_name} - 最新{site:getval code="strVideoParentCategoryName" /}推荐",
- "url": "https://{$DomainModel->d_domain}",
+ "url": "https://{$DomainModel->d_domain}{site:vciurl parent_category="$Request.route.strParentCategory" /}",
"description": "{site:replace code="VIDEO@GETCATEGORYINDEX@DESCRIPTION"}",
"potentialAction": {
"@type": "SearchAction",
@@ -191,4 +193,4 @@
{/block}
{block name="customize"}
-{/block}
\ No newline at end of file
+{/block}
diff --git a/code/app/home/view/videoDingZhu/video/getVideoPlayUrl.html b/code/app/home/view/videoDingZhu/video/getVideoPlayUrl.html
index 709162e..1ad029a 100644
--- a/code/app/home/view/videoDingZhu/video/getVideoPlayUrl.html
+++ b/code/app/home/view/videoDingZhu/video/getVideoPlayUrl.html
@@ -44,7 +44,7 @@
{/switch}
+ content='https://{$DomainModel->d_domain}{site:vpurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en" play_type="default" play_index="1" /}'>
@@ -69,7 +69,7 @@ href='https://{$DomainModel->d_domain}{site:vpurl v_id="$arrVideo.v_id" v_py="$a
"description": "{$arrVideo.v_description}",
"thumbnailUrl": "{$arrVideo.v_pic}",
"uploadDate": "{:date('Y-m-d')}",
- "url": 'https://{$DomainModel->d_domain}{site:vurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en"/}',
+ "url": 'https://{$DomainModel->d_domain}{site:vpurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en" play_type="default" play_index="1" /}',
"inLanguage": [
{volist name='$arrVideo.v_lang' id='strVideoLang' key='index'}
@@ -448,4 +448,4 @@ href='https://{$DomainModel->d_domain}{site:vpurl v_id="$arrVideo.v_id" v_py="$a
defer> -->
-{/block}
\ No newline at end of file
+{/block}
diff --git a/code/app/home/view/videoLaoNiu/sitemap/sitemap-main.xml b/code/app/home/view/videoLaoNiu/sitemap/sitemap-main.xml
index 9027552..d4710d8 100644
--- a/code/app/home/view/videoLaoNiu/sitemap/sitemap-main.xml
+++ b/code/app/home/view/videoLaoNiu/sitemap/sitemap-main.xml
@@ -1,35 +1,16 @@
- https://www.{$DomainModel->d_domain}/
+ https://{$DomainModel->d_domain}/
{:date('Y-m-d')}
daily
1.0
- https://www.{$DomainModel->d_domain}{$strRankUrlTemp}
+ https://{$DomainModel->d_domain}{$strRankUrlTemp}
{:date('Y-m-d')}
daily
1.0
-
-
- {novel:category d_key="strCategoryPinyin" d_val="strCategoryName"}
-
- {novel:sort d_key="sort_key" d_val="strSortName"}
-
- {novel:status d_key="status_key" d_val="strStatusName"}
-
- https://www.{$DomainModel->d_domain}{site:nflurl category="$strCategoryPinyin" order="$sort_key" status="$status_key" /}
- {:date('Y-m-d')}
- weekly
- 0.8
-
- {/novel:status}
- {/novel:sort}
- {/novel:category}
-
-
-
-
\ No newline at end of file
+
diff --git a/code/app/home/view/videoLaoNiu/video/getCategoryType.html b/code/app/home/view/videoLaoNiu/video/getCategoryType.html
index aba78a0..0c09937 100644
--- a/code/app/home/view/videoLaoNiu/video/getCategoryType.html
+++ b/code/app/home/view/videoLaoNiu/video/getCategoryType.html
@@ -13,10 +13,12 @@
{block name="description"}{site:replace code="VIDEO@GETCATEGORYINDEX@DESCRIPTION"}{/block}
{block name="head"}
+
+
-
+
{switch $Request.route.strParentCategory }
{case 'dian-ying' }
@@ -45,7 +47,7 @@
"@context": "https://schema.org",
"@type": "CollectionPage",
"name": "{$DomainModel->d_name} - 最新{site:getval code="strVideoParentCategoryName" /}推荐",
- "url": "https://{$DomainModel->d_domain}",
+ "url": "https://{$DomainModel->d_domain}{site:vciurl parent_category="$Request.route.strParentCategory" /}",
"description": "{site:replace code="VIDEO@GETCATEGORYINDEX@DESCRIPTION"}",
"potentialAction": {
"@type": "SearchAction",
@@ -242,4 +244,4 @@
{/block}
{block name="customize"}
-{/block}
\ No newline at end of file
+{/block}
diff --git a/code/app/home/view/videoLaoNiu/video/getVideoPlayUrl.html b/code/app/home/view/videoLaoNiu/video/getVideoPlayUrl.html
index fe8e7c9..55a5b45 100644
--- a/code/app/home/view/videoLaoNiu/video/getVideoPlayUrl.html
+++ b/code/app/home/view/videoLaoNiu/video/getVideoPlayUrl.html
@@ -44,7 +44,7 @@
{/switch}
+ content='https://{$DomainModel->d_domain}{site:vpurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en" play_type="default" play_index="1" /}'>
@@ -70,7 +70,7 @@ href='https://{$DomainModel->d_domain}{site:vpurl v_id="$arrVideo.v_id" v_py="$a
"description": "{$arrVideo.v_description}",
"thumbnailUrl": "{$arrVideo.v_pic}",
"uploadDate": "{:date('Y-m-d')}",
- "url": 'https://{$DomainModel->d_domain}{site:vurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en"/}',
+ "url": 'https://{$DomainModel->d_domain}{site:vpurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en" play_type="default" play_index="1" /}',
"inLanguage": [
{volist name='$arrVideo.v_lang' id='strVideoLang' key='index'}
@@ -392,4 +392,4 @@ href='https://{$DomainModel->d_domain}{site:vpurl v_id="$arrVideo.v_id" v_py="$a
-{/block}
\ No newline at end of file
+{/block}
diff --git a/code/app/home/view/videoNuNu/sitemap/sitemap-main.xml b/code/app/home/view/videoNuNu/sitemap/sitemap-main.xml
index 9027552..d4710d8 100644
--- a/code/app/home/view/videoNuNu/sitemap/sitemap-main.xml
+++ b/code/app/home/view/videoNuNu/sitemap/sitemap-main.xml
@@ -1,35 +1,16 @@
- https://www.{$DomainModel->d_domain}/
+ https://{$DomainModel->d_domain}/
{:date('Y-m-d')}
daily
1.0
- https://www.{$DomainModel->d_domain}{$strRankUrlTemp}
+ https://{$DomainModel->d_domain}{$strRankUrlTemp}
{:date('Y-m-d')}
daily
1.0
-
-
- {novel:category d_key="strCategoryPinyin" d_val="strCategoryName"}
-
- {novel:sort d_key="sort_key" d_val="strSortName"}
-
- {novel:status d_key="status_key" d_val="strStatusName"}
-
- https://www.{$DomainModel->d_domain}{site:nflurl category="$strCategoryPinyin" order="$sort_key" status="$status_key" /}
- {:date('Y-m-d')}
- weekly
- 0.8
-
- {/novel:status}
- {/novel:sort}
- {/novel:category}
-
-
-
-
\ No newline at end of file
+
diff --git a/code/app/home/view/videoNuNu/video/getCategoryType.html b/code/app/home/view/videoNuNu/video/getCategoryType.html
index c4ff2d9..83c3f61 100644
--- a/code/app/home/view/videoNuNu/video/getCategoryType.html
+++ b/code/app/home/view/videoNuNu/video/getCategoryType.html
@@ -13,10 +13,12 @@
{block name="description"}{site:replace code="VIDEO@GETCATEGORYINDEX@DESCRIPTION"}{/block}
{block name="head"}
+
+
-
+
{switch $Request.route.strParentCategory }
{case 'dian-ying' }
@@ -45,7 +47,7 @@
"@context": "https://schema.org",
"@type": "CollectionPage",
"name": "{$DomainModel->d_name} - 最新{site:getval code="strVideoParentCategoryName" /}推荐",
- "url": "https://{$DomainModel->d_domain}",
+ "url": "https://{$DomainModel->d_domain}{site:vciurl parent_category="$Request.route.strParentCategory" /}",
"description": "{site:replace code="VIDEO@GETCATEGORYINDEX@DESCRIPTION"}",
"potentialAction": {
"@type": "SearchAction",
@@ -254,4 +256,4 @@
{/block}
{block name="customize"}
-{/block}
\ No newline at end of file
+{/block}
diff --git a/code/app/home/view/videoNuNu/video/getVideoPlayUrl.html b/code/app/home/view/videoNuNu/video/getVideoPlayUrl.html
index c2f9d77..d3a2a1e 100644
--- a/code/app/home/view/videoNuNu/video/getVideoPlayUrl.html
+++ b/code/app/home/view/videoNuNu/video/getVideoPlayUrl.html
@@ -44,7 +44,7 @@
{/switch}
+ content='https://{$DomainModel->d_domain}{site:vpurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en" play_type="default" play_index="1" /}'>
@@ -70,7 +70,7 @@ href='https://{$DomainModel->d_domain}{site:vpurl v_id="$arrVideo.v_id" v_py="$a
"description": "{$arrVideo.v_description}",
"thumbnailUrl": "{$arrVideo.v_pic}",
"uploadDate": "{:date('Y-m-d')}",
- "url": 'https://{$DomainModel->d_domain}{site:vurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en"/}',
+ "url": 'https://{$DomainModel->d_domain}{site:vpurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en" play_type="default" play_index="1" /}',
"inLanguage": [
{volist name='$arrVideo.v_lang' id='strVideoLang' key='index'}
@@ -378,4 +378,4 @@ href='https://{$DomainModel->d_domain}{site:vpurl v_id="$arrVideo.v_id" v_py="$a
-{/block}
\ No newline at end of file
+{/block}
diff --git a/docs/1270-SEONexus-Codex多版本协作交接总文档.md b/docs/1270-SEONexus-Codex多版本协作交接总文档.md
index 9137756..6410949 100644
--- a/docs/1270-SEONexus-Codex多版本协作交接总文档.md
+++ b/docs/1270-SEONexus-Codex多版本协作交接总文档.md
@@ -1247,7 +1247,7 @@ chown -R www:www /www/wwwroot/diff-maccms/SEONexus/docs
例如:
-- [1269-SEONexus-老模板第一阶段回灌执行文档](/www/wwwroot/diff-maccms/docs/1269-SEONexus-老模板第一阶段回灌执行文档.md)
+- [1269-SEONexus-老模板第一阶段回灌执行文档](/www/wwwroot/diff-maccms/docs/01-老模板第一阶段回灌执行文档.md)
适合记录:
diff --git a/docs/1308-SEONexus-老模板SEO公共总览-2026-04-17.md b/docs/1308-SEONexus-老模板SEO公共总览-2026-04-17.md
new file mode 100644
index 0000000..ac6e846
--- /dev/null
+++ b/docs/1308-SEONexus-老模板SEO公共总览-2026-04-17.md
@@ -0,0 +1,77 @@
+# 1308-SEONexus 老模板 SEO 公共总览 - 2026-04-17
+
+## 目的
+
+这份文档放在 `docs/` 根目录,只承担公共入口作用。
+
+它不是老模板支线的详细分析文档,而是给所有协作者一个统一说明:
+
+1. 这条老模板 SEO 线已经单独收进 `docs/old-tmp-seo/`
+2. 公共层只保留最少的主线判断
+3. 需要下钻时,再进入老模板子目录
+
+---
+
+## 一、当前公共结论
+
+当前仓库里的文档已经分成两层:
+
+### 公共层
+
+继续保留在 `docs/` 根目录:
+
+- `1270-SEONexus-Codex多版本协作交接总文档.md`
+- `2026-04-16-admin2-spider-workbench-production-fix.md`
+- `2026-04-17-spider-nginx-运维摘要.md`
+- `2026-04-17-当前阶段总结.md`
+- `2026-04-17-本轮交付清单.md`
+- `Codex启动提示词模板.md`
+- `接手检查清单模板.md`
+
+这些文档服务的是:
+
+- 多人协作
+- 公共排障
+- 生产辅助
+- 总交接
+
+### 老模板支线
+
+已经统一收进:
+
+- [docs/old-tmp-seo/README.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/README.md)
+
+这条支线只服务:
+
+- 老模板 `1001-1005`
+- 样板站:
+ - `yagyjt.com`
+ - `www.ningxiaowei.com`
+- 7 天 SEO 跟踪、复盘、验收、交班
+
+---
+
+## 二、如果你是公共协作者,先知道这 4 条就够
+
+1. 老模板 SEO 现在已经单独成线
+2. 它不再和 GPT 模板共用一套文档入口
+3. 公共层不再被老模板长链路文档淹没
+4. 需要接手老模板时,直接进入 `docs/old-tmp-seo/`
+
+---
+
+## 三、如果你要接手老模板,直接看哪份
+
+最短路径是:
+
+1. 第 1 步:看 [38-老模板SEO交班总览-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/38-老模板SEO交班总览-2026-04-17.md)
+2. 第 2 步:新开会话时用 [37-老模板主Codex启动提示词-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/37-老模板主Codex启动提示词-2026-04-17.md)
+3. 第 3 步:当天执行看 [33-老模板样板站Day1执行单-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/33-老模板样板站Day1执行单-2026-04-17.md)
+4. 第 4 步:每日复盘看 [35-老模板每日复盘模板-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/35-老模板每日复盘模板-2026-04-17.md)
+5. 第 5 步:首周验收看 [36-老模板首周验收清单-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/36-老模板首周验收清单-2026-04-17.md)
+
+---
+
+## 四、一句话交接
+
+> 老模板 SEO 这条线已经从公共 docs 里拆出来了,公共层只保留入口和总判断;需要深入时,统一进入 `docs/old-tmp-seo/`。
diff --git a/docs/2026-04-16-admin2-spider-workbench-production-fix.md b/docs/2026-04-16-admin2-spider-workbench-production-fix.md
index 54f7677..bc279c1 100644
--- a/docs/2026-04-16-admin2-spider-workbench-production-fix.md
+++ b/docs/2026-04-16-admin2-spider-workbench-production-fix.md
@@ -85,7 +85,7 @@
日志证据来自:
-- `/www/wwwlogs/source.video2.com.error.log`
+- 线上站点对应的 Nginx/PHP 错误日志
关键错误:
diff --git a/docs/README.md b/docs/README.md
index 1f74ace..89e9007 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -122,13 +122,44 @@
### 10. 老模板回灌执行文档
-- [1269-SEONexus-老模板第一阶段回灌执行文档.md](/www/wwwroot/diff-maccms/SEONexus/docs/1269-SEONexus-老模板第一阶段回灌执行文档.md)
+- [1308-SEONexus-老模板SEO公共总览-2026-04-17.md](/www/wwwroot/VideoSource2/docs/1308-SEONexus-老模板SEO公共总览-2026-04-17.md)
+- [old-tmp-seo/README.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/README.md)
+- [01-老模板第一阶段回灌执行文档.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/01-老模板第一阶段回灌执行文档.md)
适用场景:
-1. 回看老模板第一阶段执行过程
-2. 对照历史回灌动作
-3. 排查旧版本与新版本差异
+1. 想知道老模板支线现在被放在哪个目录
+2. 想先看老模板公共入口,再决定要不要深入
+3. 回看老模板第一阶段执行过程
+
+### 10.1 老模板蜘蛛分析交接链
+
+如果你当前要接手的是 `2026-04-16` 到 `2026-04-17` 这轮老模板蜘蛛日志分析,建议直接看:
+
+- [1308-SEONexus-老模板SEO公共总览-2026-04-17.md](/www/wwwroot/VideoSource2/docs/1308-SEONexus-老模板SEO公共总览-2026-04-17.md)
+- [38-老模板SEO交班总览-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/38-老模板SEO交班总览-2026-04-17.md)
+- [37-老模板主Codex启动提示词-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/37-老模板主Codex启动提示词-2026-04-17.md)
+- [36-老模板首周验收清单-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/36-老模板首周验收清单-2026-04-17.md)
+- [35-老模板每日复盘模板-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/35-老模板每日复盘模板-2026-04-17.md)
+- [34-老模板7天SEO跟踪板-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/34-老模板7天SEO跟踪板-2026-04-17.md)
+- [33-老模板样板站Day1执行单-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/33-老模板样板站Day1执行单-2026-04-17.md)
+- [32-老模板样板站URL-Family对照表-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/32-老模板样板站URL-Family对照表-2026-04-17.md)
+- [31-老模板样板站域名级SEO任务单-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/31-老模板样板站域名级SEO任务单-2026-04-17.md)
+- [30-老模板最新蜘蛛日志实战分析-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/30-老模板最新蜘蛛日志实战分析-2026-04-17.md)
+- [17-老模板5套蜘蛛日志纠偏与SEO提示-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/17-老模板5套蜘蛛日志纠偏与SEO提示-2026-04-17.md)
+- [13-主Codex接手摘要-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/13-主Codex接手摘要-2026-04-17.md)
+- [12-第一批修正实施方案-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/12-第一批修正实施方案-2026-04-17.md)
+- [14-蜘蛛分析交接索引-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/14-蜘蛛分析交接索引-2026-04-17.md)
+
+适用场景:
+
+1. 主 Codex 准备从分析切到第一批实现评估
+2. 新会话需要最快速理解这轮蜘蛛分析结论
+3. 想先确认当前主线到底是不是老模板 5 套
+4. 想直接找到 `1271` 到 `1286` 这一整串交接材料
+5. 想直接看最新工作台数据对应到老模板域名和模板编号的实战分析
+6. 想直接进入 `yagyjt.com / ningxiaowei.com` 这类样板站域名级任务
+7. 想快速确认“哪些是旧 family,哪些其实就是当前规范 family”
### 11. Admin2 Spider Workbench 生产排障记录
diff --git a/docs/1269-SEONexus-老模板第一阶段回灌执行文档.md b/docs/old-tmp-seo/01-老模板第一阶段回灌执行文档.md
similarity index 100%
rename from docs/1269-SEONexus-老模板第一阶段回灌执行文档.md
rename to docs/old-tmp-seo/01-老模板第一阶段回灌执行文档.md
diff --git a/docs/old-tmp-seo/02-老模板蜘蛛日志观察交接文档-2026-04-16.md b/docs/old-tmp-seo/02-老模板蜘蛛日志观察交接文档-2026-04-16.md
new file mode 100644
index 0000000..6138db5
--- /dev/null
+++ b/docs/old-tmp-seo/02-老模板蜘蛛日志观察交接文档-2026-04-16.md
@@ -0,0 +1,400 @@
+# 1271-SEONexus 老模板蜘蛛日志观察交接文档 - 2026-04-16
+
+## 目的
+
+这份文档用于把本轮老模板蜘蛛日志观察结果,正式交接给主 Codex。
+
+本轮遵循:
+
+- `01-老模板第一阶段回灌执行文档.md`
+- `1270-SEONexus-Codex多版本协作交接总文档.md`
+
+因此本轮定位不是“旧版本自由发挥改一套实现”,而是:
+
+- 先观察
+- 先归纳
+- 先分型
+- 给主 Codex 提供下一步 SEO 优先方向
+
+## 数据范围
+
+- 项目:`SEONexus`
+- 数据来源:`code/storage/domain-spider-crawl/runs/*/*/crawl-logs.summary.json`
+- 观察对象:`baiduspider`
+- 时间窗口:最近 24 小时
+- 观察日期:`2026-04-16`
+
+## 本轮总判断
+
+当前百度蜘蛛的状态已经比较清楚:
+
+1. 百度不是没来,首页抓取已经普遍存在
+2. 深抓不是完全没有,已经有明确正样本
+3. 当前主要问题不是“入口完全断掉”
+4. 当前主要问题是 `301/404` 损耗过高
+5. `category` 仍然弱,说明首页到中继层再到深页的稳定扩散还没普遍形成
+
+一句话总结:
+
+> 当前老模板第一阶段已经证明百度可以稳定进入首页,且部分站点已经出现真实深抓,但整体抓取预算仍在被首页规范化、深页跳转和历史错误入口大量消耗。
+
+## 24 小时总览
+
+### 页面类型计数
+
+- `home`: `509`
+- `other`: `266`
+- `detail`: `119`
+- `play`: `51`
+- `category`: `2`
+
+### 状态码计数
+
+- `200`: `532`
+- `301`: `231`
+- `404`: `183`
+- `444`: `1`
+
+## 当前最重要的统一信号
+
+### 1. 首页已成为百度主入口
+
+`home` 是当前最主要页面类型,说明首页入口已经建立。
+
+### 2. 深抓已经出现,但还没有大面积扩散
+
+`detail` 和 `play` 已经不是零,说明深抓链路不是完全断的。
+
+### 3. 最大损耗是 `301` 和 `404`
+
+当前最值得优先处理的,不是继续争论“百度有没有来”,而是:
+
+- 首页是否直达
+- 深页是否带多余跳转
+- 历史错误入口是否继续吞预算
+
+### 4. `category` 仍然偏弱
+
+最近 24 小时只有:
+
+- `category|200 = 2`
+
+说明首页到分类的中继层仍弱,深抓扩散还没进入更稳的阶段。
+
+## 当前高频异常路径
+
+本轮最明显的异常路径包括:
+
+- `/|301`
+- `/zb_system/login.php|301`
+- `/zb_system/login.php|404`
+- `/admin.php|301`
+- 多个 `/voddetail/...|301`
+- 多个 `/vodplay/...|301`
+- 多个 `/video-info/...|301`
+- 多个 `/video-play/...|301`
+- 多个 `/video-show/...|301`
+- `/showchengshi.asp?...|404`
+- 一批 `/index.php/...shtml|404`
+- 一批 `webuploader / upload / fileupload / preview` 类 `404`
+
+对应判断:
+
+1. 首页规范化还没完全收口
+2. 深页历史路径兼容仍然有明显跳转损耗
+3. 后台和旧脚本路径还在抢抓取预算
+
+## 站点分型
+
+### A 组:深抓正样本,优先保放量
+
+#### `yagyjt.com`
+
+核心统计:
+
+- `detail|200`: `59`
+- `detail|301`: `60`
+- `play|200`: `25`
+- `play|301`: `22`
+- `home|200`: `18`
+- `home|301`: `6`
+
+结论:
+
+- 百度已经真实进入详情页和播放页
+- 当前主问题不是“能不能深抓”
+- 当前主问题是“深页 301 太多,正在吃掉已出现的深抓放量”
+
+主 Codex 建议:
+
+- 优先减少 `detail|301`
+- 优先减少 `play|301`
+- 顺带继续压首页 `/|301`
+- 继续观察 `/zb_system/login.php` 这类噪音入口
+
+#### `junhaolab.com`
+
+核心统计:
+
+- `play|200`: `2`
+- `play|301`: `2`
+
+结论:
+
+- 这是弱深抓样本
+- 量小,但说明百度已经碰到播放页
+
+主 Codex 建议:
+
+- 作为次级深抓观察对象
+- 重点看播放页跳转能否收敛
+
+### B 组:错误入口高消耗样本,先清噪音
+
+#### `qf123.net`
+
+核心统计:
+
+- `other|404`: `169`
+- `home|200`: `1`
+
+典型异常:
+
+- `/js/webuploader/demo/server/upload.php|404`
+- `/js/webuploader/demo/server/uploadfile.php|404`
+- `/lib/webuploader-0.1.15/server/file.php|404`
+- `/libs/webuploader/0.1.15/server/fileupload.php|404`
+
+结论:
+
+- 当前不是深抓问题
+- 当前是错误入口纯消耗问题
+
+主 Codex 建议:
+
+- 先把这类历史上传组件和旧脚本路径的噪音收敛
+- 在错误入口没下降前,不要把它当深抓效果站
+
+#### `sctyjz.com`
+
+核心统计:
+
+- `home|200`: `12`
+- `home|301`: `6`
+- `other|404`: `8`
+
+典型异常:
+
+- `/|301`
+- `/index.php/heixj/haoxj/haoxj/...shtml|404`
+
+结论:
+
+- 首页已开
+- 但首页跳转和历史伪静态错误入口并存
+
+主 Codex 建议:
+
+- 先压首页 `/|301`
+- 再处理 `/index.php/...shtml` 类旧路径噪音
+
+#### `www.ap-hulan.com`
+
+核心统计:
+
+- `home|200`: `12`
+- `home|301`: `6`
+- `other|301`: `4`
+
+典型异常:
+
+- `/|301`
+- `/admin.php|301`
+
+结论:
+
+- 首页已可抓
+- 后台路径仍在分散预算
+
+主 Codex 建议:
+
+- 先压首页 `301`
+- 再压 `/admin.php` 这类旧后台入口
+
+### C 组:首页已起量,但 host 和内容路径仍在吃跳转预算
+
+#### `www.ningxiaowei.com`
+
+核心统计:
+
+- `home|200`: `66`
+- `home|301`: `5`
+- `other|200`: `20`
+- `other|301`: `18`
+
+典型异常:
+
+- `/|301`
+- `/video-info/...|301`
+- `/video-play/...|301`
+
+#### `ningxiaowei.com`
+
+核心统计:
+
+- `home|200`: `13`
+- `home|301`: `6`
+- `other|200`: `10`
+- `other|301`: `10`
+
+结论:
+
+- 首页已经起来
+- 裸域和 `www` 都在消耗预算
+- 内容层历史路径也还在持续跳转
+
+主 Codex 建议:
+
+- 优先收 host 规范
+- 再压首页 `/|301`
+- 再看 `video-info / video-play` 的兼容是否能进一步减损
+
+### D 组:首页稳定样本,适合观察规范收口后是否自然扩深
+
+#### `www.haotianhaiyuan.com` / `haotianhaiyuan.com`
+
+核心统计:
+
+- `www.haotianhaiyuan.com`: `home|200 = 44`,`home|301 = 9`
+- `haotianhaiyuan.com`: `home|200 = 29`,`home|301 = 2`,`other|404 = 2`
+
+典型异常:
+
+- `/|301`
+- `/showchengshi.asp?...|404`
+
+#### `hymdrz.com` / `www.hymdrz.com`
+
+核心统计:
+
+- `hymdrz.com`: `home|200 = 37`,`home|301 = 2`
+- `www.hymdrz.com`: `home|200 = 12`,`home|301 = 6`
+
+结论:
+
+- 首页抓取已经很稳
+- 当前主要损耗仍是首页规范化和少量 host 分裂
+- 不是高噪音站,也还不是深抓放量站
+
+主 Codex 建议:
+
+- 把它们作为“首页规范收口样本”
+- 观察首页直达后是否自然向分类页和深页扩散
+
+#### 首页稳定观察池
+
+代表站点:
+
+- `www.hygfbw.com`
+- `www.shxmbz.com`
+- `www.tvwallmountreview.com`
+- `yaleyishu.com`
+- `yqshu8.com`
+- `yahuawang88.com`
+- `www.syzhzs.com`
+- `syzhzs.com`
+
+共同模式:
+
+- `home|200` 已有
+- `home|301` 仍在
+- 高频异常多为 `/|301`
+
+补充信号:
+
+- `syzhzs.com` 已出现 `category|200 = 2`
+
+结论:
+
+- 这批站适合作为“首页已稳、等待分类和深页自然扩散”的观察池
+
+## 给主 Codex 的动作优先级
+
+### 1. 首页直达化
+
+当前最统一、最广泛的问题仍是:
+
+- `/|301`
+
+主线优化应优先检查:
+
+- `http -> https`
+- `www -> 非 www` 或反向规范
+- 首页最终规范地址是否在配置、模板、链接输出中一致
+
+### 2. 深页减损
+
+对 `yagyjt.com` 这类已验证深抓的站点,优先目标不是“发明新入口”,而是:
+
+- 降低 `detail|301`
+- 降低 `play|301`
+
+### 3. 错误入口降噪
+
+对 `qf123.net`、`sctyjz.com` 这类站点,当前更应该先处理:
+
+- 旧后台
+- 旧上传组件
+- 旧伪静态路径
+
+### 4. host 规范收敛
+
+当前多个站点都存在:
+
+- 裸域和 `www` 同时被抓
+- 两边都出现 `home|200` 和 `home|301`
+
+主线优化要继续盯:
+
+- canonical
+- sitemap
+- 站内链接输出
+- 首页最终规范 host
+
+### 5. 分类层继续观察
+
+当前 `category|200` 仍然很弱,因此分类层不是这一轮最主要的问题,但需要继续监测。
+
+## 建议的主线推进顺序
+
+如果主 Codex 要从日志观察进入实现验证,更合理的顺序是:
+
+1. 先压首页层 `301`
+2. 再压深页层 `301`
+3. 再清高频错误入口 `404`
+4. 再观察 `category -> detail -> play` 是否自然扩散
+
+不建议的顺序是:
+
+- 还没把入口损耗压下去,就先大改深抓结构
+
+## 本轮本地分析材料
+
+本轮观察细节已沉淀在以下本地分析文档:
+
+- `code/storage/_analysis/sources/baiduspider.md`
+- `code/storage/_analysis/sources/baiduspider-priority-2026-04-16.md`
+- `code/storage/_analysis/sources/baiduspider-action-checklist-2026-04-16.md`
+- `code/storage/_analysis/domains/yagyjt.com.md`
+- `code/storage/_analysis/domains/qf123.net.md`
+- `code/storage/_analysis/domains/ningxiaowei-hosts.md`
+- `code/storage/_analysis/domains/sctyjz.com.md`
+- `code/storage/_analysis/domains/ap-hulan.com.md`
+- `code/storage/_analysis/domains/haotianhaiyuan-hymdrz-hosts.md`
+- `code/storage/_analysis/domains/home-stable-cluster.md`
+
+## 交接结论
+
+本轮可以正式交给主 Codex 的核心结论只有一句:
+
+> 现在最值得做的不是继续证明蜘蛛有没有来,而是先系统性降低首页、深页和历史错误入口造成的 `301/404` 抓取预算损耗。
diff --git a/docs/old-tmp-seo/03-老模板蜘蛛日志与代码映射交接文档-2026-04-16.md b/docs/old-tmp-seo/03-老模板蜘蛛日志与代码映射交接文档-2026-04-16.md
new file mode 100644
index 0000000..49d34da
--- /dev/null
+++ b/docs/old-tmp-seo/03-老模板蜘蛛日志与代码映射交接文档-2026-04-16.md
@@ -0,0 +1,326 @@
+# 1272-SEONexus 老模板蜘蛛日志与代码映射交接文档 - 2026-04-16
+
+## 目的
+
+这份文档是在 `1271` 的基础上继续往前走一步:
+
+- 不再只停留在日志现象
+- 而是把当前蜘蛛日志现象,映射到项目里最可能对应的代码位置
+
+这样主 Codex 接手时,可以直接从关键入口开始排查,而不是重新全仓翻一遍。
+
+## 和前置文档的关系
+
+- `1269`:定义第一阶段目标
+- `1270`:定义协作边界
+- `1271`:沉淀蜘蛛日志观察结论
+- `1272`:把观察结论映射到代码入口
+
+## 当前最关键的代码位置
+
+### 1. 路由层
+
+主要文件:
+
+- [router.php](/www/wwwroot/VideoSource2/code/app/home/config/router.php)
+
+关键点:
+
+- `robots`、`sitemap`、`rss`、`sitemap_index`、`sitemap-main`、`sitemap-videos-*` 都在这里注册
+- `videoGpt1` 分支里额外注册了大量历史详情页/播放页兼容路由
+- 这些兼容路由正好和日志里高频出现的旧路径高度一致
+
+直接对应的日志现象:
+
+- `/voddetail/...|301`
+- `/vodplay/...|301`
+- `/video-info/...|301`
+- `/video-play/...|301`
+- `/video-show/...|301`
+- `/shipin/...|301`
+
+结论:
+
+> 这批深页历史入口并不是“无路由直接 404”,而是已经被路由层接住了。日志里大量 `301 -> 200` 的前提条件之一,就是这里的兼容路由在工作。
+
+### 2. URL 规范输出层
+
+主要文件:
+
+- [UrlBuilder.php](/www/wwwroot/VideoSource2/code/app/common/helper/UrlBuilder.php)
+- [VideoService.php](/www/wwwroot/VideoSource2/code/app/services/VideoService.php)
+
+关键点:
+
+- `UrlBuilder::detail()` 默认走 `voddetail/{strPinyin}-{intVId}`
+- `UrlBuilder::play()` 默认走 `vodplay/{strPinyin}-{intVId}-{strPlayType}-{intPlayIndex}`
+- `VideoService::getVideoInfoUrl()` / `getVideoPlayUrl()` 在 `videoGpt1` 下优先走 `UrlBuilder`
+
+直接对应的日志现象:
+
+- 当前仍有大量 `voddetail` / `vodplay` 命中
+- 同时又能看到 `video-info` / `video-play` / `video-show` 命中
+
+结论:
+
+> 当前项目里“规范输出路径”和“兼容接入路径”是两层结构。`UrlBuilder` 更像主输出,`router.php` 里的兼容列表负责兜住历史入口。
+
+## 和首页 `/|301` 最相关的代码点
+
+### 1. DomainModel 的 host 归一口径
+
+主要文件:
+
+- [DomainModel.php](/www/wwwroot/VideoSource2/code/app/model/DomainModel.php)
+
+关键点:
+
+- 存在 `canonical_mode`
+- 存在 `play_index_mode`
+- 多处会对 host 做 `preg_replace('/^www\\./', '', ...)`
+
+这说明:
+
+- 系统里已经有“规范 host / canonical 策略”的概念
+- 但从日志看,裸域和 `www` 仍然同时被抓,说明这套策略没有完全在前台最终输出和真实访问上闭环
+
+### 2. SiteContext 的域名识别口径
+
+主要文件:
+
+- [SiteContext.php](/www/wwwroot/VideoSource2/code/app/services/SiteContext.php)
+
+关键点:
+
+- `getTemplate()` 用的是 `Request->rootDomain()`
+- 然后用 root domain 去取 `DomainModel`
+
+对应判断:
+
+- 这有利于让 `www.xxx.com` 和 `xxx.com` 落到同一个站点配置
+- 但这本身不会自动消除首页 `301`
+- 它更多解决的是“能不能识别到站点”,不是“是否直达最终规范 host”
+
+结论:
+
+> 日志里大量 `/|301` 更可能是前台实际访问入口、host 规范和模板/链接输出之间还没有完全统一,而不只是域名识别不到。
+
+## 和深页 `301` 最相关的代码点
+
+### 1. 兼容路由列表
+
+主要文件:
+
+- [router.php](/www/wwwroot/VideoSource2/code/app/home/config/router.php:166)
+
+这里显式注册了大量历史深页入口,包括:
+
+- `voddetail`
+- `vodinfo`
+- `vod`
+- `video-info`
+- `video-detail`
+- `video`
+- `shipin`
+- `vodplay`
+- `video-play`
+- `video-show`
+- `shipin-play`
+- `shipin-bofang`
+
+这和日志完全对上了。
+
+结论:
+
+> 现在看到的大量深页 `301`,很可能正是“旧入口先接住,再跳到当前 family 主输出 URL”的结果。
+
+### 2. VideoService 的主输出链接
+
+主要文件:
+
+- [VideoService.php](/www/wwwroot/VideoSource2/code/app/services/VideoService.php:80)
+
+关键点:
+
+- 详情页和播放页主输出都优先走 `UrlBuilder`
+- 如果站点 family 不是历史路径样式,那么历史外链进来后出现一次 `301` 是符合当前结构的
+
+这也解释了为什么:
+
+- `yagyjt.com` 已经能深抓
+- 但 `detail|301` / `play|301` 仍然很高
+
+结论:
+
+> 代码结构上,深页 301 并不奇怪;真正值得主 Codex 继续排的是:哪些 `301` 是必要兼容,哪些 `301` 已经可以进一步压缩。
+
+## 和 canonical / robots 最相关的代码点
+
+### 1. SiteStyle 的 SEO meta 构建
+
+主要文件:
+
+- [SiteStyle.php](/www/wwwroot/VideoSource2/code/app/common/helper/SiteStyle.php:1800)
+
+关键点:
+
+- `detectPageType()` 目前只明确识别:
+ - `home`
+ - `voddetail/*` -> `detail`
+ - `vodplay/*` -> `play`
+ - `search`
+ - 部分 `rank`
+ - 部分 `category`
+- `buildSeoMeta()` 里:
+ - detail 默认 `index,follow`
+ - play 默认 `noindex,follow`
+ - play canonical 会回指 detail
+
+### 2. 当前存在的明显风险
+
+`guessDetailUrlFromVideo()` 目前是硬编码回:
+
+- `/voddetail/{slug}-{id}`
+- 或 `/voddetail/{id}`
+
+这意味着:
+
+- 如果站点当前主 family 并不以 `voddetail` 作为规范详情路径
+- 或者主输出已经切到别的 detail pattern
+- 那么模板 canonical 就可能和当前主输出路径不完全一致
+
+这是当前最值得主 Codex 重点核对的一点。
+
+### 3. DomainModel 配置和模板输出暂未明显打通
+
+虽然 `DomainModel` 已有:
+
+- `canonical_mode`
+- `play_index_mode`
+
+但从当前代码检索结果看:
+
+- 这些配置主要存在于模型默认值、标准化、bootstrap 汇总
+- 前台模板 meta 生成仍主要靠 `SiteStyle::buildSeoMeta()`
+- 而 `SiteStyle::buildSeoMeta()` 没有明显读取 `DomainModel` 的这两个配置
+
+结论:
+
+> 现在“配置层有 canonical/play_index 策略”和“前台模板真实输出什么 canonical/robots”之间,存在未完全打通的风险。
+
+## 和 sitemap 最相关的代码点
+
+### 1. 前台 sitemap 读取
+
+主要文件:
+
+- [SiteContext.php](/www/wwwroot/VideoSource2/code/app/services/SiteContext.php:505)
+
+关键点:
+
+- `getSiteMapByCode()` 只是按约定文件名读取 `storage/SiteMap/{domain}/...`
+- 如果文件不存在,直接返回 `404`
+
+这说明:
+
+- `sitemap*.xml` 的稳定性,既依赖路由,也依赖离线文件是否实际生成成功
+
+### 2. sitemap 生成逻辑
+
+主要文件:
+
+- [SiteMapLogic.php](/www/wwwroot/VideoSource2/code/app/task/logic/SiteMapLogic.php)
+- [VideoSiteMapLogic.php](/www/wwwroot/VideoSource2/code/app/task/logic/VideoSiteMapLogic.php)
+
+关键点:
+
+- 两处生成逻辑里多次直接写:
+ - `https://www.{$DomainModel->d_domain}/...`
+- `VideoSiteMapLogic` 生成视频详情页时,会优先读当前 `url_family['detail']['pattern']`
+- 但最终 host 仍然是硬拼 `https://www.` + domain
+
+这和日志里的 host 分裂现象是高度相关的。
+
+结论:
+
+> 如果站点真实规范 host 不是 `www`,或者前台访问并没有完全锁在 `www`,那么 sitemap 长期输出 `https://www.xxx.com/...` 本身就可能持续制造首页和深页的规范化跳转。
+
+## 和“非 404 而是随机回落”的代码点
+
+主要文件:
+
+- [VideoService.php](/www/wwwroot/VideoSource2/code/app/services/VideoService.php:760)
+
+关键点:
+
+- `getVideoByVId()` 在直接按 `v_id` 查不到时,会进入 `resolveFallbackVideoByRequest()`
+- `resolveFallbackVideoByRequest()` 会:
+ - 先看绑定表
+ - 再随机采样可播放视频
+ - 再做兜底有序回落
+- 命中后会把“请求的旧 id”绑定到“随机或兜底找到的新视频 id”
+
+这说明:
+
+- 某些旧深链并不一定直接 404
+- 也可能被系统兜底绑定到别的视频,再输出一个可访问页面
+
+对应日志判断:
+
+- 这能解释为什么一部分历史深链现在表现成 `301 -> 200`
+- 但也意味着 canonical 和真实内容语义一致性要特别小心
+
+## 给主 Codex 的代码排查优先级
+
+### 1. 先查 host 规范是否被多处硬编码成 `www`
+
+优先看:
+
+- `SiteMapLogic.php`
+- `VideoSiteMapLogic.php`
+- 任何模板里直接拼域名的位置
+
+原因:
+
+- 这最直接对应日志里的 `/|301`
+- 也最直接对应裸域 / `www` 分裂
+
+### 2. 再查 canonical 是否仍硬编码成 `/voddetail/...`
+
+优先看:
+
+- `SiteStyle::buildSeoMeta()`
+- `SiteStyle::guessDetailUrlFromVideo()`
+
+原因:
+
+- 当前 detail/play 主输出已经有 family 概念
+- canonical 仍硬编码 `voddetail` 风险较大
+
+### 3. 再查历史兼容路由是否仍有可压缩空间
+
+优先看:
+
+- `app/home/config/router.php` 的 legacy compat 段
+
+原因:
+
+- 这直接对应日志里大量 `video-info` / `video-play` / `video-show` / `shipin` 的命中
+- 主线要判断哪些入口必须保留,哪些入口可以进一步合并或缩短跳转链
+
+### 4. 最后查 fallback 视频绑定是否会放大“错链也 200”
+
+优先看:
+
+- `VideoService::resolveFallbackVideoByRequest()`
+
+原因:
+
+- 这条链对“减少 404”有帮助
+- 但如果过度回落,也可能把错误深链转成语义不一致的 `200`
+
+## 给主 Codex 的一句话交接
+
+如果主 Codex 要开始从实现层排这轮蜘蛛问题,最值得先看的不是模板样式,而是:
+
+> `router.php` 的历史兼容入口、`SiteStyle` 的 canonical 输出、`VideoSiteMapLogic/SiteMapLogic` 的 `www` host 拼接、以及 `VideoService` 的 fallback 回落链。
diff --git a/docs/old-tmp-seo/04-老模板蜘蛛日志观察更新-2026-04-17.md b/docs/old-tmp-seo/04-老模板蜘蛛日志观察更新-2026-04-17.md
new file mode 100644
index 0000000..578f7e7
--- /dev/null
+++ b/docs/old-tmp-seo/04-老模板蜘蛛日志观察更新-2026-04-17.md
@@ -0,0 +1,305 @@
+# 1273-SEONexus 老模板蜘蛛日志观察更新 - 2026-04-17
+
+## 目的
+
+这份文档用于承接 `1271` 和 `1272` 之后,基于 `2026-04-17` 最新代码与最新蜘蛛日志,再做一轮更新观察。
+
+本轮重点不是重新从零分析,而是回答三个问题:
+
+1. 相比 `2026-04-16`,整体抓取结构有没有变化
+2. 哪些问题确实改善了
+3. 哪些问题只是从 `301/404` 换成了新的损耗形态
+
+## 数据范围
+
+- 项目:`SEONexus`
+- 数据来源:`code/storage/domain-spider-crawl/runs/*/*/crawl-logs.summary.json`
+- 观察对象:`baiduspider`
+- 时间窗口:最近 24 小时
+- 观察日期:`2026-04-17`
+
+## 与上一轮的核心对比
+
+### `2026-04-16`
+
+- `home`: `509`
+- `other`: `266`
+- `detail`: `119`
+- `play`: `51`
+- `category`: `2`
+
+- `200`: `532`
+- `301`: `231`
+- `404`: `183`
+- `444`: `1`
+
+### `2026-04-17`
+
+- `home`: `433`
+- `other`: `106`
+- `detail`: `95`
+- `play`: `43`
+- `category`: `0`
+
+- `200`: `478`
+- `301`: `158`
+- `404`: `9`
+- `444`: `32`
+
+## 第一判断
+
+这一轮最明显的变化不是“抓取总量暴涨”,而是“损耗结构明显变化”。
+
+一句话总结:
+
+> `2026-04-17` 相比 `2026-04-16`,百度蜘蛛的 `404` 大幅下降,`301` 也明显下降,说明旧错误入口和部分跳转损耗确实被压掉了;但同时出现了一批新的 `444` 拦截信号,说明问题并没有完全消失,而是部分从“错误入口消耗”转成了“拦截型消耗”。
+
+## 本轮最值得确认的改善
+
+### 1. `404` 从 `183` 降到 `9`
+
+这是本轮最明确的正向信号。
+
+说明:
+
+- 之前那批高密度错误入口,不少已经不再继续大量落成 `404`
+- 至少从日志表现上,老的纯错误入口吞预算问题大幅缓解
+
+### 2. `301` 从 `231` 降到 `158`
+
+说明:
+
+- 首页和深页的跳转损耗总体也在下降
+- 尤其是首页 `/|301` 从上一轮的 `98` 次,降到了这轮的 `59` 次
+
+这虽然还不算完全收干净,但趋势是对的。
+
+### 3. `qf123.net` 基本脱离“纯 404 黑洞”
+
+上一轮:
+
+- `qf123.net`: `other|404 = 169`
+
+这一轮:
+
+- `qf123.net` 已经没有继续出现高位 `other|404`
+- `www.qf123.net` 只看到:
+ - `home|200 = 2`
+ - `home|301 = 1`
+
+这说明:
+
+- 之前那批 `webuploader / upload / fileupload` 噪音,至少在本轮窗口中已经不再是主问题
+
+### 4. `sctyjz.com` 的首页结构比上一轮更分化
+
+上一轮:
+
+- `sctyjz.com`: `home|200 = 12`,`home|301 = 6`,`other|404 = 8`
+
+这一轮:
+
+- `sctyjz.com`: `home|200 = 3`,`other|404 = 8`
+- `www.sctyjz.com`: `home|200 = 7`,`home|301 = 1`,`other|404 = 1`
+
+说明:
+
+- 裸域和 `www` 的抓取重心更明显地往 `www` 偏了
+- 首页 `301` 的问题在 `www.sctyjz.com` 这一侧已明显下降
+- 但旧伪静态 `404` 入口仍未根治
+
+## 本轮没有解决、但结构更清楚的问题
+
+### 1. `yagyjt.com` 仍然是深抓正样本,但深页 `301` 还在高位
+
+本轮统计:
+
+- `detail|200 = 48`
+- `detail|301 = 47`
+- `play|200 = 19`
+- `play|301 = 20`
+- `home|200 = 14`
+- `home|301 = 4`
+
+对比上一轮:
+
+- `detail|200 = 59`
+- `detail|301 = 60`
+- `play|200 = 25`
+- `play|301 = 22`
+- `home|200 = 18`
+- `home|301 = 6`
+
+判断:
+
+- 深抓还在,说明正样本地位没丢
+- `home|301` 有下降,首页更干净了
+- `detail/play` 的 `301` 也略有下降
+- 但深页 `301` 和 `200` 仍然接近 1:1,主矛盾没有本质变化
+
+结论:
+
+> `yagyjt.com` 依然不是“有没有深抓”的问题,而是“深抓已经建立,但深页规范化损耗仍然偏高”。
+
+### 2. `www.ningxiaowei.com` 仍然是内容层跳转样本
+
+本轮统计:
+
+- `home|200 = 25`
+- `home|301 = 4`
+- `other|200 = 24`
+- `other|301 = 24`
+
+上一轮:
+
+- `home|200 = 66`
+- `home|301 = 5`
+- `other|200 = 20`
+- `other|301 = 18`
+
+判断:
+
+- 首页 `301` 有所下降
+- 但 `other|301` 反而更显眼了
+- 异常仍然主要落在:
+ - `/video-info/...|301`
+ - `/video-play/...|301`
+
+结论:
+
+> `www.ningxiaowei.com` 当前更像“首页稍微更干净了,但内容层历史路径兼容仍在持续吃预算”。
+
+### 3. `junhaolab.com` 仍然只是弱深抓样本
+
+本轮:
+
+- `play|200 = 2`
+- `play|301 = 2`
+
+说明:
+
+- 播放页信号还在
+- 但量级没有明显放大
+
+## 本轮新增需要重点留意的问题
+
+### 1. `444` 从 `1` 升到 `32`
+
+这轮最值得警惕的新变化就是:
+
+- `444` 明显增加
+
+目前主要出现在:
+
+- `rqgcmc.com`
+- `yagyjt.com`
+- `www.yagyjt.com`
+
+### 2. `rqgcmc.com` 出现新的拦截型异常
+
+本轮统计:
+
+- `home|200 = 8`
+- `home|301 = 4`
+- `other|444 = 27`
+
+典型异常:
+
+- `/rqgcmc.com.rar|444`
+- `/rqgcmc.com.zip|444`
+- `/rqgcmc.rar|444`
+- `/rqgcmc.zip|444`
+- `/rqgcmc.txt|444`
+- `/www.zip|444`
+- `/www.rar|444`
+- `/wwwroot.rar|444`
+
+判断:
+
+- 这不是内容层问题
+- 而是明显的探测、打包、压缩包、站点根目录类异常请求
+- 目前这些请求被 `444` 拦掉了
+
+结论:
+
+> 这类 `444` 比 `404` 更像“防探测拦截生效”,从安全上未必是坏事;但从蜘蛛日志观察角度,它仍然属于抓取预算噪音,需要和真正的 SEO 主路径分开看。
+
+### 3. `/zb_system/login.php` 从 `301/404` 变成了 `444`
+
+上一轮高频里:
+
+- `/zb_system/login.php|301`
+- `/zb_system/login.php|404`
+
+这一轮高频里:
+
+- `/zb_system/login.php|444 = 4`
+
+判断:
+
+- 这说明后台历史入口仍在被命中
+- 只是处理方式从跳转/未找到,变成了直接拦截
+
+## 当前阶段的新结论
+
+本轮比上一轮更适合用“三类变化”来理解:
+
+### 1. 确认改善的
+
+- `404` 大幅下降
+- 首页 `/|301` 明显下降
+- `qf123.net` 的错误入口黑洞基本消失
+
+### 2. 改善有限但方向正确的
+
+- `yagyjt.com` 首页与深页 `301` 略降
+- `sctyjz.com` 的 `www` 侧首页更干净
+
+### 3. 新暴露出来的
+
+- `444` 上升
+- 一批探测型、压缩包型、后台入口型异常被直接拦截
+
+## 给主 Codex 的更新建议
+
+### 1. 不要再把当前主矛盾定义成“404 为主”
+
+`2026-04-17` 这轮后,旧式 `404` 入口问题已经明显下降。
+
+现在更应该拆成:
+
+- 深页 `301` 是否还能继续压
+- 首页 `/|301` 是否还能继续压
+- `444` 是否属于可接受的防探测噪音,还是误伤了正常抓取入口
+
+### 2. `yagyjt.com` 仍然是深抓优化第一观察站
+
+因为:
+
+- 深抓仍在
+- 首页更干净了
+- 现在更容易观察“深页跳转能否进一步收敛”
+
+### 3. `www.ningxiaowei.com` 仍然是内容层历史路径兼容观察站
+
+因为:
+
+- `video-info / video-play` 仍然频繁出现
+- 更适合继续验证 canonical / family / 兼容入口是否完全统一
+
+### 4. `rqgcmc.com` 不应和普通 SEO 站点混在一起判断
+
+它当前的主要问题已经不是内容入口,而是拦截型探测噪音。
+
+### 5. `category` 仍然没有抬头
+
+这一轮没有观察到新的 `category` 扩散信号。
+
+这说明:
+
+- 首页入口虽然在改善
+- 但首页 -> 分类 -> 深页 的中继放量还没有明显出现
+
+## 一句话交接
+
+> `2026-04-17` 这轮最大的变化,是旧式 `404` 错误入口明显下降、首页与部分深页 `301` 也在下降,但问题没有完全消失,而是部分转成了 `444` 拦截型噪音;下一步更值得主 Codex 盯的是深页 `301` 压缩和 `444` 是否只是安全噪音而非误伤 SEO 主路径。
diff --git a/docs/old-tmp-seo/05-老模板蜘蛛日志变化与代码判断更新-2026-04-17.md b/docs/old-tmp-seo/05-老模板蜘蛛日志变化与代码判断更新-2026-04-17.md
new file mode 100644
index 0000000..398d935
--- /dev/null
+++ b/docs/old-tmp-seo/05-老模板蜘蛛日志变化与代码判断更新-2026-04-17.md
@@ -0,0 +1,252 @@
+# 1274-SEONexus 老模板蜘蛛日志变化与代码判断更新 - 2026-04-17
+
+## 目的
+
+这份文档是在 `1272` 与 `1273` 的基础上,继续把最新日志变化往代码判断上推进一步。
+
+这一轮重点回答两个问题:
+
+1. 为什么 `2026-04-17` 的 `404` 会明显下降
+2. 为什么同一时间又出现更多 `444`
+
+## 和前置文档的关系
+
+- `1271`:日志观察首轮结论
+- `1272`:日志现象与代码位置映射
+- `1273`:`2026-04-17` 新日志更新
+- `1274`:针对 `404 -> 444` 结构变化的代码判断
+
+## 本轮关键结论
+
+一句话总结:
+
+> `2026-04-17` 这一轮里,`404` 下降更像是“历史深链和错误 ID 被更多地兜住了”,而 `444` 上升目前没有在应用层看到直接返回逻辑,更像是前置层或安全规则拦截带来的新噪音形态。
+
+## 一、为什么 `404` 会明显下降
+
+### 1. 旧深页入口早就不是直接裸 404
+
+核心文件:
+
+- [router.php](/www/wwwroot/VideoSource2/code/app/home/config/router.php)
+
+已经明确存在大量历史兼容入口:
+
+- `voddetail`
+- `vodinfo`
+- `vod`
+- `video-info`
+- `video-detail`
+- `video`
+- `shipin`
+- `vodplay`
+- `video-play`
+- `video-show`
+- `shipin-play`
+- `shipin-bofang`
+
+这意味着:
+
+- 日志里的旧详情页、旧播放页路径
+- 很多并不是“根本没路由,直接 404”
+- 而是已经被路由先接住了
+
+所以 `404` 的下降,不能只理解成“错误入口少了”,也要理解成“已有更多旧入口被应用层成功承接”。
+
+### 2. VideoService 存在明显的 fallback 回退链
+
+核心文件:
+
+- [VideoService.php](/www/wwwroot/VideoSource2/code/app/services/VideoService.php:905)
+
+关键逻辑:
+
+- `getVideoByVId()` 查不到原始 `v_id` 时,不会立刻结束
+- 而是进入 `resolveFallbackVideoByRequest()`
+
+`resolveFallbackVideoByRequest()` 的处理顺序是:
+
+1. 先读 host 维度的 fallback 绑定表
+2. 如果已有绑定,则直接回用之前找到的视频
+3. 没绑定时,从库里随机采样一批视频
+4. 找到可用视频后,把“请求旧 id -> 真实新 id”的绑定写入本地文件
+5. 如果随机采样还失败,再走按排序兜底
+
+对应代码点:
+
+- `readFallbackBindings()`
+- `writeFallbackBindings()`
+- `fallbackBindingsPath()`
+- `_fallback_reason = bound_random_video / random_video / ordered_fallback_video`
+
+### 3. 这条链足以解释一部分“404 明显下降”
+
+这意味着:
+
+- 某些过去会直接 404 的旧视频 ID
+- 现在可能被 fallback 机制回落成一个可访问页面
+
+所以:
+
+- `404` 下降未必全部来自“外部噪音消失”
+- 也可能来自“应用层兜底更积极了”
+
+这对 SEO 的影响有两面性:
+
+- 正面:减少了硬 404,抓取预算不再直接浪费
+- 风险:如果旧 URL 被回落到语义不一致的视频页,就会带来 canonical 和内容一致性风险
+
+## 二、为什么 `444` 会明显上升
+
+### 1. 当前应用层没有看到明确的 `444` 返回逻辑
+
+本轮代码检索没有在应用层发现:
+
+- `http_response_code(444)`
+- `return 444`
+- `HttpException(444)`
+
+这意味着:
+
+- 当前日志里的 `444`
+- 很大概率不是 ThinkPHP 应用层主动抛出来的
+
+### 2. 应用层的主动拦截主要还是 `404`
+
+核心文件:
+
+- [SiteContext.php](/www/wwwroot/VideoSource2/code/app/services/SiteContext.php:560)
+
+在 `limitRequestRate()` 和 `checkCnzzCookie()` 里,可以看到多类拦截:
+
+- 黑名单 IP
+- 普通访客短时限速
+- 普通访客高频请求拉黑
+- 伪 Googlebot UA
+- `Amazonbot / zgrab / crawler` 等 UA
+- 无 CNZZ cookie 的普通访客
+
+但这些分支最终抛出的都是:
+
+- `HttpException(404, ...)`
+
+而且 `isSpider()` 里对以下蜘蛛是直接白名单放行的:
+
+- `Baiduspider`
+- `Googlebot`
+- `Sogou`
+- `Bytespider`
+- `Bingbot`
+- 等主流搜索蜘蛛
+
+这说明:
+
+- 对真实 `Baiduspider` 来说,应用层限速本身不太像当前 `444` 的直接来源
+
+### 3. 当前 `444` 更像前置层或安全规则拦截
+
+从日志表现看,`444` 主要集中在:
+
+- `/zb_system/login.php`
+- `*.rar`
+- `*.zip`
+- `*.txt`
+- `/www.rar`
+- `/wwwroot.rar`
+
+这类 URL 具有明显特点:
+
+- 都不像正常内容页
+- 更像安全探测、压缩包探测、站点根目录打包探测
+
+结合本轮代码检索结果,更合理的判断是:
+
+- 这类请求大概率在更前层就被拦掉了
+- 例如 nginx / waf / 黑名单 / 探测规则
+
+所以:
+
+- `444` 的上升不应直接按“SEO 主路径坏了”解读
+- 更像“非内容型噪音被更前层提前拒绝”
+
+## 三、对当前日志变化的更准确解释
+
+### 1. `404` 下降,不等于所有问题都解决了
+
+更准确的说法应该是:
+
+- 旧错误入口有一部分确实少了
+- 另一部分则被路由兼容和 fallback 机制兜住了
+
+### 2. `444` 上升,不等于主内容路径一定被误伤
+
+更准确的说法应该是:
+
+- 当前看到的 `444`
+- 主要还集中在探测型、后台型、压缩包型 URL
+
+如果后续 `444` 开始扩散到:
+
+- `robots.txt`
+- `sitemap*.xml`
+- `/`
+- `detail`
+- `play`
+
+那才是更值得警惕的 SEO 主路径误伤。
+
+### 3. 目前最值得继续盯的仍然是深页 `301`
+
+原因很简单:
+
+- `404` 下降已是阶段性利好
+- `444` 当前更像安全噪音
+- 但 `yagyjt.com` 这类站点的 `detail|301 / play|301` 仍接近 `200`
+
+这说明:
+
+- 主内容抓取链路的最大损耗,依然还在深页规范化
+
+## 四、给主 Codex 的代码排查建议更新
+
+### 1. 优先继续查深页规范化,不要被 `444` 全部带偏
+
+当前 `444` 虽然增加,但从现象和代码看:
+
+- 还更像边缘噪音
+- 暂时不像主内容入口集体误伤
+
+所以主线仍应优先:
+
+- 查 detail/play 主输出和兼容跳转链
+- 查 canonical 是否和当前 family 一致
+
+### 2. 对 fallback 机制要做“收益”和“风险”双向评估
+
+`VideoService::resolveFallbackVideoByRequest()` 这条链现在值得主 Codex 明确判断:
+
+- 它是不是正在帮我们减少 404
+- 它是否会把错误 deep link 回落到语义不相干内容
+- 这是否会影响 canonical、一致性、搜索引擎理解
+
+### 3. `444` 这条线更适合联动前置层配置看
+
+因为当前仓库内没有明显应用层 `444` 返回实现,所以如果主 Codex 要深挖 `444`,下一步更应该查:
+
+- nginx 配置
+- 前置防护规则
+- UA / 路径黑名单策略
+
+而不是只在 PHP 应用层里继续找。
+
+## 五、补充说明
+
+本轮尝试查看仓库最近提交时,`git` 返回了仓库 ownership 安全限制:
+
+- `fatal: detected dubious ownership in repository at '/www/wwwroot/VideoSource2'`
+
+因此这次没有继续依赖 `git log` 判断“哪次提交导致了日志变化”,这里只基于当前代码结构和最新日志做判断。
+
+## 一句话交接
+
+> 当前 `404` 的显著下降,很可能既有入口噪音减少的因素,也有 `VideoService` fallback 兜底在起作用;而 `444` 的上升目前更像前置层拦截探测噪音,不像应用层主动误伤主内容入口,所以主 Codex 仍应优先盯深页 `301` 和 canonical/family 一致性。
diff --git a/docs/old-tmp-seo/06-主Codex可执行检查清单-2026-04-17.md b/docs/old-tmp-seo/06-主Codex可执行检查清单-2026-04-17.md
new file mode 100644
index 0000000..d9140da
--- /dev/null
+++ b/docs/old-tmp-seo/06-主Codex可执行检查清单-2026-04-17.md
@@ -0,0 +1,228 @@
+# 1275-SEONexus 主 Codex 可执行检查清单 - 2026-04-17
+
+## 目的
+
+这份文档用于把 `1271` 到 `1274` 的分析,压缩成主 Codex 可以直接开干的检查清单。
+
+目标不是重复分析结论,而是明确:
+
+1. 先看哪几个文件
+2. 每个文件要判断什么
+3. 哪些问题优先级最高
+
+## 当前建议的排查顺序
+
+### 1. 先查深页兼容入口是否仍然过宽
+
+优先级:`P0`
+
+文件:
+
+- [router.php](/www/wwwroot/VideoSource2/code/app/home/config/router.php:209)
+
+重点看:
+
+- `legacyCompatRoutes` 里注册了多少历史 `detail/play` 入口
+- 哪些入口现在仍然在日志里高频出现
+- 哪些入口只是历史遗留,但已经几乎没有真实命中
+
+当前直接对应的高频路径:
+
+- `/voddetail/...`
+- `/vodplay/...`
+- `/video-info/...`
+- `/video-play/...`
+- `/video-show/...`
+- `/vodbf/...`
+
+要回答的问题:
+
+- 这些兼容入口是否都还必须保留
+- 是否存在“先接住再跳一次”的非必要链路
+- 是否可以把部分兼容入口进一步统一到更少的规范路径
+
+判断标准:
+
+- 如果某类旧入口仍然是百度高频命中来源,就不能贸然删
+- 但如果它只是为了兼容而兼容,且跳转链过长,就应优先考虑压缩
+
+## 2. 再查 canonical 是否仍然和当前 family 脱节
+
+优先级:`P0`
+
+文件:
+
+- [SiteStyle.php](/www/wwwroot/VideoSource2/code/app/common/helper/SiteStyle.php:1803)
+- [SiteStyle.php](/www/wwwroot/VideoSource2/code/app/common/helper/SiteStyle.php:1831)
+- [SiteStyle.php](/www/wwwroot/VideoSource2/code/app/common/helper/SiteStyle.php:1868)
+
+重点看:
+
+- `detectPageType()` 目前只识别 `voddetail/*` 和 `vodplay/*`
+- `guessDetailUrlFromVideo()` 仍硬编码回 `/voddetail/...`
+- `buildSeoMeta()` 的 canonical 生成没有明显读取当前站点 family
+
+要回答的问题:
+
+- 当前模板 canonical 是否仍然默认指向 `voddetail`
+- 如果某站主输出不是 `voddetail`,canonical 会不会和真实输出路径冲突
+- `play` 页 canonical 回 `detail` 时,是否一定回到了正确 family 下的 detail URL
+
+判断标准:
+
+- 如果 canonical 指向的不是当前规范输出 URL,这就是高优先级修复点
+- 这条线和 `yagyjt.com`、`www.ningxiaowei.com` 的深页 `301` 很可能直接相关
+
+## 3. 再查 sitemap 是否持续硬编码 `https://www.`
+
+优先级:`P0`
+
+文件:
+
+- [VideoSiteMapLogic.php](/www/wwwroot/VideoSource2/code/app/task/logic/VideoSiteMapLogic.php:196)
+- [VideoSiteMapLogic.php](/www/wwwroot/VideoSource2/code/app/task/logic/VideoSiteMapLogic.php:203)
+- [SiteMapLogic.php](/www/wwwroot/VideoSource2/code/app/task/logic/SiteMapLogic.php:157)
+- [SiteMapLogic.php](/www/wwwroot/VideoSource2/code/app/task/logic/SiteMapLogic.php:177)
+- [SiteMapLogic.php](/www/wwwroot/VideoSource2/code/app/task/logic/SiteMapLogic.php:193)
+
+重点看:
+
+- 视频 sitemap 虽然已经开始读 `url_family['detail']['pattern']`
+- 但最终 host 仍然是 `https://www.` + domain
+- 小说 sitemap / 分类 / 章节相关输出同样大量直接拼 `https://www.`
+
+要回答的问题:
+
+- 当前真实规范 host 到底是不是 `www`
+- 如果不是,sitemap 是否正在持续制造 `/|301` 和 host 规范化跳转
+- sitemap 与 canonical、站内链接是否在同一 host 口径下
+
+判断标准:
+
+- 只要 sitemap 输出 host 和真实规范 host 不一致,这就是首页与深页 `301` 的高风险来源
+
+## 4. 评估 fallback 机制是在“止血”还是在“制造语义偏差”
+
+优先级:`P1`
+
+文件:
+
+- [VideoService.php](/www/wwwroot/VideoSource2/code/app/services/VideoService.php:821)
+- [VideoService.php](/www/wwwroot/VideoSource2/code/app/services/VideoService.php:905)
+- [VideoService.php](/www/wwwroot/VideoSource2/code/app/services/VideoService.php:1021)
+
+重点看:
+
+- `getVideoByVId()` 查不到时会进入 `resolveFallbackVideoByRequest()`
+- fallback 会写入 host 维度的本地绑定文件
+- 可能把旧 `v_id` 回落到随机或排序兜底视频
+
+要回答的问题:
+
+- 这条链当前到底拯救了多少原本会 404 的深链
+- 回落后的页面内容是否和原始 URL 语义足够接近
+- 是否需要限制 fallback 的适用范围,例如只对某些入口生效
+
+判断标准:
+
+- 如果 fallback 只是减少硬 404,它有价值
+- 但如果它让错误 deep link 长期稳定落到无关视频,这会引入新的 SEO 误导风险
+
+## 5. `444` 不优先在 PHP 里深挖,先确认前置层
+
+优先级:`P1`
+
+文件:
+
+- [SiteContext.php](/www/wwwroot/VideoSource2/code/app/services/SiteContext.php:560)
+
+当前已知判断:
+
+- 应用层主动拦截主要抛的是 `404`
+- `isSpider()` 已对白名单蜘蛛放行
+- 当前仓库里没有明显应用层 `444` 返回逻辑
+
+要回答的问题:
+
+- `444` 是否来自 nginx / waf / 路径探测拦截
+- 当前 `444` 是否已经波及:
+ - `/`
+ - `robots.txt`
+ - `sitemap*.xml`
+ - `detail`
+ - `play`
+
+判断标准:
+
+- 如果 `444` 只集中在 `.rar/.zip/.txt/zb_system` 这类路径,先视为安全噪音
+- 如果开始进入首页、sitemap、深页主路径,再提升为 `P0`
+
+## 当前最值得优先验证的 5 个判断
+
+### 1. `yagyjt.com` 的深页 `301` 是否主要来自 canonical / family 不一致
+
+因为:
+
+- 它已经是明确深抓正样本
+- 但 `detail|301` / `play|301` 仍接近 `200`
+
+### 2. `www.ningxiaowei.com` 的 `video-info / video-play` 是否只是兼容入口过多
+
+因为:
+
+- 这批路径仍然高频出现
+- 很适合作为“内容层兼容是否还能继续收口”的观察站
+
+### 3. sitemap 输出 host 是否和真实规范 host 一致
+
+因为:
+
+- 这条线会同时影响首页 `/|301`
+- 也会影响深页入口持续规范化跳转
+
+### 4. fallback 绑定文件是否正在稳定扩大“错误 deep link -> 可访问页面”的覆盖
+
+因为:
+
+- 这可能解释 `404` 的大幅下降
+- 同时也可能埋下语义偏差风险
+
+### 5. `444` 是否已经误伤真实搜索蜘蛛主路径
+
+因为:
+
+- 目前看更像前置层安全噪音
+- 但这个结论需要持续观察,不应直接定死
+
+## 建议的执行节奏
+
+### 第一轮
+
+- 只读检查 `router.php`
+- 只读检查 `SiteStyle.php`
+- 只读检查 `VideoSiteMapLogic.php` / `SiteMapLogic.php`
+
+目标:
+
+- 先确认深页主输出、兼容入口、canonical、sitemap host 是否在同一规范口径
+
+### 第二轮
+
+- 再看 `VideoService` fallback
+
+目标:
+
+- 判断 `404` 的下降里有多少是“真实修复”
+- 有多少是“应用层兜底”
+
+### 第三轮
+
+- 再去联动前置层查 `444`
+
+目标:
+
+- 确认 `444` 是安全噪音,还是已经开始误伤 SEO 主路径
+
+## 给主 Codex 的一句话
+
+> 如果只能先看 3 个地方,就先看 `router.php` 的历史深页兼容、`SiteStyle.php` 的 canonical 构建、以及 `VideoSiteMapLogic/SiteMapLogic` 的 `https://www.` host 拼接;这三条线最有可能直接对应当前仍未收口的深页 `301` 和首页 `/|301`。
diff --git a/docs/old-tmp-seo/07-主Codex检查清单补充修正-2026-04-17.md b/docs/old-tmp-seo/07-主Codex检查清单补充修正-2026-04-17.md
new file mode 100644
index 0000000..3bae2fe
--- /dev/null
+++ b/docs/old-tmp-seo/07-主Codex检查清单补充修正-2026-04-17.md
@@ -0,0 +1,172 @@
+# 1276-SEONexus 主 Codex 检查清单补充修正 - 2026-04-17
+
+## 目的
+
+这份文档用于补充修正 `1272` 到 `1275` 之间一个很关键的判断差异:
+
+- `SiteStyle::buildSeoMeta()` 确实存在 canonical 兜底逻辑
+- 但对当前重点观察的 `videoGpt1` 视频模板来说,它未必是前台实际 canonical 的主输出来源
+
+这会直接影响主 Codex 的排查顺序。
+
+## 本轮补充结论
+
+一句话总结:
+
+> 当前 `videoGpt1` 下,真正更值得优先核对的不是 `SiteStyle::buildSeoMeta()`,而是模板里实际写死的 canonical host 口径,以及 sitemap 里统一写成 `https://www.` 的 host 口径是否冲突。
+
+## 一、为什么这是一个重要修正
+
+### 1. `SiteStyle::buildSeoMeta()` 不是当前视频模板最直接的 canonical 输出源
+
+虽然代码里有:
+
+- [SiteStyle.php](/www/wwwroot/VideoSource2/code/app/common/helper/SiteStyle.php:1831)
+
+而且里面存在:
+
+- `play` 页 canonical 推断
+- `guessDetailUrlFromVideo()` 硬编码 `/voddetail/...`
+
+但这次继续对模板后发现,`videoGpt1` 的视频模板实际是自己输出 canonical。
+
+### 2. `videoGpt1` 详情页模板实际 canonical
+
+文件:
+
+- [getVideoInfo.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getVideoInfo.html:39)
+
+当前实际写法:
+
+```html
+
+```
+
+这说明:
+
+- 详情页 canonical 不是由 `SiteStyle::buildSeoMeta()` 直接输出
+- 它走的是模板标签 `{site:vurl ...}`,也就是更贴近当前路由/URL 生成体系
+
+### 3. `videoGpt1` 播放页模板实际 canonical
+
+文件:
+
+- [getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getVideoPlayUrl.html:117)
+
+当前实际写法:
+
+```html
+
+```
+
+并且:
+
+- `$strPlayCanonicalUrl` 来自 `VideoService::getVideoPlayUrl()`
+- 不是回详情页
+- 而是当前播放页自身 URL
+
+这说明:
+
+- 当前 `videoGpt1` 播放页 canonical 逻辑,与 `SiteStyle::buildSeoMeta()` 里“play canonical -> detail”的兜底设想并不一致
+
+## 二、这会带来什么新的主线判断
+
+### 1. 当前更大的风险,不是 `voddetail` 硬编码本身
+
+对 `videoGpt1` 视频页来说,更值得优先核对的是:
+
+- canonical host 到底是 `https://domain`
+ 还是
+- `https://www.domain`
+
+因为当前模板里写的是:
+
+- `https://{$DomainModel->d_domain}`
+
+而 sitemap 生成逻辑里大量写的是:
+
+- `https://www.{$DomainModel->d_domain}`
+
+这两条线如果同时存在,就会直接制造:
+
+- 首页 `/|301`
+- 深页 host 规范化 `301`
+
+### 2. 当前“模板 canonical”和“sitemap canonical host”口径明显可能不一致
+
+模板侧:
+
+- 详情页 canonical:`https://{$DomainModel->d_domain}...`
+- 播放页 canonical:`https://{$DomainModel->d_domain}...`
+- 首页 canonical:`https://{$DomainModel->d_domain}/`
+
+可以参考:
+
+- [index.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/index/index.html:99)
+- [getCategory.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getCategory.html:34)
+- [getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getCategoryType.html:15)
+
+sitemap 侧:
+
+- [VideoSiteMapLogic.php](/www/wwwroot/VideoSource2/code/app/task/logic/VideoSiteMapLogic.php:203)
+- [SiteMapLogic.php](/www/wwwroot/VideoSource2/code/app/task/logic/SiteMapLogic.php:158)
+
+都在大量拼:
+
+- `https://www.{$DomainModel->d_domain}...`
+
+这意味着:
+
+- 如果站点真实最终规范 host 不是 `www`
+- 那么 sitemap 就在持续喂给蜘蛛一批要再跳一次的 URL
+
+## 三、对 `1275` 的执行顺序修正
+
+### 第一优先级仍然不变
+
+还是先看:
+
+1. 深页兼容入口
+2. canonical
+3. sitemap host
+
+### 但 canonical 这条线的落点要修正
+
+主 Codex 在 `videoGpt1` 下应该优先看:
+
+- 视频模板里真实输出的 canonical
+
+而不是先把精力放在:
+
+- `SiteStyle::buildSeoMeta()` 的 `voddetail` 兜底
+
+因为从当前代码看,后者更像兜底工具,不像视频模板主输出源。
+
+## 四、现在最可能优先改的 3 个点
+
+### 1. 统一 canonical 和 sitemap 的 host 口径
+
+这是当前最像“能直接减少 `/|301` 与 host 301”的点。
+
+### 2. 核对播放页 canonical 是否应该保留在播放页自身
+
+当前播放页模板 canonical 指向播放页自己,不是详情页。
+
+这条线值得主 Codex 明确判断:
+
+- 当前策略是不是故意的
+- 是否符合当前 SEO 设计目标
+- 是否会放大 `play|301` 或索引策略混乱
+
+### 3. 继续压缩历史兼容入口
+
+因为日志里仍然高频出现:
+
+- `video-info`
+- `video-play`
+- `video-show`
+- `vodbf`
+
+## 五、给主 Codex 的一句话修正
+
+> `videoGpt1` 当前最值得先查的 canonical 问题,不是 `SiteStyle` 里那段 `/voddetail` 兜底,而是模板实际输出的 `https://{$DomainModel->d_domain}` 和 sitemap 统一输出的 `https://www.{$DomainModel->d_domain}` 之间,是否正在持续制造 host 级 301。
diff --git a/docs/old-tmp-seo/08-第一轮只读代码审查发现-2026-04-17.md b/docs/old-tmp-seo/08-第一轮只读代码审查发现-2026-04-17.md
new file mode 100644
index 0000000..e66c23c
--- /dev/null
+++ b/docs/old-tmp-seo/08-第一轮只读代码审查发现-2026-04-17.md
@@ -0,0 +1,240 @@
+# 1277-SEONexus 第一轮只读代码审查发现 - 2026-04-17
+
+## 目的
+
+这份文档是在 `1275` 和 `1276` 的基础上,进一步给主 Codex 提供“第一轮只读代码审查发现”。
+
+这不是改动方案文档,而是:
+
+- 先列发现
+- 再说明为什么它可能对应当前蜘蛛日志
+- 方便主 Codex 直接决定先改哪一处
+
+## 发现一:模板 canonical host 与 sitemap host 口径明显不一致
+
+严重度:`高`
+
+### 证据
+
+`videoGpt1` 模板侧 canonical 普遍使用:
+
+- [index.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/index/index.html:99)
+- [getCategory.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getCategory.html:34)
+- [getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getCategoryType.html:15)
+- [getVideoInfo.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getVideoInfo.html:39)
+- [getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getVideoPlayUrl.html:117)
+
+这些位置都在输出:
+
+- `https://{$DomainModel->d_domain}...`
+
+而 sitemap 生成侧:
+
+- [VideoSiteMapLogic.php](/www/wwwroot/VideoSource2/code/app/task/logic/VideoSiteMapLogic.php:203)
+- [SiteMapLogic.php](/www/wwwroot/VideoSource2/code/app/task/logic/SiteMapLogic.php:158)
+
+都在直接拼:
+
+- `https://www.{$DomainModel->d_domain}...`
+
+### 为什么重要
+
+如果站点真实规范 host 不是固定 `www`,那么当前系统会同时存在:
+
+- 模板 canonical 喂一套 host
+- sitemap 喂另一套 host
+
+这会直接制造:
+
+- 首页 `/|301`
+- 深页 host 规范化 `301`
+- 裸域与 `www` 并行抓取
+
+### 对应当前日志
+
+这和当前多站点反复出现的:
+
+- `/|301`
+- `www` 与裸域并行命中
+
+是高度一致的。
+
+## 发现二:播放页 canonical 指向播放页自身,而不是详情页
+
+严重度:`中高`
+
+### 证据
+
+播放页模板:
+
+- [getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getVideoPlayUrl.html:117)
+
+当前输出:
+
+- ``
+
+并且:
+
+- `$strPlayCanonicalUrl` 是通过 `VideoService::getVideoPlayUrl()` 生成的当前播放页 URL
+- 不是详情页 URL
+
+### 为什么重要
+
+这意味着当前策略是:
+
+- 播放页 `robots = noindex,follow`
+- 但 canonical 仍指向播放页自己
+
+这不是绝对错误,但它值得主 Codex 明确确认设计意图:
+
+- 是不是故意让播放页保留自身规范地址
+- 还是本来希望回详情页,只是实现现在没有这么做
+
+### 对应当前日志
+
+如果播放页长期保留自己作为 canonical,再叠加历史 `video-play / video-show / vodplay` 兼容路径,就更容易形成:
+
+- `play|301`
+- 多播放路径并行规范化
+
+这和 `yagyjt.com`、`junhaolab.com` 当前的播放页 `301/200` 并存现象是对得上的。
+
+## 发现三:历史深页兼容入口数量非常大,且覆盖多组别名
+
+严重度:`高`
+
+### 证据
+
+文件:
+
+- [router.php](/www/wwwroot/VideoSource2/code/app/home/config/router.php:209)
+
+当前兼容了大量 detail/play 历史入口:
+
+- `voddetail`
+- `vodinfo`
+- `vod`
+- `video-info`
+- `video-detail`
+- `video`
+- `shipin`
+- `shipin-xiangqing`
+- `shipin-neiron`
+- `vodplay`
+- `vodbf`
+- `vodseed`
+- `video-play`
+- `video-bofang`
+- `video-show`
+- `shipin-play`
+- `shipin-bofang`
+- `shipin-kan`
+
+### 为什么重要
+
+这套兼容入口本身有价值,因为它能避免旧外链直接 404。
+
+但副作用也很明显:
+
+- 会显著扩大“先接住,再跳一次”的路径面
+- 如果 canonical、sitemap、站内链接又没有完全统一,就容易长期维持高位深页 `301`
+
+### 对应当前日志
+
+这和当前高频异常里的:
+
+- `/voddetail/...|301`
+- `/vodplay/...|301`
+- `/video-info/...|301`
+- `/video-play/...|301`
+- `/video-show/...|301`
+- `/vodbf/...|301`
+
+完全一致。
+
+## 发现四:分类页 canonical 与 og:url 口径不完全一致
+
+严重度:`中`
+
+### 证据
+
+分类列表页:
+
+- [getCategory.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getCategory.html:34)
+- [getCategory.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getCategory.html:39)
+
+当前表现为:
+
+- canonical 指向分类基础页,不显式带当前分页
+- `og:url` 指向当前分页 URL
+
+### 为什么重要
+
+这不一定是错误,因为分页页面常见策略就是:
+
+- canonical 回第一页
+- 当前页保留独立可访问 URL
+
+但如果当前页面内容与第一页差异较大,或者系统没有对深分页做更明确的 noindex/canonical 设计,就可能造成:
+
+- 蜘蛛抓取了分页
+- 但规范化信号又全部回第一页
+
+### 当前判断
+
+这条不是现在最优先要改的点,但值得主 Codex 顺手确认是否符合当前分页 SEO 设计。
+
+## 发现五:详情页 canonical、列表页 canonical、首页 canonical 都统一走非 `www` 口径
+
+严重度:`中高`
+
+### 证据
+
+可以从以下模板直接看到:
+
+- [首页 canonical](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/index/index.html:99)
+- [分类页 canonical](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getCategory.html:34)
+- [一级分类 canonical](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getCategoryType.html:15)
+- [详情页 canonical](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getVideoInfo.html:39)
+- [播放页 canonical](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getVideoPlayUrl.html:117)
+
+都统一是:
+
+- `https://{$DomainModel->d_domain}`
+
+### 为什么重要
+
+这说明当前模板层其实已经隐含表达了一种明确立场:
+
+- 规范 host 更像是裸域
+
+如果真是这样,那么 sitemap 仍然统一输出 `https://www.` 就更像一个明确冲突,而不是单纯“不同文件各写各的”。
+
+## 当前最像真实改动入口的 3 个点
+
+### 1. 先统一模板 canonical host 与 sitemap host
+
+这是当前最像“改完后能直接压掉一批 host 级 301”的地方。
+
+### 2. 再明确播放页 canonical 策略
+
+要么确认:
+
+- 播放页 canonical 就该留在播放页
+
+要么确认:
+
+- 播放页 canonical 应该回详情页
+
+现在最怕的是逻辑处于“既 noindex,又不完全统一 canonical 目标”的中间态。
+
+### 3. 再评估兼容入口是否还能继续收窄
+
+因为当前日志里已经明确能看见:
+
+- 哪些旧入口还在持续命中
+- 哪些别名组仍然在吃 301 预算
+
+## 给主 Codex 的一句话
+
+> 第一轮只读审查看下来,最像真问题的不是某一条单独路由,而是“模板 canonical 统一走裸域、sitemap 统一走 www、同时历史深页兼容入口又很多”这三件事叠在一起,持续制造了当前日志里看到的首页和深页 `301` 损耗。
diff --git a/docs/old-tmp-seo/09-第一批候选修正方案-2026-04-17.md b/docs/old-tmp-seo/09-第一批候选修正方案-2026-04-17.md
new file mode 100644
index 0000000..c36b883
--- /dev/null
+++ b/docs/old-tmp-seo/09-第一批候选修正方案-2026-04-17.md
@@ -0,0 +1,258 @@
+# 1278-SEONexus 第一批候选修正方案 - 2026-04-17
+
+## 目的
+
+这份文档用于把 `1277` 的只读审查发现,进一步收敛成主 Codex 可以直接评估的第一批候选修正方案。
+
+这里先不进入具体代码实现,只做三件事:
+
+1. 明确候选修正点
+2. 说明它可能解决什么问题
+3. 说明潜在副作用和验证重点
+
+## 先说结论
+
+当前最像值得优先动手的,不是十几处零散小修,而是下面 3 条主线:
+
+1. 统一模板 canonical host 与 sitemap host
+2. 明确播放页 canonical 策略
+3. 收缩历史深页兼容入口或跳转链
+
+## 候选方案一:统一 canonical 与 sitemap 的 host 口径
+
+优先级:`P0`
+
+### 当前现状
+
+模板侧 `videoGpt1` canonical 普遍通过模板标签走 `VideoService -> UrlBuilder` 输出:
+
+- [Site.php](/www/wwwroot/VideoSource2/code/extend/template/taglib/Site.php:238)
+- [VideoService.php](/www/wwwroot/VideoSource2/code/app/services/VideoService.php:87)
+
+模板里最终拼的是:
+
+- `https://{$DomainModel->d_domain}...`
+
+典型位置:
+
+- [首页](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/index/index.html:99)
+- [详情页](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getVideoInfo.html:39)
+- [播放页](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getVideoPlayUrl.html:117)
+- [分类页](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getCategory.html:34)
+
+而 sitemap 生成里大量直接写:
+
+- `https://www.{$DomainModel->d_domain}...`
+
+典型位置:
+
+- [VideoSiteMapLogic.php](/www/wwwroot/VideoSource2/code/app/task/logic/VideoSiteMapLogic.php:203)
+- [SiteMapLogic.php](/www/wwwroot/VideoSource2/code/app/task/logic/SiteMapLogic.php:158)
+
+### 候选修正
+
+把 sitemap 输出 host 统一到与模板 canonical 一致的规范 host。
+
+### 预期收益
+
+- 压低首页 `/|301`
+- 压低 host 级 `301`
+- 降低裸域 / `www` 并行抓取
+- 让 sitemap、canonical、站内链接至少先在 host 维度统一
+
+### 潜在副作用
+
+- 如果真实线上规范 host 本来就是 `www`,而模板 canonical 才是错的,那么简单改 sitemap 会把问题转移,而不是解决
+
+### 实施前必须先确认
+
+- 当前业务最终想要的规范 host,到底是裸域还是 `www`
+- 前置层 / nginx 的最终 host 跳转策略是什么
+
+### 当前更倾向的判断
+
+从现有模板和站内链接输出看,系统更像默认把裸域当规范 host。
+
+如果这个判断成立,那么更像是:
+
+- sitemap 侧应向模板 canonical 对齐
+
+## 候选方案二:明确播放页 canonical 是回详情页,还是保留播放页自身
+
+优先级:`P0`
+
+### 当前现状
+
+播放页模板:
+
+- [getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getVideoPlayUrl.html:117)
+
+当前 canonical 指向:
+
+- 当前播放页自身 URL
+
+同时:
+
+- `robots = noindex,follow`
+
+### 候选修正方向 A
+
+继续保留播放页 canonical 指向播放页自身。
+
+适用前提:
+
+- 业务明确希望每个播放页都拥有自洽的规范地址
+- 只是通过 `noindex` 控制搜索引擎是否收录
+
+### 候选修正方向 B
+
+把播放页 canonical 改回详情页。
+
+适用前提:
+
+- 业务希望搜索引擎主要把权重聚合到详情页
+- 播放页只作为观看页存在,不作为核心规范承载页
+
+### 预期收益
+
+如果改为回详情页,可能带来:
+
+- 更强的 detail 聚合信号
+- 更少的播放页规范化分叉
+
+### 潜在副作用
+
+如果播放页承载了明显不同的信息结构,强行 canonical 回详情页,也可能让页面意图变得不够清晰。
+
+### 当前更值得主 Codex 先做的事
+
+不是立刻改,而是先明确设计目标:
+
+- “播放页保留自身 canonical”是设计决定
+还是
+- “本来想回详情页,只是现在实现成了播放页自身”
+
+## 候选方案三:收缩历史深页兼容入口
+
+优先级:`P1`
+
+### 当前现状
+
+兼容入口非常宽:
+
+- [router.php](/www/wwwroot/VideoSource2/code/app/home/config/router.php:209)
+
+包括:
+
+- `voddetail`
+- `vodinfo`
+- `vod`
+- `video-info`
+- `video-detail`
+- `video`
+- `shipin`
+- `vodplay`
+- `vodbf`
+- `vodseed`
+- `video-play`
+- `video-show`
+- `shipin-play`
+- `shipin-bofang`
+- `shipin-kan`
+
+### 候选修正
+
+不是一次性删兼容,而是分两步:
+
+1. 先按日志命中频率分组
+2. 再决定哪些入口必须保留,哪些入口可以逐步收缩
+
+### 预期收益
+
+- 压低深页 `301`
+- 减少“多组别名 -> 同一规范页”的长期跳转预算损耗
+
+### 潜在副作用
+
+- 如果删掉仍被百度高频命中的入口,会把 `301 -> 200` 又打回 `404`
+
+### 当前建议
+
+这条线不适合第一刀就重手改。
+
+更适合在统一 host 和 canonical 口径之后,再做第二轮收缩。
+
+## 候选方案四:限制 fallback 的适用范围
+
+优先级:`P1`
+
+### 当前现状
+
+`VideoService` 存在回退链:
+
+- [VideoService.php](/www/wwwroot/VideoSource2/code/app/services/VideoService.php:905)
+
+查不到原始 `v_id` 时,会:
+
+- 读绑定
+- 随机采样
+- 排序兜底
+
+### 候选修正
+
+不是立即移除 fallback,而是评估是否加边界,例如:
+
+- 只对部分入口生效
+- 只对详情页生效,不对播放页生效
+- 只在存在某些可信条件时生效
+
+### 预期收益
+
+- 减少“错链也 200”的语义风险
+- 保留对 hard 404 的止血能力
+
+### 潜在副作用
+
+- fallback 一旦收紧,可能让部分当前已被兜住的旧 deep link 重新回到 `404`
+
+### 当前建议
+
+这条线适合在主 Codex 完成第一轮 host / canonical / 兼容入口收口后,再决定是否调整。
+
+## 我更建议的落地顺序
+
+### 第一刀
+
+先统一 host 口径:
+
+- 模板 canonical
+- sitemap
+- RSS
+- 站内主要结构化 URL
+
+### 第二刀
+
+再确认播放页 canonical 的产品/SEO 立场:
+
+- 保持播放页自身
+或
+- 回详情页
+
+### 第三刀
+
+最后再收缩历史兼容入口与 fallback 边界。
+
+## 不建议的顺序
+
+不建议一上来先动:
+
+- 大规模删兼容路由
+- 大规模关闭 fallback
+
+原因:
+
+- 这两条线会直接把一批目前还能 `301 -> 200` 的深链重新打回 `404`
+
+## 给主 Codex 的一句话
+
+> 第一批真正值得评估的修正方案,不是“怎么把所有问题都一起修掉”,而是先把 host 规范统一,再明确播放页 canonical 立场,最后才去收深页兼容入口和 fallback 边界。
diff --git a/docs/old-tmp-seo/10-第一批候选修正方案评审建议-2026-04-17.md b/docs/old-tmp-seo/10-第一批候选修正方案评审建议-2026-04-17.md
new file mode 100644
index 0000000..63fbb26
--- /dev/null
+++ b/docs/old-tmp-seo/10-第一批候选修正方案评审建议-2026-04-17.md
@@ -0,0 +1,204 @@
+# 1279-SEONexus 第一批候选修正方案评审建议 - 2026-04-17
+
+## 目的
+
+这份文档用于在 `1278` 的候选修正方案基础上,再往前走一步:
+
+- 不只是列方案
+- 而是给出当前更推荐的顺序和取舍建议
+
+它的目标受众就是主 Codex。
+
+## 先说结论
+
+当前最值得主 Codex 优先推进的方案,不是“收兼容入口”,而是:
+
+1. 先统一 host 规范口径
+2. 再确认播放页 canonical 立场
+3. 最后才动兼容入口和 fallback 边界
+
+## 一、为什么 host 统一应该排第一
+
+### 1. 模板与 sitemap 目前存在直接冲突
+
+模板 canonical 普遍走:
+
+- `https://{$DomainModel->d_domain}...`
+
+而 sitemap 生成普遍走:
+
+- `https://www.{$DomainModel->d_domain}...`
+
+这不是抽象风险,而是当前代码中已经明确存在的双口径输出。
+
+### 2. 日志已经证实多站存在 `www` / 裸域混合抓取
+
+最近 24 小时百度抓取里,至少以下 base domain 已经同时出现裸域和 `www`:
+
+- `ningxiaowei.com`
+ - `www.ningxiaowei.com = 78`
+ - `ningxiaowei.com = 9`
+- `haotianhaiyuan.com`
+ - `www.haotianhaiyuan.com = 18`
+ - `haotianhaiyuan.com = 14`
+- `yagyjt.com`
+ - `yagyjt.com = 162`
+ - `www.yagyjt.com = 17`
+- `ctshuhua.com`
+ - `www.ctshuhua.com = 78`
+ - `ctshuhua.com = 72`
+- `sctyjz.com`
+ - `sctyjz.com = 11`
+ - `www.sctyjz.com = 9`
+- `junhaolab.com`
+ - `www.junhaolab.com = 9`
+ - `junhaolab.com = 4`
+
+### 3. 这说明 host 级规范化损耗是真实存在的
+
+因此:
+
+- host 统一不是“理论上更好”
+- 而是当前最像正在真实消耗抓取预算的一条主线
+
+## 二、为什么播放页 canonical 应该排第二
+
+### 1. 它影响深页 `301` 的理解方式
+
+当前播放页模板:
+
+- `robots = noindex,follow`
+- `canonical = 当前播放页自身`
+
+这会直接影响主 Codex 如何判断当前 `play|301`:
+
+- 如果播放页本来就该保留自身规范 URL,那么当前主要问题是兼容入口过多
+- 如果播放页本来应 canonical 回详情页,那么当前实现就更像未收口
+
+### 2. 这条线虽然重要,但收益更依赖设计取舍
+
+和 host 统一不同,这条线不是单纯的工程不一致。
+
+它更像是:
+
+- SEO 策略选择
+
+所以它应排在第二位:
+
+- 先统一明显冲突的 host
+- 再确认播放页 canonical 立场
+
+## 三、为什么兼容入口收缩不应排第一
+
+### 1. 当前兼容入口仍在真实命中
+
+日志里当前仍高频出现:
+
+- `voddetail`
+- `vodplay`
+- `video-info`
+- `video-play`
+- `video-show`
+- `vodbf`
+
+这说明兼容入口不是“死代码”。
+
+### 2. 现在先删,风险很高
+
+如果主 Codex 第一刀就去删或大幅收缩兼容入口,很容易把当前一批还能:
+
+- `301 -> 200`
+
+的旧 deep link,重新打回:
+
+- `404`
+
+### 3. 更稳的顺序
+
+更合理的是:
+
+1. 先把 host 统一
+2. 再把 canonical 立场统一
+3. 观察日志
+4. 再决定兼容入口是否还能继续收
+
+## 四、为什么 fallback 边界也不应排第一
+
+### 1. fallback 很可能正在帮助压低 `404`
+
+当前 `404` 的明显下降,不排除有一部分就是 fallback 机制在止血。
+
+### 2. 现在先收 fallback,会让数据倒退
+
+如果主 Codex 在 host / canonical 还没统一之前,就先把 fallback 收紧,那么很可能会出现:
+
+- `404` 重新回升
+
+这样会把问题重新搅混,不利于判断主线修正是否有效。
+
+## 五、当前更推荐的执行顺序
+
+### 第一阶段
+
+先统一以下几类输出的 host:
+
+- 首页 canonical
+- 分类 canonical
+- 详情页 canonical
+- 播放页 canonical
+- sitemap
+- RSS
+- 结构化数据里的 URL
+
+目标:
+
+- 先让模板、站内主输出、sitemap 至少在 host 维度统一
+
+### 第二阶段
+
+再确认播放页 canonical 策略:
+
+- 保留播放页自身
+或
+- 回详情页
+
+目标:
+
+- 让 `play` 页的规范信号有明确立场
+
+### 第三阶段
+
+最后再做:
+
+- 兼容入口分组收缩
+- fallback 适用范围收缩
+
+目标:
+
+- 在不把旧 deep link 直接打回 `404` 的前提下,继续压深页 `301`
+
+## 六、当前最不建议的操作
+
+### 1. 不建议先删大量历史兼容入口
+
+原因:
+
+- 风险最大
+- 最容易直接把数据打坏
+
+### 2. 不建议先动 fallback
+
+原因:
+
+- 当前还没搞清楚它对 `404` 下降贡献有多大
+
+### 3. 不建议只改单个模板 canonical
+
+原因:
+
+- 当前问题是系统性 host 双口径
+- 只改单页模板,很容易头痛医头
+
+## 给主 Codex 的一句话
+
+> 当前最值得优先批准推进的,不是“收旧路由”,而是“统一 host 输出口径”;因为这条线同时有代码证据和日志证据,而且副作用最可控、验证也最直接。
diff --git a/docs/old-tmp-seo/11-第一批可落地修正设计-2026-04-17.md b/docs/old-tmp-seo/11-第一批可落地修正设计-2026-04-17.md
new file mode 100644
index 0000000..2754e1c
--- /dev/null
+++ b/docs/old-tmp-seo/11-第一批可落地修正设计-2026-04-17.md
@@ -0,0 +1,309 @@
+# 1280-SEONexus 第一批可落地修正设计 - 2026-04-17
+
+## 目的
+
+这份文档用于把 `1278` 和 `1279` 的候选方案与评审建议,进一步压成主 Codex 可以直接进入实施评估的“第一批可落地修正设计”。
+
+这份文档仍然不直接改代码,但已经具备:
+
+- 改哪些文件
+- 为什么先改这些
+- 改动边界在哪里
+- 怎么验证
+
+## 这批设计的总原则
+
+第一批只做“低副作用、高确定性、容易验证”的统一动作。
+
+因此本批次只建议优先考虑:
+
+1. 统一 host 输出口径
+2. 暂不碰大规模兼容入口删除
+3. 暂不碰 fallback 收紧
+
+## 设计目标
+
+### 主目标
+
+压低以下两类损耗:
+
+- 首页 `/|301`
+- host 级 `301`
+
+### 次目标
+
+让以下输出口径至少先一致:
+
+- 模板 canonical
+- OG URL
+- 结构化数据 URL
+- sitemap
+- RSS
+
+## 第一批建议改动范围
+
+### A. sitemap 与 RSS 的 host 统一
+
+建议优先级:`最高`
+
+### 涉及文件
+
+- [VideoSiteMapLogic.php](/www/wwwroot/VideoSource2/code/app/task/logic/VideoSiteMapLogic.php:203)
+- [SiteMapLogic.php](/www/wwwroot/VideoSource2/code/app/task/logic/SiteMapLogic.php:158)
+- [videoGpt1/rss/so.xml](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/rss/so.xml:12)
+- [videoGpt1/rss/baidu.xml](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/rss/baidu.xml:6)
+
+### 当前问题
+
+这几处目前存在明显双口径:
+
+- sitemap 很多地方硬编码 `https://www.{$DomainModel->d_domain}`
+- RSS 中也混有 `www.` 口径
+- 模板 canonical 则统一偏向 `https://{$DomainModel->d_domain}`
+
+### 建议改动边界
+
+第一批不要引入复杂的新 host 策略中心。
+
+先做最小收口:
+
+- 让 sitemap 与 RSS 的 host 输出,先与当前模板 canonical 口径一致
+
+也就是:
+
+- 如果模板当前是 `https://{$DomainModel->d_domain}`
+- 那么 sitemap / RSS 第一批也先统一成这一套
+
+### 为什么先这样做
+
+原因不是“裸域一定对”,而是:
+
+- 当前模板和站内主输出已经大量使用裸域口径
+- sitemap / RSS 仍输出 `www`
+- 这两者冲突会稳定制造 host 级跳转
+
+在未建立统一 host 策略中心前,先朝站内主输出对齐,是副作用更小的做法。
+
+### 第一批不建议做的事
+
+不建议在这一步同时:
+
+- 动 Nginx host 跳转策略
+- 动 `DomainModel` 的 host 配置语义
+- 动所有历史模板
+
+先把 `videoGpt1` 这条主线收口,再看日志反馈。
+
+## B. 模板层 canonical / og:url / structured data host 统一复核
+
+建议优先级:`高`
+
+### 涉及文件
+
+- [videoGpt1/index/index.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/index/index.html:99)
+- [videoGpt1/video/getCategory.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getCategory.html:34)
+- [videoGpt1/video/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getCategoryType.html:15)
+- [videoGpt1/video/getVideoInfo.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getVideoInfo.html:39)
+- [videoGpt1/video/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getVideoPlayUrl.html:117)
+
+### 当前问题
+
+这些文件虽然大方向一致,都偏向非 `www` host,但仍需要主 Codex 顺手复核:
+
+- canonical
+- `og:url`
+- JSON-LD `url`
+
+是否完全同口径。
+
+### 建议改动边界
+
+第一批不建议在模板层大改页面语义。
+
+只做:
+
+- host 统一
+- URL 输出口径统一
+
+不做:
+
+- 大改 title/description
+- 改动页面结构
+- 改 robots 策略
+
+## C. 播放页 canonical 策略先做“确认”,不急着改
+
+建议优先级:`中`
+
+### 涉及文件
+
+- [videoGpt1/video/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getVideoPlayUrl.html:117)
+- [VideoService.php](/www/wwwroot/VideoSource2/code/app/services/VideoService.php:137)
+
+### 当前问题
+
+当前播放页:
+
+- `robots = noindex,follow`
+- canonical 指向当前播放页自身
+
+这是一个“策略问题”,不是明显 bug。
+
+### 第一批建议
+
+第一批不要急着改。
+
+主 Codex 只需要先确认一件事:
+
+- 当前产品/SEO 立场,到底是要播放页保留自身 canonical
+还是
+- 要回详情页
+
+### 为什么不建议第一批就动
+
+因为:
+
+- 这条线会直接影响 `play|301` 的解读
+- 也会影响播放页是否继续作为独立规范对象存在
+
+它的风险比 host 统一更偏设计取舍,不适合当第一刀。
+
+## D. 历史兼容入口先观察,不立即收缩
+
+建议优先级:`中后`
+
+### 涉及文件
+
+- [router.php](/www/wwwroot/VideoSource2/code/app/home/config/router.php:209)
+
+### 第一批建议
+
+这一批只做“分组清单”和“命中频率对应”,不做实际删除。
+
+可以先把入口分成三组:
+
+1. 高频仍命中
+2. 低频偶发命中
+3. 近 24 小时几乎不命中
+
+但第一批不建议直接动路由。
+
+### 原因
+
+如果现在就删,很容易把:
+
+- `301 -> 200`
+
+重新打回:
+
+- `404`
+
+## E. fallback 机制先保留
+
+建议优先级:`后`
+
+### 涉及文件
+
+- [VideoService.php](/www/wwwroot/VideoSource2/code/app/services/VideoService.php:905)
+
+### 第一批建议
+
+先不改 fallback。
+
+只做两件事:
+
+1. 明确它当前的收益
+2. 明确它潜在的语义风险
+
+### 原因
+
+当前 `404` 的下降,很可能部分就来自 fallback 在止血。
+
+在 host / canonical 还没统一前,先动它会让日志重新变脏。
+
+## 推荐实施顺序
+
+### 第一刀
+
+统一 host 口径:
+
+- sitemap
+- RSS
+- 模板 canonical
+- og:url
+- JSON-LD url
+
+### 第二刀
+
+复看日志:
+
+- `/|301` 是否下降
+- `www` / 裸域混合抓取是否下降
+- `yagyjt.com` / `ningxiaowei.com` 等站的 host 301 是否下降
+
+### 第三刀
+
+再决定是否推进:
+
+- 播放页 canonical 策略调整
+- 历史兼容入口收缩
+
+## 建议的验证口径
+
+### 1. 日志指标
+
+优先看:
+
+- `/|301`
+- `home|301`
+- `detail|301`
+- `play|301`
+- 同一 base domain 下 `www` / 裸域双命中是否下降
+
+### 2. 页面级抽查
+
+至少抽查:
+
+- 首页
+- 一级分类
+- 二级分类
+- 详情页
+- 播放页
+- `robots.txt`
+- `sitemap_index.xml`
+- RSS 输出
+
+确认:
+
+- canonical host 一致
+- og:url host 一致
+- JSON-LD URL 一致
+- sitemap / RSS host 一致
+
+### 3. 重点域名
+
+建议第一轮继续盯:
+
+- `yagyjt.com`
+- `www.ningxiaowei.com`
+- `sctyjz.com`
+- `www.haotianhaiyuan.com`
+- `ctshuhua.com`
+
+## 本批次最重要的边界
+
+### 不做的事
+
+- 不大规模删历史兼容路由
+- 不先收 fallback
+- 不大改播放页 SEO 立场
+- 不同时改 Nginx + PHP + 模板三层 host 策略
+
+### 只做的事
+
+- 先统一输出口径
+- 先降低确定性的 host 级损耗
+
+## 给主 Codex 的一句话
+
+> 第一批最适合真正落地的,不是“重构 SEO 路由体系”,而是先做一次低副作用的输出口径统一,让模板、sitemap、RSS 在 host 维度不再互相打架,再用日志看收益。
diff --git a/docs/old-tmp-seo/12-第一批修正实施方案-2026-04-17.md b/docs/old-tmp-seo/12-第一批修正实施方案-2026-04-17.md
new file mode 100644
index 0000000..1bb64dc
--- /dev/null
+++ b/docs/old-tmp-seo/12-第一批修正实施方案-2026-04-17.md
@@ -0,0 +1,249 @@
+# 1281-SEONexus 第一批修正实施方案 - 2026-04-17
+
+## 目的
+
+这份文档用于把 `1280` 的“可落地修正设计”继续推进成可以直接进入实施评审的方案。
+
+它回答的是:
+
+1. 第一批具体怎么改
+2. 先改哪些文件
+3. 每一步改完怎么验证
+4. 哪些线这一批绝对不要碰
+
+## 本批次实施目标
+
+只做一件事:
+
+> 统一 `videoGpt1` 主线上模板、sitemap、RSS 的 host 输出口径,尽量先消除系统内部自带的 host 双口径冲突。
+
+不把本批次目标扩散到:
+
+- 深页兼容路由重构
+- fallback 策略收紧
+- 播放页 canonical 政策改向
+
+## 预期收益
+
+如果这一批实施正确,最可能看到的收益是:
+
+1. 首页 `/|301` 继续下降
+2. host 级 `301` 下降
+3. 同一 base domain 下 `www` / 裸域混合抓取下降
+4. `yagyjt.com`、`ningxiaowei.com`、`haotianhaiyuan.com` 这类站的 host 分裂减轻
+
+## 本批次改动批次
+
+### 批次 A:统一模板与站内公开输出的 host 口径
+
+建议优先级:`最高`
+
+### 目标
+
+确认 `videoGpt1` 主线上以下输出全部使用同一 host 口径:
+
+- 首页 canonical
+- 分类页 canonical
+- 详情页 canonical
+- 播放页 canonical
+- `og:url`
+- JSON-LD `url`
+
+### 建议检查文件
+
+- [videoGpt1/index/index.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/index/index.html:99)
+- [videoGpt1/video/getCategory.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getCategory.html:34)
+- [videoGpt1/video/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getCategoryType.html:15)
+- [videoGpt1/video/getVideoInfo.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getVideoInfo.html:39)
+- [videoGpt1/video/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getVideoPlayUrl.html:117)
+
+### 实施建议
+
+这一步如果发现这些文件已经统一,则不做逻辑变更,只做复核确认。
+
+当前从只读审查来看,它们大方向已经都偏向:
+
+- `https://{$DomainModel->d_domain}`
+
+所以这一步更像:
+
+- 明确模板层口径
+- 作为后续 sitemap / RSS 对齐基线
+
+## 批次 B:把 sitemap 输出 host 对齐到模板口径
+
+建议优先级:`最高`
+
+### 目标
+
+去掉 sitemap 生成里与模板层相冲突的 `https://www.` 硬编码。
+
+### 建议改动文件
+
+- [VideoSiteMapLogic.php](/www/wwwroot/VideoSource2/code/app/task/logic/VideoSiteMapLogic.php:203)
+- [SiteMapLogic.php](/www/wwwroot/VideoSource2/code/app/task/logic/SiteMapLogic.php:158)
+
+### 当前问题
+
+这里大量在拼:
+
+- `https://www.{$DomainModel->d_domain}`
+
+### 建议改动方式
+
+第一批不建议做复杂抽象。
+
+只做最小改动:
+
+- 把 `https://www.{$DomainModel->d_domain}` 统一替换为与当前模板主输出一致的 host 口径
+
+也就是优先对齐:
+
+- `https://{$DomainModel->d_domain}`
+
+### 这样做的原因
+
+因为当前真正造成系统自冲突的,是:
+
+- 模板一套
+- sitemap 一套
+
+先消掉这层内部打架,比引入新配置中心更稳。
+
+## 批次 C:把 RSS 输出 host 对齐到模板口径
+
+建议优先级:`高`
+
+### 建议改动文件
+
+- [videoGpt1/rss/baidu.xml](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/rss/baidu.xml:6)
+- [videoGpt1/rss/so.xml](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/rss/so.xml:12)
+
+### 当前问题
+
+这两个文件内部 host 口径并不完全一致:
+
+- `baidu.xml` 的 `` 已偏向非 `www`
+- `baidu.xml` 的频道级 `` / `` 仍有 `www`
+- `so.xml` 仍在输出 `https://www.{$DomainModel->d_domain}...`
+
+### 建议改动方式
+
+第一批同样只做最小统一:
+
+- 与模板 canonical 口径对齐
+
+## 本批次不改的内容
+
+### 1. 不改播放页 canonical 策略
+
+原因:
+
+- 它是策略问题,不是第一批最确定的问题
+
+### 2. 不删历史兼容入口
+
+原因:
+
+- 当前高频旧入口仍真实存在
+- 先删风险太高
+
+### 3. 不收 fallback
+
+原因:
+
+- 当前 `404` 下降可能部分依赖 fallback
+
+### 4. 不引入新的全局 host 配置中心
+
+原因:
+
+- 第一批目标是低副作用止损
+- 不是立刻做体系重构
+
+## 推荐实施顺序
+
+### 第一步
+
+模板层 host 输出复核:
+
+- 首页
+- 分类页
+- 详情页
+- 播放页
+
+### 第二步
+
+改 sitemap host 输出:
+
+- `VideoSiteMapLogic`
+- `SiteMapLogic`
+
+### 第三步
+
+改 RSS host 输出:
+
+- `baidu.xml`
+- `so.xml`
+
+### 第四步
+
+做页面级回归:
+
+- 首页
+- 分类页
+- 详情页
+- 播放页
+- `sitemap_index.xml`
+- `sitemap-videos-1.xml`
+- RSS
+
+## 建议的验证顺序
+
+### 一、页面静态验证
+
+确认:
+
+- canonical host 一致
+- `og:url` host 一致
+- JSON-LD `url` 一致
+- sitemap URL host 一致
+- RSS URL host 一致
+
+### 二、外网行为验证
+
+抽查几个代表域名:
+
+- `yagyjt.com`
+- `www.ningxiaowei.com`
+- `www.haotianhaiyuan.com`
+- `ctshuhua.com`
+- `sctyjz.com`
+
+重点看:
+
+- 首页是否仍多跳
+- sitemap 返回内容里的 host 是否统一
+
+### 三、日志验证
+
+回看下一轮蜘蛛日志时,优先比较:
+
+- `/|301`
+- `home|301`
+- `detail|301`
+- `play|301`
+- 同一 base domain 的 `www` / 裸域双命中是否下降
+
+## 止损边界
+
+如果本批次改动后出现以下任一情况,应暂停继续扩大:
+
+1. `404` 明显回升
+2. sitemap / RSS 出现不可访问
+3. 首页或详情页 canonical 异常
+4. `detail|301` / `play|301` 不降反升且幅度明显
+
+## 给主 Codex 的一句话
+
+> 第一批实施最适合做的,是一次“小范围 host 输出统一手术”:先把模板、sitemap、RSS 的 host 口径对齐,先消除系统内部自带的冲突,再用日志看 `/|301` 和 host 分裂是否下降。
diff --git a/docs/old-tmp-seo/13-主Codex接手摘要-2026-04-17.md b/docs/old-tmp-seo/13-主Codex接手摘要-2026-04-17.md
new file mode 100644
index 0000000..a0fe838
--- /dev/null
+++ b/docs/old-tmp-seo/13-主Codex接手摘要-2026-04-17.md
@@ -0,0 +1,173 @@
+# 1282-SEONexus 主 Codex 接手摘要 - 2026-04-17
+
+## 这份文档是干什么的
+
+给主 Codex 一个最短路径摘要。
+
+如果没有时间从 `1271` 一直读到 `1281`,先看这份,就能知道:
+
+- 现在日志阶段走到哪里了
+- 当前最像真问题的点是什么
+- 第一批建议先改哪里
+
+## 当前阶段结论
+
+截至 `2026-04-17`,老模板蜘蛛日志已经不是“百度没来”的问题。
+
+当前更准确的判断是:
+
+1. 首页抓取已经成立
+2. 部分站点已经有真实深抓
+3. `404` 已较前一轮明显下降
+4. 但 `301` 仍在持续消耗预算
+5. 主要损耗已更集中在:
+ - host 规范化
+ - 深页历史兼容入口
+ - 部分 `444` 探测型噪音
+
+## 这轮最像真问题的 3 个点
+
+### 1. 模板 canonical 与 sitemap / RSS 的 host 口径冲突
+
+当前 `videoGpt1` 模板主线大量输出:
+
+- `https://{$DomainModel->d_domain}...`
+
+但 sitemap / RSS 中仍有多处输出:
+
+- `https://www.{$DomainModel->d_domain}...`
+
+这和日志里持续存在的:
+
+- `/|301`
+- 同一 base domain 下 `www` / 裸域并行抓取
+
+是高度一致的。
+
+### 2. 深页兼容入口很多,仍在真实命中
+
+`router.php` 中存在大批旧深页兼容入口:
+
+- `voddetail`
+- `video-info`
+- `video-play`
+- `video-show`
+- `vodbf`
+- `shipin-*`
+
+它们当前不是死代码。
+
+所以不能第一刀就删,但它们很可能确实在维持一部分深页 `301`。
+
+### 3. 播放页 canonical 当前指向播放页自身
+
+这不是明确 bug,但它是一个必须由主 Codex 明确拍板的策略点:
+
+- 保持播放页自身 canonical
+还是
+- 回详情页
+
+## 当前最建议优先推进的事情
+
+### 第一优先级
+
+先统一 host 输出口径。
+
+优先统一:
+
+- 模板 canonical
+- `og:url`
+- JSON-LD URL
+- sitemap
+- RSS
+
+目标:
+
+- 先减少系统内部自己制造的 host 级 `301`
+
+### 第二优先级
+
+再确认播放页 canonical 立场。
+
+目标:
+
+- 明确 `play` 页在当前 SEO 策略里,到底算不算规范对象
+
+### 第三优先级
+
+最后才评估:
+
+- 历史兼容入口收缩
+- fallback 边界收缩
+
+## 当前不建议先做的事
+
+### 1. 不建议先删大批兼容路由
+
+原因:
+
+- 当前很多旧入口还在真实命中
+- 很容易把 `301 -> 200` 打回 `404`
+
+### 2. 不建议先动 fallback
+
+原因:
+
+- 这条线可能正在帮助压低 `404`
+
+### 3. 不建议同时改 Nginx + PHP + 模板三层 host 策略
+
+原因:
+
+- 第一批应该做低副作用、可验证的统一动作
+
+## 第一批实施建议
+
+如果主 Codex 要开做,建议第一批只碰这些文件:
+
+- [VideoSiteMapLogic.php](/www/wwwroot/VideoSource2/code/app/task/logic/VideoSiteMapLogic.php:203)
+- [SiteMapLogic.php](/www/wwwroot/VideoSource2/code/app/task/logic/SiteMapLogic.php:158)
+- [videoGpt1/rss/baidu.xml](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/rss/baidu.xml:6)
+- [videoGpt1/rss/so.xml](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/rss/so.xml:12)
+- 再顺手复核 `videoGpt1` 模板里的 canonical / `og:url` / JSON-LD URL 输出
+
+## 第一批验证重点
+
+改完后优先看:
+
+- `/|301` 是否下降
+- `home|301` 是否下降
+- 同一 base domain 的 `www` / 裸域双命中是否下降
+
+建议继续盯的域名:
+
+- `yagyjt.com`
+- `www.ningxiaowei.com`
+- `www.haotianhaiyuan.com`
+- `ctshuhua.com`
+- `sctyjz.com`
+
+## 文档导航
+
+如果主 Codex 需要往下展开看:
+
+- 日志首轮总结:
+ [1271](/www/wwwroot/VideoSource2/docs/old-tmp-seo/02-老模板蜘蛛日志观察交接文档-2026-04-16.md)
+- 日志到代码映射:
+ [1272](/www/wwwroot/VideoSource2/docs/old-tmp-seo/03-老模板蜘蛛日志与代码映射交接文档-2026-04-16.md)
+- `2026-04-17` 日志更新:
+ [1273](/www/wwwroot/VideoSource2/docs/old-tmp-seo/04-老模板蜘蛛日志观察更新-2026-04-17.md)
+- `404 -> 444` 代码判断:
+ [1274](/www/wwwroot/VideoSource2/docs/old-tmp-seo/05-老模板蜘蛛日志变化与代码判断更新-2026-04-17.md)
+- 可执行检查清单:
+ [1275](/www/wwwroot/VideoSource2/docs/old-tmp-seo/06-主Codex可执行检查清单-2026-04-17.md)
+- 第一轮只读代码审查发现:
+ [1277](/www/wwwroot/VideoSource2/docs/old-tmp-seo/08-第一轮只读代码审查发现-2026-04-17.md)
+- 第一批候选修正方案:
+ [1278](/www/wwwroot/VideoSource2/docs/old-tmp-seo/09-第一批候选修正方案-2026-04-17.md)
+- 第一批修正实施方案:
+ [1281](/www/wwwroot/VideoSource2/docs/old-tmp-seo/12-第一批修正实施方案-2026-04-17.md)
+
+## 一句话交接
+
+> 主线现在最值得先动的,不是删旧路由,而是统一 host 输出口径;先把模板、sitemap、RSS 不再互相打架,再看日志里的 `/|301` 和 `www/裸域` 分裂是否继续下降。
diff --git a/docs/old-tmp-seo/14-蜘蛛分析交接索引-2026-04-17.md b/docs/old-tmp-seo/14-蜘蛛分析交接索引-2026-04-17.md
new file mode 100644
index 0000000..e55bb23
--- /dev/null
+++ b/docs/old-tmp-seo/14-蜘蛛分析交接索引-2026-04-17.md
@@ -0,0 +1,195 @@
+# 1283-SEONexus 蜘蛛分析交接索引 - 2026-04-17
+
+## 目的
+
+这份文档是 `2026-04-16` 到 `2026-04-17` 这轮老模板蜘蛛日志分析的总索引。
+
+作用只有一个:
+
+- 帮主 Codex 或下一轮会话,最快找到该看的文档
+
+它不是新的分析结论文档,而是阅读顺序与用途说明。
+
+## 纠偏提醒
+
+`2026-04-17` 晚些时候已经补了一份老模板范围纠偏文档:
+
+- [17-老模板5套蜘蛛日志纠偏与SEO提示-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/17-老模板5套蜘蛛日志纠偏与SEO提示-2026-04-17.md)
+
+如果你现在接手的是老模板第一阶段 SEO 分析,请先看 `1286`,因为它已经明确:
+
+- 当前主线是 `1001-1005`
+- 也就是 `videoDadi / videoDingZhu / videoBoKu / videoLaoNiu / videoNuNu`
+- `videoGpt1` 不属于这条老模板实施主线
+
+## 最短阅读路径
+
+如果时间很少,只看下面 3 份:
+
+1. [01-老模板第一阶段回灌执行文档.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/01-老模板第一阶段回灌执行文档.md)
+2. [17-老模板5套蜘蛛日志纠偏与SEO提示-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/17-老模板5套蜘蛛日志纠偏与SEO提示-2026-04-17.md)
+3. [02-老模板蜘蛛日志观察交接文档-2026-04-16.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/02-老模板蜘蛛日志观察交接文档-2026-04-16.md)
+
+这 3 份分别解决:
+
+- 老模板第一阶段的边界是什么
+- 哪些代码结论需要重新锚定到老模板 5 套
+- 当前日志现状是什么
+
+## 完整阅读顺序
+
+### 阶段文档
+
+#### 1. 阶段目标
+
+- [01-老模板第一阶段回灌执行文档.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/01-老模板第一阶段回灌执行文档.md)
+
+用途:
+
+- 定义第一阶段想看什么
+- 明确首页、robots、sitemap、canonical、分类、详情、播放这些观察目标
+
+#### 2. 协作边界
+
+- [1270-SEONexus-Codex多版本协作交接总文档.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/1270-SEONexus-Codex多版本协作交接总文档.md)
+
+用途:
+
+- 定义多 Codex 协作边界
+- 明确这轮旧版本主要做观察与交接,而不是自由发明实现
+
+## 第一层:日志观察
+
+#### 3. 首轮正式日志结论
+
+- [02-老模板蜘蛛日志观察交接文档-2026-04-16.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/02-老模板蜘蛛日志观察交接文档-2026-04-16.md)
+
+用途:
+
+- 给出 `2026-04-16` 的 24 小时总览
+- 定义第一轮站点分型
+
+#### 4. 第二轮日志更新
+
+- [04-老模板蜘蛛日志观察更新-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/04-老模板蜘蛛日志观察更新-2026-04-17.md)
+
+用途:
+
+- 比较 `2026-04-17` 相比上一轮的变化
+- 明确 `404` 下降、`444` 上升的结构变化
+
+## 第二层:日志到代码
+
+#### 5. 日志现象与代码位置映射
+
+- [03-老模板蜘蛛日志与代码映射交接文档-2026-04-16.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/03-老模板蜘蛛日志与代码映射交接文档-2026-04-16.md)
+
+用途:
+
+- 把日志里的 `301/404/444`、深页兼容、canonical、sitemap 现象映射到代码入口
+
+#### 6. `404 -> 444` 的代码判断
+
+- [05-老模板蜘蛛日志变化与代码判断更新-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/05-老模板蜘蛛日志变化与代码判断更新-2026-04-17.md)
+
+用途:
+
+- 解释为什么 `404` 下降
+- 解释为什么 `444` 上升
+- 明确 `444` 目前更像前置层噪音,而不是应用层直接返回
+
+## 第三层:主 Codex 可执行清单
+
+#### 7. 可执行检查清单
+
+- [06-主Codex可执行检查清单-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/06-主Codex可执行检查清单-2026-04-17.md)
+
+用途:
+
+- 告诉主 Codex 先看哪些文件
+- 每个文件要回答什么问题
+
+#### 8. 检查清单修正
+
+- [07-主Codex检查清单补充修正-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/07-主Codex检查清单补充修正-2026-04-17.md)
+
+用途:
+
+- 修正对 `SiteStyle` 与模板 canonical 主输出关系的判断
+
+## 第四层:只读代码审查发现
+
+#### 9. 第一轮只读代码审查发现
+
+- [08-第一轮只读代码审查发现-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/08-第一轮只读代码审查发现-2026-04-17.md)
+
+用途:
+
+- 固化最像真实问题的发现
+- 包括 host 双口径、播放页 canonical、自带兼容入口过宽等
+
+## 第五层:方案与评审
+
+#### 10. 第一批候选修正方案
+
+- [09-第一批候选修正方案-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/09-第一批候选修正方案-2026-04-17.md)
+
+用途:
+
+- 从发现走到候选修正方向
+
+#### 11. 第一批候选修正方案评审建议
+
+- [10-第一批候选修正方案评审建议-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/10-第一批候选修正方案评审建议-2026-04-17.md)
+
+用途:
+
+- 说明当前更推荐的先后顺序
+- 明确为什么先统一 host,再谈其它
+
+## 第六层:准备实施
+
+#### 12. 第一批可落地修正设计
+
+- [11-第一批可落地修正设计-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/11-第一批可落地修正设计-2026-04-17.md)
+
+用途:
+
+- 收敛成低副作用、可验证的设计边界
+
+#### 13. 第一批修正实施方案
+
+- [12-第一批修正实施方案-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/12-第一批修正实施方案-2026-04-17.md)
+
+用途:
+
+- 明确第一批建议改哪些文件
+- 明确每一步之后怎么验证
+
+#### 14. 主 Codex 接手摘要
+
+- [13-主Codex接手摘要-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/13-主Codex接手摘要-2026-04-17.md)
+
+用途:
+
+- 一页看完当前阶段
+- 快速接手
+
+## 本轮本地分析材料
+
+如果需要看更细的原始观察,可回到 `_analysis`:
+
+- [baiduspider.md](/www/wwwroot/VideoSource2/code/storage/_analysis/sources/baiduspider.md)
+- [baiduspider-priority-2026-04-16.md](/www/wwwroot/VideoSource2/code/storage/_analysis/sources/baiduspider-priority-2026-04-16.md)
+- [baiduspider-action-checklist-2026-04-16.md](/www/wwwroot/VideoSource2/code/storage/_analysis/sources/baiduspider-action-checklist-2026-04-16.md)
+- [yagyjt.com.md](/www/wwwroot/VideoSource2/code/storage/_analysis/domains/yagyjt.com.md)
+- [qf123.net.md](/www/wwwroot/VideoSource2/code/storage/_analysis/domains/qf123.net.md)
+- [ningxiaowei-hosts.md](/www/wwwroot/VideoSource2/code/storage/_analysis/domains/ningxiaowei-hosts.md)
+- [sctyjz.com.md](/www/wwwroot/VideoSource2/code/storage/_analysis/domains/sctyjz.com.md)
+- [ap-hulan.com.md](/www/wwwroot/VideoSource2/code/storage/_analysis/domains/ap-hulan.com.md)
+- [haotianhaiyuan-hymdrz-hosts.md](/www/wwwroot/VideoSource2/code/storage/_analysis/domains/haotianhaiyuan-hymdrz-hosts.md)
+- [home-stable-cluster.md](/www/wwwroot/VideoSource2/code/storage/_analysis/domains/home-stable-cluster.md)
+
+## 一句话结论
+
+> 这轮辅助分析已经从“看日志”推进到“准备实施”,主 Codex 现在最值得先接手的,不是继续补观察,而是按 `1281` 和 `1282` 进入第一批 host 输出口径统一的实现评估。
diff --git a/docs/old-tmp-seo/15-主Codex启动提示-2026-04-17.md b/docs/old-tmp-seo/15-主Codex启动提示-2026-04-17.md
new file mode 100644
index 0000000..a9d4fd0
--- /dev/null
+++ b/docs/old-tmp-seo/15-主Codex启动提示-2026-04-17.md
@@ -0,0 +1,64 @@
+# 1284-SEONexus 主 Codex 启动提示 - 2026-04-17
+
+## 用途
+
+这份文档用于在主 Codex 新开会话或切回主线时,直接作为启动提示使用。
+
+目标是减少重复解释成本,让主 Codex 迅速进入正确上下文。
+
+## 建议直接复制给主 Codex 的话术
+
+你现在接手的是 `SEONexus` 老模板蜘蛛日志这一轮的主线判断与第一批修正评估。
+
+先不要从零分析,也不要先大范围改路由。
+
+请按下面顺序进入:
+
+1. 先看 [1270-SEONexus-Codex多版本协作交接总文档.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/1270-SEONexus-Codex多版本协作交接总文档.md)
+2. 再看 [13-主Codex接手摘要-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/13-主Codex接手摘要-2026-04-17.md)
+3. 然后看 [12-第一批修正实施方案-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/12-第一批修正实施方案-2026-04-17.md)
+4. 如需完整背景,再按 [14-蜘蛛分析交接索引-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/14-蜘蛛分析交接索引-2026-04-17.md) 的顺序回看
+
+当前阶段最重要的判断不是“百度没来”,而是:
+
+- 首页抓取已经成立
+- 部分站点已有真实深抓
+- `404` 已较上一轮明显下降
+- 但系统内部存在 host 输出双口径,仍在持续制造 `301`
+
+当前最值得优先推进的第一批动作不是删兼容路由,而是统一 host 输出口径。
+
+优先检查并评估第一批改动:
+
+- [VideoSiteMapLogic.php](/www/wwwroot/VideoSource2/code/app/task/logic/VideoSiteMapLogic.php:203)
+- [SiteMapLogic.php](/www/wwwroot/VideoSource2/code/app/task/logic/SiteMapLogic.php:158)
+- [videoGpt1/rss/baidu.xml](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/rss/baidu.xml:6)
+- [videoGpt1/rss/so.xml](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/rss/so.xml:12)
+- `videoGpt1` 主线模板中的 canonical / `og:url` / JSON-LD URL 输出
+
+当前不建议第一批先做:
+
+- 大规模删历史兼容路由
+- 收紧 fallback
+- 同时改 Nginx + PHP + 模板三层 host 策略
+- 先拍板播放页 canonical 回详情页
+
+第一批实施后的验证重点是:
+
+- `/|301` 是否下降
+- `home|301` 是否下降
+- 同一 base domain 下 `www` / 裸域双命中是否下降
+
+重点观察域名:
+
+- `yagyjt.com`
+- `www.ningxiaowei.com`
+- `www.haotianhaiyuan.com`
+- `ctshuhua.com`
+- `sctyjz.com`
+
+## 更短的一句话版本
+
+如果只给主 Codex 一句话,就发这句:
+
+> 老模板蜘蛛这轮先别删旧路由,先按 `1281/1282` 统一模板、sitemap、RSS 的 host 输出口径,先压 host 级 `301`,再回看日志决定下一刀。
diff --git a/docs/old-tmp-seo/16-第一批修正验收清单-2026-04-17.md b/docs/old-tmp-seo/16-第一批修正验收清单-2026-04-17.md
new file mode 100644
index 0000000..1d970cf
--- /dev/null
+++ b/docs/old-tmp-seo/16-第一批修正验收清单-2026-04-17.md
@@ -0,0 +1,193 @@
+# 1285-SEONexus 第一批修正验收清单 - 2026-04-17
+
+## 目的
+
+这份文档用于配合 `1281` 的第一批修正实施方案,给主 Codex 提供一份可以直接照着执行的验收清单。
+
+它适用于:
+
+- 第一批 host 输出口径统一前的基线记录
+- 第一批改动后的回归验证
+
+## 本批次验收范围
+
+本清单只针对第一批动作:
+
+- 模板 canonical / `og:url` / JSON-LD URL host 口径
+- sitemap host 口径
+- RSS host 口径
+
+不用于验收:
+
+- 历史兼容路由收缩
+- fallback 策略调整
+- 播放页 canonical 政策改变
+
+## 一、改动前先记录
+
+### 1. 页面级记录
+
+每个站至少记录以下页面:
+
+1. 首页
+2. 一级分类页
+3. 二级分类页
+4. 详情页
+5. 播放页
+6. `robots.txt`
+7. `sitemap_index.xml`
+8. 一份视频 sitemap
+9. RSS
+
+### 2. 记录字段
+
+每个页面至少记录:
+
+- 最终访问 URL
+- 返回状态码
+- 是否发生跳转
+- canonical
+- `og:url`
+- JSON-LD 中的主要 `url`
+- 页面源码中是否出现 `https://www.`
+- 页面源码中是否出现 `https://裸域`
+
+## 二、改动后必须检查的页面
+
+### A. 模板页面
+
+优先抽查:
+
+- 首页
+- 分类页
+- 详情页
+- 播放页
+
+### B. 数据输出页面
+
+优先抽查:
+
+- `sitemap_index.xml`
+- `sitemap-videos-1.xml`
+- RSS `baidu.xml`
+- RSS `so.xml`
+
+## 三、页面级通过标准
+
+### 1. 首页
+
+通过标准:
+
+- canonical host 与设计目标一致
+- `og:url` host 与 canonical 一致
+- 不应再出现与 sitemap 完全相反的 host 口径
+
+### 2. 分类页
+
+通过标准:
+
+- canonical host 一致
+- `og:url` host 一致
+- 若存在 JSON-LD,URL host 一致
+
+### 3. 详情页
+
+通过标准:
+
+- canonical host 一致
+- `og:url` host 一致
+- JSON-LD `url` host 一致
+
+### 4. 播放页
+
+通过标准:
+
+- `robots = noindex,follow` 维持不变
+- canonical host 一致
+- 不在本批次里要求改变 canonical 指向对象
+
+### 5. sitemap
+
+通过标准:
+
+- 列出的 URL host 与模板 canonical 设计口径一致
+- 不应继续一部分用 `www`、一部分用裸域
+
+### 6. RSS
+
+通过标准:
+
+- 频道级 ``、`generator`、正文 `` host 一致
+- 不应继续出现频道级 `www`、正文级裸域的混搭
+
+## 四、日志级验收指标
+
+### 1. 第一优先级指标
+
+重点比较改动前后 24 小时:
+
+- `/|301`
+- `home|301`
+- 同一 base domain 的 `www` / 裸域双命中
+
+### 2. 第二优先级指标
+
+继续观察:
+
+- `detail|301`
+- `play|301`
+
+说明:
+
+- 这两项不一定会在第一批立即大幅下降
+- 但如果 host 统一生效,通常应先看到部分改善
+
+### 3. 暂不作为第一批成败判断的指标
+
+- `444`
+- `fallback` 命中情况
+- `category` 扩散
+
+这些指标可以观察,但不作为第一批的主判定。
+
+## 五、重点观察域名
+
+第一批建议固定盯这些域名:
+
+- `yagyjt.com`
+- `www.ningxiaowei.com`
+- `www.haotianhaiyuan.com`
+- `ctshuhua.com`
+- `sctyjz.com`
+
+原因:
+
+- 这些域名最能体现 host 分裂、首页 `301`、深页样本差异
+
+## 六、风险提示
+
+如果出现以下情况,说明第一批改动需要立即复盘:
+
+1. `404` 明显上升
+2. `sitemap` 或 RSS 无法访问
+3. canonical 丢失
+4. 首页和详情页 canonical host 不一致
+5. `/|301` 不降反升
+
+## 七、建议记录格式
+
+每次验收至少留一份简表,字段建议如下:
+
+- 域名
+- 页面类型
+- 访问 URL
+- 状态码
+- 跳转后 URL
+- canonical
+- `og:url`
+- JSON-LD URL
+- 备注
+
+## 一句话说明
+
+> 第一批修正的验收重点不是“所有 SEO 指标都立刻变好”,而是先确认模板、sitemap、RSS 在 host 维度不再互相冲突,然后观察 `/|301` 和 `www/裸域` 双命中是否下降。
diff --git a/docs/old-tmp-seo/17-老模板5套蜘蛛日志纠偏与SEO提示-2026-04-17.md b/docs/old-tmp-seo/17-老模板5套蜘蛛日志纠偏与SEO提示-2026-04-17.md
new file mode 100644
index 0000000..6b6c102
--- /dev/null
+++ b/docs/old-tmp-seo/17-老模板5套蜘蛛日志纠偏与SEO提示-2026-04-17.md
@@ -0,0 +1,341 @@
+# 1286-SEONexus 老模板 5 套蜘蛛日志纠偏与 SEO 提示 - 2026-04-17
+
+## 目的
+
+这份文档只做一件事:
+
+- 把 `2026-04-16` 到 `2026-04-17` 这轮蜘蛛日志分析,重新锚定回 `1269` 定义的老模板 5 套主线
+
+它是对前面一串分析文档的纠偏补充,不是否定全部历史结论。
+
+保留有效的部分:
+
+- `baiduspider` 日志观察
+- `301 / 404 / 444` 的结构判断
+- host 规范化、深页规范化、错误入口消耗预算这些大方向
+
+需要重新解释的部分:
+
+- 任何把 `videoGpt1` 当成当前实施主线的代码映射
+- 任何默认以 GPT 新模板结构作为老模板修正入口的判断
+
+## 一、先把范围钉死
+
+`1269` 已经写得很明确:
+
+- 老模板共 5 套
+- 域名会随机绑定其中一套模板
+- 当前不准备把 `videoGpt1` 的整套结构层直接迁过去
+
+代码里真实映射已经确认:
+
+- `1001 = videoDadi`
+- `1002 = videoDingZhu`
+- `1003 = videoBoKu`
+- `1004 = videoLaoNiu`
+- `1005 = videoNuNu`
+
+来源:
+
+- [01-老模板第一阶段回灌执行文档.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/01-老模板第一阶段回灌执行文档.md)
+- [viewTemplate.php](/www/wwwroot/VideoSource2/code/public/initdata/video/viewTemplate.php:6)
+- [TemplateSeeder.php](/www/wwwroot/VideoSource2/code/database/seeders/TemplateSeeder.php:58)
+
+同时确认:
+
+- `1007 = videoGpt1`
+
+所以这轮老模板蜘蛛日志分析,后续都应只围绕:
+
+- `videoDadi`
+- `videoDingZhu`
+- `videoBoKu`
+- `videoLaoNiu`
+- `videoNuNu`
+
+## 二、哪些历史结论仍然有效
+
+下面这些日志判断,即使不绑定 `videoGpt1`,仍然成立:
+
+### 1. `404` 已明显下降
+
+从现有观察链看,`2026-04-17` 相比 `2026-04-16`:
+
+- `404` 明显下降
+- 一部分历史错误入口不再持续高频命中
+
+这说明第一阶段回灌后的老模板链路,至少已经在“硬 404 止血”上开始起作用。
+
+### 2. `444` 上升更像前置层噪音
+
+当前仓库内没有明显应用层主动返回 `444` 的主线证据。
+
+所以现阶段更稳的解释仍然是:
+
+- `444` 更像 nginx / WAF / 安全规则对探测型路径的拦截
+- 还不能直接解释成“老模板 SEO 主路径坏了”
+
+### 3. `301` 仍是当前最值得盯的主损耗
+
+无论从总览还是单站样本看,最像持续消耗抓取预算的,仍然是:
+
+- 首页 `/|301`
+- `home|301`
+- 深页 `detail|301`
+- 深页 `play|301`
+- 以及 host 分裂带来的 `www / 裸域` 规范化跳转
+
+### 4. `yagyjt.com` 仍是最重要的深抓样本
+
+这类站的意义仍然没变:
+
+- 不是“有没有深抓”
+- 而是“已经深抓了,但深页 `301` 接近 `200`,预算被跳转吃掉了”
+
+这条判断仍然适合作为老模板第一优先级样本。
+
+## 三、老模板 5 套的真实代码共性
+
+这 5 套老模板不是“没有 SEO 基础”,而是“基础已存在,但口径没完全统一”。
+
+当前已确认的共性如下。
+
+### 1. 都有 `robots / sitemap / detail / play` 现成模板
+
+5 套模板目录都包含:
+
+- `sitemap/robots.txt`
+- `sitemap/sitemap_index.xml`
+- `sitemap/sitemap-main.xml`
+- `video/getVideoInfo.html`
+- `video/getVideoPlayUrl.html`
+- `video/getCategory.html`
+- `video/getCategoryType.html`
+
+这说明:
+
+- 第一阶段确实应该直接改模板公共代码
+- 不需要先走后台逐站编辑
+
+### 2. `robots.txt` 统一指向裸域 `sitemap_index.xml`
+
+例如:
+
+- [videoDadi/sitemap/robots.txt](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/sitemap/robots.txt:38)
+- [videoDingZhu/sitemap/robots.txt](/www/wwwroot/VideoSource2/code/app/home/view/videoDingZhu/sitemap/robots.txt:38)
+- [videoBoKu/sitemap/robots.txt](/www/wwwroot/VideoSource2/code/app/home/view/videoBoKu/sitemap/robots.txt:38)
+- [videoLaoNiu/sitemap/robots.txt](/www/wwwroot/VideoSource2/code/app/home/view/videoLaoNiu/sitemap/robots.txt:38)
+- [videoNuNu/sitemap/robots.txt](/www/wwwroot/VideoSource2/code/app/home/view/videoNuNu/sitemap/robots.txt:38)
+
+当前写法统一是:
+
+- `Sitemap: https://{$DomainModel->d_domain}/sitemap_index.xml`
+
+### 3. footer 也统一暴露了 `rss/baidu.xml` 和 `sitemap_index.xml`
+
+例如:
+
+- [videoDadi/public/footer.html](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/public/footer.html:19)
+- [videoDingZhu/public/footer.html](/www/wwwroot/VideoSource2/code/app/home/view/videoDingZhu/public/footer.html:36)
+- [videoBoKu/public/footer.html](/www/wwwroot/VideoSource2/code/app/home/view/videoBoKu/public/footer.html:41)
+- [videoLaoNiu/public/footer.html](/www/wwwroot/VideoSource2/code/app/home/view/videoLaoNiu/public/footer.html:16)
+- [videoNuNu/public/footer.html](/www/wwwroot/VideoSource2/code/app/home/view/videoNuNu/public/footer.html:14)
+
+这部分说明:
+
+- 老模板并不是完全缺少抓取入口
+- 当前更像“入口已暴露,但规范口径不够统一”
+
+### 4. 详情页 canonical 基本是正常的
+
+例如:
+
+- [videoDadi/video/getVideoInfo.html](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/video/getVideoInfo.html:79)
+- [videoDingZhu/video/getVideoInfo.html](/www/wwwroot/VideoSource2/code/app/home/view/videoDingZhu/video/getVideoInfo.html:79)
+- [videoBoKu/video/getVideoInfo.html](/www/wwwroot/VideoSource2/code/app/home/view/videoBoKu/video/getVideoInfo.html:80)
+- [videoLaoNiu/video/getVideoInfo.html](/www/wwwroot/VideoSource2/code/app/home/view/videoLaoNiu/video/getVideoInfo.html:79)
+- [videoNuNu/video/getVideoInfo.html](/www/wwwroot/VideoSource2/code/app/home/view/videoNuNu/video/getVideoInfo.html:79)
+
+共同特征:
+
+- canonical 指向详情页自身
+- `og:url` 也基本跟详情页 URL 走
+
+### 5. 播放页 canonical 已指向播放页,但 `og:url / JSON-LD url` 仍常指详情页
+
+例如:
+
+- [videoDadi/video/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/video/getVideoPlayUrl.html:46)
+- [videoDadi/video/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/video/getVideoPlayUrl.html:59)
+- [videoBoKu/video/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoBoKu/video/getVideoPlayUrl.html:46)
+- [videoBoKu/video/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoBoKu/video/getVideoPlayUrl.html:59)
+- [videoLaoNiu/video/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoLaoNiu/video/getVideoPlayUrl.html:46)
+- [videoLaoNiu/video/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoLaoNiu/video/getVideoPlayUrl.html:59)
+- [videoNuNu/video/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoNuNu/video/getVideoPlayUrl.html:46)
+- [videoNuNu/video/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoNuNu/video/getVideoPlayUrl.html:59)
+
+这说明老模板播放页存在一个很典型的“半收口”现象:
+
+- canonical 试图指向播放页
+- 但 `og:url` 和 JSON-LD `url` 仍可能输出详情页地址
+
+这很容易继续制造:
+
+- 播放页规范信号分裂
+- `play|301`
+- 播放页收录不稳定
+
+### 6. 分类页 `getCategoryType` 的 `og:url / CollectionPage.url` 明显偏向首页
+
+例如:
+
+- [videoDadi/video/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/video/getCategoryType.html:19)
+- [videoDadi/video/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/video/getCategoryType.html:46)
+- [videoDingZhu/video/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoDingZhu/video/getCategoryType.html:19)
+- [videoBoKu/video/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoBoKu/video/getCategoryType.html:19)
+- [videoLaoNiu/video/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoLaoNiu/video/getCategoryType.html:19)
+- [videoNuNu/video/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoNuNu/video/getCategoryType.html:19)
+
+当前共同特征是:
+
+- `og:url = https://{$DomainModel->d_domain}`
+- `CollectionPage.url = https://{$DomainModel->d_domain}`
+- `BreadcrumbList` 才带分类真实地址
+
+这说明分类首页页型存在明显规范化信号不一致:
+
+- 页面实际是分类页
+- 但社交与结构化主 URL 却更像首页
+
+这会影响:
+
+- `category` 页型独立识别
+- 分类页聚合页规范信号
+- 首页与分类页之间的抓取优先级判断
+
+### 7. sitemap 与页面主输出存在 `www / 裸域` 双口径风险
+
+当前已确认至少有一条老模板共性:
+
+- `robots.txt` 输出的是裸域 `https://{$DomainModel->d_domain}/sitemap_index.xml`
+- 但某些 sitemap 页面内部却在吐 `https://www.{$DomainModel->d_domain}/...`
+
+例如:
+
+- [videoDadi/sitemap/sitemap-main.xml](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/sitemap/sitemap-main.xml:4)
+
+这一类双口径如果在 5 套里普遍存在,就会直接对应日志里的:
+
+- `/|301`
+- `home|301`
+- 深页命中后再规范化一次
+
+## 四、给主 Codex 的老模板专用 SEO 提示
+
+下面这组提示,应替代“去看 GPT 模板链路”的旧方向。
+
+### 1. 第一优先级不是换骨架,而是统一规范口径
+
+老模板第一阶段最值得做的不是大改页面结构,而是统一三种口径:
+
+- 页面 head 口径
+- sitemap / rss 口径
+- 站内主要链接口径
+
+只要这三条不统一,百度即使已经深抓,也会继续把预算消耗在 `301` 上。
+
+### 2. 先统一 host,再统一页型 URL
+
+优先顺序建议固定成:
+
+1. 先统一 `www / 裸域`
+2. 再统一分类页规范 URL
+3. 再统一播放页 `canonical / og:url / JSON-LD url`
+
+原因很简单:
+
+- host 级 `301` 影响首页、分类、详情、播放全链路
+- 分类页是“从首页到深页”的中间层
+- 播放页规范化是深抓之后的放量优化
+
+### 3. 分类页是当前最容易被忽略、但很值得补的一刀
+
+现在最容易跑偏的地方是:
+
+- 看见详情页 canonical 基本正常
+- 就误以为老模板规范化已经差不多了
+
+但实际从代码看,分类页 `getCategoryType` 仍然把自己往首页信号上靠。
+
+这会导致:
+
+- 百度更难把分类页当成独立聚合入口
+- `category` 命中量放不起来
+- 首页承担过多入口压力
+
+所以对老模板来说,分类页规范化不是附属项,而是主项。
+
+### 4. 播放页要看“三件套”,不要只看 canonical
+
+老模板播放页判断是否真正收口,必须一起看:
+
+- canonical
+- `og:url`
+- JSON-LD `url`
+
+只看 canonical 不够,因为:
+
+- canonical 对了
+- 但 `og:url` / 结构化还指详情页
+
+这仍会继续制造播放页信号分裂。
+
+### 5. `404` 已降,不要急着删旧兼容入口
+
+根据目前观察:
+
+- 旧入口兼容链路很可能还在帮我们把一部分历史深链从 `404` 兜成 `301 -> 200`
+
+因此老模板第一阶段更稳的做法仍然是:
+
+- 先统一规范输出
+- 先压非必要 `301`
+- 暂不激进删除旧 deep link 兼容
+
+否则很容易把当前已止血的部分重新打回 `404`。
+
+## 五、对前面文档链的使用说明
+
+从 `1271` 到 `1274`:
+
+- 日志观察部分仍然可继续用
+- 但代码映射要以本文件为准重新理解
+
+从 `1275` 到 `1285`:
+
+- 凡是明显把 `videoGpt1` 当成老模板主入口的段落
+- 都不应继续作为老模板第一实施主线
+
+更稳的接手方式是:
+
+1. 先看 [01-老模板第一阶段回灌执行文档.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/01-老模板第一阶段回灌执行文档.md)
+2. 再看本文件
+3. 再回头使用 `1271 / 1273 / 1274` 的日志现象结论
+4. 主 Codex 后续如果要继续写实施方案,应只围绕 `1001-1005` 的 5 套模板
+
+## 六、下一步最推荐的检查顺序
+
+如果主 Codex 现在继续老模板 SEO 分析,建议只按下面顺序:
+
+1. 检查 5 套模板里 `robots.txt / sitemap_index.xml / sitemap-main.xml / rss/baidu.xml` 的 host 输出是否一致
+2. 检查 5 套模板里 `getCategoryType.html` 的 `og:url / CollectionPage.url` 是否都该改成分类真实 URL
+3. 检查 5 套模板里 `getVideoPlayUrl.html` 的 `og:url / JSON-LD url` 是否都应改成播放页真实 URL
+4. 再结合下一轮 `baiduspider` 日志看:
+ - `/|301` 是否继续下降
+ - `home|301` 是否继续下降
+ - `detail|301 / play|301` 是否开始分离下降
+ - `category` 命中是否开始上来
+
+## 一句话交接
+
+> 老模板这条线当前真正要优化的不是 `videoGpt1`,而是 `1001-1005` 这 5 套老模板自身的规范化输出一致性;现阶段最值得盯的是 host 口径、分类页 URL 信号、播放页三件套,以及它们对 `301` 损耗的影响。
diff --git a/docs/old-tmp-seo/18-老模板站群7天SEO冲量执行方案-2026-04-17.md b/docs/old-tmp-seo/18-老模板站群7天SEO冲量执行方案-2026-04-17.md
new file mode 100644
index 0000000..2aa327f
--- /dev/null
+++ b/docs/old-tmp-seo/18-老模板站群7天SEO冲量执行方案-2026-04-17.md
@@ -0,0 +1,344 @@
+# 1287-SEONexus 老模板站群 7 天 SEO 冲量执行方案 - 2026-04-17
+
+## 目标
+
+这份文档面向当前这一批老模板站群域名。
+
+目标不是空泛地说“做 SEO”,而是把目标明确成:
+
+- 每天都能看到日志层进步
+- 7 天内让这批域名的百度抓取质量明显提升
+- 让部分核心词、站名词、内容词开始更稳定地上首页或靠近首页
+
+先说结论:
+
+> 可以把这批老模板域名往“7 天明显进步”方向推进,但不能把“全部域名 7 天稳定上首页”当成可承诺结果。
+
+更现实也更专业的目标是:
+
+1. 7 天内让抓取预算浪费显著下降
+2. 7 天内让首页、分类页、详情页、播放页的规范化明显收口
+3. 7 天内让深抓样本域名出现更稳定的 `detail|200 / play|200`
+4. 7 天内争取让一批品牌词、长尾词、影片词出现首页曝光
+
+## 一、当前真实阶段判断
+
+结合现有日志,这批老模板站群不是“百度还没来”。
+
+当前更像是:
+
+- 百度已经进首页
+- 部分站已经能碰到详情页和播放页
+- 但预算仍被大量 `301 / 404 / 444 / 错误入口` 消耗
+
+所以这批域名要上量,不是先去幻想“大改版马上起飞”,而是先做这 3 件事:
+
+1. 把百度已经来的流量先接稳
+2. 把百度已经抓到的入口变得更直达
+3. 把错误入口和重复规范化损耗压下去
+
+## 二、先把最终目标拆成 3 类
+
+### 1. 基础目标
+
+这是所有域名都必须追的:
+
+- 首页尽量直达 `200`
+- `robots / sitemap / rss / canonical` 统一
+- `www / 裸域` 只留一个规范口径
+
+### 2. 放量目标
+
+这是已有深抓信号的域名优先追的:
+
+- `detail|301` 降
+- `play|301` 降
+- `detail|200` 稳
+- `play|200` 升
+
+### 3. 排名目标
+
+这是结果层,不是第一天就能硬造出来的:
+
+- 站名词更稳定进入首页
+- 长尾片名词开始拿到首页曝光
+- 分类聚合词开始从无到有
+
+## 三、当前域名应分 3 组推进
+
+### A 组:深抓已成立,优先保放量
+
+当前代表:
+
+- `yagyjt.com`
+
+补充候选:
+
+- 有 `detail|200`
+- 有 `play|200`
+- 同时又有明显 `detail|301 / play|301` 的域名
+
+这一组的核心目标不是“让百度来”,而是:
+
+- 让已经来的百度少跳转
+- 让详情页、播放页变成更直接的收录入口
+
+### B 组:首页已起,但规范化没收口
+
+当前代表:
+
+- `www.ningxiaowei.com`
+- `www.ap-hulan.com`
+- `haotianhaiyuan.com / www.haotianhaiyuan.com`
+- `hymdrz.com / www.hymdrz.com`
+- `sctyjz.com / www.sctyjz.com`
+
+这一组的目标是:
+
+- 首页更直达
+- 分类页更独立
+- host 更统一
+
+### C 组:错误入口吞预算,先止损
+
+当前代表:
+
+- `qf123.net`
+
+这一组先不谈“上首页来量”,而是先谈:
+
+- 停止错误入口吞预算
+- 让百度重新把注意力放回真实内容页
+
+## 四、每天要看的不是“感觉”,而是这 8 个指标
+
+后续每天复盘都建议固定只看下面 8 项:
+
+1. `home|200`
+2. `home|301`
+3. `category|200`
+4. `detail|200`
+5. `detail|301`
+6. `play|200`
+7. `play|301`
+8. `other|404`
+
+外加两个附加观察:
+
+- `/|301`
+- `www / 裸域` 是否双命中
+
+## 五、7 天节奏建议
+
+### Day 1:先统一目标域名和样本域名
+
+当天必须做完:
+
+- 从当前几十个域名里,先挑出 10 个重点域名
+- 其中至少:
+ - 2 个 A 组
+ - 5 个 B 组
+ - 3 个 C 组
+
+当天验收:
+
+- 每个重点域名都要有日志基线
+- 每个重点域名都要标记所属模板
+- 每个重点域名都要明确当前规范 host
+
+如果 Day 1 连这些都没有定死,后面 6 天只会越做越乱。
+
+### Day 2:先压首页层损耗
+
+核心目标:
+
+- 首页 `301` 明显下降
+- `/|301` 明显下降
+
+重点检查:
+
+- `www / 非 www`
+- `http / https`
+- 模板 head 输出
+- sitemap、rss、footer 暴露入口是否统一到同一 host
+
+当天验收:
+
+- 重点域名首页规范地址统一
+- 非规范首页跳转链减少
+
+### Day 3:修分类页规范化
+
+当前老模板很值得优先补的一刀,就是分类页。
+
+核心目标:
+
+- `category|200` 开始增加
+- 分类页不再把自己输出成首页信号
+
+重点检查:
+
+- `getCategoryType.html`
+- `og:url`
+- `CollectionPage.url`
+- Breadcrumb 与页面主 URL 是否一致
+
+当天验收:
+
+- 分类页 URL 信号收口
+- 分类页开始具备独立聚合页身份
+
+### Day 4:修详情页和播放页规范信号
+
+核心目标:
+
+- `detail|301` 降
+- `play|301` 降
+
+重点检查:
+
+- `getVideoInfo.html`
+- `getVideoPlayUrl.html`
+- canonical
+- `og:url`
+- JSON-LD `url`
+
+当天验收:
+
+- 播放页不再只靠 canonical 单点收口
+- 播放页三件套开始一致
+
+### Day 5:清错误入口和历史噪音
+
+核心目标:
+
+- `other|404` 降
+- 百度不再把预算花在垃圾入口上
+
+重点对象:
+
+- `webuploader`
+- `upload`
+- `fileupload`
+- `admin.php`
+- `zb_system`
+- `showchengshi.asp`
+- 各类历史模板残留路径
+
+当天验收:
+
+- 高频错误路径数量收缩
+- `qf123.net` 这类域名开始止血
+
+### Day 6:做站内放量
+
+这是前 5 天基础收口后,才值得做的放量动作。
+
+核心目标:
+
+- 让百度更容易从首页进入分类页、详情页、播放页
+
+重点动作:
+
+- 首页聚合入口更清晰
+- footer 与页面底部的 sitemap 暴露更一致
+- 核心分类入口更稳定
+- 详情页到播放页的站内链更直接
+
+当天验收:
+
+- `category|200`、`detail|200`、`play|200` 至少有部分域名开始上升
+
+### Day 7:复盘与冲首页观察
+
+第 7 天不能只看日志,要同时看两层结果:
+
+1. 百度蜘蛛日志结果
+2. 百度搜索结果页表现
+
+要重点看:
+
+- 站名词是否更稳定首页
+- 片名长尾词是否开始首页曝光
+- 分类词是否开始被百度识别
+
+## 六、什么叫“每天有进步”
+
+不是只有“排名上首页”才算进步。
+
+对当前这批老模板域名来说,下面这些都算真实进步:
+
+### 第 1 类:抓取质量进步
+
+- `/|301` 下降
+- `home|301` 下降
+- `other|404` 下降
+
+### 第 2 类:结构信号进步
+
+- `category|200` 从无到有
+- `detail|301` 下降
+- `play|301` 下降
+
+### 第 3 类:放量进步
+
+- `detail|200` 增加
+- `play|200` 增加
+- 同一站点的 `www / 裸域` 分裂减少
+
+### 第 4 类:搜索表现进步
+
+- 品牌词更稳
+- 长尾词开始出结果
+- 首页与详情页开始分工更清楚
+
+## 七、关于“7 天上首页”的真实预期
+
+这件事必须说实话。
+
+### 可以争取的
+
+7 天内比较有机会看到的是:
+
+- 站名词首页稳定
+- 某些长尾片名词首页出现
+- 深抓正样本域名的详情页、播放页更容易被看到
+
+### 不该乱承诺的
+
+不应该直接承诺:
+
+- 几十个域名全部首页稳定
+- 大量竞争词 7 天全部冲上首页
+- 只靠模板修正就立刻爆发
+
+原因不是悲观,而是搜索引擎就不是按“开发日程”线性出结果的。
+
+真正能稳住结果的,是:
+
+- 连续 7 天都在减少损耗
+- 连续 7 天都在强化规范化
+- 连续 7 天都在提升百度对内容层的识别
+
+## 八、给主 Codex 的执行原则
+
+如果后续主 Codex 要按这条线继续做,建议遵守 5 条:
+
+1. 先做老模板 5 套公共口径统一,不做逐站手工修补
+2. 先压 `301 / 404`,再谈“内容放量”
+3. 先保 A 组深抓样本,再修 B 组,再止损 C 组
+4. 每天都要回看日志,不凭感觉判断 SEO 是否变好
+5. 每天最多只推一到两类核心修正,避免同时动太多导致无法归因
+
+## 九、当前最值得先推进的 4 个方向
+
+结合现有代码和日志,后续第一批最值得推进的是:
+
+1. 老模板 5 套统一 `www / 裸域 / http / https` 输出口径
+2. 老模板 5 套统一 `robots / sitemap / rss / footer` 暴露口径
+3. 老模板 5 套修正分类页 `getCategoryType.html` 的主 URL 信号
+4. 老模板 5 套修正播放页 `canonical / og:url / JSON-LD url` 三件套一致性
+
+## 一句话交接
+
+> 这批老模板站群如果想 7 天内见到量,不是先赌“全部域名直接上首页”,而是先把百度已经来的抓取预算接稳、把规范化跳转压下去、把分类与深页信号做直达;只要这条线每天都在进步,7 天后就有机会从“有抓取”走到“有首页曝光、有内容来量”。
diff --git a/docs/old-tmp-seo/19-老模板站群Day1重点域名基线板-2026-04-17.md b/docs/old-tmp-seo/19-老模板站群Day1重点域名基线板-2026-04-17.md
new file mode 100644
index 0000000..96e9c71
--- /dev/null
+++ b/docs/old-tmp-seo/19-老模板站群Day1重点域名基线板-2026-04-17.md
@@ -0,0 +1,259 @@
+# 1288-SEONexus 老模板站群 Day1 重点域名基线板 - 2026-04-17
+
+## 目的
+
+这份文档用于承接老模板站群 7 天冲量方案的 Day 1。
+
+作用只有一个:
+
+- 先把当前真正值得盯的重点域名池定下来
+
+如果这一步不先做,后面每天的“继续”就会变成:
+
+- 一会儿看这个域名
+- 一会儿看那个域名
+- 最后没有任何一组样本能连续跟踪 7 天
+
+## 一、当前选样原则
+
+这次重点域名不按“拍脑袋喜欢哪个域名”选,而按 4 个标准来定:
+
+1. 最近 run 里确实被蜘蛛命中过
+2. 尽量覆盖不同问题类型
+3. 优先覆盖已经出现百度信号的域名
+4. 同时保留少量明显止损样本
+
+## 二、Day 1 第一版重点域名池
+
+当前先定 12 个,够用但不至于太散。
+
+### A 组:深抓放量样本
+
+1. `yagyjt.com`
+2. `www.ningxiaowei.com`
+3. `ningxiaowei.com`
+
+这组意义:
+
+- 已有较强百度信号
+- 适合观察深抓、host 规范化、内容层 URL 收口
+
+### B 组:首页与规范化样本
+
+4. `sctyjz.com`
+5. `www.sctyjz.com`
+6. `www.ap-hulan.com`
+7. `hymdrz.com`
+8. `www.hymdrz.com`
+
+这组意义:
+
+- 首页层有信号
+- 但 `www / 裸域`、首页入口、路径规范化仍值得重点盯
+
+### C 组:扩展观察样本
+
+9. `ctshuhua.com`
+10. `hygfbw.com`
+11. `syzhzs.com`
+12. `yahuawang88.com`
+
+这组意义:
+
+- 已在最近 run 中被蜘蛛命中
+- 适合观察这批“非头部样本域名”是否也能随着老模板公共修正一起改善
+
+## 三、暂时不放进第一批重点池的域名
+
+下面这些域名当前也在 run 中出现过,但 Day 1 先不作为主战样本:
+
+- `tvwallmountreview.com`
+- `www.tvwallmountreview.com`
+- `xcgruister.com`
+- `www.xcgruister.com`
+- `zsxd2020.com`
+- `www.zsxd2020.com`
+- `qingyejianshe.com`
+- `ruantishafa.com`
+- `yqshu8.com`
+
+原因不是它们不重要,而是:
+
+- 目前样本量还偏少
+- 或者当前日志里更多是 `robots / 444 / 低频 home`
+- 先放在第二观察圈更稳
+
+## 四、当前每组域名最主要的问题
+
+### `yagyjt.com`
+
+定位:
+
+- 当前第一优先级深抓样本
+
+主问题:
+
+- 深页 `301` 仍高
+- 内容入口预算被跳转吃掉
+
+主目标:
+
+- 保住 `detail|200 / play|200`
+- 压 `detail|301 / play|301`
+
+### `ningxiaowei.com / www.ningxiaowei.com`
+
+定位:
+
+- 首页已起量
+- host 与内容路径规范化样本
+
+主问题:
+
+- `www / 裸域` 分裂
+- `other|301` 明显
+
+主目标:
+
+- 统一规范 host
+- 减少非首页入口跳转
+
+### `sctyjz.com / www.sctyjz.com`
+
+定位:
+
+- 首页层和错误入口混合样本
+
+主问题:
+
+- 首页不够直达
+- 噪音路径还在抢预算
+
+主目标:
+
+- 压 `/|301`
+- 压错误入口
+
+### `www.ap-hulan.com`
+
+定位:
+
+- 首页层可观测样本
+
+主问题:
+
+- 首页仍有规范化损耗
+
+主目标:
+
+- 让首页尽量直达最终 `200`
+
+### `hymdrz.com / www.hymdrz.com`
+
+定位:
+
+- host 规范收敛样本
+
+主问题:
+
+- 双 host 需要明确哪边是规范主域
+
+主目标:
+
+- 收敛 `www / 裸域`
+
+### `ctshuhua.com / hygfbw.com / syzhzs.com / yahuawang88.com`
+
+定位:
+
+- 扩展样本池
+
+主问题:
+
+- 当前量级不高
+- 但已经被百度命中,值得观察是否能一起被老模板公共优化带起来
+
+主目标:
+
+- 看公共修正是否能同步抬升首页与分类信号
+
+## 五、Day 1 要固定的 10 个观察指标
+
+从今天开始,这 12 个域名每天都尽量只看下面 10 项:
+
+1. `home|200`
+2. `home|301`
+3. `robots`
+4. `sitemap`
+5. `category|200`
+6. `detail|200`
+7. `detail|301`
+8. `play|200`
+9. `play|301`
+10. `other|404`
+
+附加观察:
+
+- `/|301`
+- `www / 裸域` 是否双命中
+- 是否开始出现更多真实内容路径
+
+## 六、结合百度搜索引擎的优化方向
+
+这里说的“结合百度搜索引擎”,不是去做空泛口号,而是结合当前百度真实抓取行为来优化:
+
+### 1. 百度已经在试探入口层
+
+从现有日志看:
+
+- 首页
+- `robots.txt`
+- `sitemap`
+- 旧内容路径
+
+这些都已经被实际访问。
+
+这说明当前最重要的是:
+
+- 给百度一个更稳定、更低损耗的最终入口
+
+### 2. 百度对聚合页和深页的判断,强依赖 URL 信号是否一致
+
+所以老模板当前要特别重视:
+
+- canonical
+- `og:url`
+- JSON-LD `url`
+- sitemap 中的 URL
+- 站内真实跳转 URL
+
+这些信号只要互相打架,百度就更容易:
+
+- 先抓到
+- 再跳转
+- 再犹豫是否把这个页当成最终页
+
+### 3. 百度比“页面好不好看”更先看“入口稳不稳”
+
+对这批老模板域名来说,短期内真正影响来量的优先级更像:
+
+1. 能不能稳定抓到
+2. 抓到后是不是直达 `200`
+3. 分类页和深页是不是能被识别成独立页型
+4. 之后才是内容质量和词覆盖继续放大
+
+## 七、Day 1 之后的直接动作
+
+从这份基线板往下走,后面最值得先推进的顺序是:
+
+1. 先修 12 个重点域名对应的老模板公共规范口径
+2. 优先盯 `A 组 + B 组`
+3. 每天记录一次是否出现:
+ - `home|301` 下降
+ - `category|200` 上升
+ - `detail|301 / play|301` 下降
+ - `detail|200 / play|200` 上升
+
+## 一句话交接
+
+> 这 12 个域名就是当前老模板站群 7 天冲量的 Day 1 样本池,后面每天的 SEO 推进、日志复盘、效果判断,都应该优先围绕这批域名来做,而不是继续散点式看全站群。
diff --git a/docs/old-tmp-seo/20-老模板第一批SEO高收益修正清单-2026-04-17.md b/docs/old-tmp-seo/20-老模板第一批SEO高收益修正清单-2026-04-17.md
new file mode 100644
index 0000000..9b2f7b4
--- /dev/null
+++ b/docs/old-tmp-seo/20-老模板第一批SEO高收益修正清单-2026-04-17.md
@@ -0,0 +1,262 @@
+# 1289-SEONexus 老模板第一批 SEO 高收益修正清单 - 2026-04-17
+
+## 目的
+
+这份文档只回答一个问题:
+
+- 老模板 5 套里,第一批最值得先改、而且最可能在 7 天内看到收益的 SEO 点,到底是什么
+
+这里不再泛泛而谈,而是直接基于代码共性给出优先级。
+
+适用范围只限:
+
+- `1001 = videoDadi`
+- `1002 = videoDingZhu`
+- `1003 = videoBoKu`
+- `1004 = videoLaoNiu`
+- `1005 = videoNuNu`
+
+## 总判断
+
+当前老模板站群如果想在短期内更快看到百度放量,第一批最值得动的不是视觉结构,而是下面 3 条公共信号链:
+
+1. 分类页主 URL 信号
+2. 播放页主 URL 信号
+3. sitemap host 口径
+
+这 3 条之所以优先级最高,是因为它们同时影响:
+
+- 百度是否把页面识别成独立页型
+- 百度是否先抓到再跳转
+- 百度是否持续把预算浪费在规范化上
+
+## 一、第一优先级:修分类页主 URL 信号
+
+### 当前问题
+
+5 套老模板的 `getCategoryType.html` 当前都存在同样的问题:
+
+- `og:url` 指向首页
+- `CollectionPage.url` 指向首页
+- 但 `BreadcrumbList` 却带分类真实 URL
+
+这会形成一个非常糟糕的混合信号:
+
+- 页面内容是分类页
+- 页面标题和 H1 也是分类页
+- 但页面主 URL 信号又像首页
+
+### 直接影响
+
+这会削弱百度对分类页的判断,典型影响包括:
+
+- 分类页不容易被识别成独立聚合页
+- `category|200` 起量慢
+- 首页承担过多聚合入口角色
+- 首页与分类页之间可能互相稀释
+
+### 受影响文件
+
+- [videoDadi/video/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/video/getCategoryType.html:19)
+- [videoDingZhu/video/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoDingZhu/video/getCategoryType.html:19)
+- [videoBoKu/video/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoBoKu/video/getCategoryType.html:19)
+- [videoLaoNiu/video/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoLaoNiu/video/getCategoryType.html:19)
+- [videoNuNu/video/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoNuNu/video/getCategoryType.html:19)
+
+以及对应的结构化数据位置:
+
+- [videoDadi/video/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/video/getCategoryType.html:46)
+- [videoDingZhu/video/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoDingZhu/video/getCategoryType.html:46)
+- [videoBoKu/video/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoBoKu/video/getCategoryType.html:46)
+- [videoLaoNiu/video/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoLaoNiu/video/getCategoryType.html:46)
+- [videoNuNu/video/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoNuNu/video/getCategoryType.html:46)
+
+### 建议修正方向
+
+统一原则:
+
+- 分类页的 `og:url` 应指向当前分类页真实 URL
+- `CollectionPage.url` 应指向当前分类页真实 URL
+- 最好补上分类页 canonical,进一步收口
+
+### 预期收益
+
+这条修正最容易带来的短期收益是:
+
+- `category|200` 更容易开始出现
+- 分类页独立识别增强
+- 首页不再过度承载所有聚合信号
+
+## 二、第二优先级:修播放页三件套一致性
+
+### 当前问题
+
+5 套老模板的 `getVideoPlayUrl.html` 当前共同表现是:
+
+- canonical 指向播放页
+- 但 `og:url` 指向详情页
+- JSON-LD 里的 `url` 也指向详情页
+
+这是一种非常典型的“半收口”状态。
+
+### 直接影响
+
+这会导致播放页在百度看来信号分裂:
+
+- 页面本身是播放页
+- canonical 说“我是播放页”
+- 但 `og:url` 和结构化又在说“我是详情页”
+
+这种信号分裂最容易造成:
+
+- `play|301` 长期偏高
+- 播放页不容易稳定成为最终页
+- 详情页和播放页之间相互争夺规范身份
+
+### 受影响文件
+
+- [videoDadi/video/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/video/getVideoPlayUrl.html:41)
+- [videoDingZhu/video/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoDingZhu/video/getVideoPlayUrl.html:41)
+- [videoBoKu/video/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoBoKu/video/getVideoPlayUrl.html:41)
+- [videoLaoNiu/video/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoLaoNiu/video/getVideoPlayUrl.html:41)
+- [videoNuNu/video/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoNuNu/video/getVideoPlayUrl.html:41)
+
+canonical 位置:
+
+- [videoDadi/video/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/video/getVideoPlayUrl.html:54)
+- [videoDingZhu/video/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoDingZhu/video/getVideoPlayUrl.html:55)
+- [videoBoKu/video/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoBoKu/video/getVideoPlayUrl.html:55)
+- [videoLaoNiu/video/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoLaoNiu/video/getVideoPlayUrl.html:55)
+- [videoNuNu/video/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoNuNu/video/getVideoPlayUrl.html:55)
+
+JSON-LD `url` 位置:
+
+- [videoDadi/video/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/video/getVideoPlayUrl.html:68)
+- [videoDingZhu/video/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoDingZhu/video/getVideoPlayUrl.html:69)
+- [videoBoKu/video/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoBoKu/video/getVideoPlayUrl.html:69)
+- [videoLaoNiu/video/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoLaoNiu/video/getVideoPlayUrl.html:70)
+- [videoNuNu/video/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoNuNu/video/getVideoPlayUrl.html:70)
+
+### 建议修正方向
+
+统一原则:
+
+- 播放页 canonical、`og:url`、JSON-LD `url` 三者全部指向播放页真实 URL
+
+### 预期收益
+
+这条修正最容易带来的短期收益是:
+
+- `play|301` 更容易下降
+- 播放页更容易被百度稳定识别
+- 深抓样本域名更容易把播放页转成有效入口
+
+## 三、第三优先级:统一 sitemap host 口径
+
+### 当前问题
+
+5 套老模板当前共同特征是:
+
+- `robots.txt` 指向裸域 `https://{$DomainModel->d_domain}/sitemap_index.xml`
+- 但 `sitemap-main.xml` 内部却使用 `https://www.{$DomainModel->d_domain}`
+
+更关键的是,`sitemap-main.xml` 里当前还是一组很不合理的输出:
+
+- 既用了 `www`
+- 又用了 `novel:category / site:nflurl`
+
+这说明这份 sitemap 文件至少存在“视频站复用小说逻辑”的强疑点。
+
+### 直接影响
+
+这类问题会造成:
+
+- sitemap 自己就在制造 host 级 `301`
+- 首页和聚合页入口口径不统一
+- 百度从 sitemap 进入的路径可能不是最终规范页
+
+### 受影响文件
+
+- [videoDadi/sitemap/sitemap-main.xml](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/sitemap/sitemap-main.xml:4)
+- [videoDingZhu/sitemap/sitemap-main.xml](/www/wwwroot/VideoSource2/code/app/home/view/videoDingZhu/sitemap/sitemap-main.xml:4)
+- [videoBoKu/sitemap/sitemap-main.xml](/www/wwwroot/VideoSource2/code/app/home/view/videoBoKu/sitemap/sitemap-main.xml:4)
+- [videoLaoNiu/sitemap/sitemap-main.xml](/www/wwwroot/VideoSource2/code/app/home/view/videoLaoNiu/sitemap/sitemap-main.xml:4)
+- [videoNuNu/sitemap/sitemap-main.xml](/www/wwwroot/VideoSource2/code/app/home/view/videoNuNu/sitemap/sitemap-main.xml:4)
+
+同时要对照:
+
+- [videoDadi/sitemap/robots.txt](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/sitemap/robots.txt:38)
+- [videoDingZhu/sitemap/robots.txt](/www/wwwroot/VideoSource2/code/app/home/view/videoDingZhu/sitemap/robots.txt:38)
+- [videoBoKu/sitemap/robots.txt](/www/wwwroot/VideoSource2/code/app/home/view/videoBoKu/sitemap/robots.txt:38)
+- [videoLaoNiu/sitemap/robots.txt](/www/wwwroot/VideoSource2/code/app/home/view/videoLaoNiu/sitemap/robots.txt:38)
+- [videoNuNu/sitemap/robots.txt](/www/wwwroot/VideoSource2/code/app/home/view/videoNuNu/sitemap/robots.txt:38)
+
+### 建议修正方向
+
+统一原则:
+
+- sitemap 中的 host 必须与页面主输出一致
+- 如果规范主域是裸域,就不要在 sitemap 里继续吐 `www`
+- 同时要复核 `sitemap-main.xml` 是否本身就写错了页型逻辑
+
+### 预期收益
+
+这条修正最容易带来的短期收益是:
+
+- `/|301` 和 host 级 `301` 更容易下降
+- sitemap 对百度更有正向价值
+- 首页和聚合入口更加统一
+
+## 四、为什么这 3 条比别的更优先
+
+因为它们满足 4 个条件:
+
+1. 5 套老模板都有共性问题
+2. 不需要逐站后台编辑
+3. 改一处能影响一批域名
+4. 更容易在 7 天窗口内看到日志变化
+
+相比之下,像下面这些动作当前都应该后置:
+
+- 首页 UI 大改
+- 列表模块大重构
+- 逐站重写标题库
+- 逐站改内容文本
+
+不是这些不重要,而是它们不适合当前“先把百度抓取效率和规范化收口拉起来”的阶段。
+
+## 五、建议的第一批实施顺序
+
+如果主 Codex 现在开始真正落代码,顺序建议固定成:
+
+1. 先修 `getCategoryType.html`
+2. 再修 `getVideoPlayUrl.html`
+3. 再修 `sitemap-main.xml`
+
+原因:
+
+- 分类页修正最可能带来 `category` 页型收益
+- 播放页修正最可能带来 `play|301` 收敛
+- sitemap 修正最可能带来首页与 host 规范化收益
+
+## 六、这批修正完成后要看什么
+
+修完后,最值得连续看 3 天到 7 天的指标是:
+
+1. `/|301` 是否下降
+2. `home|301` 是否下降
+3. `category|200` 是否从无到有或持续增加
+4. `detail|301` 是否下降
+5. `play|301` 是否下降
+6. `detail|200 / play|200` 是否稳住或上升
+
+重点样本优先看:
+
+- `yagyjt.com`
+- `ningxiaowei.com / www.ningxiaowei.com`
+- `sctyjz.com / www.sctyjz.com`
+- `www.ap-hulan.com`
+
+## 一句话结论
+
+> 老模板第一批最该动的,不是页面大改,而是分类页 URL 信号、播放页三件套、sitemap host 口径;这 3 刀是当前最可能在短期内直接减少抓取损耗、提升百度识别效率、并给排名放量创造条件的高收益修正点。
diff --git a/docs/old-tmp-seo/21-老模板实施安全边界与GPT隔离说明-2026-04-17.md b/docs/old-tmp-seo/21-老模板实施安全边界与GPT隔离说明-2026-04-17.md
new file mode 100644
index 0000000..7721668
--- /dev/null
+++ b/docs/old-tmp-seo/21-老模板实施安全边界与GPT隔离说明-2026-04-17.md
@@ -0,0 +1,152 @@
+# 1290-SEONexus 老模板实施安全边界与 GPT 隔离说明 - 2026-04-17
+
+## 目的
+
+这份文档用于明确两件事:
+
+1. 老模板第一批 SEO 修正,具体应该改哪些文件
+2. 为什么这些改动可以与 `videoGpt1` 隔离,不会直接误伤 GPT 模板
+
+## 一、当前边界结论
+
+老模板第一批建议改动范围,只限下面 5 套目录:
+
+- `code/app/home/view/videoDadi`
+- `code/app/home/view/videoDingZhu`
+- `code/app/home/view/videoBoKu`
+- `code/app/home/view/videoLaoNiu`
+- `code/app/home/view/videoNuNu`
+
+`videoGpt1` 是单独目录:
+
+- `code/app/home/view/videoGpt1`
+
+因此只要后续改动严格限制在老模板 5 套目录内,物理上就不会直接修改到 `videoGpt1` 模板文件。
+
+## 二、第一批建议改动文件清单
+
+每套老模板当前建议只动 4 个文件:
+
+1. `video/getCategoryType.html`
+2. `video/getVideoPlayUrl.html`
+3. `sitemap/sitemap-main.xml`
+4. `sitemap/robots.txt`
+
+总计:
+
+- 5 套模板 x 4 个文件 = 20 个文件
+
+这就是当前最稳的第一批实施边界。
+
+## 三、为什么这批改动不会直接碰到 GPT 模板
+
+### 1. 文件不共享
+
+老模板和 GPT 模板虽然文件名类似,但文件路径不同。
+
+例如:
+
+- 老模板:
+ - [videoDadi/video/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/video/getCategoryType.html:1)
+ - [videoDingZhu/video/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoDingZhu/video/getCategoryType.html:1)
+- GPT 模板:
+ - [videoGpt1/video/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getCategoryType.html:1)
+
+这不是同一个文件的不同分支,而是完全独立的模板文件。
+
+### 2. GPT 模板当前本身已经有更正确的写法
+
+例如 `videoGpt1` 分类页:
+
+- [videoGpt1/video/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getCategoryType.html:14)
+
+当前已经是:
+
+- canonical 指向分类页真实 URL
+- `og:url` 指向分类页真实 URL
+- `CollectionPage.url` 指向分类页真实 URL
+
+这恰好说明:
+
+- 老模板要修的是自己的旧写法
+- 不是去改 GPT 模板的现有逻辑
+
+### 3. GPT 模板播放页也有独立实现
+
+例如:
+
+- [videoGpt1/video/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getVideoPlayUrl.html:1)
+
+GPT 模板播放页已经接了自己的:
+
+- `seoCopy`
+- breadcrumb 构造
+- `VideoService` 调用链
+
+因此老模板这次第一批修正,没有必要也不应该去碰 GPT 模板播放页。
+
+## 四、目前真正需要注意的风险,不在模板文件本身
+
+虽然模板文件可隔离,但仍有两类风险需要提醒主 Codex:
+
+### 1. 如果去改共享底层服务,就可能波及 GPT
+
+例如这类底层:
+
+- `SiteContext`
+- `VideoService`
+- 通用 taglib / helper
+- 路由层
+
+如果后续修正不是停留在模板输出,而是去改这些共享服务,那就有可能影响 `videoGpt1`。
+
+所以当前建议是:
+
+- 第一批先只改模板层
+- 不先动共享服务层
+
+### 2. sitemap 问题看起来可能是全模板共性
+
+这次复核时还确认了:
+
+- `videoGpt1/sitemap/sitemap-main.xml` 也有与老模板类似的 `www + novel` 可疑写法
+
+例如:
+
+- [videoGpt1/sitemap/sitemap-main.xml](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/sitemap/sitemap-main.xml:4)
+
+但这不代表这次应该顺手一起改 GPT。
+
+更稳的做法是:
+
+- 先把老模板线独立处理
+- GPT 那边单独开任务、单独验证
+
+## 五、第一批实施时的安全规则
+
+主 Codex 如果开始动代码,建议固定遵守下面 5 条:
+
+1. 只改 `videoDadi / videoDingZhu / videoBoKu / videoLaoNiu / videoNuNu`
+2. 第一批只改 `getCategoryType / getVideoPlayUrl / sitemap-main / robots.txt`
+3. 不碰 `videoGpt1` 目录
+4. 不先碰 `VideoService / SiteContext / router` 这类共享底层
+5. 每改完一类文件,就先做老模板样本验证,再决定是否继续
+
+## 六、最稳的实施顺序
+
+从安全性和 SEO 收益一起看,最稳顺序是:
+
+1. 先改 5 套 `getCategoryType.html`
+2. 再改 5 套 `getVideoPlayUrl.html`
+3. 再改 5 套 `sitemap/sitemap-main.xml`
+4. 最后复核 5 套 `robots.txt`
+
+这样做的好处是:
+
+- 改动集中
+- 影响面可控
+- 每一步都容易归因
+
+## 一句话结论
+
+> 当前老模板第一批 SEO 修正可以和 `videoGpt1` 明确隔离,最安全的落地边界就是只动老模板 5 套目录下那 20 个模板文件;只要不下沉去改共享服务层,就不会直接影响 GPT 模板。
diff --git a/docs/old-tmp-seo/22-老模板第一批实施任务单与验收矩阵-2026-04-17.md b/docs/old-tmp-seo/22-老模板第一批实施任务单与验收矩阵-2026-04-17.md
new file mode 100644
index 0000000..e613f48
--- /dev/null
+++ b/docs/old-tmp-seo/22-老模板第一批实施任务单与验收矩阵-2026-04-17.md
@@ -0,0 +1,321 @@
+# 1291-SEONexus 老模板第一批实施任务单与验收矩阵 - 2026-04-17
+
+## 目的
+
+这份文档把当前老模板第一批 SEO 修正,从“分析结论”继续推进到“可直接施工”的层级。
+
+它回答 4 个问题:
+
+1. 具体改哪些文件
+2. 每个文件改什么
+3. 改完先看哪些域名
+4. 怎么判断这批改动是有效还是无效
+
+## 一、第一批实施范围
+
+本批次只处理老模板 5 套:
+
+- `videoDadi`
+- `videoDingZhu`
+- `videoBoKu`
+- `videoLaoNiu`
+- `videoNuNu`
+
+只改下面 3 类文件:
+
+1. `video/getCategoryType.html`
+2. `video/getVideoPlayUrl.html`
+3. `sitemap/sitemap-main.xml`
+
+`robots.txt` 这次先只复核,不作为第一刀主改动。
+
+原因:
+
+- 当前 `robots.txt` 已经统一指向裸域 `sitemap_index.xml`
+- 真正更急的矛盾出在分类页、播放页、sitemap-main 的输出口径
+
+## 二、任务 1:修分类页 `getCategoryType.html`
+
+### 目标
+
+让分类页从“看起来像首页”变成“明确就是分类页”。
+
+### 当前问题
+
+5 套模板都存在:
+
+- `og:url = https://{$DomainModel->d_domain}`
+- `CollectionPage.url = https://{$DomainModel->d_domain}`
+
+对应位置:
+
+- `videoDadi`:
+ - [getCategoryType.html:19](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/video/getCategoryType.html:19)
+ - [getCategoryType.html:48](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/video/getCategoryType.html:48)
+- `videoDingZhu`:
+ - [getCategoryType.html:19](/www/wwwroot/VideoSource2/code/app/home/view/videoDingZhu/video/getCategoryType.html:19)
+ - [getCategoryType.html:48](/www/wwwroot/VideoSource2/code/app/home/view/videoDingZhu/video/getCategoryType.html:48)
+- `videoBoKu`:
+ - [getCategoryType.html:19](/www/wwwroot/VideoSource2/code/app/home/view/videoBoKu/video/getCategoryType.html:19)
+ - [getCategoryType.html:48](/www/wwwroot/VideoSource2/code/app/home/view/videoBoKu/video/getCategoryType.html:48)
+- `videoLaoNiu`:
+ - [getCategoryType.html:19](/www/wwwroot/VideoSource2/code/app/home/view/videoLaoNiu/video/getCategoryType.html:19)
+ - [getCategoryType.html:48](/www/wwwroot/VideoSource2/code/app/home/view/videoLaoNiu/video/getCategoryType.html:48)
+- `videoNuNu`:
+ - [getCategoryType.html:19](/www/wwwroot/VideoSource2/code/app/home/view/videoNuNu/video/getCategoryType.html:19)
+ - [getCategoryType.html:48](/www/wwwroot/VideoSource2/code/app/home/view/videoNuNu/video/getCategoryType.html:48)
+
+### 建议改法
+
+统一增加一个分类页真实 URL 变量,然后三处统一引用:
+
+1. canonical
+2. `og:url`
+3. `CollectionPage.url`
+
+建议目标写法参考 `videoGpt1`:
+
+- [videoGpt1/getCategoryType.html:14](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getCategoryType.html:14)
+- [videoGpt1/getCategoryType.html:18](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getCategoryType.html:18)
+- [videoGpt1/getCategoryType.html:42](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getCategoryType.html:42)
+
+### 预期效果
+
+最值得观察的不是“页面能打开”,而是:
+
+- `category|200` 是否开始增加
+- 首页和分类页的规范信号是否不再打架
+
+### 重点验收域名
+
+- `ningxiaowei.com / www.ningxiaowei.com`
+- `sctyjz.com / www.sctyjz.com`
+- `www.ap-hulan.com`
+
+## 三、任务 2:修播放页 `getVideoPlayUrl.html`
+
+### 目标
+
+让播放页三件套一致:
+
+- canonical
+- `og:url`
+- JSON-LD `url`
+
+### 当前问题
+
+5 套模板共同表现是:
+
+- canonical 指向播放页
+- `og:url` 指向详情页
+- JSON-LD `url` 指向详情页
+
+对应位置:
+
+- `videoDadi`:
+ - [getVideoPlayUrl.html:46](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/video/getVideoPlayUrl.html:46)
+ - [getVideoPlayUrl.html:58](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/video/getVideoPlayUrl.html:58)
+ - [getVideoPlayUrl.html:71](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/video/getVideoPlayUrl.html:71)
+- `videoDingZhu`:
+ - [getVideoPlayUrl.html:46](/www/wwwroot/VideoSource2/code/app/home/view/videoDingZhu/video/getVideoPlayUrl.html:46)
+ - [getVideoPlayUrl.html:59](/www/wwwroot/VideoSource2/code/app/home/view/videoDingZhu/video/getVideoPlayUrl.html:59)
+ - [getVideoPlayUrl.html:72](/www/wwwroot/VideoSource2/code/app/home/view/videoDingZhu/video/getVideoPlayUrl.html:72)
+- `videoBoKu`:
+ - [getVideoPlayUrl.html:46](/www/wwwroot/VideoSource2/code/app/home/view/videoBoKu/video/getVideoPlayUrl.html:46)
+ - [getVideoPlayUrl.html:59](/www/wwwroot/VideoSource2/code/app/home/view/videoBoKu/video/getVideoPlayUrl.html:59)
+ - [getVideoPlayUrl.html:72](/www/wwwroot/VideoSource2/code/app/home/view/videoBoKu/video/getVideoPlayUrl.html:72)
+- `videoLaoNiu`:
+ - [getVideoPlayUrl.html:46](/www/wwwroot/VideoSource2/code/app/home/view/videoLaoNiu/video/getVideoPlayUrl.html:46)
+ - [getVideoPlayUrl.html:59](/www/wwwroot/VideoSource2/code/app/home/view/videoLaoNiu/video/getVideoPlayUrl.html:59)
+ - [getVideoPlayUrl.html:73](/www/wwwroot/VideoSource2/code/app/home/view/videoLaoNiu/video/getVideoPlayUrl.html:73)
+- `videoNuNu`:
+ - [getVideoPlayUrl.html:46](/www/wwwroot/VideoSource2/code/app/home/view/videoNuNu/video/getVideoPlayUrl.html:46)
+ - [getVideoPlayUrl.html:59](/www/wwwroot/VideoSource2/code/app/home/view/videoNuNu/video/getVideoPlayUrl.html:59)
+ - [getVideoPlayUrl.html:73](/www/wwwroot/VideoSource2/code/app/home/view/videoNuNu/video/getVideoPlayUrl.html:73)
+
+### 建议改法
+
+统一定义播放页真实 URL,并让:
+
+1. canonical 指向它
+2. `og:url` 指向它
+3. JSON-LD `url` 指向它
+
+注意:
+
+- 不要只修 canonical
+- 只修 canonical 不足以解决百度对播放页的规范判断
+
+### 预期效果
+
+最值得观察的是:
+
+- `play|301` 是否下降
+- `play|200` 是否更稳
+
+### 重点验收域名
+
+- `yagyjt.com`
+- `ningxiaowei.com / www.ningxiaowei.com`
+
+## 四、任务 3:修 `sitemap-main.xml`
+
+### 目标
+
+让 sitemap 自己不再制造 host 混乱和错误页型。
+
+### 当前问题
+
+5 套模板共同存在:
+
+- 使用 `https://www.{$DomainModel->d_domain}`
+- 使用 `novel:category`
+- 使用 `site:nflurl`
+
+对应位置:
+
+- `videoDadi`:
+ - [sitemap-main.xml:4](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/sitemap/sitemap-main.xml:4)
+ - [sitemap-main.xml:18](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/sitemap/sitemap-main.xml:18)
+ - [sitemap-main.xml:24](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/sitemap/sitemap-main.xml:24)
+- `videoDingZhu`:
+ - [sitemap-main.xml:4](/www/wwwroot/VideoSource2/code/app/home/view/videoDingZhu/sitemap/sitemap-main.xml:4)
+ - [sitemap-main.xml:18](/www/wwwroot/VideoSource2/code/app/home/view/videoDingZhu/sitemap/sitemap-main.xml:18)
+ - [sitemap-main.xml:24](/www/wwwroot/VideoSource2/code/app/home/view/videoDingZhu/sitemap/sitemap-main.xml:24)
+- `videoBoKu`:
+ - [sitemap-main.xml:4](/www/wwwroot/VideoSource2/code/app/home/view/videoBoKu/sitemap/sitemap-main.xml:4)
+ - [sitemap-main.xml:18](/www/wwwroot/VideoSource2/code/app/home/view/videoBoKu/sitemap/sitemap-main.xml:18)
+ - [sitemap-main.xml:24](/www/wwwroot/VideoSource2/code/app/home/view/videoBoKu/sitemap/sitemap-main.xml:24)
+- `videoLaoNiu`:
+ - [sitemap-main.xml:4](/www/wwwroot/VideoSource2/code/app/home/view/videoLaoNiu/sitemap/sitemap-main.xml:4)
+ - [sitemap-main.xml:18](/www/wwwroot/VideoSource2/code/app/home/view/videoLaoNiu/sitemap/sitemap-main.xml:18)
+ - [sitemap-main.xml:24](/www/wwwroot/VideoSource2/code/app/home/view/videoLaoNiu/sitemap/sitemap-main.xml:24)
+- `videoNuNu`:
+ - [sitemap-main.xml:4](/www/wwwroot/VideoSource2/code/app/home/view/videoNuNu/sitemap/sitemap-main.xml:4)
+ - [sitemap-main.xml:18](/www/wwwroot/VideoSource2/code/app/home/view/videoNuNu/sitemap/sitemap-main.xml:18)
+ - [sitemap-main.xml:24](/www/wwwroot/VideoSource2/code/app/home/view/videoNuNu/sitemap/sitemap-main.xml:24)
+
+### 建议改法
+
+第一批不要求把 sitemap 一次做成最终完美版,但至少要先做到:
+
+1. host 口径与当前模板主输出一致
+2. 不再继续输出明显像小说站的路径
+3. 首页和主要聚合入口不再强制走 `www`
+
+如果主 Codex 发现 `sitemap-main.xml` 当前其实线上没有被主路由使用,也不要直接忽略。
+
+因为只要它还可能被 `sitemap_index.xml` 引用或被蜘蛛命中,它就仍然会制造噪音。
+
+### 预期效果
+
+最值得观察的是:
+
+- `/|301` 是否下降
+- `home|301` 是否下降
+- host 级分裂是否减轻
+
+### 重点验收域名
+
+- `sctyjz.com / www.sctyjz.com`
+- `www.ap-hulan.com`
+- `hymdrz.com / www.hymdrz.com`
+
+## 五、本批次先不主改 `robots.txt`
+
+### 当前结论
+
+5 套 `robots.txt` 当前至少有两点是统一的:
+
+- 允许主搜索爬虫
+- sitemap 已指向裸域 `https://{$DomainModel->d_domain}/sitemap_index.xml`
+
+位置:
+
+- [videoDadi/robots.txt:38](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/sitemap/robots.txt:38)
+- [videoDingZhu/robots.txt:38](/www/wwwroot/VideoSource2/code/app/home/view/videoDingZhu/sitemap/robots.txt:38)
+- [videoBoKu/robots.txt:38](/www/wwwroot/VideoSource2/code/app/home/view/videoBoKu/sitemap/robots.txt:38)
+- [videoLaoNiu/robots.txt:38](/www/wwwroot/VideoSource2/code/app/home/view/videoLaoNiu/sitemap/robots.txt:38)
+- [videoNuNu/robots.txt:38](/www/wwwroot/VideoSource2/code/app/home/view/videoNuNu/sitemap/robots.txt:38)
+
+### 当前建议
+
+本批次先不优先修改 `robots.txt`,除非主 Codex 复核时发现:
+
+- `robots.txt` 与真实 sitemap 路由不一致
+- 或 `robots.txt` 的 AI 爬虫屏蔽策略影响到了实际搜索引擎主抓取
+
+## 六、推荐实施顺序
+
+最稳顺序:
+
+1. 先改 5 套 `getCategoryType.html`
+2. 再改 5 套 `getVideoPlayUrl.html`
+3. 最后改 5 套 `sitemap-main.xml`
+
+原因:
+
+- 分类页修正对聚合层收益最大
+- 播放页修正对深抓层收益最大
+- sitemap 修正对整体 host 规范化收益最大
+
+## 七、实施后验收矩阵
+
+### 第 1 轮:页面级验收
+
+分类页验收:
+
+- 页面能正常打开
+- canonical 指向分类页自己
+- `og:url` 指向分类页自己
+- `CollectionPage.url` 指向分类页自己
+
+播放页验收:
+
+- 页面能正常打开
+- canonical 指向播放页自己
+- `og:url` 指向播放页自己
+- JSON-LD `url` 指向播放页自己
+
+sitemap 验收:
+
+- `sitemap-main.xml` 返回正常
+- 输出 host 与页面主输出口径一致
+- 不再出现明显小说站路径
+
+### 第 2 轮:日志级验收
+
+实施后连续看 3 天:
+
+1. `/|301` 是否下降
+2. `home|301` 是否下降
+3. `category|200` 是否增加
+4. `play|301` 是否下降
+5. `play|200` 是否稳住或增加
+
+### 第 3 轮:搜索表现验收
+
+实施后 3 到 7 天,重点看:
+
+- 站名词是否更稳定
+- 分类词是否开始出现首页或前两页曝光
+- 片名长尾和播放词是否更容易命中播放页
+
+## 八、失败信号
+
+如果实施后出现下面任一情况,要立刻回看:
+
+1. `404` 突然增加
+2. `detail|200 / play|200` 明显掉量
+3. `category` 信号没有上升,反而首页抓取下降
+4. sitemap 输出开始异常
+
+这通常说明:
+
+- URL 收口写错了
+- 页面真实路由和模板输出不一致
+- 或者把原本的兼容链路误伤了
+
+## 一句话交接
+
+> 老模板第一批施工,最稳的做法就是先改 15 个文件:5 套分类页、5 套播放页、5 套 sitemap-main;按“分类页先收口、播放页再收口、sitemap 最后收口”的顺序推进,边改边看重点域名日志,避免一次性大改失去归因。
diff --git a/docs/old-tmp-seo/23-老模板逐文件改动蓝图-2026-04-17.md b/docs/old-tmp-seo/23-老模板逐文件改动蓝图-2026-04-17.md
new file mode 100644
index 0000000..17d2c74
--- /dev/null
+++ b/docs/old-tmp-seo/23-老模板逐文件改动蓝图-2026-04-17.md
@@ -0,0 +1,337 @@
+# 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。先把信号统一,再追求更精细化。
diff --git a/docs/old-tmp-seo/24-老模板第一批施工索引页-2026-04-17.md b/docs/old-tmp-seo/24-老模板第一批施工索引页-2026-04-17.md
new file mode 100644
index 0000000..d151277
--- /dev/null
+++ b/docs/old-tmp-seo/24-老模板第一批施工索引页-2026-04-17.md
@@ -0,0 +1,190 @@
+# 1293-SEONexus 老模板第一批施工索引页 - 2026-04-17
+
+## 目的
+
+这份文档是给主 Codex、后续会话、或人工接手时使用的“一页开工入口”。
+
+它不重复长篇分析,只做三件事:
+
+1. 告诉你先看哪几份文档
+2. 告诉你第一批到底改哪 15 个文件
+3. 告诉你改完先验哪些域名和哪些指标
+
+## 一、先看这 4 份就够开工
+
+如果现在要正式进入老模板第一批 SEO 实施,只看下面 4 份:
+
+1. [21-老模板实施安全边界与GPT隔离说明-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/21-老模板实施安全边界与GPT隔离说明-2026-04-17.md)
+2. [20-老模板第一批SEO高收益修正清单-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/20-老模板第一批SEO高收益修正清单-2026-04-17.md)
+3. [22-老模板第一批实施任务单与验收矩阵-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/22-老模板第一批实施任务单与验收矩阵-2026-04-17.md)
+4. [23-老模板逐文件改动蓝图-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/23-老模板逐文件改动蓝图-2026-04-17.md)
+
+它们分别解决:
+
+- 改动边界
+- 优先级
+- 实施顺序与验收方式
+- 逐文件改法
+
+## 二、第一批只改这 15 个文件
+
+本批次不扩散,不自由发挥,只改下面 15 个文件。
+
+### 1. 分类页 5 个
+
+- [videoDadi/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/video/getCategoryType.html:15)
+- [videoDingZhu/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoDingZhu/video/getCategoryType.html:15)
+- [videoBoKu/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoBoKu/video/getCategoryType.html:15)
+- [videoLaoNiu/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoLaoNiu/video/getCategoryType.html:15)
+- [videoNuNu/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoNuNu/video/getCategoryType.html:15)
+
+### 2. 播放页 5 个
+
+- [videoDadi/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/video/getVideoPlayUrl.html:22)
+- [videoDingZhu/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoDingZhu/video/getVideoPlayUrl.html:22)
+- [videoBoKu/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoBoKu/video/getVideoPlayUrl.html:22)
+- [videoLaoNiu/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoLaoNiu/video/getVideoPlayUrl.html:22)
+- [videoNuNu/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoNuNu/video/getVideoPlayUrl.html:22)
+
+### 3. sitemap-main 5 个
+
+- [videoDadi/sitemap-main.xml](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/sitemap/sitemap-main.xml:1)
+- [videoDingZhu/sitemap-main.xml](/www/wwwroot/VideoSource2/code/app/home/view/videoDingZhu/sitemap/sitemap-main.xml:1)
+- [videoBoKu/sitemap-main.xml](/www/wwwroot/VideoSource2/code/app/home/view/videoBoKu/sitemap/sitemap-main.xml:1)
+- [videoLaoNiu/sitemap-main.xml](/www/wwwroot/VideoSource2/code/app/home/view/videoLaoNiu/sitemap/sitemap-main.xml:1)
+- [videoNuNu/sitemap-main.xml](/www/wwwroot/VideoSource2/code/app/home/view/videoNuNu/sitemap/sitemap-main.xml:1)
+
+## 三、这 15 个文件分别要做什么
+
+### 分类页 5 个
+
+统一目标:
+
+- 增加 canonical
+- 把 `og:url` 从首页改成分类页真实 URL
+- 把 `CollectionPage.url` 从首页改成分类页真实 URL
+
+参考模板:
+
+- [videoGpt1/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getCategoryType.html:13)
+
+### 播放页 5 个
+
+统一目标:
+
+- canonical、`og:url`、JSON-LD `url` 三件套全部统一到播放页 URL
+
+当前策略:
+
+- 第一批先采用保守收口方案
+- 不追求一步做到“当前线路当前集数完全精确”
+- 先让信号一致,先压 `play|301`
+
+参考模板:
+
+- [videoGpt1/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getVideoPlayUrl.html:113)
+
+### sitemap-main 5 个
+
+统一目标:
+
+- 先把 `www` 口径收掉
+- 先把明显错误的 `novel:category / site:nflurl` 逻辑去掉
+- 第一批先收缩为最小正确集,不急着一步重建完美视频 sitemap
+
+## 四、推荐施工顺序
+
+施工顺序不要乱,固定按这三段:
+
+1. 先改 5 个分类页
+2. 再改 5 个播放页
+3. 最后改 5 个 sitemap-main
+
+理由:
+
+- 分类页收益最容易扩散到站群
+- 播放页收益最容易体现在深抓
+- sitemap 最后改,更方便归因首页与 host 变化
+
+## 五、每一段改完先验什么
+
+### 改完分类页后
+
+先验页面:
+
+- 分类页源代码里有没有 canonical
+- canonical 是否是分类页真实 URL
+- `og:url` 是否是分类页真实 URL
+- `CollectionPage.url` 是否是分类页真实 URL
+
+先验域名:
+
+- `ningxiaowei.com`
+- `www.ningxiaowei.com`
+- `sctyjz.com`
+- `www.ap-hulan.com`
+
+### 改完播放页后
+
+先验页面:
+
+- canonical 是否存在
+- `og:url` 是否与 canonical 一致
+- JSON-LD `url` 是否与 canonical 一致
+
+先验域名:
+
+- `yagyjt.com`
+- `ningxiaowei.com`
+
+### 改完 sitemap-main 后
+
+先验页面:
+
+- XML 是否正常
+- host 是否与模板主输出一致
+- 是否还残留 `novel`/`nflurl` 逻辑
+
+先验域名:
+
+- `sctyjz.com`
+- `hymdrz.com`
+- `www.ap-hulan.com`
+
+## 六、日志里优先看这 6 个指标
+
+第一批改完,不要贪多,每天先盯这 6 项:
+
+1. `/|301`
+2. `home|301`
+3. `category|200`
+4. `play|301`
+5. `play|200`
+6. `other|404`
+
+如果这 6 个指标开始朝对的方向走,说明第一批动作在起作用。
+
+## 七、失败时先查什么
+
+如果改完后日志没改善,或者反而变差,优先回查:
+
+1. 分类页 canonical 是否写错成首页
+2. 播放页三件套是否仍然一半详情页一半播放页
+3. sitemap-main 是否还在输出错误 host
+4. 是否误伤了老模板原本还能承接旧 deep link 的链路
+
+## 八、明确不做的事
+
+第一批不要顺手做下面这些:
+
+- 不改 `videoGpt1`
+- 不改共享底层服务
+- 不做首页大改版
+- 不做逐站后台手工 SEO
+- 不做内容文案大规模回灌
+
+不是这些不重要,而是它们不属于当前第一批“高收益、低扩散、易归因”的实施范围。
+
+## 一句话交接
+
+> 如果现在主 Codex 要正式开工,直接从这 15 个文件开始,按“分类页 5 个 -> 播放页 5 个 -> sitemap-main 5 个”的顺序施工,改完立刻按重点域名和 6 个核心日志指标复测,不要扩散到 GPT 模板和共享底层。
diff --git a/docs/old-tmp-seo/25-老模板分类页Patch模板-2026-04-17.md b/docs/old-tmp-seo/25-老模板分类页Patch模板-2026-04-17.md
new file mode 100644
index 0000000..86e6c3b
--- /dev/null
+++ b/docs/old-tmp-seo/25-老模板分类页Patch模板-2026-04-17.md
@@ -0,0 +1,181 @@
+# 1294-SEONexus 老模板分类页 Patch 模板 - 2026-04-17
+
+## 目的
+
+这份文档专门服务第一批 5 个分类页文件。
+
+它不是分析文档,而是一份“主 Codex 可直接照着写 patch”的模板说明。
+
+适用文件:
+
+- `videoDadi/video/getCategoryType.html`
+- `videoDingZhu/video/getCategoryType.html`
+- `videoBoKu/video/getCategoryType.html`
+- `videoLaoNiu/video/getCategoryType.html`
+- `videoNuNu/video/getCategoryType.html`
+
+## 一、这 5 个文件当前共同问题
+
+共同点几乎完全一致:
+
+1. 缺少 canonical
+2. `og:url` 指向首页
+3. `CollectionPage.url` 指向首页
+
+对应当前老模板写法:
+
+```tpl
+
+```
+
+以及:
+
+```tpl
+"url": "https://{$DomainModel->d_domain}",
+```
+
+## 二、目标状态
+
+统一收口成:
+
+1. `meta name="robots" content="index,follow"`
+2. canonical 指向当前分类页真实 URL
+3. `og:url` 指向当前分类页真实 URL
+4. `CollectionPage.url` 指向当前分类页真实 URL
+
+最稳参考来源:
+
+- [videoGpt1/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getCategoryType.html:13)
+
+## 三、推荐 patch 思路
+
+### 第一步:在 `head` block 顶部补两行
+
+在:
+
+```tpl
+{block name="head"}
+```
+
+后面直接补:
+
+```tpl
+
+
+```
+
+### 第二步:替换 `og:url`
+
+把当前:
+
+```tpl
+
+```
+
+替换为:
+
+```tpl
+
+```
+
+### 第三步:替换 JSON-LD 的 `CollectionPage.url`
+
+把当前:
+
+```tpl
+"url": "https://{$DomainModel->d_domain}",
+```
+
+替换为:
+
+```tpl
+"url": "https://{$DomainModel->d_domain}{site:vciurl parent_category="$Request.route.strParentCategory" /}",
+```
+
+## 四、推荐的统一替换结果
+
+如果主 Codex 想直接对照最终形态,`head` block 开头应该接近下面这样:
+
+```tpl
+{block name="head"}
+
+
+
+
+
+
+
+```
+
+对应 JSON-LD 开头应接近:
+
+```tpl
+{
+ "@context": "https://schema.org",
+ "@type": "CollectionPage",
+ "name": "{$DomainModel->d_name} - 最新{site:getval code="strVideoParentCategoryName" /}推荐",
+ "url": "https://{$DomainModel->d_domain}{site:vciurl parent_category="$Request.route.strParentCategory" /}",
+ "description": "{site:replace code="VIDEO@GETCATEGORYINDEX@DESCRIPTION"}",
+```
+
+## 五、5 个文件的微差异提醒
+
+这 5 个文件里真正需要注意的差异非常少:
+
+### `videoNuNu`
+
+它的 `ranklist` 参数写的是:
+
+```tpl
+v_category_en="$Request.route.strParentCategory"
+```
+
+不是别的模板常见的:
+
+```tpl
+v_parent_category_en="$Request.route.strParentCategory"
+```
+
+但这不影响本次 patch,因为我们只改:
+
+- canonical
+- `og:url`
+- `CollectionPage.url`
+
+### 其它 4 套
+
+这 4 套在这次 patch 涉及的区域里基本是同构的,可以直接统一处理。
+
+## 六、建议验收方式
+
+每改完 1 个文件就做一次最小验收,不要 5 个全改完才看。
+
+### 页面源代码验收
+
+确认:
+
+1. 有 canonical
+2. canonical 指向分类页自己
+3. `og:url` 指向分类页自己
+4. JSON-LD `CollectionPage.url` 指向分类页自己
+
+### 域名级优先验收
+
+优先看:
+
+- `ningxiaowei.com`
+- `www.ningxiaowei.com`
+- `sctyjz.com`
+- `www.ap-hulan.com`
+
+## 七、验收后的日志观察
+
+改完这 5 个分类页之后,连续看 3 天最值得盯的是:
+
+1. `category|200` 是否开始增加
+2. `/|301` 是否继续下降
+3. `home|301` 是否继续下降
+
+## 一句话交接
+
+> 老模板第一批最适合先落地的,就是这 5 个分类页 patch;它们结构接近、收益集中、风险低,而且能最快验证“分类页从首页附属信号变成独立聚合页”这条 SEO 主线是否开始生效。
diff --git a/docs/old-tmp-seo/26-老模板播放页Patch模板-2026-04-17.md b/docs/old-tmp-seo/26-老模板播放页Patch模板-2026-04-17.md
new file mode 100644
index 0000000..a39438a
--- /dev/null
+++ b/docs/old-tmp-seo/26-老模板播放页Patch模板-2026-04-17.md
@@ -0,0 +1,197 @@
+# 1295-SEONexus 老模板播放页 Patch 模板 - 2026-04-17
+
+## 目的
+
+这份文档专门服务第一批 5 个播放页文件。
+
+它的作用和 [25-老模板分类页Patch模板-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/25-老模板分类页Patch模板-2026-04-17.md) 一样:
+
+- 不是继续分析
+- 而是给主 Codex 一份可以直接照着写 patch 的模板
+
+适用文件:
+
+- `videoDadi/video/getVideoPlayUrl.html`
+- `videoDingZhu/video/getVideoPlayUrl.html`
+- `videoBoKu/video/getVideoPlayUrl.html`
+- `videoLaoNiu/video/getVideoPlayUrl.html`
+- `videoNuNu/video/getVideoPlayUrl.html`
+
+## 一、这 5 个文件当前共同问题
+
+共同问题非常一致:
+
+1. canonical 已经是播放页
+2. `og:url` 仍然是详情页
+3. JSON-LD `url` 仍然是详情页
+
+也就是说当前是典型的:
+
+- 一半在说“我是播放页”
+- 一半在说“我是详情页”
+
+这会持续制造:
+
+- `play|301`
+- 详情页与播放页规范信号冲突
+
+## 二、目标状态
+
+播放页三件套全部统一:
+
+1. canonical 指向播放页
+2. `og:url` 指向播放页
+3. JSON-LD `url` 指向播放页
+
+## 三、当前最稳策略
+
+### 第一批先走保守收口
+
+当前老模板 canonical 写法普遍是:
+
+```tpl
+{site:vpurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en" play_type="default" play_index="1" /}
+```
+
+这不一定是当前真实线路和真实集数,但它至少已经是“播放页路径”。
+
+因此第一批最稳策略不是一步做复杂,而是:
+
+- 先让 `og:url` 和 JSON-LD `url` 与当前 canonical 完全一致
+
+这样能最快消除 detail/play 信号分裂。
+
+## 四、最稳参考
+
+可以参考 `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)
+
+GPT 那边已经是:
+
+- canonical、`og:url`、JSON-LD `url` 三者完全一致
+
+## 五、推荐 patch 思路
+
+### 第一步:保留当前 canonical 不动
+
+当前老模板 canonical 已经存在,例如:
+
+```tpl
+{if $Request.route.intVId && $Request.route.intVForgeId}
+d_domain}{site:vpurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en" play_type="default" play_index="1" /}'>
+{/if}
+```
+
+第一批先不要动这段结构。
+
+### 第二步:把 `og:url` 改成和 canonical 一致
+
+把当前:
+
+```tpl
+
+```
+
+统一替换为:
+
+```tpl
+
+```
+
+### 第三步:把 JSON-LD `url` 改成和 canonical 一致
+
+把当前:
+
+```tpl
+"url": 'https://{$DomainModel->d_domain}{site:vurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en"/}',
+```
+
+统一替换为:
+
+```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" /}',
+```
+
+## 六、推荐的统一替换结果
+
+### 头部关键区域
+
+最终应接近:
+
+```tpl
+{if $Request.route.intVId && $Request.route.intVForgeId}
+d_domain}{site:vpurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en" play_type="default" play_index="1" /}'>
+{/if}
+
+
+```
+
+### JSON-LD 区域
+
+最终应接近:
+
+```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" /}',
+```
+
+## 七、5 个文件的差异提醒
+
+这 5 个文件在当前 patch 涉及区域内几乎完全同构。
+
+也就是说:
+
+- 这组 patch 比分类页还更适合批量统一处理
+
+目前没有看到会影响这次 patch 的明显结构差异。
+
+## 八、为什么第一批不直接做“当前线路当前集数精确 URL”
+
+因为那会把这批 patch 从“稳定收口”变成“逻辑改造”。
+
+第一批更稳的目标是:
+
+- 先把 detail/play 信号分裂压掉
+- 先让播放页内部信号统一
+
+等第一批跑通之后,第二批再评估要不要升级为:
+
+- 根据 `Request.route.strPlayType`
+- 根据 `Request.route.intPlayIndex`
+- 输出当前真实播放页 URL
+
+## 九、建议验收方式
+
+每改完 1 个文件,至少做一次页面级验收。
+
+### 页面源代码验收
+
+确认:
+
+1. canonical 仍存在
+2. `og:url` 与 canonical 完全一致
+3. JSON-LD `url` 与 canonical 完全一致
+
+### 域名级优先验收
+
+优先看:
+
+- `yagyjt.com`
+- `ningxiaowei.com`
+
+## 十、验收后的日志观察
+
+改完这 5 个播放页之后,连续看 3 天最值得盯的是:
+
+1. `play|301` 是否下降
+2. `play|200` 是否更稳
+3. `detail|301` 是否开始和 `play|301` 一起收敛
+
+## 一句话交接
+
+> 老模板第一批播放页 patch 的核心不是“做得多花”,而是先让 canonical、`og:url`、JSON-LD `url` 说同一句话;只要这 5 个播放页先统一收口,深页的百度识别成本就会明显下降。
diff --git a/docs/old-tmp-seo/27-老模板SitemapPatch模板-2026-04-17.md b/docs/old-tmp-seo/27-老模板SitemapPatch模板-2026-04-17.md
new file mode 100644
index 0000000..344fb01
--- /dev/null
+++ b/docs/old-tmp-seo/27-老模板SitemapPatch模板-2026-04-17.md
@@ -0,0 +1,214 @@
+# 1296-SEONexus 老模板 Sitemap Patch 模板 - 2026-04-17
+
+## 目的
+
+这份文档专门服务第一批 5 个 `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`
+
+它的目标不是一步做成终极 sitemap,而是给主 Codex 一份“先止损、先收口”的 patch 模板。
+
+## 一、这 5 个文件当前共同问题
+
+5 套文件当前完全同构,问题也完全一致:
+
+1. host 使用 `https://www.{$DomainModel->d_domain}`
+2. 页面逻辑明显像小说站:
+ - `novel:category`
+ - `novel:sort`
+ - `novel:status`
+ - `site:nflurl`
+
+这意味着当前 `sitemap-main.xml` 至少存在两层问题:
+
+- host 口径和页面主输出不一致
+- 页型逻辑本身很可能就不属于视频站
+
+## 二、为什么第一批不建议“直接重建完整视频 sitemap”
+
+因为第一批当前更重要的是:
+
+- 先停止输出错误信号
+- 先停止 sitemap 自己制造 `www` 级跳转
+
+如果现在就直接重建完整视频 sitemap,会立刻引入这些风险:
+
+- 需要重新确认视频分类页、榜单页、详情页到底要进哪些
+- 需要确认对应模板是否都已有稳定最终 URL
+- 需要确认分页和去重策略
+
+这会让第一批从“快速止损”变成“大重构”。
+
+## 三、第一批最稳策略
+
+### 策略名:最小正确集
+
+第一批建议把 `sitemap-main.xml` 收缩成只保留:
+
+1. 首页
+2. 榜单首页
+
+同时完成两件事:
+
+- 去掉 `www`
+- 删除整段明显错误的小说站逻辑
+
+## 四、为什么这个策略是当前最稳的
+
+因为现在 `robots.txt` 已经统一指向:
+
+```txt
+Sitemap: https://{$DomainModel->d_domain}/sitemap_index.xml
+```
+
+也就是说:
+
+- `robots.txt` 已经在告诉蜘蛛“请走裸域 sitemap”
+
+但 `sitemap-main.xml` 还在吐:
+
+```xml
+https://www.{$DomainModel->d_domain}
+```
+
+这本身就在制造冲突。
+
+所以第一批先做:
+
+- `robots.txt` 继续保持不动
+- `sitemap-main.xml` 收口到与它一致
+
+这是最容易立刻减少内部冲突的一刀。
+
+## 五、推荐 patch 思路
+
+### 当前错误版本的典型结构
+
+当前文件大致是:
+
+```xml
+
+ https://www.{$DomainModel->d_domain}/
+ ...
+
+
+
+ https://www.{$DomainModel->d_domain}{$strRankUrlTemp}
+ ...
+
+
+{novel:category ...}
+{novel:sort ...}
+{novel:status ...}
+
+ https://www.{$DomainModel->d_domain}{site:nflurl ... /}
+ ...
+
+{/novel:status}
+{/novel:sort}
+{/novel:category}
+```
+
+### 第一批建议改成
+
+保留首页和榜单页,但去掉 `www`:
+
+```xml
+
+
+
+ https://{$DomainModel->d_domain}/
+ {:date('Y-m-d')}
+ daily
+ 1.0
+
+
+
+ https://{$DomainModel->d_domain}{$strRankUrlTemp}
+ {:date('Y-m-d')}
+ daily
+ 1.0
+
+
+```
+
+## 六、推荐 patch 结果的优点
+
+这个“最小正确集”版本有 4 个优点:
+
+1. 不再输出明显错误的小说站路径
+2. 不再继续输出 `www`
+3. 不需要先设计视频分类 sitemap 结构
+4. 最容易快速验证是否减少 `/|301` 和 host 级冲突
+
+## 七、当前不建议在第一批做的事
+
+下面这些更适合第二批:
+
+- 把视频分类页全部灌进 `sitemap-main.xml`
+- 把详情页或播放页直接灌进 `sitemap-main.xml`
+- 在 `sitemap-main.xml` 里处理复杂分页
+- 重新设计多 sitemap 分片策略
+
+不是这些没价值,而是它们更适合在第一批止损之后做。
+
+## 八、和 `robots.txt` 的关系
+
+当前 5 套 `robots.txt` 的最后一行已经统一是:
+
+```txt
+Sitemap: https://{$DomainModel->d_domain}/sitemap_index.xml
+```
+
+因此第一批 patch 的原则是:
+
+- 让 `sitemap-main.xml` 向 `robots.txt` 靠齐
+- 而不是反过来去改 `robots.txt`
+
+这也是为什么当前建议:
+
+- `robots.txt` 暂不主改
+- 主改 `sitemap-main.xml`
+
+## 九、建议验收方式
+
+每改完 1 个 `sitemap-main.xml`,先做最小验收。
+
+### 页面源代码验收
+
+确认:
+
+1. XML 可以正常访问
+2. 首页 `` 是裸域,不是 `www`
+3. 榜单页 `` 是裸域,不是 `www`
+4. 文件里不再出现:
+ - `novel:category`
+ - `novel:sort`
+ - `novel:status`
+ - `site:nflurl`
+
+### 域名级优先验收
+
+优先看:
+
+- `sctyjz.com`
+- `www.ap-hulan.com`
+- `hymdrz.com`
+
+## 十、验收后的日志观察
+
+改完这 5 个 sitemap 之后,连续看 3 天最值得盯的是:
+
+1. `/|301` 是否下降
+2. `home|301` 是否下降
+3. host 分裂是否开始减轻
+
+## 十一、一句话交接
+
+> 老模板第一批 sitemap patch 的核心不是“马上做大做全”,而是先让 sitemap 不再输出明显错误的小说站路径,不再自带 `www` 级冲突;只要先把 sitemap-main 收成最小正确集,就已经是在给百度减损。
diff --git a/docs/old-tmp-seo/28-老模板第一批施工总表-2026-04-17.md b/docs/old-tmp-seo/28-老模板第一批施工总表-2026-04-17.md
new file mode 100644
index 0000000..1797b08
--- /dev/null
+++ b/docs/old-tmp-seo/28-老模板第一批施工总表-2026-04-17.md
@@ -0,0 +1,246 @@
+# 1297-SEONexus 老模板第一批施工总表 - 2026-04-17
+
+## 目的
+
+这份文档是老模板第一批 SEO 实施的最终总表。
+
+它把前面的:
+
+- [24-老模板第一批施工索引页-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/24-老模板第一批施工索引页-2026-04-17.md)
+- [25-老模板分类页Patch模板-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/25-老模板分类页Patch模板-2026-04-17.md)
+- [26-老模板播放页Patch模板-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/26-老模板播放页Patch模板-2026-04-17.md)
+- [27-老模板SitemapPatch模板-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/27-老模板SitemapPatch模板-2026-04-17.md)
+
+压缩成一张主 Codex 可以直接照着执行的表。
+
+## 一、实施边界
+
+这次只改老模板 5 套:
+
+- `videoDadi`
+- `videoDingZhu`
+- `videoBoKu`
+- `videoLaoNiu`
+- `videoNuNu`
+
+不碰:
+
+- `videoGpt1`
+- `VideoService`
+- `SiteContext`
+- 路由层
+
+## 二、第一批总任务
+
+总共 15 个文件,分 3 组:
+
+1. 分类页 5 个
+2. 播放页 5 个
+3. sitemap-main 5 个
+
+推荐施工顺序固定为:
+
+1. 分类页
+2. 播放页
+3. sitemap-main
+
+## 三、逐组施工总表
+
+### A 组:分类页 5 个
+
+#### 文件
+
+- [videoDadi/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/video/getCategoryType.html:15)
+- [videoDingZhu/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoDingZhu/video/getCategoryType.html:15)
+- [videoBoKu/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoBoKu/video/getCategoryType.html:15)
+- [videoLaoNiu/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoLaoNiu/video/getCategoryType.html:15)
+- [videoNuNu/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoNuNu/video/getCategoryType.html:15)
+
+#### 统一改动
+
+- 增加 `meta name="robots" content="index,follow"`
+- 增加 canonical
+- 把 `og:url` 改成分类页真实 URL
+- 把 JSON-LD `CollectionPage.url` 改成分类页真实 URL
+
+#### 参考模板
+
+- [25-老模板分类页Patch模板-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/25-老模板分类页Patch模板-2026-04-17.md)
+- [videoGpt1/getCategoryType.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getCategoryType.html:13)
+
+#### 改后先验
+
+- `ningxiaowei.com`
+- `www.ningxiaowei.com`
+- `sctyjz.com`
+- `www.ap-hulan.com`
+
+#### 预期日志信号
+
+- `category|200` 上升
+- `/|301` 下降
+- `home|301` 下降
+
+### B 组:播放页 5 个
+
+#### 文件
+
+- [videoDadi/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/video/getVideoPlayUrl.html:22)
+- [videoDingZhu/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoDingZhu/video/getVideoPlayUrl.html:22)
+- [videoBoKu/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoBoKu/video/getVideoPlayUrl.html:22)
+- [videoLaoNiu/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoLaoNiu/video/getVideoPlayUrl.html:22)
+- [videoNuNu/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoNuNu/video/getVideoPlayUrl.html:22)
+
+#### 统一改动
+
+- 保留现有 canonical 结构
+- 把 `og:url` 改成与 canonical 一致
+- 把 JSON-LD `url` 改成与 canonical 一致
+
+#### 当前策略
+
+- 第一批采用保守收口
+- 统一到当前已有的默认播放页 `site:vpurl`
+- 不先做“当前线路当前集数”精确化
+
+#### 参考模板
+
+- [26-老模板播放页Patch模板-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/26-老模板播放页Patch模板-2026-04-17.md)
+- [videoGpt1/getVideoPlayUrl.html](/www/wwwroot/VideoSource2/code/app/home/view/videoGpt1/video/getVideoPlayUrl.html:113)
+
+#### 改后先验
+
+- `yagyjt.com`
+- `ningxiaowei.com`
+
+#### 预期日志信号
+
+- `play|301` 下降
+- `play|200` 更稳
+
+### C 组:sitemap-main 5 个
+
+#### 文件
+
+- [videoDadi/sitemap-main.xml](/www/wwwroot/VideoSource2/code/app/home/view/videoDadi/sitemap/sitemap-main.xml:1)
+- [videoDingZhu/sitemap-main.xml](/www/wwwroot/VideoSource2/code/app/home/view/videoDingZhu/sitemap/sitemap-main.xml:1)
+- [videoBoKu/sitemap-main.xml](/www/wwwroot/VideoSource2/code/app/home/view/videoBoKu/sitemap/sitemap-main.xml:1)
+- [videoLaoNiu/sitemap-main.xml](/www/wwwroot/VideoSource2/code/app/home/view/videoLaoNiu/sitemap/sitemap-main.xml:1)
+- [videoNuNu/sitemap-main.xml](/www/wwwroot/VideoSource2/code/app/home/view/videoNuNu/sitemap/sitemap-main.xml:1)
+
+#### 统一改动
+
+- 去掉 `www`
+- 删除明显错误的小说站逻辑:
+ - `novel:category`
+ - `novel:sort`
+ - `novel:status`
+ - `site:nflurl`
+- 第一批先收缩成“最小正确集”:
+ - 首页
+ - 榜单首页
+
+#### 为什么先这样做
+
+- `robots.txt` 当前已经统一指向裸域 `sitemap_index.xml`
+- 先让 `sitemap-main.xml` 和它一致
+- 先停止 sitemap 自己制造错误信号
+
+#### 参考模板
+
+- [27-老模板SitemapPatch模板-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/27-老模板SitemapPatch模板-2026-04-17.md)
+
+#### 改后先验
+
+- `sctyjz.com`
+- `www.ap-hulan.com`
+- `hymdrz.com`
+
+#### 预期日志信号
+
+- `/|301` 下降
+- `home|301` 下降
+- host 分裂减轻
+
+## 四、逐步验收顺序
+
+不要 15 个文件一次全改完再看。
+
+更稳的节奏是:
+
+### 第 1 步:先落分类页 5 个
+
+先验源码:
+
+- canonical 是否存在
+- `og:url` 是否等于分类页 URL
+- `CollectionPage.url` 是否等于分类页 URL
+
+再看日志:
+
+- `category|200`
+- `/|301`
+- `home|301`
+
+### 第 2 步:再落播放页 5 个
+
+先验源码:
+
+- canonical 是否存在
+- `og:url` 是否和 canonical 一致
+- JSON-LD `url` 是否和 canonical 一致
+
+再看日志:
+
+- `play|301`
+- `play|200`
+
+### 第 3 步:最后落 sitemap-main 5 个
+
+先验源码:
+
+- XML 是否可正常访问
+- 是否还有 `novel`/`nflurl`
+- host 是否已经去掉 `www`
+
+再看日志:
+
+- `/|301`
+- `home|301`
+- host 分裂
+
+## 五、6 个核心日志指标
+
+第一批实施后,每天优先只看这 6 个:
+
+1. `/|301`
+2. `home|301`
+3. `category|200`
+4. `play|301`
+5. `play|200`
+6. `other|404`
+
+## 六、失败时优先回查
+
+如果改完后没有改善,或者出现倒退,先看:
+
+1. 分类页 canonical 是否写错
+2. 播放页三件套是否还没统一
+3. sitemap 是否仍在输出错误 host
+4. 是否误伤旧 deep link 的承接能力
+
+## 七、建议主 Codex 的最小执行方式
+
+如果主 Codex 现在要正式开工,最小合理动作是:
+
+1. 先提交分类页 5 个 patch
+2. 验证
+3. 再提交播放页 5 个 patch
+4. 验证
+5. 再提交 sitemap-main 5 个 patch
+
+不要把 15 个文件混成一笔难以归因的大改。
+
+## 一句话交接
+
+> 老模板第一批 SEO 落地,现在最稳的执行方式就是按这张总表分三段施工:先分类页、再播放页、最后 sitemap-main;每一段都先看源码、再看重点域名、再看 6 个核心日志指标,始终保持只改老模板 5 套,不扩散到 GPT 模板和共享底层。
diff --git a/docs/old-tmp-seo/29-老模板第一批提交节奏建议-2026-04-17.md b/docs/old-tmp-seo/29-老模板第一批提交节奏建议-2026-04-17.md
new file mode 100644
index 0000000..dd2ffa1
--- /dev/null
+++ b/docs/old-tmp-seo/29-老模板第一批提交节奏建议-2026-04-17.md
@@ -0,0 +1,224 @@
+# 1298-SEONexus 老模板第一批提交节奏建议 - 2026-04-17
+
+## 目的
+
+这份文档只解决一个实际问题:
+
+- 主 Codex 如果要正式开始落老模板第一批 SEO patch,应该怎么分提交、怎么分复测,才最稳
+
+它不再补新的改动点,而是把现有 15 个目标文件拆成可执行节奏。
+
+## 一、总原则
+
+这批改动最怕的不是“没想法”,而是:
+
+- 一次改太多
+- 改完看不出哪一刀起作用
+- 如果效果不对,也不知道该回退哪一组
+
+所以第一批一定要遵守:
+
+1. 分 3 次提交
+2. 每次提交只改一类文件
+3. 每次提交后都先看源码,再看重点域名,再看日志
+
+## 二、推荐提交拆分
+
+### Commit 1:分类页 5 个
+
+建议范围:
+
+- `videoDadi/video/getCategoryType.html`
+- `videoDingZhu/video/getCategoryType.html`
+- `videoBoKu/video/getCategoryType.html`
+- `videoLaoNiu/video/getCategoryType.html`
+- `videoNuNu/video/getCategoryType.html`
+
+建议提交信息风格:
+
+- `align legacy category page canonical and url signals`
+
+这一笔的目标很单纯:
+
+- 先把分类页从“像首页”改成“就是分类页”
+
+#### 提交后先验
+
+先验页面源代码:
+
+- canonical 是否存在
+- `og:url` 是否等于分类页 URL
+- `CollectionPage.url` 是否等于分类页 URL
+
+再验重点域名:
+
+- `ningxiaowei.com`
+- `www.ningxiaowei.com`
+- `sctyjz.com`
+- `www.ap-hulan.com`
+
+再看日志:
+
+- `category|200`
+- `/|301`
+- `home|301`
+
+### Commit 2:播放页 5 个
+
+建议范围:
+
+- `videoDadi/video/getVideoPlayUrl.html`
+- `videoDingZhu/video/getVideoPlayUrl.html`
+- `videoBoKu/video/getVideoPlayUrl.html`
+- `videoLaoNiu/video/getVideoPlayUrl.html`
+- `videoNuNu/video/getVideoPlayUrl.html`
+
+建议提交信息风格:
+
+- `align legacy play page canonical og and jsonld urls`
+
+这一笔的目标也很单纯:
+
+- 先把播放页三件套说成同一句话
+
+#### 提交后先验
+
+先验页面源代码:
+
+- canonical 是否存在
+- `og:url` 是否与 canonical 一致
+- JSON-LD `url` 是否与 canonical 一致
+
+再验重点域名:
+
+- `yagyjt.com`
+- `ningxiaowei.com`
+
+再看日志:
+
+- `play|301`
+- `play|200`
+- `detail|301`
+
+### Commit 3:sitemap-main 5 个
+
+建议范围:
+
+- `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`
+
+建议提交信息风格:
+
+- `shrink legacy sitemap main to minimal valid set`
+
+这一笔目标:
+
+- 先让 sitemap 不再输出错误小说逻辑
+- 先让 sitemap host 跟主输出口径一致
+
+#### 提交后先验
+
+先验 sitemap:
+
+- XML 是否正常
+- 是否还有 `novel` / `nflurl`
+- host 是否还是 `www`
+
+再验重点域名:
+
+- `sctyjz.com`
+- `www.ap-hulan.com`
+- `hymdrz.com`
+
+再看日志:
+
+- `/|301`
+- `home|301`
+- host 分裂
+
+## 三、每次提交后都要做的 3 层验证
+
+### 1. 源码层
+
+先看页面源代码,不要先看感觉:
+
+- canonical
+- `og:url`
+- JSON-LD
+- sitemap XML
+
+### 2. 页面层
+
+确认页面能正常打开,不报错,不空白,不走异常跳转。
+
+### 3. 日志层
+
+至少连续看 1 到 3 个窗口:
+
+- 是否向目标方向变化
+- 有没有明显副作用
+
+## 四、建议的节奏安排
+
+最稳节奏不是一口气三笔全上,而是:
+
+### 节奏 A:保守型
+
+1. 先提 Commit 1
+2. 看半天到 1 天
+3. 确认分类页无回退
+4. 再提 Commit 2
+5. 再看半天到 1 天
+6. 再提 Commit 3
+
+适合:
+
+- 当前正式服对波动敏感
+- 希望每一笔都能清楚归因
+
+### 节奏 B:中速型
+
+1. 白天提 Commit 1
+2. 晚些时候提 Commit 2
+3. 第二天再提 Commit 3
+
+适合:
+
+- 想加快节奏
+- 但仍然保留基本归因能力
+
+当前建议优先选:
+
+- 节奏 A
+
+## 五、什么情况要暂停继续提交
+
+如果出现下面任一情况,不要继续往下提下一笔:
+
+1. 页面源代码没有按预期输出
+2. 页面打开异常
+3. `404` 明显增加
+4. `detail|200 / play|200` 明显下降
+5. `/|301` 反而明显增加
+
+这时应该先停在当前提交点回看,而不是硬着头皮把下一组也推上去。
+
+## 六、当前最值得固定看的 6 个日志指标
+
+三笔提交都共用这 6 个核心指标:
+
+1. `/|301`
+2. `home|301`
+3. `category|200`
+4. `play|301`
+5. `play|200`
+6. `other|404`
+
+这 6 个指标已经足够判断第一批是否朝正确方向走。
+
+## 七、一句话交接
+
+> 老模板第一批最稳的提交方式,不是把 15 个文件一把推上去,而是按“分类页 5 个 -> 播放页 5 个 -> sitemap-main 5 个”分 3 笔提交,每笔之后都先做源码、页面、日志三层验证,确认无副作用再推进下一笔。
diff --git a/docs/old-tmp-seo/30-老模板最新蜘蛛日志实战分析-2026-04-17.md b/docs/old-tmp-seo/30-老模板最新蜘蛛日志实战分析-2026-04-17.md
new file mode 100644
index 0000000..131a558
--- /dev/null
+++ b/docs/old-tmp-seo/30-老模板最新蜘蛛日志实战分析-2026-04-17.md
@@ -0,0 +1,542 @@
+# 1299-SEONexus 老模板最新蜘蛛日志实战分析 - 2026-04-17
+
+## 目的
+
+这份文档只服务老模板 `1001-1005` 的 SEO 主线。
+
+目标不是泛泛而谈“蜘蛛有波动”,而是把 `2026-04-17` 当前仓库内最新的 spider workbench 聚合数据,直接翻译成主 Codex 可执行的判断。
+
+明确边界:
+
+- 只看老模板:`videoDadi / videoDingZhu / videoBoKu / videoLaoNiu / videoNuNu`
+- 不把 `videoGpt1` 混进本轮结论
+- 当前重点是百度主线,同时兼看 `bytespider / sogou`
+
+---
+
+## 一、数据来源
+
+本轮结论不能只看单个 `latest` 文件,而要分两层理解:
+
+1. 最近一次 push 摘要
+ - `code/storage/domain-spider-crawl/latest/spider-crawl.summary.json`
+ - `code/storage/domain-spider-crawl/latest/spider-crawl.summary.html`
+2. 工作台 24h 聚合逻辑
+ - `code/app/common/helper/DomainSpiderCrawlWorkbenchHelper.php`
+ - 通过 `buildSummary(...)` 聚合最近窗口内多次 run
+
+这里要特别提醒后续主 Codex:
+
+- `latest/spider-crawl.summary.json` 会被 `SeoCollector::saveCrawlLogs()` 每次新 push 直接覆盖
+- 它代表“最近一次 push 摘要”
+- 不天然等于“最近 24h 全局聚合”
+
+`2026-04-17 20:30` 复核时就已经看到这个现象:
+
+- `latest` 文件只剩一小批最近推送数据
+- 但 workbench 24h 聚合后,老模板依然有连续深抓记录
+
+所以本页正文以下结论,统一以 `WorkbenchHelper::buildSummary(..., windowHours=24, selectedBots=baiduspider,bytespider,sogou)` 为准。
+
+---
+
+## 二、当前全局结论
+
+当前这批老模板域名,按 `2026-04-17 20:30` 的 24h 聚合视角,蜘蛛数据呈现出 4 个非常明确的信号:
+
+1. 已经有百度深抓样本
+ - 不是“完全没抓”
+ - 已经出现 `detail / play` 命中
+2. 入口层仍然偏弱
+ - `robots_requests = 11`
+ - `sitemap_requests = 2`
+ - `category_requests = 1`
+3. 当前异常主因不是 5xx
+ - `500 = 0`
+ - 主要是 `301 / 403 / 444`
+4. 当前最该处理的是“入口质量”和“旧路由信号”
+ - 不是把老模板误判成 GPT 模板结构问题
+
+工作台聚合概览:
+
+- 总请求:`72`
+- 域名数:`14`
+- 蜘蛛数:`2`
+- 首页请求:`33`
+- 分类请求:`1`
+- 详情请求:`21`
+- 播放请求:`4`
+- robots 请求:`11`
+- sitemap 请求:`2`
+- 状态分布:
+ - `200 = 34`
+ - `301 = 24`
+ - `403 = 6`
+ - `444 = 8`
+ - `500 = 0`
+
+这说明当前阶段不是服务整体炸了,而是:
+
+- 百度已经开始进部分深页
+- 但分类层和 sitemap 层仍然明显偏弱
+- 同时入口层的 `403/444` 还在反复拖累蜘蛛体验
+
+---
+
+## 三、已经确认属于老模板的代表域名
+
+本轮已从正式库 `domain` 表确认以下域名及模板归属:
+
+| 域名 | t_id | 模板 |
+| --- | ---: | --- |
+| `proenerji.com` | `1001` | `videoDadi` |
+| `qf123.net` | `1001` | `videoDadi` |
+| `qingyejianshe.com` | `1002` | `videoDingZhu` |
+| `tvwallmountreview.com` | `1002` | `videoDingZhu` |
+| `yagyjt.com` | `1002` | `videoDingZhu` |
+| `ctshuhua.com` | `1003` | `videoBoKu` |
+| `ningxiaowei.com` | `1003` | `videoBoKu` |
+| `yqshu8.com` | `1004` | `videoLaoNiu` |
+| `syzhzs.com` | `1005` | `videoNuNu` |
+| `yahuawang88.com` | `1005` | `videoNuNu` |
+
+所以当前 spider workbench 里这批代表站点,确实就是老模板主线,不是 GPT 模板误入。
+
+---
+
+## 四、最关键的 3 条判断
+
+### 1. 百度已经给了 `yagyjt.com` 深抓机会
+
+这是本轮最重要的正向样本。
+
+工作台给出的状态:
+
+- host:`yagyjt.com`
+- 模板:`1002 / videoDingZhu`
+- 总请求:`28`
+- 深页请求:`16`
+- 详情请求:`12`
+- 播放请求:`4`
+- 首页请求:`6`
+- robots 请求:`3`
+- sitemap 请求:`2`
+- 分类请求:`1`
+
+说明:
+
+- 百度并不是只停留在首页
+- 这个站已经被拉进 detail/play 维度
+- 同时入口层也已经开始探测 `robots / sitemap / category`
+- 它应该被当成老模板第一优先样板站
+
+但它同时也有明显问题:
+
+- `anomaly_count = 18`
+- 深页异常主要是 `301`
+- 命中的 URL 形态是:
+ - `/voddetail/...`
+ - `/vodplay/...`
+
+这说明百度仍然在消费旧路由资产,当前站点靠 `301` 把蜘蛛导向现行规范地址。
+
+结论:
+
+- 这不是致命故障
+- 但会拖慢抓取效率和权重沉淀速度
+- 未来 7 天内,这个站最值得持续观察
+
+### 2. 老模板群的真正短板仍然是“分类层没起量”
+
+最新聚合里:
+
+- `category_requests = 1`
+- `sitemap_requests = 2`
+
+虽然已经不再是绝对 `0`,但这个量级依然远远弱于深页和首页,所以这比单纯的深页 `301` 更值得重视。
+
+因为它意味着:
+
+- 百度当前对老模板站群的抓取入口仍然偏窄
+- 主要仍靠首页或历史旧链接进入
+- 分类页还没有形成稳定抓取面
+- sitemap 也只是开始露头,还没形成可见收益
+
+这也正好验证了本轮已落地的第一批模板修正方向是对的:
+
+1. 分类页 canonical 修正
+2. 分类页 `og:url` 修正
+3. 分类页 JSON-LD `url` 修正
+4. 播放页 canonical / `og:url` / JSON-LD 对齐
+5. sitemap 主输出去掉 `www + novel` 旧噪音
+
+### 2.1 这里还要额外防一个“统计口径误判”
+
+虽然最新 `24h` 聚合里显示:
+
+- `category_requests = 1`
+
+但这条数据不能被机械理解成:
+
+- “蜘蛛完全没有碰过分类页”
+
+原因是:
+
+1. spider workbench 本身不会按 URL 自动识别分类页
+2. 它依赖上游推送时已经写好的 `page_type`
+3. 当前仓库内 `DomainSpiderCrawlLogSchemaHelper` 只做枚举归一,不做 URL 路径识别
+
+也就是:
+
+- 如果前端 spiderlog-agent 把分类 URL 直接标成了 `other`
+- 工作台这里就会继续把它统计成 `other`
+- 最终看起来会像“分类始终为 0”
+
+本轮已经在真实 payload 里看到过一条直接证据:
+
+- run:
+ `20260417/201003_crawl_log_push_f72827`
+- host:
+ `sctyjz.com`
+- url:
+ `/videotype-zong-yi/all-1948-nuo-wei-all/yin-du-yu-page1`
+- 当前标记:
+ `page_type = other`
+- bot:
+ `googlebot`
+- status:
+ `444`
+
+这说明:
+
+- 至少在当前采集链里,分类 URL 被误标成 `other` 是真实存在的
+- 所以后续主 Codex 看 `category_requests = 0` 时,必须同时保留一个判断分支:
+ - 可能是真没抓
+ - 也可能是上游 page_type 归类口径不完整
+
+不过要注意:
+
+- 在我额外抽查的最近数个 `2026-04-17` run 里
+- 暂时还没有找到 `baiduspider / bytespider / sogou` 的分类 URL 被误标成 `other` 的直接样本
+
+所以当前更稳的表达是:
+
+> 老模板分类抓取当前仍然偏弱,而且 `category` 指标本身仍存在口径风险,不能单独作为百度触达面的唯一判断依据。
+
+### 3. `bytespider` 当前不是“没来”,而是“来了但 robots 层体验差”
+
+最新异常里,最高优先级几乎都集中在:
+
+- `qf123.net`
+- `www.proenerji.com`
+- `www.ctshuhua.com`
+- `www.qf123.net`
+- `www.qingyejianshe.com`
+- `www.syzhzs.com`
+- `www.yagyjt.com`
+- `www.tvwallmountreview.com`
+
+共同特征:
+
+- URL:`/robots.txt`
+- bot:`bytespider`
+- 状态:`403 / 444`
+
+这说明:
+
+- 头条蜘蛛不是没探测
+- 它已经反复试图读取入口文件
+- 但当前入口层对它不友好
+
+同时,现有老模板 `robots.txt` 模板里只明确放行了:
+
+- `Baiduspider`
+- `360Spider`
+- `Sogou web spider`
+- `Sogou inst spider`
+- `YisouSpider`
+- `Quarkbot`
+- `Googlebot`
+
+没有显式放行 `Bytespider`。
+
+结论分两层:
+
+1. 从“百度 7 天冲量”主目标看
+ - `bytespider` 不是第一优先级
+ - 不应该压过百度分类/深页主线
+2. 从“国内蜘蛛入口完整度”看
+ - 后续可以单独给老模板 robots 增补 `Bytespider`
+ - 但前提是先确认线上 `403/444` 是否来自模板输出,还是前端防护层
+
+---
+
+## 五、当前不能误判的点
+
+### 1. 不能把 `301` 一律当致命异常
+
+以 `yagyjt.com` 为例,百度命中的是:
+
+- `/voddetail/...`
+- `/vodplay/...`
+
+这更像是历史收录或历史外链还在发挥作用。
+
+如果当前站点已经把它们稳定 `301` 到规范地址,那么它的问题是:
+
+- 抓取成本高
+- 信号绕路
+
+而不是:
+
+- 页面完全打不开
+- 老模板彻底不可抓
+
+### 2. 当前没有证据说明老模板普遍 5xx
+
+最新 24h 聚合里:
+
+- `500 = 0`
+
+所以本轮不能把精力浪费在“怀疑后端整体炸了”上。
+
+更应该盯的是:
+
+- 分类抓取为什么还没起来
+- sitemap 为什么没有形成可见命中
+- 已深抓样板站能不能进一步减少旧路由依赖
+
+### 3. `1270` 不能代替老模板 SEO 主线
+
+`1270` 当前仍然主要是 GPT 模板交接总文档。
+
+老模板这一支继续推进时,应优先参考:
+
+- `1269`
+- `1286`
+- `1287`
+- `1289`
+- `1290`
+- `1291`
+- `1292`
+- `1293`
+- `1294`
+- `1295`
+- `1296`
+- 本文 `1299`
+
+---
+
+## 六、对主 Codex 最有价值的执行建议
+
+### 优先级 A:持续观察并放大 `yagyjt.com`
+
+原因:
+
+- 它已经是百度深抓样板
+- 模板归属明确:`1002 / videoDingZhu`
+- 最适合作为“老模板 7 天冲量”的核心跟踪站
+
+建议动作:
+
+1. 复核 `yagyjt.com` 当前详情页和播放页规范地址是否稳定
+2. 观察旧 `/voddetail`、`/vodplay` 是否始终 301 到唯一规范 URL
+3. 看未来 24-72 小时内,百度是否开始从 `detail/play 301` 转向规范深页 200
+
+### 优先级 B:盯分类层起量,而不是继续沉迷首页
+
+因为最新数据说明:
+
+- 首页已经有命中
+- 深页也不是完全没有
+- 但分类层和 sitemap 层仍然显著偏弱
+
+这意味着后续最该看的提升信号是:
+
+1. 是否开始出现 `category_requests > 0`
+2. 是否开始有分类页 200 被百度命中
+3. 是否由分类页继续向详情页扩散
+
+### 优先级 C:把 `robots` 的国内蜘蛛兼容性单独列为副线
+
+这条线不能抢主线,但也不能完全忽略。
+
+建议:
+
+1. 先确认 `403/444` 是前端防护层行为,还是应用层输出问题
+2. 如果模板输出可控,再评估是否给老模板 `robots.txt` 增补:
+ - `User-agent: Bytespider`
+ - `Allow: /`
+3. 即便要改,也应单独开小任务,不要和百度主线混着验
+
+---
+
+## 七、一句话总结
+
+当前老模板 SEO 主线的真实状态是:
+
+> 百度已经开始给个别老模板站深抓机会,但站群整体仍然缺少分类层放量;短期最值得做的是围绕 `yagyjt.com` 这种已深抓样板站压旧路由成本、盯分类抓取起量,而不是把精力继续带偏到 GPT 模板或不存在的 5xx 故障上。
+
+---
+
+## 八、2026-04-17 晚间追加:工作台 page_type 口径补强已落地
+
+在继续复核真实 payload 后,本轮又确认了一个会直接影响判断的问题:
+
+- spider workbench 的统计高度依赖上游推送的 `page_type`
+- 如果上游把老模板历史路由打成 `other`
+- 工作台就会把真实分类 / 详情 / 播放流量低估掉
+
+### 已确认的真实误标样本
+
+1. 分类页误标
+ - `/videotype-zong-yi/all-1948-nuo-wei-all/yin-du-yu-page1`
+ - 原始 `page_type = other`
+2. 播放页误标
+ - `/video-play/ni-tian-zhi-zun-26066-fengchao-137`
+ - 原始 `page_type = other`
+3. 详情页漏算线索
+ - `www.ningxiaowei.com`
+ - `/video-info/...`
+ - 在最近 run 中由 `baiduspider` 命中 `200 / 301`
+ - 但原始 bucket 仍可能落在 `other`
+
+### 已落地的修正
+
+本轮已在抓取摘要 ingest 阶段增加“路径兜底识别”,仅在上游值为空或为 `other` 时生效:
+
+- 文件:
+ - [DomainSpiderCrawlLogSchemaHelper.php](/www/wwwroot/VideoSource2/code/app/common/helper/DomainSpiderCrawlLogSchemaHelper.php:1)
+ - [DomainSpiderCrawlLogHelper.php](/www/wwwroot/VideoSource2/code/app/common/helper/DomainSpiderCrawlLogHelper.php:1)
+- 兜底识别范围:
+ - `videotype / vodtype / fenlei` -> `category`
+ - `video-info / voddetail / neirong-` -> `detail`
+ - `video-play / vodplay / bf-` -> `play`
+ - `robots.txt` -> `robots`
+ - `sitemap*` -> `sitemap`
+ - `search / get-index` -> `search`
+
+### 本地复核结果
+
+用真实 run:
+
+- `20260417/201003_crawl_log_push_f72827`
+
+重新过 ingest 后,结果已经变为:
+
+1. `/videotype-zong-yi/...` -> `category`
+2. `/video-play/...` -> `play`
+
+这说明:
+
+- 当前 workbench 的老模板分类/播放统计,后续会比之前更接近真实情况
+- `category=0` 这类结论之后必须结合新 ingest 结果再判断
+- 这次修正只影响蜘蛛分析口径,不会直接改动老模板页面输出,也不会直接影响 `videoGpt1` 模板渲染
+
+### 已追加重建 latest 摘要
+
+为了避免 admin2 / workbench 继续读取旧的 `latest` 静态摘要,本轮还额外重建了:
+
+- `code/storage/domain-spider-crawl/latest/spider-crawl.summary.json`
+- `code/storage/domain-spider-crawl/latest/spider-crawl.summary.html`
+
+重建时间:
+
+- `2026-04-17T20:20:54+08:00`
+
+重建后,按最近 `24` 个 run 合并统计得到的页面类型分布为:
+
+- `robots = 281`
+- `home = 77`
+- `detail = 34`
+- `play = 11`
+- `category = 4`
+- `sitemap = 2`
+- `other = 17`
+
+这和修正前相比,至少已经明确证明:
+
+1. 分类页不再是绝对 `0`
+2. 旧 `video-info / video-play / videotype` family 的流量不再全部沉到底部 `other`
+3. 后续再看老模板“百度有没有进分类 / 详情 / 播放”,工作台数据可信度会更高
+
+---
+
+## 九、2026-04-17 20:30 再复核补充
+
+在继续用 `DomainSpiderCrawlWorkbenchHelper::buildSummary(...)` 复核后,当前还要再补 3 条交接级结论。
+
+### 1. 当前正式应以 24h 聚合视角为主,不应以 `latest` 覆盖文件为主
+
+`latest/spider-crawl.summary.json` 在 `20:30` 时已经被新的前端 push 覆盖成一份很小的最近样本。
+
+但同一时刻按 workbench 24h 聚合得到的真实视角仍然是:
+
+- 总请求:`72`
+- 详情:`21`
+- 播放:`4`
+- 分类:`1`
+- sitemap:`2`
+- robots:`11`
+
+因此后续主 Codex 如果看到:
+
+- `latest` 很小
+- 甚至只剩少量 `robots/home`
+
+不要直接判断成:
+
+- 老模板蜘蛛量掉空
+- 深页信号消失
+
+更稳的做法是始终回到 24h 聚合视角看趋势。
+
+### 2. `yagyjt.com` 目前仍是第一样板站,但问题已明确集中到入口层
+
+截至 `20:30` 的 host detail:
+
+- 总请求:`28`
+- 深页请求:`16`
+- 异常:`18`
+- 状态:
+ - `200 = 10`
+ - `301 = 10`
+ - `444 = 7`
+ - `403 = 1`
+
+当前最高优先级异常已经非常集中:
+
+- `/robots.txt`
+- `/sitemap_index.xml`
+- `/videotype/1-dian-ying`
+- `/`
+
+也就是说,这个站已经不是“有没有深抓”的问题,而是:
+
+- 已经深抓
+- 但入口质量还不够稳
+
+所以后续如果要拿一个站做百度 7 天冲量观察,优先还是盯它。
+
+### 3. `www.ningxiaowei.com` 更适合当“深链承接效率”样本
+
+截至 `20:30` 的 host detail:
+
+- 总请求:`8`
+- 深页请求:`8`
+- 全部都是 `detail`
+- 状态:
+ - `200 = 4`
+ - `301 = 4`
+
+它的特点不是入口层扩张,而是:
+
+- 百度已经明确在消费 `/video-info/...` 这类当前有效 family
+- 但还没有看到首页 / 分类 / sitemap 同步扩张
+
+因此它更适合当:
+
+- 详情页 URL family 正确性观察样本
+- 深链 `301 -> 200` 承接效率样本
+
+不适合拿来代替 `yagyjt.com` 做入口层样板。
diff --git a/docs/old-tmp-seo/31-老模板样板站域名级SEO任务单-2026-04-17.md b/docs/old-tmp-seo/31-老模板样板站域名级SEO任务单-2026-04-17.md
new file mode 100644
index 0000000..c4a1ed5
--- /dev/null
+++ b/docs/old-tmp-seo/31-老模板样板站域名级SEO任务单-2026-04-17.md
@@ -0,0 +1,259 @@
+# 1300-SEONexus 老模板样板站域名级 SEO 任务单 - 2026-04-17
+
+## 目的
+
+这份文档把当前最值得持续盯的两个老模板样板站,直接拆成域名级任务。
+
+适用对象:
+
+- 主 Codex
+- 后续接手老模板 SEO 的人工
+- 需要从“站群泛分析”切到“样板站逐项修正”的人
+
+---
+
+## 一、样板站 1:`yagyjt.com`
+
+### 基本归属
+
+- 域名:`yagyjt.com`
+- 模板:`t_id = 1002`
+- 视图目录:`videoDingZhu`
+- URL family:
+ - `VIDEO_INFO_URL = 模板7 = /shipin/{slug}-{id}`
+ - `VIDEO_PLAY_URL = 模板7 = /shipin-play/{slug}-{id}-{line}-{episode}`
+ - `VIDEO_CATEGORY_URL = 模板7 = /shipinfenlei-{parent}/{category}-{year}-{area}-{order}/{lang}-page{page}`
+
+### 当前蜘蛛状态
+
+基于最新 workbench 明细:
+
+- 总请求:`28`
+- 深页请求:`16`
+- 深抓比例:`57.1%`
+- 页面分布:
+ - `detail = 12`
+ - `play = 4`
+ - `home = 6`
+ - `robots = 3`
+ - `sitemap = 2`
+ - `category = 1`
+
+这说明:
+
+- 百度已经真实进入深页
+- 这是当前老模板站群里最值得当样板站的域名
+
+### 当前主要问题
+
+#### 1. 入口层异常比深页跳转更急
+
+最近异常里最高优先级是:
+
+- `/robots.txt => 444`
+- `/robots.txt => 403`(`bytespider`)
+- `/sitemap_index.xml => 444`
+- `/videotype/1-dian-ying => 444`
+- `/ => 444`
+
+这里的真实含义是:
+
+- 百度虽然已经能命中深页
+- 但首页、分类、robots、sitemap 这一整层入口并不稳定
+- 深抓是在“入口不够干净”的前提下硬跑出来的
+
+#### 2. 深页仍然大量消费旧 family
+
+当前百度命中的深页异常主要是:
+
+- `/voddetail/... => 301`
+- `/vodplay/... => 301`
+
+这说明:
+
+- 对 `yagyjt.com` 来说,当前配置的主 family 并不是:
+ - `/voddetail/...`
+ - `/vodplay/...`
+ - `/videotype/...`
+- 当前规范 family 实际是:
+ - `/shipin/...`
+ - `/shipin-play/...`
+ - `/shipinfenlei-...`
+- 百度仍然在消费历史旧 family
+- 当前站点靠 301 导向现行规范地址
+- 这不是致命错误
+- 但会持续消耗抓取预算
+
+#### 3. 当前更该盯的是入口层 `444/403` 是否继续下降
+
+当前 host detail 状态分布已经比较清楚:
+
+- `200 = 10`
+- `301 = 10`
+- `444 = 7`
+- `403 = 1`
+
+这意味着:
+
+- `301` 还是老旧 family 被消费的表现
+- 真正拖累入口扩张的,是 `robots / sitemap / 分类 / 首页` 上反复出现的 `444/403`
+
+### 对主 Codex 的直接任务
+
+1. 先排查 `yagyjt.com` 的前端入口层
+ - `robots.txt`
+ - `sitemap_index.xml`
+ - 首页 `/`
+ - 一级分类 `/videotype/1-dian-ying`
+2. 优先确认这些 444 是不是前端 Nginx / WAF / 缓存层造成
+3. 确认 `voddetail`、`vodplay` 到当前规范详情/播放地址的 301 链是否始终唯一、稳定
+4. 未来 24-72 小时重点观察:
+ - 入口层 444 是否下降
+ - 分类页是否由 `1` 继续往上抬
+ - 深页 301 是否逐渐被规范深页 200 替代
+
+### 当前补充实测
+
+本轮在当前服务器上直接走公网 HTTP 样本验证时,已看到:
+
+- `http://yagyjt.com/voddetail/shuang-qiang-huang-ying-gu-624 => 444`
+
+这说明:
+
+- `yagyjt.com` 的入口层异常不是纯工作台统计错觉
+- 至少在当前外部 HTTP 访问链路上,前端层确实存在直接拦截或异常关闭连接的问题
+
+### 一句话判断
+
+> `yagyjt.com` 不是“没抓起来”,而是“已经抓起来,但入口层很脏”;它适合作为老模板 7 天冲量的头号样板站。
+
+---
+
+## 二、样板站 2:`www.ningxiaowei.com`
+
+### 基本归属
+
+- 主域:`ningxiaowei.com`
+- 当前抓取 host:`www.ningxiaowei.com`
+- 模板:`t_id = 1003`
+- 视图目录:`videoBoKu`
+- URL family:
+ - `VIDEO_INFO_URL = 模板4 = /video-info/{slug}-{id}`
+ - `VIDEO_PLAY_URL = 模板4 = /video-play/{slug}-{id}-{line}-{episode}`
+ - `VIDEO_CATEGORY_URL = 模板4 = /videotype-{parent}/{category}-{year}-{area}-{order}/{lang}-page{page}`
+
+### 当前蜘蛛状态
+
+基于最新 workbench 明细:
+
+- 总请求:`8`
+- 深页请求:`8`
+- 深抓比例:`100%`
+- 页面分布:
+ - `detail = 8`
+
+这说明:
+
+- 这个站当前不是“入口页试探”
+- 而是百度已经直接命中当前配置的详情 family
+
+### 当前主要问题
+
+#### 1. 百度已经进入当前规范详情 family,但跳转链还需看干净
+
+已确认命中的 URL 包括:
+
+- `/video-info/you-li-xi-si-zong-he-zheng-di-yi-ji-78641`
+- `/video-info/jing-cha-gu-shi-chao-ji-jing-cha-5933`
+- `/video-info/zhang-jiang-tian-di-da-ji-xing-60553`
+
+并且状态是:
+
+- `301`
+- `200`
+
+这说明:
+
+- 对 `ningxiaowei.com` 来说,`/video-info/...` 本身就是当前配置的规范详情 family
+- 所以这里的 `301 + 200` 不能直接理解成“旧详情 family 残留”
+- 更需要优先怀疑的是:
+ - `www / 裸域` host 归一
+ - `http / https` 归一
+ - 或同一路径上的额外跳转
+
+#### 2. 当前问题比 `yagyjt.com` 更纯
+
+`www.ningxiaowei.com` 目前没暴露出那么多首页/分类/robots 异常。
+
+它更像是:
+
+- 入口噪音少
+- 当前规范详情 family 已经被百度深抓
+- 但 host / 跳转链的规范化还不够干净
+- 当前状态分布也符合这个判断:
+ - `200 = 4`
+ - `301 = 4`
+
+### 对主 Codex 的直接任务
+
+1. 当前已确认 `www.ningxiaowei.com` 的规范详情 family 就是 `/video-info/...`
+2. 检查 `/video-info/...` 的 301 到底跳向哪里
+3. 优先排查是否存在:
+ - `www -> 裸域`
+ - `http -> https`
+ - 同一路径被重复跳转
+4. 目标应是:
+ - 详情页规范链尽量压缩成一次可预期跳转
+ - 最终稳定落到唯一详情 URL
+
+### 当前补充实测
+
+本轮在当前服务器上直接走公网 HTTP 样本验证时,已看到:
+
+- `http://www.ningxiaowei.com/video-info/jing-cha-gu-shi-chao-ji-jing-cha-5933 => 444`
+
+这说明:
+
+- `www.ningxiaowei.com` 当前也不是“只有工作台里才异常”
+- 至少在当前 HTTP 外部链路上,详情页入口依然会被前端层直接掐断
+- 所以主 Codex 后续排查时,不应只盯应用模板,还要同步看前端站群 / WAF / Nginx 入口规则
+
+### 一句话判断
+
+> `www.ningxiaowei.com` 不是“旧详情 family 残留站”,而是“当前规范详情 family 已被百度深抓,但 host / 跳转链仍需压缩”的样板站。
+
+---
+
+## 三、主线优先级建议
+
+当前最稳顺序:
+
+1. 先做 `yagyjt.com`
+ - 因为它既有入口问题,又有深页问题
+ - 修复收益最大
+2. 再做 `www.ningxiaowei.com`
+ - 因为它更像“规范详情 family 跳转链压缩专项”
+ - 适合做第二个样板站
+
+---
+
+## 四、Day1 直接执行重点
+
+如果主 Codex 现在就要落地第一天动作,建议只做下面 4 件事:
+
+1. 盯 `yagyjt.com` 的入口层异常
+ - 重点确认 `/robots.txt`、`/sitemap_index.xml`、`/`、`/videotype/1-dian-ying`
+ - 目标不是先改模板,而是先确认 `444/403` 出在前端入口层还是应用层
+2. 盯 `yagyjt.com` 的旧 family 消耗
+ - 抽样确认 `/voddetail/...`、`/vodplay/...` 是否始终单跳或稳定跳到唯一规范 URL
+3. 盯 `www.ningxiaowei.com` 的详情页跳转链
+ - 重点看 `/video-info/...` 是否存在 `www / 裸域` 或 `http / https` 的重复跳转
+4. 盯 24h 聚合,不盯单个 `latest`
+ - `latest/spider-crawl.summary.json` 会被最近一次 push 覆盖
+ - 真正判断趋势时,要看 workbench 的 24h 聚合视角
+
+---
+
+## 五、一句话交接
+
+> 老模板下一步不该再停留在“站群泛讨论”,而应该直接围绕 `yagyjt.com` 和 `www.ningxiaowei.com` 两个样板站做域名级推进:前者先清入口层 444 和历史旧 family 消耗,后者先把当前规范详情 family 的 host / 跳转链压缩干净。
diff --git a/docs/old-tmp-seo/32-老模板样板站URL-Family对照表-2026-04-17.md b/docs/old-tmp-seo/32-老模板样板站URL-Family对照表-2026-04-17.md
new file mode 100644
index 0000000..6069300
--- /dev/null
+++ b/docs/old-tmp-seo/32-老模板样板站URL-Family对照表-2026-04-17.md
@@ -0,0 +1,154 @@
+# 1301-SEONexus 老模板样板站 URL Family 对照表 - 2026-04-17
+
+## 目的
+
+这份文档只做一件事:
+
+- 把老模板样板站“当前配置的规范 URL family”
+- 和“蜘蛛当前实际命中的 URL family”
+- 放到一张表里对照
+
+这样后续主 Codex 在判断 `301`、旧路由、规范化时,不会把“当前规范 family”误判成“历史残留 family”。
+
+---
+
+## 一、`yagyjt.com`
+
+### 站点配置
+
+- 域名:`yagyjt.com`
+- 模板:`t_id = 1002`
+- 视图:`videoDingZhu`
+
+当前 `t_cfg` 配置:
+
+- `VIDEO_INFO_URL = sfg_id 1052 = 模板7`
+- `VIDEO_PLAY_URL = sfg_id 1060 = 模板7`
+- `VIDEO_CATEGORY_URL = sfg_id 1044 = 模板7`
+
+### 当前规范 family
+
+1. 详情页
+ - `/shipin/{slug}-{id}`
+2. 播放页
+ - `/shipin-play/{slug}-{id}-{line}-{episode}`
+3. 分类页
+ - `/shipinfenlei-{parent}/{category}-{year}-{area}-{order}/{lang}-page{page}`
+
+### 当前蜘蛛命中 family
+
+已看到的典型命中:
+
+1. 详情页旧 family
+ - `/voddetail/...`
+2. 播放页旧 family
+ - `/vodplay/...`
+3. 分类页旧 family
+ - `/videotype/1-dian-ying`
+
+### 结论
+
+对 `yagyjt.com` 来说:
+
+- `voddetail`
+- `vodplay`
+- `videotype`
+
+都不是当前配置的主 family。
+
+因此这里的 `301` 更接近:
+
+- 历史收录仍在消费旧路由
+- 当前站点在把旧 family 导向现行规范 family
+
+这类问题的目标是:
+
+- 保持 301 稳定
+- 减少旧 family 继续消耗百度抓取预算
+
+---
+
+## 二、`ningxiaowei.com`
+
+### 站点配置
+
+- 域名:`ningxiaowei.com`
+- 模板:`t_id = 1003`
+- 视图:`videoBoKu`
+
+当前 `t_cfg` 配置:
+
+- `VIDEO_INFO_URL = sfg_id 1049 = 模板4`
+- `VIDEO_PLAY_URL = sfg_id 1057 = 模板4`
+- `VIDEO_CATEGORY_URL = sfg_id 1041 = 模板4`
+
+### 当前规范 family
+
+1. 详情页
+ - `/video-info/{slug}-{id}`
+2. 播放页
+ - `/video-play/{slug}-{id}-{line}-{episode}`
+3. 分类页
+ - `/videotype-{parent}/{category}-{year}-{area}-{order}/{lang}-page{page}`
+
+### 当前蜘蛛命中 family
+
+已看到的典型命中:
+
+1. 详情页
+ - `/video-info/...`
+
+并且状态同时出现:
+
+- `301`
+- `200`
+
+### 结论
+
+对 `ningxiaowei.com` 来说:
+
+- `/video-info/...`
+
+本身就是当前配置的规范详情 family。
+
+所以这里不能简单解读成:
+
+- “百度还在抓旧详情页”
+
+更合理的解释应优先是:
+
+1. `www / 裸域` host 归一
+2. `http / https` 归一
+3. 单路径多跳
+
+这类问题的目标是:
+
+- 压缩跳转链
+- 保证规范详情 URL 唯一且稳定
+
+---
+
+## 三、主 Codex 不要混淆的判断
+
+### `yagyjt.com`
+
+可以判断为:
+
+- 旧 family 仍在被百度访问
+
+### `ningxiaowei.com`
+
+不要再判断为:
+
+- `/video-info` 是旧 family
+
+更准确的说法应该是:
+
+- `/video-info` 就是当前规范详情 family
+- 现在的问题是 host / scheme / 跳转链层面的规范化
+
+---
+
+## 四、一句话结论
+
+> `yagyjt.com` 的问题是“百度还在消费旧 family”,而 `ningxiaowei.com` 的问题是“当前规范 family 已被百度深抓,但跳转链还不够干净”,这两类问题不能混着处理。
diff --git a/docs/old-tmp-seo/33-老模板样板站Day1执行单-2026-04-17.md b/docs/old-tmp-seo/33-老模板样板站Day1执行单-2026-04-17.md
new file mode 100644
index 0000000..d9dddaf
--- /dev/null
+++ b/docs/old-tmp-seo/33-老模板样板站Day1执行单-2026-04-17.md
@@ -0,0 +1,134 @@
+# 1302-SEONexus 老模板样板站 Day1 执行单 - 2026-04-17
+
+## 目的
+
+这份文档只保留主 Codex 当天最该执行的动作。
+
+它不再重复长篇背景,而是把老模板当前最值得推进的两类工作,压缩成 Day1 可直接落地的顺序。
+
+适用范围:
+
+- 只服务老模板 `1001-1005`
+- 不涉及 `videoGpt1`
+- 只围绕当前两个样板站:
+ - `yagyjt.com`
+ - `www.ningxiaowei.com`
+
+---
+
+## 一、Day1 总目标
+
+当天目标不是“7 天内所有排名问题一次解决”,而是先把这两个样板站的当前最大阻力拆清楚:
+
+1. `yagyjt.com`
+ - 先拆入口层异常
+ - 再盯旧 family 消耗
+2. `www.ningxiaowei.com`
+ - 先拆规范详情 family 的跳转链
+ - 不要误判成旧 family 问题
+
+---
+
+## 二、执行顺序
+
+### 1. 先看 `yagyjt.com`
+
+当前已知状态:
+
+- 已有百度深抓
+- `detail = 12`
+- `play = 4`
+- `robots = 3`
+- `sitemap = 2`
+- `category = 1`
+- 但同时存在:
+ - `444 = 7`
+ - `403 = 1`
+
+Day1 要做的不是先调页面文案,而是先判断入口层为什么还在掉包。
+
+当天重点检查:
+
+1. `/robots.txt`
+2. `/sitemap_index.xml`
+3. `/`
+4. `/videotype/1-dian-ying`
+
+当天目标:
+
+- 搞清楚这些异常是前端入口层问题,还是应用输出问题
+- 不要只因为深页能抓,就忽略入口层异常
+
+### 2. 再看 `yagyjt.com` 的旧 family
+
+当前已知百度仍在命中:
+
+1. `/voddetail/...`
+2. `/vodplay/...`
+3. `/videotype/...`
+
+但对这个域名来说,当前规范 family 其实是:
+
+1. `/shipin/...`
+2. `/shipin-play/...`
+3. `/shipinfenlei-...`
+
+所以 Day1 的重点判断是:
+
+- 旧 family 是否始终稳定跳到唯一规范 URL
+- 有没有多跳
+- 有没有同类 URL 分流到多个终点
+
+目标:
+
+- 保持旧 family 301 稳定
+- 减少百度继续在旧 family 上浪费抓取预算
+
+### 3. 最后看 `www.ningxiaowei.com`
+
+当前已知状态:
+
+- 百度已经深抓 `/video-info/...`
+- 这是当前规范详情 family
+- 状态是:
+ - `200 = 4`
+ - `301 = 4`
+
+所以 Day1 不要把它当成“旧详情路由残留站”。
+
+当天重点检查:
+
+1. `/video-info/...` 是否有 `http -> https`
+2. `/video-info/...` 是否有 `www -> 裸域` 或反向归一
+3. 是否存在同一路径重复跳转
+
+当天目标:
+
+- 把详情页最终落点压缩到唯一规范 URL
+- 让百度更少消耗在 host / scheme 归一链上
+
+---
+
+## 三、当天不要做的事
+
+1. 不要把 `videoGpt1` 拉进这轮动作
+2. 不要把 `latest/spider-crawl.summary.json` 当成全天全景
+3. 不要把 `ningxiaowei.com` 的 `/video-info/...` 误判成旧 family
+4. 不要一上来就重做老模板页面骨架
+
+---
+
+## 四、当天验收口径
+
+Day1 做完后,只要能回答下面 4 条,就已经是有效推进:
+
+1. `yagyjt.com` 的 `444/403` 主因到底在入口层哪一层
+2. `yagyjt.com` 的旧 family 是否单跳且唯一
+3. `www.ningxiaowei.com` 的 `/video-info/...` 最终规范落点是什么
+4. 下一轮 24h 聚合里,`category / sitemap / 444` 有没有出现方向性改善
+
+---
+
+## 五、一句话交接
+
+> Day1 不求把老模板站群一次做完,而是先把 `yagyjt.com` 的入口层异常和旧 family 消耗拆干净,再把 `www.ningxiaowei.com` 的详情页规范跳转链压缩清楚。
diff --git a/docs/old-tmp-seo/34-老模板7天SEO跟踪板-2026-04-17.md b/docs/old-tmp-seo/34-老模板7天SEO跟踪板-2026-04-17.md
new file mode 100644
index 0000000..4a7db85
--- /dev/null
+++ b/docs/old-tmp-seo/34-老模板7天SEO跟踪板-2026-04-17.md
@@ -0,0 +1,221 @@
+# 1303-SEONexus 老模板 7 天 SEO 跟踪板 - 2026-04-17
+
+## 目的
+
+这份文档不是再讲一遍背景,而是把老模板这一轮接下来 `7` 天到底怎么看“有没有进步”固定下来。
+
+它服务的不是 GPT 模板,也不是泛站群讨论,而是:
+
+- 老模板 `1001-1005`
+- 当前样板站:
+ - `yagyjt.com`
+ - `www.ningxiaowei.com`
+- 当前主目标:
+ - 让百度入口更稳
+ - 让深页承接更干净
+ - 让分类层逐步起量
+
+---
+
+## 一、当前 Day0 基线
+
+以 `2026-04-17 20:30` 的 `24h workbench 聚合` 作为基线。
+
+### 站群总基线
+
+- 总请求:`72`
+- 域名数:`14`
+- 百度相关主量级:
+ - `baiduspider = 63`
+ - `bytespider = 9`
+- 页面类型:
+ - `home = 33`
+ - `detail = 21`
+ - `play = 4`
+ - `category = 1`
+ - `sitemap = 2`
+ - `robots = 11`
+- 状态:
+ - `200 = 34`
+ - `301 = 24`
+ - `444 = 8`
+ - `403 = 6`
+ - `500 = 0`
+
+### 样板站基线
+
+#### `yagyjt.com`
+
+- 总请求:`28`
+- 深页请求:`16`
+- 页面类型:
+ - `detail = 12`
+ - `play = 4`
+ - `home = 6`
+ - `robots = 3`
+ - `sitemap = 2`
+ - `category = 1`
+- 状态:
+ - `200 = 10`
+ - `301 = 10`
+ - `444 = 7`
+ - `403 = 1`
+
+#### `www.ningxiaowei.com`
+
+- 总请求:`8`
+- 深页请求:`8`
+- 页面类型:
+ - `detail = 8`
+- 状态:
+ - `200 = 4`
+ - `301 = 4`
+
+---
+
+## 二、7 天真正该看的指标
+
+这轮不要把“是否上首页”单独理解成一个神秘结果,而要拆成下面 4 组先行指标。
+
+### 1. 入口稳定度
+
+这组指标决定百度愿不愿意继续进来:
+
+1. `robots_requests`
+2. `sitemap_requests`
+3. 首页 `home_requests`
+4. 这些入口 URL 上的:
+ - `200`
+ - `403`
+ - `444`
+
+更好的方向是:
+
+- `robots / sitemap / 首页` 的 `200` 占比提高
+- `403 / 444` 下降
+
+### 2. 分类层起量
+
+这组指标决定站群有没有从“靠首页和旧深链硬进”变成“开始形成抓取面”。
+
+要看的就是:
+
+1. `category_requests` 是否从 `1` 往上抬
+2. 分类页里 `200` 是否出现并稳定
+3. `yagyjt.com` 这类样板站是否从入口页扩展到分类页再扩展到详情页
+
+### 3. 深页承接质量
+
+这组指标决定百度抓到深页后,是不是还在绕路。
+
+要看:
+
+1. `detail_requests`
+2. `play_requests`
+3. 深页里的:
+ - `200`
+ - `301`
+
+更好的方向是:
+
+- 深页 `200` 增加
+- 深页 `301` 占比下降
+- 不是深页请求消失,而是更少绕旧 family
+
+### 4. 样板站单点修正效果
+
+这组指标决定我们改动有没有对准问题。
+
+对 `yagyjt.com`:
+
+- 看 `/robots.txt`
+- 看 `/sitemap_index.xml`
+- 看 `/`
+- 看 `/videotype/1-dian-ying`
+- 看 `/voddetail/...`
+- 看 `/vodplay/...`
+
+对 `www.ningxiaowei.com`:
+
+- 看 `/video-info/...`
+- 看是否还存在额外 `www / 裸域` 或 `http / https` 重复跳转
+
+---
+
+## 三、什么才算“每天有进步”
+
+这轮不要求每天都看到“百度首页排名突然爆发”,而是要求每天至少看到一类明确改善。
+
+### 可接受的日进步信号
+
+1. `yagyjt.com` 的 `444` 变少
+2. `yagyjt.com` 的 `robots / sitemap / 首页 / 分类页` 出现更多 `200`
+3. `category_requests` 从 `1` 往上走
+4. 深页 `301` 开始被更多规范深页 `200` 替代
+5. `www.ningxiaowei.com` 的 `/video-info/...` 跳转链变短
+
+### 不要误判成进步的假信号
+
+1. 单个 `latest` 文件变大或变小
+2. 只有首页请求变多,但分类和深页没有改善
+3. 深页请求减少,但只是因为蜘蛛没再来
+4. 单个域名出现一次 `200`,但后面仍大量 `444/403`
+
+---
+
+## 四、Day1 到 Day7 建议观察节奏
+
+### Day1
+
+重点看:
+
+- `yagyjt.com` 入口层异常主因
+- `www.ningxiaowei.com` 详情页跳转链主因
+
+### Day2
+
+重点看:
+
+- `yagyjt.com` 的 `robots / sitemap / 首页 / 分类页` 是否出现更多 `200`
+- 旧 family 是否仍多跳
+
+### Day3
+
+重点看:
+
+- `category_requests` 是否抬升
+- 是否开始出现更多分类页 `200`
+
+### Day4-Day5
+
+重点看:
+
+- 深页 `301 -> 200` 的替代趋势
+- 样板站是否从“深页已抓”变成“入口更稳 + 深页更干净”
+
+### Day6-Day7
+
+重点看:
+
+- `yagyjt.com` 是否继续扩大分类层和深页层命中
+- `www.ningxiaowei.com` 是否基本压缩到唯一详情落点
+- 站群整体 `444/403` 是否明显低于 Day0
+
+---
+
+## 五、主 Codex 每天回报最小模板
+
+后续每天回报时,只要回答这 6 条就够:
+
+1. 今天的 `24h` 聚合总量相较 Day0 是升、平还是降
+2. `category_requests` 是多少
+3. `robots / sitemap` 的 `403/444` 是升还是降
+4. `yagyjt.com` 的入口层异常是否减少
+5. `yagyjt.com` 的旧 family 是否仍稳定单跳
+6. `www.ningxiaowei.com` 的 `/video-info/...` 是否已压缩到唯一规范落点
+
+---
+
+## 六、一句话交接
+
+> 老模板这 7 天的核心不是“盲猜排名”,而是持续把入口层稳定度、分类层起量、深页承接质量这 3 个前置信号往上推,只要这 3 条连续改善,样板站向百度首页拿量才会越来越像确定性结果。
diff --git a/docs/old-tmp-seo/35-老模板每日复盘模板-2026-04-17.md b/docs/old-tmp-seo/35-老模板每日复盘模板-2026-04-17.md
new file mode 100644
index 0000000..99ce7c2
--- /dev/null
+++ b/docs/old-tmp-seo/35-老模板每日复盘模板-2026-04-17.md
@@ -0,0 +1,167 @@
+# 1304-SEONexus 老模板每日复盘模板 - 2026-04-17
+
+## 目的
+
+这份模板专门给老模板 `1001-1005` 这条线每日复盘使用。
+
+它和 [34-老模板7天SEO跟踪板-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/34-老模板7天SEO跟踪板-2026-04-17.md) 配套:
+
+- `1303` 负责定义 7 天该看什么
+- 本文负责把“当天结果怎么回报”固定成统一格式
+
+适用范围:
+
+- 只服务老模板 SEO 主线
+- 不涉及 `videoGpt1`
+- 适合主 Codex、辅助 Codex、人工交接时直接复用
+
+---
+
+## 一、填写规则
+
+每天复盘时,尽量只写:
+
+1. 当天相对 Day0 有没有变好
+2. 哪个样板站在进步
+3. 哪个问题仍卡住
+4. 明天第一步做什么
+
+不要写成长篇过程回忆,也不要把单个 `latest` 文件变化当成核心结论。
+
+---
+
+## 二、每日复盘模板
+
+### 1. 基础信息
+
+- 复盘日期:
+- 复盘口径:
+ - 默认填:`24h workbench 聚合`
+- 当前样板站:
+ - `yagyjt.com`
+ - `www.ningxiaowei.com`
+
+### 2. 今日总判断
+
+只写一句话。
+
+示例:
+
+- 今天属于“入口层稍有改善,但分类层还没真正起量”。
+- 今天属于“深页承接更干净,但入口层仍然拖后腿”。
+
+填写:
+
+- 今日总判断:
+
+### 3. 站群总量对比 Day0
+
+- 总请求:
+- `home_requests`:
+- `category_requests`:
+- `detail_requests`:
+- `play_requests`:
+- `robots_requests`:
+- `sitemap_requests`:
+
+状态:
+
+- `200`:
+- `301`:
+- `403`:
+- `444`:
+- `500`:
+
+### 4. 样板站 1:`yagyjt.com`
+
+当天只回答这 5 条:
+
+1. 总请求是否升高:
+2. 入口层 `444/403` 是否减少:
+3. `/robots.txt` 是否更稳:
+4. `/sitemap_index.xml` / `/` / `/videotype/1-dian-ying` 是否出现更多 `200`:
+5. `/voddetail` / `/vodplay` 是否仍稳定单跳:
+
+### 5. 样板站 2:`www.ningxiaowei.com`
+
+当天只回答这 4 条:
+
+1. `/video-info/...` 是否仍有 `301 + 200`:
+2. 跳转链有没有变短:
+3. 是否已确认唯一规范落点:
+4. 当前主要卡点是什么:
+
+### 6. 今日真进步信号
+
+最多写 `3` 条。
+
+1.
+2.
+3.
+
+### 7. 今日假信号或误判风险
+
+最多写 `3` 条。
+
+1.
+2.
+3.
+
+### 8. 当前仍卡住的问题
+
+只写最关键的 `1-3` 条。
+
+1.
+2.
+3.
+
+### 9. 明天第一步
+
+只写一件事。
+
+- 明天第一步:
+
+---
+
+## 三、极简聊天汇报模板
+
+如果后续只是在对话里快速给主 Codex 或人工报进展,直接用下面这个格式:
+
+```md
+老模板每日复盘:
+
+日期:
+今日总判断:
+
+站群对比 Day0:
+- category:
+- robots:
+- sitemap:
+- detail:
+- play:
+- 403/444:
+
+yagyjt.com:
+1.
+2.
+
+www.ningxiaowei.com:
+1.
+2.
+
+今日真进步:
+1.
+2.
+
+当前卡点:
+1.
+2.
+
+明天第一步:
+```
+
+---
+
+## 四、一句话交接
+
+> 老模板这条线每天复盘时,不求写长报告,只要求按同一模板确认“入口更稳了吗、分类起来了吗、深页更干净了吗、明天先做哪一件事”。
diff --git a/docs/old-tmp-seo/36-老模板首周验收清单-2026-04-17.md b/docs/old-tmp-seo/36-老模板首周验收清单-2026-04-17.md
new file mode 100644
index 0000000..837b61a
--- /dev/null
+++ b/docs/old-tmp-seo/36-老模板首周验收清单-2026-04-17.md
@@ -0,0 +1,207 @@
+# 1305-SEONexus 老模板首周验收清单 - 2026-04-17
+
+## 目的
+
+这份文档专门解决一个问题:
+
+- 老模板这条线持续推进 `7` 天后
+- 到底怎样算“有结果”
+- 怎样算“部分有效”
+- 怎样算“还没打到点上”
+
+它和下面几份文档配套使用:
+
+- [34-老模板7天SEO跟踪板-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/34-老模板7天SEO跟踪板-2026-04-17.md)
+- [35-老模板每日复盘模板-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/35-老模板每日复盘模板-2026-04-17.md)
+- [33-老模板样板站Day1执行单-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/33-老模板样板站Day1执行单-2026-04-17.md)
+
+---
+
+## 一、首周验收不要只看“有没有首页词”
+
+这一轮的最终目标当然是:
+
+- 老模板这批域名向百度首页拿量
+
+但首周验收不能只用“首页词有没有立刻爆出来”做唯一标准。
+
+更稳的验收方式应该是分三层:
+
+1. 入口层有没有变稳
+2. 分类层有没有起量
+3. 深页承接有没有变干净
+
+如果这三层连续改善,即使首页结果还没完全放大,也应判定为:
+
+- 方向正确
+- 可以继续加码
+
+---
+
+## 二、首周验收等级
+
+### A 档:达标
+
+满足下面大部分特征,就可以判定首周达标:
+
+1. `robots / sitemap / 首页` 的 `403/444` 明显下降
+2. `category_requests` 相比 Day0 明显抬升,不再长期贴着 `0/1`
+3. `yagyjt.com` 的入口层异常明显减少
+4. `yagyjt.com` 的旧 family 仍稳定单跳,且规范深页 `200` 占比更高
+5. `www.ningxiaowei.com` 的 `/video-info/...` 跳转链明显变短,或已经稳定到唯一规范落点
+6. 站群 `500` 仍保持 `0`
+
+这类结果说明:
+
+- 老模板 SEO 主线没有跑偏
+- 后续可以继续做第二批放大动作
+
+### B 档:部分达标
+
+满足下面任意几条,但还不够完整时,判定为部分达标:
+
+1. 入口层有所改善,但分类层还没明显抬升
+2. 分类层有起色,但 `444/403` 还比较高
+3. 深页 `301 -> 200` 有改善,但样板站入口仍不稳定
+4. `www.ningxiaowei.com` 已明显变干净,但 `yagyjt.com` 入口层还没压住
+
+这类结果说明:
+
+- 方向大概率是对的
+- 但还不能急着判定“已打穿”
+- 需要继续围绕样板站做第二轮收口
+
+### C 档:未达标
+
+出现下面这些情况,就应判定首周未达标:
+
+1. `robots / sitemap / 首页` 的 `403/444` 没降,甚至更高
+2. `category_requests` 基本没有抬升
+3. `yagyjt.com` 入口层仍然主要表现为 `444/403`
+4. `yagyjt.com` 的旧 family 跳转链仍混乱或存在多跳
+5. `www.ningxiaowei.com` 的 `/video-info/...` 仍无法确认唯一规范落点
+6. 团队复盘时仍然只能靠单个 `latest` 文件做判断
+
+这类结果说明:
+
+- 这轮动作还没真正打到百度抓取主矛盾
+- 后续不能只做日报,应回到问题拆解本身
+
+---
+
+## 三、首周重点验收项
+
+### 1. 站群入口层
+
+验收问题:
+
+1. `robots_requests` 是否更稳
+2. `sitemap_requests` 是否更稳
+3. 入口层 `403/444` 是否下降
+
+达标判断:
+
+- 至少要看到入口层异常占比下降
+
+### 2. 站群分类层
+
+验收问题:
+
+1. `category_requests` 是否高于 Day0
+2. 分类页 `200` 是否开始出现并连续存在
+
+达标判断:
+
+- 不能再长期停留在“几乎没有分类抓取”
+
+### 3. 站群深页层
+
+验收问题:
+
+1. `detail_requests` 是否保持或提升
+2. `play_requests` 是否保持或提升
+3. 深页 `301` 是否被更多 `200` 替代
+
+达标判断:
+
+- 不是深页请求消失
+- 而是更少绕路地到达规范深页
+
+### 4. 样板站 `yagyjt.com`
+
+验收问题:
+
+1. `/robots.txt` 是否更稳
+2. `/sitemap_index.xml` 是否更稳
+3. `/` 与 `/videotype/1-dian-ying` 是否更稳
+4. `/voddetail/...`、`/vodplay/...` 是否仍稳定单跳
+
+达标判断:
+
+- 入口层异常下降
+- 旧 family 继续稳定收口到规范 family
+
+### 5. 样板站 `www.ningxiaowei.com`
+
+验收问题:
+
+1. `/video-info/...` 是否仍然存在重复跳转
+2. 是否已确认唯一规范详情落点
+3. `301 + 200` 是否正在向更干净的承接收敛
+
+达标判断:
+
+- 详情页规范链更短、更唯一
+
+---
+
+## 四、首周复盘时只回答这 8 条
+
+7 天后复盘时,不需要再写长文,只要回答下面 8 条:
+
+1. 站群 `403/444` 相比 Day0 是升、平还是降
+2. `category_requests` 相比 Day0 是升、平还是降
+3. 站群深页 `200` 是否增加
+4. `yagyjt.com` 的入口层异常是否明显减少
+5. `yagyjt.com` 的旧 family 是否仍稳定单跳
+6. `www.ningxiaowei.com` 的 `/video-info/...` 是否已接近唯一规范落点
+7. 这轮应判定为 `达标 / 部分达标 / 未达标`
+8. 下一轮是继续放大,还是先回头修正策略
+
+---
+
+## 五、极简首周结论模板
+
+如果后续只是在聊天里给主 Codex 或人工快速交班,直接按下面格式:
+
+```md
+老模板首周验收:
+
+结论等级:
+- 达标 / 部分达标 / 未达标
+
+核心判断:
+1.
+2.
+3.
+
+样板站结果:
+- yagyjt.com:
+- www.ningxiaowei.com:
+
+首周最大进步:
+1.
+2.
+
+首周最大卡点:
+1.
+2.
+
+下一轮建议:
+```
+
+---
+
+## 六、一句话交接
+
+> 老模板首周验收的关键,不是急着宣布“有没有首页词”,而是确认入口层是否更稳、分类层是否起量、深页承接是否更干净,只要这三条站住,后续百度首页拿量才值得继续加码。
diff --git a/docs/old-tmp-seo/37-老模板主Codex启动提示词-2026-04-17.md b/docs/old-tmp-seo/37-老模板主Codex启动提示词-2026-04-17.md
new file mode 100644
index 0000000..4902760
--- /dev/null
+++ b/docs/old-tmp-seo/37-老模板主Codex启动提示词-2026-04-17.md
@@ -0,0 +1,120 @@
+# 1306-SEONexus 老模板主 Codex 启动提示词 - 2026-04-17
+
+## 目的
+
+这份文档给“新开一个主 Codex 会话继续老模板 SEO”时直接复制使用。
+
+目标只有一个:
+
+- 不要再让新会话跑偏到 GPT 模板
+- 不要再回到泛分析
+- 直接沿着老模板 `1001-1005` 主线推进
+
+---
+
+## 一、直接复制版
+
+```md
+你这次只负责老模板 SEO 主线,不要混入 GPT 模板。
+
+先固定 5 条边界:
+
+1. 当前只看老模板 `1001-1005`
+ - `videoDadi`
+ - `videoDingZhu`
+ - `videoBoKu`
+ - `videoLaoNiu`
+ - `videoNuNu`
+2. 不要把 `videoGpt1` 拉进这轮分析、实现、验收
+3. 当前样板站只优先看:
+ - `yagyjt.com`
+ - `www.ningxiaowei.com`
+4. 当前主目标不是空谈排名,而是持续推进:
+ - 入口层稳定度
+ - 分类层起量
+ - 深页承接质量
+5. 不要把 `latest/spider-crawl.summary.json` 当成 24h 全景
+ - 判断趋势时,要以 workbench 24h 聚合视角为准
+
+请先按下面顺序阅读文档:
+
+1. `/www/wwwroot/VideoSource2/docs/old-tmp-seo/README.md`
+2. `/www/wwwroot/VideoSource2/docs/old-tmp-seo/36-老模板首周验收清单-2026-04-17.md`
+3. `/www/wwwroot/VideoSource2/docs/old-tmp-seo/35-老模板每日复盘模板-2026-04-17.md`
+4. `/www/wwwroot/VideoSource2/docs/old-tmp-seo/34-老模板7天SEO跟踪板-2026-04-17.md`
+5. `/www/wwwroot/VideoSource2/docs/old-tmp-seo/33-老模板样板站Day1执行单-2026-04-17.md`
+6. `/www/wwwroot/VideoSource2/docs/old-tmp-seo/32-老模板样板站URL-Family对照表-2026-04-17.md`
+7. `/www/wwwroot/VideoSource2/docs/old-tmp-seo/31-老模板样板站域名级SEO任务单-2026-04-17.md`
+8. `/www/wwwroot/VideoSource2/docs/old-tmp-seo/30-老模板最新蜘蛛日志实战分析-2026-04-17.md`
+9. `/www/wwwroot/VideoSource2/docs/old-tmp-seo/01-老模板第一阶段回灌执行文档.md`
+10. `/www/wwwroot/VideoSource2/docs/old-tmp-seo/1270-SEONexus-Codex多版本协作交接总文档.md`
+
+当前你的工作方式:
+
+1. 先按 `1302` 执行 Day1 重点
+2. 每天按 `1304` 复盘
+3. 7 天内按 `1303` 跟踪趋势
+4. 到首周按 `1305` 给出 `达标 / 部分达标 / 未达标`
+
+当前必须记住的判断:
+
+1. `yagyjt.com`
+ - 当前规范 family 是:
+ - `/shipin/...`
+ - `/shipin-play/...`
+ - `/shipinfenlei-...`
+ - 当前百度仍在消费旧 family:
+ - `/voddetail/...`
+ - `/vodplay/...`
+ - `/videotype/...`
+ - 它的核心问题是:
+ - 入口层 `444/403`
+ - 旧 family 预算消耗
+
+2. `www.ningxiaowei.com`
+ - 当前规范详情 family 本身就是:
+ - `/video-info/...`
+ - 不要再误判成旧 family
+ - 它的核心问题是:
+ - `www / 裸域`
+ - `http / https`
+ - 重复跳转链
+
+输出要求:
+
+1. 先给出当前主结论
+2. 再给出今天相对 Day0 的变化
+3. 再给出两个样板站各自的当前状态
+4. 最后只写“明天第一步”
+
+如果要动代码:
+
+1. 只动老模板相关文件
+2. 不要影响 `videoGpt1`
+3. 优先验证是否真的改善:
+ - 入口层
+ - 分类层
+ - 深页承接
+
+如果只做分析:
+
+1. 不要重复泛泛总结
+2. 必须落到样板站
+3. 必须落到第二天可执行动作
+```
+
+---
+
+## 二、适用场景
+
+适合下面几种接手方式:
+
+1. 新开主 Codex 会话继续老模板 SEO
+2. 跨机器继续老模板蜘蛛日志分析
+3. 需要把当前主线重新拉回老模板,不再混 GPT 模板
+
+---
+
+## 三、一句话交接
+
+> 这份启动词的核心作用,就是把新会话直接锁进“老模板 5 套 + 两个样板站 + 7 天跟踪与验收”这条主线里,不再让任务边界发散。
diff --git a/docs/old-tmp-seo/38-老模板SEO交班总览-2026-04-17.md b/docs/old-tmp-seo/38-老模板SEO交班总览-2026-04-17.md
new file mode 100644
index 0000000..ce3eb2c
--- /dev/null
+++ b/docs/old-tmp-seo/38-老模板SEO交班总览-2026-04-17.md
@@ -0,0 +1,208 @@
+# 1307-SEONexus 老模板 SEO 交班总览 - 2026-04-17
+
+## 目的
+
+这份文档是老模板 SEO 这条线的最终交班入口页。
+
+它不承担长篇分析,而是只做三件事:
+
+1. 用一页把当前主线说清楚
+2. 告诉下一位接手者先看哪些文档
+3. 告诉主 Codex 现在最该做什么,不该做什么
+
+如果后续只允许交接一份文档,优先交这份。
+
+---
+
+## 一、当前主线一句话
+
+这轮工作的真实主线是:
+
+> 只围绕老模板 `1001-1005` 做 SEO 推进,不混入 `videoGpt1`;当前先拿 `yagyjt.com` 和 `www.ningxiaowei.com` 做样板站,把入口层稳定度、分类层起量、深页承接质量这 3 条主线持续往上推。
+
+---
+
+## 二、先把边界钉死
+
+### 当前只看老模板 5 套
+
+- `1001 = videoDadi`
+- `1002 = videoDingZhu`
+- `1003 = videoBoKu`
+- `1004 = videoLaoNiu`
+- `1005 = videoNuNu`
+
+### 当前明确不混入
+
+- `1007 = videoGpt1`
+
+这点已经在前面多轮分析里反复确认过,后续新会话如果再把 GPT 模板拉进来,就属于任务跑偏。
+
+---
+
+## 三、当前阶段结论
+
+截至 `2026-04-17` 晚间,这条老模板主线已经确认了下面几件事:
+
+1. 老模板不是“百度完全没来”
+ - 当前已经有深抓样本
+2. 当前主要矛盾不是 `500`
+ - 而是 `301 / 403 / 444`
+3. 当前最该做的不是泛分析
+ - 而是盯样板站推进
+4. 当前最该盯的两个样板站是:
+ - `yagyjt.com`
+ - `www.ningxiaowei.com`
+
+---
+
+## 四、两个样板站怎么理解
+
+### `yagyjt.com`
+
+它的价值在于:
+
+- 已经有百度深抓
+- 同时入口层问题还很明显
+
+当前它的核心问题是:
+
+1. `robots / sitemap / 首页 / 分类页` 上存在 `444/403`
+2. 百度仍在消费旧 family:
+ - `/voddetail/...`
+ - `/vodplay/...`
+ - `/videotype/...`
+
+而它当前真正的规范 family 是:
+
+1. `/shipin/...`
+2. `/shipin-play/...`
+3. `/shipinfenlei-...`
+
+所以 `yagyjt.com` 的主线目标很明确:
+
+- 压入口层异常
+- 让旧 family 继续稳定单跳到规范 family
+- 观察分类层是否能继续起量
+
+### `www.ningxiaowei.com`
+
+它的价值在于:
+
+- 当前规范详情 family 已经被百度真实消费
+- 但跳转链还不够干净
+
+要特别记住:
+
+- `/video-info/...` 对它来说就是当前规范详情 family
+- 不能再误判成旧 family
+
+它的核心问题是:
+
+1. `www / 裸域`
+2. `http / https`
+3. 重复跳转链
+
+所以 `www.ningxiaowei.com` 的主线目标是:
+
+- 压缩详情页跳转链
+- 确认唯一规范落点
+
+---
+
+## 五、当前最重要的数据口径
+
+当前看趋势时,必须记住这个边界:
+
+- `latest/spider-crawl.summary.json` 只代表最近一次 push 摘要
+- 不等于最近 `24h` 全局聚合
+
+真正判断趋势时,要以:
+
+- `DomainSpiderCrawlWorkbenchHelper::buildSummary(..., windowHours=24, selectedBots=baiduspider,bytespider,sogou)`
+
+这条 `24h workbench 聚合` 视角为准。
+
+当前 Day0 基线是:
+
+- 总请求:`72`
+- `home = 33`
+- `detail = 21`
+- `play = 4`
+- `category = 1`
+- `sitemap = 2`
+- `robots = 11`
+- 状态:
+ - `200 = 34`
+ - `301 = 24`
+ - `444 = 8`
+ - `403 = 6`
+ - `500 = 0`
+
+---
+
+## 六、主 Codex 现在最该做什么
+
+按顺序:
+
+1. 先按 Day1 执行单推进
+2. 每天按固定模板复盘
+3. 用 7 天跟踪板看趋势
+4. 到首周按验收清单判定结果
+
+更具体地说:
+
+1. 先盯 `yagyjt.com` 的入口层
+2. 再盯 `yagyjt.com` 的旧 family 单跳是否稳定
+3. 再盯 `www.ningxiaowei.com` 的 `/video-info/...` 跳转链是否变短
+4. 每天都要回答:
+ - 入口更稳了吗
+ - 分类起来了吗
+ - 深页更干净了吗
+
+---
+
+## 七、主 Codex 现在不要做什么
+
+1. 不要把 GPT 模板拉回这条线
+2. 不要把单个 `latest` 文件当成全天全景
+3. 不要把 `www.ningxiaowei.com` 的 `/video-info/...` 误判成旧 family
+4. 不要只做泛泛结论,不落到样板站
+5. 不要只看“有没有首页词”,忽略前置抓取信号
+
+---
+
+## 八、推荐阅读顺序
+
+如果是新的主 Codex 会话,最稳顺序是:
+
+1. [37-老模板主Codex启动提示词-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/37-老模板主Codex启动提示词-2026-04-17.md)
+2. [36-老模板首周验收清单-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/36-老模板首周验收清单-2026-04-17.md)
+3. [35-老模板每日复盘模板-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/35-老模板每日复盘模板-2026-04-17.md)
+4. [34-老模板7天SEO跟踪板-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/34-老模板7天SEO跟踪板-2026-04-17.md)
+5. [33-老模板样板站Day1执行单-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/33-老模板样板站Day1执行单-2026-04-17.md)
+6. [32-老模板样板站URL-Family对照表-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/32-老模板样板站URL-Family对照表-2026-04-17.md)
+7. [31-老模板样板站域名级SEO任务单-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/31-老模板样板站域名级SEO任务单-2026-04-17.md)
+8. [30-老模板最新蜘蛛日志实战分析-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/30-老模板最新蜘蛛日志实战分析-2026-04-17.md)
+9. [17-老模板5套蜘蛛日志纠偏与SEO提示-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/17-老模板5套蜘蛛日志纠偏与SEO提示-2026-04-17.md)
+10. [01-老模板第一阶段回灌执行文档.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/01-老模板第一阶段回灌执行文档.md)
+11. [1270-SEONexus-Codex多版本协作交接总文档.md](/www/wwwroot/VideoSource2/docs/1270-SEONexus-Codex多版本协作交接总文档.md)
+
+---
+
+## 九、最终交班只要说这 6 条
+
+如果后续你要给主 Codex 或人工做最短交班,只要说这 6 条就够:
+
+1. 当前只做老模板 `1001-1005`,不混 GPT 模板
+2. 当前样板站是 `yagyjt.com` 和 `www.ningxiaowei.com`
+3. 当前主要矛盾不是 `500`,而是 `301 / 403 / 444`
+4. 当前趋势要看 `24h workbench 聚合`,不要只看 `latest`
+5. 每天按 `1304` 复盘,7 天按 `1303` 跟踪,首周按 `1305` 验收
+6. 新会话直接从 `1306` 启动
+
+---
+
+## 十、一句话交接
+
+> 这轮老模板 SEO 已经不是“要不要继续分析”的问题,而是“已经把边界、样板站、节奏、验收都定好了,主 Codex 只需要沿着这条线持续推进并每天看到小进步”。
diff --git a/docs/old-tmp-seo/README.md b/docs/old-tmp-seo/README.md
new file mode 100644
index 0000000..76897ba
--- /dev/null
+++ b/docs/old-tmp-seo/README.md
@@ -0,0 +1,36 @@
+# Old Tmp SEO
+
+这个目录只放老模板 SEO 这条支线的文档。
+
+当前范围已经固定:
+
+- 只看老模板 `1001-1005`
+- 不混入 `videoGpt1`
+- 当前样板站:
+ - `yagyjt.com`
+ - `www.ningxiaowei.com`
+
+如果你是第一次进这个目录,按这个动作顺序看:
+
+1. 第 1 步:先看 [38-老模板SEO交班总览-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/38-老模板SEO交班总览-2026-04-17.md)
+ 作用:先用一页搞清楚当前主线、边界、样板站和节奏。
+2. 第 2 步:再看 [37-老模板主Codex启动提示词-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/37-老模板主Codex启动提示词-2026-04-17.md)
+ 作用:如果要新开会话,直接复制这份启动词。
+3. 第 3 步:执行 [33-老模板样板站Day1执行单-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/33-老模板样板站Day1执行单-2026-04-17.md)
+ 作用:当天先做什么,直接按这里推进。
+4. 第 4 步:每天用 [35-老模板每日复盘模板-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/35-老模板每日复盘模板-2026-04-17.md)
+ 作用:统一日报和接手口径。
+5. 第 5 步:到首周用 [36-老模板首周验收清单-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/36-老模板首周验收清单-2026-04-17.md)
+ 作用:统一判定达标、部分达标还是未达标。
+
+如果你要往下深读,再按下面顺序补:
+
+1. [34-老模板7天SEO跟踪板-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/34-老模板7天SEO跟踪板-2026-04-17.md)
+2. [32-老模板样板站URL-Family对照表-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/32-老模板样板站URL-Family对照表-2026-04-17.md)
+3. [31-老模板样板站域名级SEO任务单-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/31-老模板样板站域名级SEO任务单-2026-04-17.md)
+4. [30-老模板最新蜘蛛日志实战分析-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/30-老模板最新蜘蛛日志实战分析-2026-04-17.md)
+5. [17-老模板5套蜘蛛日志纠偏与SEO提示-2026-04-17.md](/www/wwwroot/VideoSource2/docs/old-tmp-seo/17-老模板5套蜘蛛日志纠偏与SEO提示-2026-04-17.md)
+
+一句话:
+
+> 这个目录就是老模板 SEO 专属工作区,公共协作请回 `docs/` 根目录,老模板推进请从这里继续。