Featured Article

与 AI 合伙人相爱相杀 vlog 9:百度搜不到我的站

Google 能搜到了,但百度搜不到?这集我们搞定百度 SEO——从 robots.txt 到百度验证,再到 Sitemap 配额为 0 的尴尬解决方案。

2026年3月9日
5 min read
与 AI 合伙人相爱相杀 vlog 9:百度搜不到我的站

序章:谷歌 vs 百度

三月的第一个周一,公司调休在家。清晨的阳光透过百叶窗洒在书桌上,老大坐在家里的台式机前,端着刚泡好的乌龙茶,准备检查一下网站的上线效果。

昨天周日就想看看,但忙着收拾房间没腾出时间。今天调休,正好可以慢慢折腾。Google 搜索那边上周就有了结果——搜索 blueslin.com 能看到首页,这让老大心情不错。今天他突然想到,还没试过百度呢,毕竟国内用户还是用百度多。

手指在键盘上敲入 baidu.com,搜索框里输入 blueslin.com,按下回车。

结果页面加载出来——"很抱歉,没有找到与 'blueslin.com' 相关的网页"。

老大放下茶杯,笑了笑。哦对了,上周只忙活 Google Search Console 和 GA4 了,百度那边完全没碰过。搜不到才正常,搜得到才奇怪呢。

👨‍💻

巴基,Google 能搜到 blueslin.com 了,但百度搜不到。我们是不是也应该搞一下百度的 SEO?


第一章:百度 SEO 方案设计

老大端起茶杯喝了一口,身体往后靠在椅背上。书房里很安静,只有台式机风扇的嗡嗡声。

👨‍💻

先看看我们现在 SEO 配置的现状吧,哪些有了,哪些还缺?

巴基很快读完了代码库的相关文件。

🤖

现状如下:

✅ 已有配置:

Sitemap(app/sitemap.ts)- 但只包含首页和文章页

动态 Metadata(app/layout.tsx)- Google/OG/Twitter 都有

❌ 缺少配置:

robots.txt - 告诉爬虫哪些可以爬

百度站长平台验证 - 证明网站是你的

Sitemap 不完整 - 缺 /blog、/about、/projects

老大摸着下巴,想了想。robots.txt 他知道,就是给爬虫看的说明书。百度验证跟 Google Search Console 验证应该差不多。

👨‍💻

那完整方案应该是什么样的?

🤖

百度 SEO 优化完整方案:

创建 robots.txt(app/robots.ts)

允许所有爬虫抓取

单独为 Baiduspider(百度爬虫)配置规则

指定 Sitemap 位置和 host

完善 Sitemap(app/sitemap.ts)

加入 /blog(优先级 0.9)

加入 /about(优先级 0.7)

加入 /projects(优先级 0.7)

添加百度验证支持(app/layout.tsx)

通过环境变量 NEXT_PUBLIC_BAIDU_VERIFICATION_CODE 配置

类似 Google 验证的方式

后续你需要手动操作:

注册百度站长平台(https://ziyuan.baidu.com)

添加网站并获取验证代码

在 Vercel 配置环境变量

提交 Sitemap

老大点点头,方案很清晰。但他突然想到一个问题——备案。之前听人说国内网站需要备案,不然百度不给收录?

👨‍💻

对了,问个事。我们网站需要备案或者实名吗?服务器在 Vercel,域名在 Cloudflare,都在海外。

🤖

备案政策详解:

ICP 备案:仅当服务器在中国大陆时需要,当前使用 Vercel(海外)不需要。

公安备案:同上,仅国内服务器需要。

域名实名:看注册商要求,不是备案。

百度收录:不强制要求备案,未备案网站也能收录,只是可能配额少一些。

备案 vs 不备案对比:

已备案:收录快,配额充足,信任度高

未备案:收录慢,配额受限,但无需备案

建议:当前阶段维持现状,先做内容,后期可按需备案。

老大松了口气。备案太麻烦了,要等好久,还要填很多材料。现在这样挺好,先把内容做起来再说。

👨‍💻

可以,那就按这个方案来。



第二章:代码实施与第一次验证

老大靠在椅背上,看着终端屏幕。方案已经确认,现在该动手了。

👨‍💻

开始吧,按方案来。

巴基没有废话,直接开始修改文件。

第一个文件是 app/robots.ts,动态生成 robots.txt。巴基为 Baiduspider 单独配置了规则,指定了 Sitemap 位置。

第二个文件是 app/sitemap.ts,在原有基础上加入了 /blog/about/projects 三个页面,并设置了不同的优先级。

第三个文件是 app/layout.tsx,添加了百度验证 meta 标签支持,通过环境变量 NEXT_PUBLIC_BAIDU_VERIFICATION_CODE 配置。

🤖

代码修改完成。需要提交并推送代码吗? (y/n)

老大看着 Git 变更,确认没问题。

👨‍💻

需要。先看看当前分支情况,把 feature-seo 分支合并到 main。

巴基查看了 git 状态,当前在 main 分支,工作区干净。先 pull 了一下远程 main,确认是最新的,然后执行合并。

合并成功,包含以下变更:

  • app/layout.tsx - SEO 相关改进
  • app/robots.ts - 新增 robots.txt 配置
  • app/sitemap.ts - Sitemap 优化
  • 对话存档文档
  • 任务清单更新

老大点点头,合并很顺利。




老大推送代码到远程,触发 Vercel 自动部署。但没过多久,Vercel 部署日志里出现了红色错误——Type error: Object literal may only specify known properties, and 'baidu' does not exist in type 'Verification'.

👨‍💻

哦,部署报错了。TypeScript 类型错误,说 'baidu' 不存在于 Verification 类型里。

🤖

问题定位:Next.js 的 Metadata.verification 类型不支持 'baidu' 属性。

修复方案:使用 as any 类型断言绕过类型限制。

巴基快速修改了代码:

metadata.verification = {
  ...metadata.verification,
  baidu: baiduVerificationCode,
} as any;

老大看着修复,这招够直接,但有效。TypeScript 类型太严格了,有时候确实需要绕过一下。

巴基运行 npm run build 验证,构建通过。


第三章:验证失败与修复

Vercel 部署成功了,老大在浏览器里打开 https://blueslin.com/robots.txt,正常返回,包含了 Baiduspider 的单独配置。又打开 /sitemap.xml,所有页面都在里面。

接下来是百度站长平台验证。老大按照之前的计划,去百度站长平台注册账号,添加网站,获取了验证代码。

验证代码是这样的:

<meta name="baidu-site-verification" content="codeva-ZOnbRLHF8m" />

老大把 codeva-ZOnbRLHF8m 这串代码配置到 Vercel 的环境变量 NEXT_PUBLIC_BAIDU_VERIFICATION_CODE 里,重新部署。

几分钟后,部署完成。老大点击百度站长平台的「验证」按钮。

结果——验证失败。

👨‍💻

部署成功了,但是百度验证失败了。是不是我们的代码有问题?我看百度要求的标签名是 baidu-site-verification,我们生成的对吗?

巴基快速检查了网页源码。

🤖

问题诊断:Next.js Metadata API 的 metadata.verification.baidu 可能不会生成正确的标签名 baidu-site-verification。

让我看看实际生成的 HTML 是什么样的。

老大查看网页源码,发现生成的 meta 标签名不对,不是 baidu-site-verification

🤖

问题确认了。Next.js 的 metadata.verification 只支持特定的搜索引擎(google、yandex 等),不支持百度。

修复方案:改用 metadata.other 直接指定完整的 meta 标签名:

巴基修改了代码:

// 修复前
metadata.verification = {
  baidu: baiduVerificationCode,
};

// 修复后
metadata.other = {
  "baidu-site-verification": baiduVerificationCode,
};
👨‍💻

这样更直接,好。提交吧。

巴基提交修复,commit 信息是:fix: 修复百度验证 meta 标签生成方式



老大重新推送代码,Vercel 再次部署。几分钟后,验证通过。


第四章:Sitemap 配额为 0 的尴尬

百度验证通过了,老大松了口气。接下来该提交 Sitemap 了。

老大打开百度站长平台,找到「Sitemap 提交」的入口。输入 https://blueslin.com/sitemap.xml,准备提交——

等等,页面上有一行小字:"提交上限:0"

老大揉了揉眼睛,再看一遍,确实是 0。下面还有一行提示:"填写站点的主体备案号,可以提高每日提交上限。"

👨‍💻

还没提交过 Sitemap 呢,提交次数为 0。这是什么意思?是不是因为没备案,对非备案网站做了限制?

巴基查看了百度站长平台的文档。

🤖

确认了:未备案网站确实有配额限制。

备案 vs 不备案对比:

已备案:Sitemap 配额充足,收录快,信任度高

未备案:配额受限,收录慢,但无需备案

没有 Sitemap 的影响:

百度通过手动提交也能发现页面

影响不大,只是需要手动操作

建议:先用手动的「快速收录」提交,保持内容更新,后期再看是否需要备案。

老大点点头,虽然配额为 0 有点尴尬,但手动提交也能用。反正博客更新频率不高,手动提交完全够用。

👨‍💻

那快速收录怎么用?

🤖

快速收录使用步骤:

进入百度站长平台 → 搜索服务 → 快速收录

首次提交 4 个核心页面:首页、/blog、/about、/projects

后续每次发布新文章时,提交新链接即可

注意:同一网址只需提交一次,百度会记住并定期重新抓取。不需要每天重复提交。

老大按照步骤,手动提交了 4 个核心页面。虽然不如自动提交方便,但至少能用。

👨‍💻

对了,它的 API 提交模式我们有必要去研究吗?

🤖

目前没必要研究,理由:

手动提交足够用(博客更新频率不高)

未备案网站 API 配额也少

增加运维复杂度

后期有需要可以再研究

简单策略:目前用快速收录手动提交,保持更新即可。

老大觉得有道理。API 提交太折腾了,现在这样挺好。



尾声:手动收录也能用

老大靠在椅背上,看着百度站长平台的页面。快速收录的提交记录里,4 个核心页面已经提交成功了。

虽然 Sitemap 配额为 0 有点美中不足,但手动收录也能用。反正博客更新频率不高,每次发布新文章时手动提交一下,完全没问题。

窗外的阳光已经移到了书桌的另一边,不知不觉半天过去了。老大站起身,伸了个懒腰,骨头发出清脆的响声。今天调休在家,时间充裕,可以慢慢折腾。

百度 SEO 搞定了,但网站还有很多可以优化的地方。比如 Vlog 文章的对话气泡样式,手机上看内容密度太低了;还有内容分类,现在文章都堆在一起,没有分类导航;还有首页,也可以再优化一下,把 Vlog 系列突出展示……

👨‍💻

百度 SEO 这边算是搞定了吧?

🤖

确认完成状态:

✅ 已完成:

创建 app/robots.ts 动态生成 robots.txt

完善 Sitemap 包含所有页面

添加百度站长平台验证支持

百度验证通过

4 个核心页面已手动提交

📋 后续维护:

每次发布新文章时,用快速收录手动提交新链接

定期检查收录情况(1-4 周)

后期可按需考虑备案

老大点点头,百度 SEO 这部分搞定了。他端起茶杯,茶已经凉了一些,但还能喝。

👨‍💻

百度 SEO 搞定了。接下来还有什么优化建议?

🤖

查看待办清单,还有以下优化项:

Vlog 对话气泡样式优化(移动端阅读体验)

内容分类与检索功能

面包屑导航

首页升级(Vlog 专区、个人简介)

建议从 Vlog 对话气泡样式优化 开始,毕竟这是你的核心内容产品,移动端阅读体验很重要。

老大想了想,确实。Vlog 系列是核心内容,对话气泡在手机上看太松垮了,内容密度太低,阅读体验不好。而且今天调休在家,时间充裕,可以好好搞一下。

👨‍💻

可以,那就先搞这个。不过先歇会儿,弄点吃的,下午再继续。

老大关上电脑,准备去厨房做点吃的。百度 SEO 搞定了,下午继续优化对话气泡。

(未完待续)


💡 本集技术 Tips(老兵防坑指南)

  1. 百度 SEO 避坑:未备案网站 Sitemap 配额受限,改用「快速收录」手动提交,同一网址只需提交一次
  2. Next.js Metadata 验证:百度验证要用 metadata.other["baidu-site-verification"],不是 metadata.verification.baidu
  3. TypeScript 类型绕过:遇到类型限制时用 as any 断言,简单直接有效
  4. robots.txt 最佳实践:单独为 Baiduspider 配置规则,明确指定 Sitemap 位置和 host
  5. 备案 vs 不备案:海外服务器无需 ICP 备案,百度也能收录,只是配额少一些;当前阶段建议先做内容,后期按需备案

📎 关联阅读