大家好,我是码农刚子。在优化 Hexo 博客的过程中,我踩了不少坑,本文将这些经验记录下来,希望能帮助到有需要的朋友。
一、优化文章 URL,提升收录效果
1. 问题分析
Hexo 默认的文章链接格式为:
permalink: :year/:month/:day/:title/
生成的 URL 结构如:sitename/year/month/day/title/,共四层。
存在以下问题:
- 层级过深:搜索引擎通常认为中小型站点的前三层内容更重要,超过三层的网页抓取频率会降低。
- 包含中文:中文转码后链接冗长丑陋。
- 链接可能变化:修改文章标题或日期会导致链接改变,破坏已有外链和收藏。
2. 解决方案:使用 abbrlink 插件
hexo-abbrlink 可以为每篇文章生成一个永不改变且短小的标识符,完美解决上述问题。
安装与配置步骤:
① 在 Hexo 根目录安装插件:
npm install hexo-abbrlink --save
② 修改 Hexo 配置文件 _config.yml:
# abbrlink 配置
abbrlink:
alg: crc32 # 算法:crc16(默认)或 crc32
rep: hex # 进制:dec(默认)或 hex
# 修改固定链接格式
permalink: archives/:abbrlink.html
⚠️ 注意:编码规则一旦确定就不要更改,否则所有文章链接都会变化。
效果示例:
- 生成的
abbrlink字段:类似8a2b3c - 最终 URL:
https://yourdomain.com/archives/8a2b3c.html
固定链接不仅利于 SEO,更重要的是保证了链接的持久有效性,避免出现死链。
二、将网站提交给百度搜索引擎
本文以百度为主(国内主流),Google 类似但需自行适配。
1. 生成站点地图(Sitemap)
站点地图(XML 文件)列出了网站所有网页,帮助搜索引擎更智能地抓取内容。
安装插件:
npm install hexo-generator-sitemap --save # 通用(谷歌)
npm install hexo-generator-baidu-sitemap --save # 百度专用
在 _config.yml 中添加配置:
sitemap:
path: sitemap.xml
baidusitemap:
path: baidusitemap.xml
生成并验证:
hexo g
编译后 public 目录下会出现 sitemap.xml 和 baidusitemap.xml。
部署后访问 https://你的域名/baidusitemap.xml 和 https://你的域名/sitemap.xml,能正常打开即成功。
2. 三种推送方式对比
| 方式 | 速度 | 原理 | 适用场景 |
|---|---|---|---|
| 主动推送 | 最快 | 每次部署时主动提交最新链接给百度 | 解决 GitHub 等平台无法被百度爬取的问题 |
| 自动推送 | 方便 | 用户访问页面时自动推送 | 无需额外操作,覆盖面广 |
| sitemap 推送 | 较慢 | 百度定期读取 sitemap 文件 | 传统方式,作为补充 |
三种方式可以同时使用,互不冲突。
3. 主动推送(推荐)
安装插件:
npm install hexo-baidu-url-submit --save
在 _config.yml 中添加配置:
baidu_url_submit:
count: 3 # 每次提交最新的链接数量(不要太大,避免重复提交被惩罚)
host: yourdomain.com # 百度站长平台中注册的域名
token: your_secret_token # 百度推送接口的 token(注意保密,勿公开仓库)
path: baidu_urls.txt # 临时文件路径
⚠️ 调试时可将
count设为0,避免无新链接时反复提交。
同时确保 _config.yml 中的 url 已设为你的域名:
url: https://yourdomain.com
修改 deploy 配置:
deploy:
- type: git
repository: https://xxxxxx.git
branch: main
- type: baidu_url_submitter # 部署时自动提交链接
注意 YAML 缩进必须使用 2 个空格,否则 Hexo 编译会报错。
执行部署:
hexo d -g
看到类似输出即成功:
remain: 100 # 当日剩余提交额度
success: 3 # 本次成功提交的链接数
4. 自动推送(Butterfly 主题实现方法)
百度自动推送只需在每个页面中嵌入一段 JS 代码。
对于 Butterfly 主题,可通过 inject 配置注入。
① 在 themes/butterfly/source/js/ 目录下新建 baidu_sub.js,内容如下:
(function(){
var bp = document.createElement('script');
var curProtocol = window.location.protocol.split(':')[0];
if (curProtocol === 'https') {
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
} else {
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
}
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();
② 在 Butterfly 主题配置文件 _config.butterfly.yml(或 _config.yml 中的主题配置)中添加:
inject:
head:
- <script defer src="/js/baidu_sub.js"></script>
# 也可放在 bottom 处,效果相同
部署后查看网页源代码,即可在 <head> 中看到该脚本。
5. sitemap 推送
登录百度站长平台,在“链接提交”->“sitemap”中提交你生成的 baidusitemap.xml 地址即可。百度会定期抓取。
三、扩展:robots.txt 文件的设置
百度官方说明:
robots.txt 用于告知搜索引擎哪些页面允许抓取,哪些不允许。文件必须放在网站根目录下。
1. 为什么需要 robots.txt?
- 防止搜索引擎抓取无意义的页面(如标签页、分类页等),集中权重到文章页。
- 即使没有需要屏蔽的内容,设置一个空的
robots.txt也能提高收录概率(坊间经验,建议尝试)。
2. 配置示例
示例 1:允许抓取所有内容
User-agent: *
Allow: /
Sitemap: https://yourdomain.com/baidusitemap.xml
Sitemap: https://yourdomain.com/sitemap.xml
示例 2:只允许抓取 /archives/ 目录(文章页)
User-agent: *
Allow: /archives
Disallow: /
Sitemap: https://yourdomain.com/baidusitemap.xml
Sitemap: https://yourdomain.com/sitemap.xml
Allow优先级高于Disallow。
3. 验证 robots.txt
- 部署后访问
https://你的域名/robots.txt,查看是否能正常显示。 - 在百度站长平台的“Robots 工具”中进行验证,显示“生效”即可。
总结
通过以上步骤,你的 Hexo + Butterfly 博客将完成:
- 短小、固定的 URL(
abbrlink) - 完整的站点地图(sitemap)
- 三种百度推送方式(主动 + 自动 + sitemap)
- 合理的抓取权限控制(robots.txt)
SEO 优化是长期工作,建议定期检查百度站长平台的索引量,持续产出高质量内容。祝你的博客早日获得好排名!