基于hexo生成的网址短链接解决中文域名转码问题的方案

在经历博客网站一段时间以后,需要将文章分享给朋友。

它的地址栏正常显示的网址一旦复制后就变成了一串串冗余的数字。

经过仔细研究以后,发现这和中文域名有关。

问题

如果使用中文进行创建文档的话,虽然在地址栏仍然能正常显示。但是如果想要将网址复制下来分享给他人,就会将中文强行转换成十六进制数字。

img

但是复制后变成:

1
https://windeling.github.io/2023/09/23/%E5%85%B3%E4%BA%8E%E6%89%8B%E8%A1%A8ADB%E8%B0%83%E8%AF%95%E7%9A%84%E5%BA%94%E7%94%A8%E5%88%86%E6%9E%90%E4%B8%8E%E6%95%99%E7%A8%8B

看得出来是很杂乱. ——Amberoid

而且默认生成的URL结构其实并不是非常合理。

对于搜索引擎来说,一般只会抓取主域名往下的三层url。

在网站的域名中,搜索引擎正好抓取到日期就停止了,并没有抓取到文章的详细内容概要,也就是题目。

所以要加入搜索引擎,务必要修改网站的URL。

分析

既然问题在于网址,因为网址是由站点配置文件生成的,所以去站点配置文件进行查找配置。

img

可以看到默认生成的域名第三级正好是日期。

所以应该设置一个算法,让对每篇文章都生成一个唯一的编号。

推荐安装 hexo-abbrlink 插件:

1
npm install hexo-abbrlink --save

然后在站点配置文件里面插入:

1
2
3
abbrlink:
alg: crc32 # 算法:crc16(default) and crc32
rep: hex # 进制:dec(default) and hex

permalink修改为permalink: archives/:year:month:day:abbrlink/

img

这样就会生成一个只有一层的url了,简洁明了,对搜索引擎也很友好。

abbrlink的长度

算法为主,进制为辅。

1
2
3
4
5
6
7
8
9
10
11
12
13
crc16 & hex
https://post.zz173.com/posts/66c8.html

crc16 & dec
https://post.zz173.com/posts/65535.html

crc32 & hex
https://post.zz173.com/posts/8ddf18fb.html

crc32 & dec
https://post.zz173.com/posts/1690090958.html

//引用的测试长度

效果

img

可以看出URL结构大幅减少。

注意:请不要认为再删除年月日后,能够更进一步简化长度,简洁好记。因为hexo使用日期作为文章的对应分类,因此如果进一步删除日期会导致每个文章页面均无法访问。


基于hexo生成的网址短链接解决中文域名转码问题的方案
https://blog.windeling.com/202309308c8465b4/
作者
黄文林
发布于
2023年9月30日
更新于
2025年5月10日
许可协议