什么是好的永久链接?如何在Hexo内实践?
背景
除了狭义上的配置、部署、主题美化等等,静态博客搭建还有一个重要的部分:SEO。
SEO是静态博客的一个痛点:
- 当静态博客系统缺乏SEO支持时,有使用需求的用户就需要自行实现这类功能
- 流行的静态博客系统大多适配了一些配置选项乃至插件协助用户完成这项工作,但仍相对粗糙
第二条在Hexo有所体现,以永久链接(permalink)的默认配置为例:
:year/:month/:day/:title/
很明显,这一配置将会生成一系列结构复杂的URL,并且修改博文的时间、标题后,URL也会同步变化——这对于搜索引擎已收纳的页面而言是一场灾难。
据此,对静态博客进行永久链接配置是很有必要的。常见的URL问题大体包括:
- 层级过深、长度过长
- 内容可读性差(不明意义的参数和ID、使用下划线、使用汉字等)
- 页面的频繁变动使URL失效
现状
Hexo目前支持的永久链接插件主要有这几类:
- 使用计数代替日期、标题等
- 直接对日期、标题等进行编码或hash
- 使用标题翻译、全拼插件自动转换标题为英文或全拼
我们将前述总结的URL问题与目前的Hexo永久链接插件功能对照来看:
计数类、hash类的插件,能够有效缩短URL层级、长度。后续页面的标题、时间等内容的编辑与变动也不再影响URL本身。但这类URL显然不具备提示意义,读者看到的只是随机的字符串,也不利于记忆与查找。
翻译或全拼转换插件,方便了用户的使用,避免了URL中出现非ASCII字符。问题在于这类插件容易生成较长的URL,且翻译类插件的翻译质量也值得商榷。
深入
因此,不使用这类插件,直接配置为:title/
或许也是一种选择:只要控制好标题的单词数量并通过连字符连接,很容易得到类似
https://www.demo.com/seo-friendly-urls/
符合谷歌URL结构最佳实践的URL。
到这里是不是就结束了呢?并没有。
直接配置为:title/
,会导致public文件夹充斥着大量Hexo生成的页面文件。同时,source文件夹内的博文,将很难通过时间定位。这些问题似乎只能通过编写自定义js脚本的方式来调整。
实践
有没有可以不编程的解决方案呢?我是这样解决的:
- 命令行运行:
hexo new page categories
,生成博客的“分类”(categories)页面 - 设置永久链接配置为
categories/:category/:origin_url/
- 设置category_map
这样做有几个好处:
- 通过配置中
categories/:category/
的部分,组织了public文件夹下的博文页面文件 - 单独访问categories/或categories/life/时不会404。
:year/:month/:day/:title/
这类永久连接在2023/
时是没有页面的。 - source文件夹内的文件标题仍可以保持原样,不需要单独修改成类似
seo-friendly-urls.md
的形式。
可参考我的Hexo配置:
1 | # URL |
:origin_url/
来自此前为博客的博文引入的Front Matter项,可参考我的笔记工作流。
小结
有关URL还有一些其他观点,例如包含.html
的URL被定性为ugly URL。然而包不包含.html
事实上并不影响搜索引擎的收录。因此上述所作的很多SEO努力实际上只是锦上添花的工作。比起为了SEO优化频繁修改URL结构,一个配置用到死或许反而效果更好。不过如果不希望后续再来调整博客URL,那么好好规划还是有必要的。