结论
Hexo生成永久链接(Permalinks)的最佳方式是在站点配置文件_config.yml中进行如下设置:
permalink: :layout/:year:month:day:hour:minute:second.html
permalink_defaults:
pretty_urls:
trailing_index: true # Set to false to remove trailing 'index.html' from permalinks
trailing_html: true # Set to false to remove trailing '.html' from permalinks
Hexo生成博客文章URL链接时,默认是:year/:month/:day/:title/这样的格式。如果博客文件名有中文的话,URL链接就会包含中文,复制URL路径把它粘贴到其他地方就会把中文变成一大堆乱码,使用不便而且会影响网站的SEO,同时链接层级太多也将影响SEO。
URL构成越简单越好,百度建议URL不要超过255字节。一个英文字符1字节,一个中文字符2字节。
方法一:设为title
最容易想到的方法,把URL设置成如下格式
permalink: :layout/:title.html
:layout
为布局,:title
为文件名,如果有篇名为《test-post》的文章其链接将会是这样
https://www.duheweb.com/post/test-post.html
这种方法有3个缺陷:
- 文章名必须为中文,这对中文博主来说很不友好,后期面对一堆全是英文名的md文件特别令人头疼。
- 不能改文件名,文件名一变,URL也会变化。
- 文件名不能起太长,否则会影响SEO,同时太长的文件名使得URL也不美观。文件名短的话其含义就会与文章标题有较大偏差,给后期维护造成混乱。
方法二:hexo-abbrlink插件
如果你之前有搜索过的话,可以发现这种方法有很多人推荐
npm install hexo-abbrlink --save
站点配置文件_config.yml设置成这样
permalink: posts/:abbrlink.html # 此处可以自己设置,也可以直接使用 :/abbrlink
abbrlink:
alg: crc32 #算法: crc16(default) and crc32
rep: dex #进制: dec(default) and hex
生成的链接像这样
https://www.duheweb.com/posts/1690090958.html
这种方法也有缺陷:
重新生成的URL可能与之前不一样,喜欢双备份的人用此插件容易混淆URL。因为这种方法执行hexo generate
才会在博客md文件的Front-matter
内增加abbrlink字段,这个字段就是URL的末尾。如果一篇博客耗时几天写了多个版本(V1和V2)才写完,在此期间没有执行过hexo generate
,部署V2版本一段时间后才觉得V1版本更好,但此时V1是没有abbrlink字段,还得把V2的abbrlink复制到V2中。如果不复制,让插件再自动生成URL的话,新生成的URL可能会与以前不一样。因为即使abbrlink插件使用crc32算法生成abbrlink,也有重复的可能,遇到重复的情况插件会把abbrlink加1。那么问题来了,也许生成V2的abbrlink时没有加1,生成V1时却加1了,前后两个版本的URL就会不一样。
解释的可能有点绕,总之记住,用该插件重新生成一篇文章的URL可能与之前不一样,而实际使用中我们难免会有重新生成URL的需求。
方法三:hexo-abbrlink2插件
hexo-abbrlink的作者开发出了hexo-abbrlink2插件,这个插件可以使URL从指定数字开始递增,像这样:
https://www.duheweb.com/posts/1.html
https://www.duheweb.com/posts/2.html
https://www.duheweb.com/posts/3.html
这个方法同样也有缺陷:
同时生成多篇文章的URL时会重复,这是插件自身的bug。
与hexo-abbrlink存在同样的问题,重新生成的URL可能与之前不一样。
方法四:设为hash
hexo-abbrlink和hexo-abbrlink2插件出现此缺陷的原因是,他们不是在创建md文件时就生成URL(即生成abbrlink字段),如果我们能在执行hexo new就生成URL,这个问题企不是就解决了。
查阅Hexo的官方文档,发现还真可以,方法如下:
站点配置文件_config.yml设置成
permalink: :layout/:hash.html
:hash会根据文件名及date生成的URL,date就是文章md文件Front-matter 内的字段。生成的URL像这样
https://www.duheweb.com/post/3b48da9a3b8b.html
似乎很完美的解决了方法二、三的缺陷,因为date是创建md文件时就生成的,URL也很简短。
但它同样有问题,部署后不能再更改文件名。这对博主也是个较大的限制,谁也不能保证发表前取的文件名能一直符合心意,后期稍不留神就把文件名改了,然后URL也随之变化。
方法五:设为日期
:hash
方法提醒了我们,date字段是生成URL的优良种子,我们何不用date直接生成URL呢。想到就做,把站点配置文件_config.yml
设置成
permalink: :layout/:date.html
然后执行hexo generate
,发现会报错,因为date形如“2021-04-12 13:15:54”,中间有空格。不过这很好解决,参考Hexo的官方文档,设置成这样就可以了
permalink: :layout/:year:month:day:hour:minute:second.html
生成的URL如
https://www.duheweb.com/post/20210412131554.html
还要注意站点配置文件中的pretty_urls设置是否是这样的
pretty_urls:
trailing_index: true # Set to false to remove trailing 'index.html' from permalinks
trailing_html: true # Set to false to remove trailing '.html' from permalinks
设为false的话,链接就变成了
https://www.duheweb.com/post/20210412131554
去掉URL末尾的.html,更简洁了。带不带html对SEO收录来说,影响不大,但不带html发外链的时候,有些平台编辑器会自动在URL后面加一个“/ ”造成404页面。所以,最好还是带上html,同时也能给人一种静态页面的安全感。
本文作者: 杜和
本文链接: https://www.duheweb.com/post/20210414222449.html
版权声明: 本博客所有文章除特别声明外,均采用 BY 许可协议。转载请注明出处!
暂无评论内容