Hexo修改默认文章URL的几种方式
在使用 Hexo 搭建博客时,文章的 URL 默认是根据日期与文件名生成的,例如:
1 | permalink: :year/:month/:day/:title/ |
生成的 URL 一般类似于:
1 | https://www.starin.top/2025/07/15/beanstalkd/ |
这种结构虽然直观,但容易出现两个问题:
- URL 包含中文标题时,浏览器可能会因为字符集差异导致乱码或失效。
- URL 中的日期信息会让链接显得冗长,不利于 SEO 优化与后期迁移。
因此,建议根据实际需求修改默认配置。
一、为什么要修改 Hexo 的 permalink
Hexo 的 _config.yml 文件中提供了一个 permalink 选项,用于定义生成文章链接的规则。
默认配置如下:
1 | permalink: :year/:month/:day/:title/ |
其中,:title 对应 source/_posts 下文章的文件名。
如果文件名含有中文,就可能导致 URL 编码问题,特别是在不同浏览器中会出现兼容性差异。
二、推荐的几种 URL 定制方案
方案一:自定义 ID 生成 URL
我们可以通过自定义文章的 id 来替代默认的 title。
修改 _config.yml:
1 | permalink: :year/:month/:day/:id/ |
接着,在每篇文章的 Front-matter 中添加 id 字段:
1 |
|
生成的 URL 示例:
1 | https://www.starin.top/2025/08/14/blog1/ |
这种方式可完全避免中文乱码,同时便于自定义短链或唯一标识符。
方案二:使用 Hash 值自动生成链接
如果不想每次手动指定 id,可以直接使用 Hexo 生成的 hash 值。
修改 _config.yml:
1 | permalink: :year/:month/:day/:hash/ |
hash 是根据文件名和日期自动生成的 SHA1 哈希值,具有唯一性且不会引起编码问题。
生成后的 URL 例如:
1 | https://www.starin.top/2025/08/14/a1c9d8acb9bca455ea3e81afce35e5/ |
方案三:去除日期,仅保留文章名
如果你的博客不依赖日期结构,也可以简化为仅保留文章标题:
1 | permalink: :title/ |
这样,原本https://www.starin.top/2022/07/15/beanstalkd/
会变成https://www.starin.top/beanstalkd/
更简洁,也更有利于 SEO。
方案四:自定义字段生成 URL
你也可以在 Front-matter 中自定义一个字段,例如 my,并在配置中引用:
1 | permalink: :my/ |
文章头部示例:
1 |
|
生成的链接为:
1 | https://www.starin.top/22d5a1e8e685/ |
这种方式适合需要自定义唯一标识或使用短链的场景。
三、Hexo 支持的 URL 变量汇总
| 变量 | 描述 |
|---|---|
: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 |
分类,若无分类则使用默认分类 |
:hash |
文件名和日期生成的 SHA1 哈希(12 位) |
总结
针对不同的使用需求,可以选择合适的方式修改 Hexo 的 permalink:
- ✅ 简洁 URL:
:title/ - ✅ 唯一短链:
:id/或:hash/ - ✅ 自定义控制:
:my/
灵活地调整 URL 结构,不仅可以避免中文乱码问题,还能让博客链接更稳定、美观、有利于 SEO。
- 标题: Hexo修改默认文章URL的几种方式
- 作者: 星隐
- 创建于 : 2025-10-30 21:35:35
- 更新于 : 2026-01-19 01:58:27
- 链接: https://www.starin.top/post/57dc08ca76b3/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。