Hexo优化URL结构

背景

hexo 默认的 url 是
permalink: :year/:month/:day/:title/

特别长,层级也太多,不利于SEO

之前修改了一次,修改成了
permalink: :title.html

还是很长,而且有汉字的时候会转码,之前专门建了个项目放demo,过长的URL引用起来很费劲。

于是想要改成时间戳的形式,一般文章的发表不会隔那么近,倒也不太影响

遇到的问题

用的第三方文章阅读次数计数是对应文章url的,文章URL变了之后阅读次数都变0了

解决

查找资料……

已经发表的文章url还是用标题,新增的文章url采用时间戳

修改hexo设置文件_config.yml,增加一个urlname属性

1
2
3
permalink: :urlname.html
permalink_defaults:
urlname: index

修改 scaffold/post.md文件,在Front-matter区域增加一个urlname属性

1
2
3
4
5
---
title: {{ title }}
urlname: {{ timestamp }}
date: {{ date }}
---

手动修改hexo文件 /node_modules/hexo/lib/hexo/post.js

1
2
3
4
5
6
7
8
9
10
11
12
13
const preservedKeys = ['title', 'slug', 'path', 'layout', 'date', 'content', 'timestamp'];  // 添加timestamp

... // 省略中间代码

Post.prototype.create = function(data, replace, callback) {

... // 省略中间代码

data.timestamp = moment().unix(); // 添加timestamp

... // 省略中间代码

};

测试可用,终于可以告别冗长的URL啦~~