Hexo博客百度收录优化:sitemap与主动推送全攻略
1. 先搞清楚百度到底是怎么收录你的 Hexo 博客的1.1 搜索引擎收录的两条路径很多朋友把 Hexo 博客部署上线之后第一件事就是去百度搜自己域名的关键字结果翻了好几页都看不到自己的文章心里凉了半截。其实这不代表你的内容有问题而是你根本没有给百度“指路”——搜索引擎要收录一个网站无外乎两条路径一条是蜘蛛主动顺着链接爬过来一条是站长主动把网址交上去。路径一叫“被动抓取”。百度蜘蛛通过外链、导航站、友链等入口找到你的站点然后顺着页面里的链接一层层翻下去。路径二叫“主动提交”也就是把你想让搜索引擎收录的 URL 列表直接提交给百度。对于刚上线、外链几乎为零的个人博客来说被动抓取可能要等很久而主动提交几乎是立竿见影的。这正是“百度主动推送”存在的意义。它和 sitemap站点地图不同sitemap 是放在你网站上的一个清单文件方便蜘蛛来了之后按图索骥主动推送则是把最新发布的文章 URL 直接“塞到”百度的接收接口里告诉它“我有新内容了快来抓”。两者配合才是完整的收录方案这也是我当初搭博客踩了一圈坑之后总结出来的结论。1.2 sitemap 在中间起什么作用你可以把 sitemap 理解成一份餐厅菜单。蜘蛛进到你的网站餐厅之后顺着菜单点菜想吃什么就直接翻到哪一页不用满屋子乱跑。如果连菜单都没有蜘蛛只能一间间包厢推门进去找效率低、体力消耗大收录速度自然慢。Hexo 默认不会生成 sitemap需要装插件。常见的做法是生成两个文件一个是通用格式的sitemap.xml给 Google、Bing 这些国外搜索引擎用另一个是baidusitemap.xml它是百度特有的格式字段更靠近百度对页面优先级、更新频率的解析习惯。这里有个很多人忽略的细节sitemap 里的 URL 地址必须和页面真实可访问的地址一字不差包括协议http/https、域名带不带www、结尾斜杠。我的一个学员之前把 Hexo 配置文件里的url写成http://localhost:4000就部署了生成的 sitemap 里全是 localhost 链接百度拿到这种列表自然一无所获。后面我会专门讲这个坑。1.3 为什么很多人部署后久久不收录说句实在话百度对个人新站的态度一向比较保守。域名注册时间短、没有备案、服务器在境外、页面更新频率低、外链少这些因素都会让收录周期拉长。谷歌那边可能文章发出去第二天就搜得到了百度这边一周都没动静是非常正常的现象。但“正常”不代表“没办法”。除了被动等待你能做的有三件事第一在百度搜索资源平台完成站点验证第二生成 sitemap 并提交第三每次发布文章后执行主动推送。这三件事做完百度蜘蛛大概率会在几小时到几天内来抓一次比干等强得多。2. 站点地图生成插件选型与一个容易踩的“URL 前缀”坑2.1 两个常用插件的区别与选择Hexo 社区里有两个主流插件分别是hexo-generator-sitemap和hexo-generator-baidu-sitemap。很多人以为装一个就够了实际我强烈建议两个都装。hexo-generator-sitemap生成的是标准协议格式的sitemap.xml结构简单各大搜索引擎都认识。hexo-generator-baidu-sitemap生成的是baidusitemap.xml它在标准格式基础上增加了百度能识别的标签属性比如locs这样的节点更贴合百度的抓取习惯。两个插件装好后会在public目录下各生成一个 XML 文件互不干扰。之后你再把两个地址分别提交到百度搜索资源平台的“sitemap 提交”入口以及 Google Search Console 里就齐活了。注意不要只提交 Google 能用的那个百度对baidusitemap.xml的友好度明显更高。2.2 安装配置与生成验证安装命令很简单npm install hexo-generator-sitemap --save npm install hexo-generator-baidu-sitemap --save装完之后重点检查 Hexo 根目录的_config.yml里这几个字段url: https://yourname.github.io root: /url必须填写部署后的完整域名不要带任何子路径更不要写 localhost。root一般是/如果你的博客是放在username.github.io/hexo这种子目录下的才需要改成对应路径。然后在_config.yml末尾追加sitemap: path: sitemap.xml baidusitemap: path: baidusitemap.xml保存后执行hexo clean hexo generate去public目录确认是否生成了这两个 XML 文件。我习惯再打开其中一个看看里面loc标签里的地址是否都是你的正式域名。这一步花不了两分钟但能避免部署完才发现一堆错误链接。2.3 多语言站点的 sitemap 处理我遇到过用hexo-generator-i18n或者类似多语言插件的朋友他们问我多语言站点的 sitemap 是不是要自己手动去重其实不用。上面这两个插件在生成时会把所有语言版本的文章 URL 都列出来因为每个语言版本在 Hexo 里本质上是一篇独立的 HTML 文件。但这里有一个实操要点sitemap 里的 URL 必须是能直接访问的地址。如果你的多语言文章路径是/en/xxx/、/zh/xxx/这种那没问题如果插件生成的是带?langen这种查询参数的地址建议你在主题配置里把语言切换改成路径式路由爬虫对带参数的 URL 抓取优先级很低别指望它自己乖乖去“整理”这些链接。3. 百度主动推送从申请到跑通的完整路径3.1 在百度搜索资源平台完成站点验证主动推送的第一步是先证明“这个域名是你的”。你需要去百度搜索资源平台ziyuan.baidu.com注册账号然后添加站点。添加时会让你选验证方式我用得最顺的是文件验证。文件验证的操作是平台会生成一个特定文件名的文件比如baidu_verify_xxxxx.html你把这个文件原封不动放进 Hexo 的source目录然后执行hexo g hexo d部署上去。等平台那边能通过https://你的域名/文件名访问到这个文件验证就通过了。这里有两个提醒一是文件名里的字符大小写、下划线都要保持原样部署完先自己在浏览器里访问一遍确认能打开二是不要放在source/js或source/css之类子目录里直接放source根目录下这样生成后会出现在站点根路径。有人因为多放了一层目录导致验证文件访问 404来回折腾了一下午。3.2 主动推送的三种落地方式怎么选验证通过之后进入“普通收录 — 主动推送”页面你会看到一个推送接口地址格式大致是http://data.zz.baidu.com/urls?site你的域名token一串token这个接口支持 POST 一个纯文本内容每行一个 URL。有三种落地方式方式一后台手动粘贴。适合站点刚建好、文章还不多的时候直接把 10 来个 URL 粘进去提交先测试收录效果。方式二curl 命令。适合偶尔手动补推。我在正文里贴过 curl 示例一行命令就能推一批。方式三脚本批量推送。适合把推送动作固化成自动化流程每次hexo d之后自动执行。这是我目前主力使用的方式下面详细讲。如果你只是想快速测试curl 就已经够用了curl -H Content-Type:text/plain --data-binary urls.txt \ http://data.zz.baidu.com/urls?siteyourname.github.iotoken你的token提前把要推的 URL 写进urls.txt一行一个最后一行要以换行结尾。3.3 自定义推送脚本的完整实现更多场景下我建议写一个简单的 Node.js 脚本放在 Hexo 根目录下每次生成完站点后自动扫描public目录里的所有.html文件拼成完整 URL再批量 POST 给百度。好处是以后每次写文章都不用手动去整理链接。脚本逻辑大致如下const https require(https); const http require(http); const fs require(fs); const path require(path); const site yourname.github.io; const token 这里填你的token; const publicDir path.join(__dirname, public); const urls []; function walk(dir) { const files fs.readdirSync(dir); files.forEach(file { const full path.join(dir, file); if (fs.statSync(full).isDirectory()) { walk(full); } else if (file.endsWith(.html)) { let rel path.relative(publicDir, full); rel rel.replace(/\.html$/, ); if (rel.includes(index)) { rel rel.split(index)[0]; } urls.push(https://${site}/${rel}/); } }); } walk(publicDir); const postData urls.join(\n) \n; const postUrl new URL(http://data.zz.baidu.com/urls?site${site}token${token}); const req http.request({ hostname: postUrl.hostname, path: postUrl.pathname postUrl.search, method: POST, headers: { Content-Type: text/plain, Content-Length: Buffer.byteLength(postData) } }, res { let body ; res.on(data, chunk body chunk); res.on(end, () console.log(推送结果:, body)); }); req.on(error, err console.error(推送失败:, err.message)); req.write(postData); req.end();跑一下脚本看到返回的success字段大于 0说明接口已经接收了。注意到脚本里我用了http模块因为百度这个接口是 http 协议用https模块反而会因为证书问题报错。4. 脚本推送的细节返回码、限额与定时触发4.1 推送结果怎么看status 与 remain 的含义调用推送接口后百度会返回一串 JSON最常见的三种形态是{ remain: 4999980, success: 5 }success表示这次成功接收了多少条 URLremain表示当天剩余的可提交条数。配额是每天早上重新计算的新站一般几百到几千条不等个人博客完全够用。如果推送失败返回里会有error字段。常见的情况包括error 值含义常见原因400请求格式错误token 或 site 参数写错401token 错误从平台粘贴 token 时带了空格403不是本站地址site 参数与验证域名不一致404地址不存在接口路径拼错少写了/urls另外还有两个字段需要留意not_same_site表示这批 URL 里有不属于当前站点域名的地址接口默认直接忽略not_valid表示 URL 格式不合法。看到这两个字段不为 0第一件事就是去检查脚本拼接 URL 的逻辑十有八九是文章路径里带了index.html没有处理掉或者 URL 写成了双斜杠。4.2 我遇到的推送失败场景与排查过程第一次做主动推送时我的返回结果里success一直是 0error给了 403。排查了半天发现问题出在site参数上我在百度平台验证的是带www的域名推送接口里填的却是没有www的裸域名。后台提示“非本站地址”但实际上只要你验证的是主域接口优先认主域如果验证的是带www的子域就必须带www。不同账号状态容易混淆务必去平台“站点设置”里核对一遍再复制。还有一次推送后百度返回了not_valid原因是我脚本拼接路径时把index.html处理后没有补上结尾的/生成了类似https://site.com/abouthtml这种畸形地址。这里有一个原则Hexo 生成文章默认是目录形式最终 URL 是https://site.com/xxx/所以脚本里要把.html去掉之后补一个斜杠结尾。我在脚本里已经处理了这一点。最后一种情况有点隐蔽CDN 加速导致的 URL 跳转。有个朋友给博客挂了一层 CDN百度抓取时 301 跳转到另一个协议下的地址返回的not_valid数量忽然变多。解决方法是统一协议并关闭不必要的跳转让实际访问 URL 与脚本推送 URL 完全一致。4.3 部署后自动推送的三种触发方案手动跑脚本终归不是长久之计我每次写完文章都希望“发布即推送”。两个主流的自动化触发方式你可以任选方案一修改 npm scripts。在package.json的scripts里把部署命令改成长链scripts: { deploy: hexo clean hexo g hexo d node push.js }以后每次执行npm run deploy就会自动完成生成、部署、推送三个动作。这是最直观的方式本地跑起来省心。方案二Git Hook。如果你习惯直接用hexo d部署可以在.git/hooks/post-commit里追加一行node push.js。但要注意这个 hook 在你每次git commit时都会触发如果你只在部署仓库里提交问题不大如果是本地源码仓库频繁提交每条 commit 都推送一遍就没有必要了。方案三GitHub Actions。如果你把 Hexo 源码托管在 GitHub 上配置一个 workflow在 push 到主分支后自动执行生成、部署到 Pages、再向百度接口发请求。这种方式的好处是彻底解放本地环境新人照着网上模板改一改就行。不过维护成本略高个人博客用前两种方案足够了。5. 配套工程robots、主题配置与站点数据核对5.1 robots.txt别让蜘蛛白跑一趟网站地图和主动推送都搞定之后别忘了还有一个小文件会影响收录robots.txt。Hexo 默认不会生成它需要你手动在source目录下新建一个。我给自己的博客用的是极简写法User-agent: * Allow: / Sitemap: https://yourname.github.io/sitemap.xml如果你有不想被收录的目录比如source/lab这种私有测试页面可以加上Disallow: /lab/。但要注意不要全局禁止 JS 和 CSS。很多新手照抄网上的“优化配置”把.js和.css全部 Disallow 了结果蜘蛛抓取页面时无法解析排版反而影响收录质量。5.2 next 主题侧边栏与统计配置我用的是 Hexo 经典的 Next 主题。虽然全新版的 Next 提供了很多默认组件但侧边栏信息还是要自己调。为了配合百度 SEO我在侧边栏里做了两件事一是加了一个“站点地图”链接指向/sitemap.xml既是给访客用的也是给蜘蛛多留一个入口二是把百度统计的代码放进了主题配置里。Next 的侧边栏配置逻辑是在主题的_config.yml里找一个叫menu的区域像这样追加menu: 站点地图: /sitemap.xml || sitemap如果你了解 Next 主题结构就会知道菜单项后面的地址支持相对路径图标名称可以沿用主题自带的 font-awesome 名字。我这里写的|| sitemap就是图标不填也没关系。至于百度统计把从平台复制的 js 代码放到_config.yml的baidu_analytics字段即可新版主题通常已经预留了入口不需要去改模板文件。这里顺带说一句改写侧边栏的时候不要为了好看把侧边栏做成纯文字堆砌。导航要精简有明确的入口这不仅是为了用户体验也是为了让蜘蛛沿着清晰的链接结构遍历全站。5.3 sitemap 与页面实际 URL 的一致性核对最后一步也是我最想强调的一步部署完一定要用真实线上地址核对 sitemap。网站地图生成本地看着没问题部署后有时候会暴露出一些诡异的情况比如Hexo 配置的url没改导致生成的链接是localhost站点部署上去之后 sitemap 全部无法访问域名的www与裸域名做了跳转导致 sitemap 里 URL 和线上规范地址不一致用了某个主题的“绝对路径”配置给所有 URL 加了子目录前缀但时代背景是站点根路径最终拼出来 404。我每次部署完都会执行一次curl -I查看线上 sitemap 的响应头确认文件存在且最后一个url节点是能正常访问的文章页curl -I https://yourname.github.io/sitemap.xml curl -I https://yourname.github.io/某篇文章路径/这一步看起来笨但能提前拦截绝大多数收录问题。毕竟 sitemap 里面哪怕有一条 URL 是 404百度就可能降低对这个文件的信任度觉得你这个站点链接质量不稳定。一次正式推送之前先花五分钟验证值。最后再分享一个我自己的小习惯主动推送不是只在新文章发布时才做。每隔一段时间我会把全站所有文章 URL 重新批量推一次尤其当主题改版、URL 结构调整之后。百度的索引过期策略比较激进的时期重推一次能明显加快旧文章“复活”的速度。我的 blog 上线第一周靠这套 sitemap 加主动推送的流程一周内就有文章被百度收录两个月后整站收录率达到了可观的比例。你如果刚把 Hexo 部署完就照着上面这几步走一遍等收录结果的过程会踏实很多。

相关新闻

DeepSeek Harness实战:从模型部署到工程化落地的完整指南

DeepSeek Harness实战:从模型部署到工程化落地的完整指南

1. 为什么你需要一套完整的模型工程化工具链 先说句实在话。和DeepSeek相关的教程,我在过去大半年里看过不下几十份,大多数要么只讲API调用,要么就停在"装好环境、跑个Demo"就结束了。真正能落到生产环境、能支撑一个完整项目的资料…

2026/10/13 14:08:02 阅读更多 →
Eureka接入HDFS:分布式文件系统的服务发现实践

Eureka接入HDFS:分布式文件系统的服务发现实践

大数据领域中 Eureka 与分布式文件系统的集成 先说一个我实际遇到的场景。去年在维护一套大数据平台时,集群里的节点数量从最初十几个涨到了一百多个,HDFS 的 NameNode 和 DataNode 信息靠静态配置文件分发,每次扩容都要手动改配置再重启客户…

2026/10/13 14:08:02 阅读更多 →
游戏研发AI工具选型与自研:三大原则、全周期成本评估与落地避坑

游戏研发AI工具选型与自研:三大原则、全周期成本评估与落地避坑

“免费的才是最贵的”——这句话在游戏研发选AI工具这件事上,体现得淋漓尽致。我见过不止一个团队兴冲冲地接入免费AI绘图、免费代码补全插件,结果要么是素材版权出了问题,要么是工具突然停止服务,要么是数据喂给了别人&#xff0…

2026/10/13 14:07:01 阅读更多 →

最新新闻

NPU模型适配三要素:图优化、算子映射与内存调度

NPU模型适配三要素:图优化、算子映射与内存调度

1. 这不是“换个芯片就行”的事:NPU/TPU加速的真实门槛在哪里很多人看到“NPU/TPU硬件加速”这几个字,第一反应是——换块带AI核的板子,调个驱动,跑通一个ResNet50推理,就算搞定了。我最初也是这么想的。去年在某跨平台…

2026/10/13 15:02:33 阅读更多 →
C#二次开发VisionPro:从源码解析到通用检测框架实战

C#二次开发VisionPro:从源码解析到通用检测框架实战

VisionPro 在国内机器视觉圈子里,讨论度一直很高,尤其做 3C、锂电、汽车零部件这些行业的朋友,几乎绕不开它。但很多人对它的理解停留在 QuickBuild 拖拽工具块出流程这一步,真正把 C# 和 VP9.0 结合起来做通用检测框架&#xff0…

2026/10/13 15:02:33 阅读更多 →
NPU是什么?从体系结构视角看懂AI芯片的领域专用架构

NPU是什么?从体系结构视角看懂AI芯片的领域专用架构

你是不是也遇到过这种时刻:抱着《计算机体系结构》啃完了流水线、缓存、虚拟内存,觉得自己总算摸清了计算机的底细,结果一翻手机芯片的规格表,CPU、GPU、NPU三个词并排躺着,你发现除了CPU,剩下俩只能算“认…

2026/10/13 15:02:33 阅读更多 →
乘用车细分市场销量预测:分层建模与特征工程实战

乘用车细分市场销量预测:分层建模与特征工程实战

1. 赛题背景与整体思路拆解 1.1 这个赛题到底在预测什么 乘用车细分市场销量预测,说白了就是给定历史若干个月的车型销量数据,去预测未来若干个月、不同车型在不同细分市场下的销量。2019年那场竞赛给出的数据维度相当丰富:车型配置、品牌、…

2026/10/13 15:02:33 阅读更多 →
灰度用户能更新,未覆盖用户却一直提示最新版:HarmonyOS 分阶段发布的检查更新边界

灰度用户能更新,未覆盖用户却一直提示最新版:HarmonyOS 分阶段发布的检查更新边界

灰度用户能更新,未覆盖用户却一直提示最新版:HarmonyOS 分阶段发布的检查更新边界 新版本按 10% 灰度发布后,部分用户收到更新,另一些旧版本用户点“检查更新”却显示已经是最新版;客服又发出详情页链接后&#xff0c…

2026/10/13 15:02:33 阅读更多 →
AI时代小白也能学:FDE前沿部署工程师,帮你企业AI转型不踩坑!

AI时代小白也能学:FDE前沿部署工程师,帮你企业AI转型不踩坑!

AI时代,企业转型焦虑重重,钱花了却没效果。文章介绍了FDE前沿部署工程师,他们懂AI也懂企业运营,能诊断问题、设计流程、落地工具,用AI帮助企业赚钱提效。FDE不需要复杂代码能力,而是“懂生意的AI应用专家”…

2026/10/13 15:01:32 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →