大家好,我是码农刚子。在优化 Hexo 博客的过程中,我踩了不少坑,本文将这些经验记录下来,希望能帮助到有需要的朋友。

一、优化文章 URL,提升收录效果

1. 问题分析

Hexo 默认的文章链接格式为:

permalink: :year/:month/:day/:title/

生成的 URL 结构如:sitename/year/month/day/title/,共四层。
存在以下问题:

  • 层级过深:搜索引擎通常认为中小型站点的前三层内容更重要,超过三层的网页抓取频率会降低。
  • 包含中文:中文转码后链接冗长丑陋。
  • 链接可能变化:修改文章标题或日期会导致链接改变,破坏已有外链和收藏。

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.xmlbaidusitemap.xml
部署后访问 https://你的域名/baidusitemap.xmlhttps://你的域名/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 博客将完成:

  • 短小、固定的 URLabbrlink
  • 完整的站点地图(sitemap)
  • 三种百度推送方式(主动 + 自动 + sitemap)
  • 合理的抓取权限控制(robots.txt)

SEO 优化是长期工作,建议定期检查百度站长平台的索引量,持续产出高质量内容。祝你的博客早日获得好排名!