Hexo博客文章链接优化

1 Hexo博客文章链接优化

1.1 前言

  • hexo版: 7.3.0

  • hexo默认文章链接的路径配置在:_config.yml中,其为:

    1
    permalink: :year/:month/:day/:title/  # 格式为年月日+文章标题
  • 这样配置的缺点是,过于冗长,一旦遇到中文标题,链接分享出去转码后就会相当炸裂

  • image.png

  • 这简直太不优雅了,而且一旦修改文章发布日期或者标题,链接立马失效,造成大量死链,这就很鸡肋了,于是,我们引入hexo-abbrlink插件,可以实现自定义内容+随机数字的效果。

  • image.png

1.2 博客网址链接 URL 唯一且永久化

  • 使用插件 hexo-abbrlink 可以做到自定义文章链接,复制下面的命令粘贴进行安装:
1
npm install hexo-abbrlink --save

1.2.2 配置hexo-abbrlink的相关参数

  • 然后在 Hexo 的根目录的配置文件_config.yml 中,找到permalink: 参数进行修改,改为:
1
permalink: 自定义内容/:abbrlink.html  # 实测部署到云端后不显示.html后缀,但在本地运行时是显示的,暂未排查到原因。大概率是服务器 URL 重写规则导致的
1
permalink: 自定义内容/:abbrlink:/
  • 接着,我们在 Hexo 的根目录的配置文件_config.yml 的末尾配置一些必要参数,我的配置如下,附注释

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # abbrlink 配置
    abbrlink:
    alg: crc32 #必选 生成数字的算法 支持 crc16(默认) 和 crc32
    rep: dec #必选 生成数字的算法 支持 dec(默认) 和 hex
    drafts: false #(true)处理草稿,(false)不处理草稿。 false(默认)
    # 从目录树生成分类
    # depth: 你想要生成的目录树的最大深度,应该 > 0
    auto_category:
    enable: true #true(默认)
    depth: #3(默认)
    over_write: false
    auto_title: false #启用自动标题,它可以通过路径自动填充标题
    auto_date: false #启用自动日期,它可以通过今天的时间自动填充日期
    force: false #启用强制模式,在这种模式下,插件将忽略缓存,并为每个文章计算 abbrlink,即使它已经有了 abbrlink。 这只会更新 abbrlink 而不是其他前置变量。
  • 之后再在 md 文件开头中加入abbrlink参数:

  • QQ_1728379236478.png

  • 如果文章中未指定 abbrlink: xxx的值,运行hexo g命令时,将会根据算法随机为文章生成数字;但是必须要有`abbrlink: 参数

1.2.3 在模板文件中添加abbrlink参数

  • 当然,每次手动添加都很不方便,推荐在模板文件中添加,一劳永逸。
  • 在本地hexo的根目录中,为scaffolds目录下的post.md文件添加下面的参数:
    1
    abbrlink:  # 根据算法随机生成数字,优化访问链接
  • image.png

1.2.4 官方配置信息

最后附上官方对permalink允许的配置


  • 您可以在_config.yml配置中调整网站的永久链接或者在每篇文章的 Front-matter 中指定。

1.2.4.1 变量

  • 除了下列变量外,您还可使用除了 :path:permalink 之外 Front-matter 中的所有属性。 变量 描述
变量 描述
:year 文章的发表年份(4 位数)
:month 文章的发表月份(2 位数)
:i_month 文章的发表月份(不含前导零)
:day 文章的发表日期 (2 位数)
:i_day 文章的发表日期(不含前导零)
:hour 文章发表时的小时 (2 位数)
:minute 文章发表时的分钟 (2 位数)
:second 文章发表时的秒钟 (2 位数)
:title 文件名称 (相对于 “source/_posts/“ 文件夹)
:name 文件名称
:post_title 文章标题
:id 文章 ID (清除缓存时不具有持久性)
:category 分类。 如果文章没有分类,则是 default_category 配置信息。
:hash 文件名(与 :title 相同)和日期的 SHA1 哈希值(12位16进制数)

您可在 permalink_defaults 参数下调整永久链接中各变量的默认值:

1
2
permalink_defaults:  
lang: en

1.2.4.2 示例

1
2
3
4
5
6
source/_posts/hello-world.md
title: Hello World
date: 2013-07-14 17:01:34
categories:
- foo
- bar
设置 结果
:year/:month/:day/:title/ 2013/07/14/hello-world/
:year-:month-:day-:title.html 2013-07-14-hello-world.html
:category/:title/ foo/bar/hello-world/
:title-:hash/ hello-world-a2c8ac003b43/

1.2.4.3 多语种支持

  • 若要建立一个多语种的网站,您可修改 new_post_namepermalink 参数,如下:
1
2
new_post_name: :lang/:title.md  
permalink: :lang/:title/
  • 当您建立新文章时,文章会被储存到:
1
2
$ hexo new "Hello World" --lang tw  
# => source/_posts/tw/Hello-World.md
  • 而网址会是:
1
http://localhost:4000/tw/hello-world/

1.3 参考