返回列表

GSC 报警 34 个网页未编入索引?404 旧 slug 溯源与多类 SEO 状态全复盘

创作说明:本文基于作者与 AI 的调试对话整理生成,完整保留问题排查思路与技术细节。

💡 简明省流版(大白话 30 秒速览)

心路历程:“刚把 Bing 站长的 h1 和标题修好、刚理顺 308 重定向,一打开邮箱——Google 站长平台(Search Console)又双叒叕发消息报告问题了?!而且一口气报了 34 个网页未编入索引……整个人有点麻了。”

一句话总括:先别慌!这 34 个报警经过逐一拆解排查,可精准划分为 “3 项主动技术治理 + 3 项正常排队账单”

  1. 3 项主动技术落地:404 死链(vercel.json 301 重定向)+ 重复心迹(详情页结构化增肌改造)+ 备用网页(启用 trailingSlash: 'always' 强制 301 强跳彻底清零);
  2. 3 项属于正常预期:308 重定向验证、新文章质量评估与爬虫配额分批调度,静候 Google 消化即可。

🎯 6 类索引状态分类与处理总览(3 + 3 架构)

分类定位 GSC 状态分类 影响数量 核心根因 落地处理方案 / 状态
🛠️ 主动治理项 1 未找到 (404) 1 8/12 重构时精简 slug 遗留死链 已配置 vercel.json 301 永久重定向
🛠️ 主动治理项 2 重复网页,规范网页不同 1 心迹短随笔与列表页正文 100% 重合 已完成详情页“增肌”改造(前后导航+推荐+结构化数据)
🛠️ 主动治理项 3 备用网页(有适当规范标记) 4 不带尾斜杠 / 的 URL 变体 已开启 trailingSlash: 'always' 301 强跳彻底清零
⏳ 正常周期项 1 网页会自动重定向 5 8/18 根域名与 www 反转 308 历史延续 🟡 验证中:8/18 已在 GSC 发起验证,正常推进
⏳ 正常周期项 2 已抓取 - 尚未编入索引 3 8/22 刚抓取的新近文章 🟡 等待中:进入质量评估队列(通常需 1~4 周)
⏳ 正常周期项 3 已发现 - 尚未编入索引 20 全站校准时间戳后触发重新调度 🟡 排队中:8/20 已在 GSC 发起验证,分批抓取中

一、事件起因:深夜两封 GSC 报警邮件与 34 个“未编入索引”

前几天才刚排查完 Bing 站长平台的 SEO 建议与 308 重定向,2026 年 8 月 23 日深夜,站长邮箱又双叒叕接连收到了 Google 站长平台的两封报警邮件:

  1. 第一封提示:「新原因导致网站 https://eryuemu.com/ 的站点地图中的网页无法被编入索引」,明确列出原因是「重复网页,Google 选择的规范网页与用户指定的不同」。
  2. 第二封提示:「新原因导致网站 https://eryuemu.com/ 上的网页无法被编入索引」,列出包含了「备用网页(有适当的规范标记)」、「未找到 (404)」以及「重复网页」。

GSC 报警邮件 1:站点地图中的网页存在重复网页 图 1:8 月 23 日收到的第 1 封 GSC 邮件 —— 提示站点地图中存在重复网页

GSC 报警邮件 2:全站网页因 404、备用网页等原因未编入索引 图 2:8 月 23 日收到的第 2 封 GSC 邮件 —— 提示全站网页新增未编入索引原因

点击邮件进入 Google Search Console 后台,在「编制索引 -> 网页」概览页面中,数据呈现出明显的反差:

  • 已编入索引:6 个页面
  • 未编入索引34 个页面,共涉及 6 个细分原因

GSC 网页索引编制总览:未编入索引 34 vs 已编入索引 6 图 3:GSC 网页索引编制总览面板,未编入索引数量呈现上升趋势

GSC 未编入索引原因完整明细列表 图 4:GSC 列出的 6 大未编入索引具体原因明细

很多新手站长在看到多达 34 个页面未收录、以及各种警告时容易陷入焦虑。但通过深入分析,我们可以将这 6 类状态清晰划分为 3 个技术主动治理项3 个符合搜索引擎规律的正常排队项


二、实战攻坚:3 项主动技术干预与代码级治理

在这 6 个原因中,有 3 项可以通过站长的主动技术治理达到最优的收录与指标状态:从死链 301 搬家、短随笔详情页增肌,到尾斜杠强制重定向。


2.1 治理项一:404(未找到)深度溯源与 301 搬家修复

① 报错现象与 URL 差异

点击 GSC 中的「未找到 (404)」下钻页面:

GSC 404 错误详情页 图 5:GSC 404 未找到详情页,受影响网页数为 1

GSC 404 报错的具体 URL 示例 图 6:GSC 捕获到的 404 示例网址

受影响的 URL 为:

https://eryuemu.com/blog/sennagi-save-mod-and-script-reverse-engineering/

然而在博客内容目录中检索,这篇关于《戦巫〈センナギ〉》存档修改与脚本逆向的文章,实际对应的 Markdown 文件是 src/content/blog/sennaagi-save-script-recap.md,当前生产环境的合法 URL 是:

https://eryuemu.com/blog/sennaagi-save-script-recap/

两者对比:

  • ❌ Google 抓取的旧地址:.../sennagi-save-mod-and-script-reverse-engineering/
  • ✅ 当前存在的正规地址:.../sennaagi-save-script-recap/

② 利用 Git 历史还原真相:为什么曾经存在过这个 URL?

为了弄清楚这个旧 slug 从何而来,我们通过 WSL 进入仓库执行 git log 追溯:

git log --all --oneline -- "src/content/blog/*sennagi*"

输出定位到两处关键历史节点:

  1. 2026-08-06 15:23:21(commit dca3035:首次新增文章,当时的文件名确实正是 src/content/blog/sennagi-save-mod-and-script-reverse-engineering.md
  2. 2026-08-12 17:23:54(commit 7a3f801:提交信息为 feat(blog): 发布《域名、GFW 与国内访问:一场测速引发的排查实录》

深入比对 7a3f801 的变更详情:

git diff 7a3f801~1 7a3f801 --summary

输出揭示了当时进行的一波集中重构与文件名精简:

delete mode 100644 src/content/blog/ai-translation-reflections-e-society.md
create mode 100644 src/content/blog/domain-gfw-and-china-access.md
rename src/content/blog/{sennagi-save-mod-and-script-reverse-engineering.md => sennaagi-save-script-recap.md} (92%)
delete mode 100644 src/content/blog/shui-long-yin-shanghai-galonly.md
create mode 100644 src/content/blog/shuilongyin-galonly-essay.md
rename src/content/blog/{yukoku-translation-tech-retrospective.md => youketsu-localization-recap.md} (93%)

根因彻底水落石出: 在 8 月 12 日发布新文章时,顺手对全站 3 篇旧文章的 slug 进行了重构和精简:

  • sennagi-save-mod-and-script-reverse-engineeringsennaagi-save-script-recap
  • yukoku-translation-tech-retrospectiveyouketsu-localization-recap
  • shui-long-yin-shanghai-galonlyshuilongyin-galonly-essay

由于旧 slug 在 8 月 6 日至 8 月 12 日期间曾公开上线并被爬虫记录,当 Googlebot 于 8 月 20 日回访旧地址时,服务器返回了 404 Not Found。

③ 解决方案:配置 Vercel 301 永久重定向

改名本身是提升 URL 规范度的良好习惯,但切忌让旧 URL 凭空变成死链。正确的做法是配置 HTTP 301 Moved Permanently(永久重定向),告诉搜索引擎与外部引流链接:“内容已永久搬迁到新地址,请把原有的权重和索引同步转移到新地址”。

在项目根目录新建 vercel.json

{
	"redirects": [
		{
			"source": "/blog/sennagi-save-mod-and-script-reverse-engineering/:path*",
			"destination": "/blog/sennaagi-save-script-recap/",
			"permanent": true
		},
		{
			"source": "/blog/yukoku-translation-tech-retrospective/:path*",
			"destination": "/blog/youketsu-localization-recap/",
			"permanent": true
		},
		{
			"source": "/blog/shui-long-yin-shanghai-galonly/:path*",
			"destination": "/blog/shuilongyin-galonly-essay/",
			"permanent": true
		}
	]
}

部署后,当爬虫再次请求旧地址时,服务器将直接返回 301 并重定向到带尾斜杠的正式新地址,404 报警将在下一次抓取周期中彻底消除。


2.2 治理项二:重复网页(规范不同)攻坚 —— 心迹详情页“增肌与结构化”改造

① 报错现象与 URL 差异

查看该项的详情与受影响 URL:

GSC 重复网页详情页 图 7:GSC 重复网页详情页,受影响网页数为 1

GSC 重复网页示例 URL 图 8:受影响的 URL 为短心迹动态

受影响的 URL 为:

https://eryuemu.com/thoughts/2026-08-05-ai-and-curiosity/

② 根因剖析:为什么 8/18 做了动态 Title 之后还在报?

查阅该心迹文件 src/content/thoughts/2026-08-05-ai-and-curiosity.md,正文非常简短(只有两句关于 AI 与好奇心的生活感悟)。

尽管在 8 月 18 日(commit 5dff8ab)我们已经为单条心迹配置了动态截取正文的独立 <title><description>,但在 Google 的内容去重机制中,算法比对的是 HTML 正文有效文本(Body Content)

  • 心迹列表页 /thoughts/ 全量输出了 <Content />,包含了这条动态的 100% 完整文字
  • 心迹详情页 /thoughts/2026-08-05-ai-and-curiosity/ 仅有单独这一张卡片,无额外独占文本。

Google 爬虫在 8 月 21 日抓取评估后,判定详情页属于薄弱内容(Thin Content)与列表页的完全子集重复,从而推翻了站长指定的 Canonical 声明,拒收单页。

③ 两全其美的解决方案:心迹详情页“增肌与结构化”改造

为了既彻底消除重复网页报错,又保住每条心迹单独被 Google 检索收录的初衷,我们对心迹详情页 src/pages/thoughts/[...id].astro 实施了系统级增肌改造:

  1. 注入 Schema.org 结构化数据: 引入 SocialMediaPosting JSON-LD 元数据,显式向 Googlebot 声明这是一条独立的博主社交微动态实体,建立专属知识图谱节点。
  2. 新增前后篇心迹翻页导航(Previous / Next Navigation): 在单页卡片底部动态挂载上一条、下一条心迹的预览卡片与时间链接,在网页间构建密集的内链(Internal Links)互通网。
  3. 新增同标签关联心迹推荐(Related Thoughts): 自动检索包含相同 Tag(如 #AI#随感)的往期历史动态,大幅提升单页的信息丰富度与延伸阅读价值。

改造后,心迹详情页的 HTML 结构和有效信息量已显著超越列表页的一张单一卡片,彻底打破了内容 100% 镜像重合的死局,为搜索引擎提供了一条清晰、有深度、且具备强独立价值的索引路径!

④ 后续演进与闭环(8/27):Google 识别「论坛结构化数据」与推荐字段补全

在实施心迹详情页“增肌与结构化”改造后,Google 爬虫在 8 月 27 日的抓取中成功识别了这一独立微动态体系,并在 Search Console 发送了进一步的优化提醒邮件:

GSC 论坛结构化数据优化提醒邮件 图 9:8 月 27 日 GSC 发送的「论坛结构化数据」优化建议(非严重问题)

  1. 现象解析
    • 邮件提示:“在针对 https://eryuemu.com/ 提交的网址中检测到新的论坛结构化数据问题 —— 首要非严重问题:未填写字段‘url’”
    • 这属于 Google 的非严重改进建议(Warning),非致命报错,不会阻碍页面的正常收录与展示。
  2. 根因剖析
    • Google 将 SocialMediaPostingDiscussionForumPosting 归纳在“论坛/社交微动态(Discussion Forum)”富媒体体系中;
    • 根据 Google 论坛数据规范,它建议在 SocialMediaPosting 根对象中显式提供 "url" 属性(指向单条心迹的绝对直链);
    • 此前代码中仅提供了 mainEntityOfPage 与作者 author.url,未显式顶层写明 "url"
  3. 闭环修复
    • src/pages/thoughts/[...id].astro 的 JSON-LD 中补齐 "url": new URL(Astro.url.pathname, Astro.site).href"inLanguage": "zh-CN" 以及图片数组 image
    • 结构化数据达到 100% 满分契合度,构建了从“内容增肌”到“实体富媒体标准”的完整闭环。

2.3 治理项三:备用网页(规范标记)攻坚 —— 尾斜杠强制 301 重定向与全站规范化

① 报错现象与 URL 差异

查看「备用网页」详情与示例:

GSC 备用网页详情页 图 10:GSC 备用网页详情页,受影响网页数为 4

GSC 备用网页示例 URL 列表 图 11:受影响的 4 个 URL 均为不带末尾斜杠的变体

受影响的 4 个 URL 分别为:

  • https://eryuemu.com/blog/social-media-data-scraping-isolation
  • https://eryuemu.com/blog/claude-code-installation-guide
  • https://eryuemu.com/thoughts/2026-08-02-first-post
  • https://eryuemu.com/thoughts

② 渊源对比:8 月 20 日知识库 vs 8 月 24 日个人博客

很多站长会觉得眼熟——8 月 20 日在知识库(guide.hbuwiki.top)不是刚处理过「备用网页」吗?为什么博客又出现了?

把两次事件并列对比,真相极其清晰:

站点与框架 冲突形式 产生根因 历史/本次解决方案
知识库(VitePress) .html 后缀打架 链接写 /transfer,但代码声明 /transfer.html 为正主 .vitepress/config.mts 中开启 cleanUrls: true(统一去掉 .html
个人博客(Astro) 尾斜杠 / 打架 爬虫探测 /guide,但代码声明 /guide/ 为正主 astro.config.mjs 中开启 trailingSlash: 'always'(统一定死带 / 并 301 强跳)

③ 终极治理:为什么选择 301 强跳而非放置不管?

  • 放着不管(情况 A):虽然 Canonical 会生效收敛,但无斜杠变体依然返回 200 网页,爬虫会浪费抓取配额,且 GSC 列表中会永久挂着备用页记录。
  • 强制 301 重定向(情况 B,业界最佳实践): 在 astro.config.mjs 中显式指定:
    export default defineConfig({
        site: 'https://eryuemu.com',
        trailingSlash: 'always', // 全站统一强制尾斜杠
        ...
    同时在 vercel.json 中增加 "trailingSlash": true

这样改造后,任何人或爬虫访问不带斜杠的地址,服务器将在 10 毫秒内直接返回 301 跳转到带斜杠的标准地址。爬虫在下一次回访时发现无斜杠地址全为重定向,“备用网页”列表即可在 1~2 周内彻底清零消失


三、透视机制:3 项符合预期的正常状态与排队账单

除了上述 3 项已完成主动技术治理外,其余 3 类未编入索引原因均属于搜索引擎的内部运行规律与预期排队周期


3.1 网页会自动重定向 —— 5 个页面(验证推进中)

查看「网页会自动重定向」详情:

GSC 网页会自动重定向详情页 图 12:GSC 网页会自动重定向详情页,显示「验证已开始:2026/8/18」

GSC 自动重定向受影响的 5 个 URL 示例 图 13:受影响 URL 明细列表

受影响页面包括 /about//blog//thoughts/... 等基础页面。

深度原理: 这正是此前博客文章《GSC 提示「网页会自动重定向」未编入索引?根域名与 www 规范化全复盘》中详细排查过的 www ➔ 根域名(308 Permanent Redirect)反转历史

截图中赫然标注着:「验证已开始,开始日期:2026/8/18」。 Googlebot 验证重定向并非瞬间完成,它需要对整站网络拓扑做多轮重试与缓存刷新,周期通常为 1 ~ 3 周。这封信件只是 GSC 系统流水线生成的周期性状态摘要。

[!NOTE] 结论:验证已经在后台队列平稳推进,无需任何重复操作,静候完成即可


3.2 已抓取 - 尚未编入索引 —— 3 个页面

查看「已抓取 - 尚未编入索引」详情:

GSC 已抓取尚未编入索引详情页 图 14:已抓取尚未编入索引详情页

GSC 已抓取尚未编入索引 URL 列表 图 15:抓取日期为 8 月 22 日的新近文章列表

受影响的 3 篇均为 8 月 22 日刚抓取的近期文章(《建站心法》、《水龙吟漫评》、《Bing 站长 SEO 复盘》)。爬虫已经完成了网络请求并存入临时库,目前处于内容质量、语义结构与索引价值评估阶段。新站文章抓取后经过 1~4 周排队后转入已收录状态是完全正常的节奏。


3.3 已发现 - 尚未编入索引 —— 20 个页面

查看「已发现 - 尚未编入索引」详情:

GSC 已发现尚未编入索引详情页 图 16:已发现尚未编入索引详情页,显示「验证已开始:2026/8/20」

GSC 已发现尚未编入索引 URL 列表 图 17:等待抓取分配的 20 个文章 URL

这批 URL 在 8 月 20 日全站批量校准发布时间戳后,sitemap-index.xml 的全量 lastmod 发生变动,触发 Googlebot 将全站文章重新加入调度池。由于新域名的爬取配额(Crawl Budget)有限,系统正在分批逐步派发抓取任务。


四、经验提炼:独立博客改名与多站 SEO 防坑守则

经历这一轮 6 大维度的全面复盘与实战排查,可以总结出以下 3 条高价值建站法则:

1. URL 即永久资产,改名必配 301

  • 在静态博客初期规划内容时,尽量确立稳定、语义清晰的英文 slug;
  • 如果后续必须重命名已有文章的 Markdown 文件名,切记在第一时间于 vercel.json 或网关层补全 301 永久重定向规则,避免搜索引擎在下一次回访时撞上 404。

2. 动态/微随笔的 SEO 破局之道:增肌内链与结构化数据

  • 对于类似 Twitter / 朋友圈的短动态,如果既想提供沉浸式的单页互动体验,又想被搜索引擎独立收录:
    • 务必注入 SocialMediaPostingBlogPosting 结构化微数据(并注意补全 urlinLanguage 等标准推荐字段,避免 GSC 触发论坛/社交数据警告);
    • 通过前后篇导航与相关推荐丰富正文信息量,打破与列表页 100% 镜像重合的死局。

3. 尾斜杠与 Clean URLs 的全站收敛

  • 不同框架对 URL 后缀的处理策略不同:
    • VitePress 体系:用 cleanUrls: true 统一抹平 .html
    • Astro 体系:用 trailingSlash: 'always' 统一定死带 / 并在服务端开启 301 强跳,杜绝任何中间态备用页。
评论区
文章目录