免插件生成 Hexo blog 的永久链接

免插件生成 Hexo blog 的永久链接

为什么要修改默认的永久链接

Hexo 默认的永久链接格式目录层级太复杂,深度太大,不仅不利于 SEO,而且也不美观。hexo 博客默认的文章链接类似这样 https://blog.811520.xyz/2024/10/30/md文件名/

如果 md 文件名是中文,那么得到的链接将是这样一长串 https://blog.811520.xyz/2024/10/30/%E8%B4%A6%E5%8F%B7%E6%B3%A8%E5%86%8C-%E8%8A%82%E7%82%B9%E6%90%AD%E5%BB%BA%E4%B8%8E%E8%B4%A6%E5%8F%B7%E4%BF%9D%E6%B4%BB/,实在太难看

如果 md 文件名是英文,得到的链接会好看一点,将是这样的:https://blog.811520.xyz/2024/10/30/switchhosts-jiasu/,但是又引来一个新问题,_post 文件夹内的 md文件 全是 英文名,我们在寻找和整理 md 文件时很不方便,文章多了之后,自己也不知道哪个是哪个
image.png

那么有没有办法在使用 中文文件名 的同时,为文章生成一个 简短的永久访问链接?自然是可以的

Hexo 的文章永久链接优化方式主要有两种:

  1. 免插件式
    修改 Hexo 的配置文件的 permalinks 部分,然后在文章 Markdown 文件的 front-matter 字段进行定义

  2. 插件式
    安装 hexo-abbrlink 或 hexo-abbrlink2 插件并配置

本文只讲免插件方式生成永久链接,也是我推荐的方式,插件式请看 这篇教程

文章结尾带 .html 的永久链接

文章结尾带 .html 更像一个静态网页,如果你更加喜欢这种格式,可以按照下面修改

1
2
3
4
5
6
7
8
9
# URL
## Set your site url here. For example, if you use GitHub Page, set url as 'https://username.github.io/project'
url: https://blog.811520.xyz # 修改此处为实际的网站地址,后面不带 /
# permalink: :year/:month/:day/:title/ # 这是预设永久链接格式
permalink: :layout/:year/:month/:filename/ # 此处可修改,:filename需要在md的头部信息中定义
permalink_defaults:
pretty_urls:
trailing_index: true # 设置 true 以显示「页面」永久链接结尾的'index.html'部分
trailing_html: true # 设置 true 以显示「文章」永久链接结尾的'.html'部分

写文章的时候在 md 文件的 front-matter 部分新增字段 filename:,然后写上实际的永久链接,比如

1
2
3
title: 优化 Hexo 的永久链接
filename: hexo-links.html
date: 2024-10-30

permalink: :layout/:filename/ 对应的链接格式是 https://blog.811520.xyz/post/hexo-links.html

permalink: :layout/:year/:month/:filename/ 对应的链接格式是 https://blog.811520.xyz/post/2024/10/hexo-links.html

文章结尾不带 .html 的永久链接

文章结尾不带 .html 更为简洁,如果你更喜欢这种格式,可以按照下面修改

1
2
3
4
5
6
7
8
# URL
## Set your site url here. For example, if you use GitHub Page, set url as 'https://username.github.io/project'
url: https://blog.811520.xyz # 修改此处为实际的网站地址
permalink: :layout/:year/:month/:filename/ # 此处可修改,:filename需要在md的头部信息中定义
permalink_defaults:
pretty_urls:
trailing_index: false # 设置 false 以删除「页面」永久链接结尾的'index.html'部分
trailing_html: false # 设置 false 以删除「文章」永久链接结尾的'.html'部分

在文章 md 文件的 front-matter 新增字段 filename:,然后写上实际的永久链接,比如

1
2
3
title: 优化 Hexo 的永久链接
permalink: hexo-links
date: 2024-10-30

permalink: :layout/:filename/ 对应的链接格式是 https://blog.811520.xyz/posts/hexo-links/

permalink: :layout/:year/:month/:filename/ 对应的链接格式是 https://blog.811520.xyz/posts/2024/10/hexo-links/

建议将字段 filename: 字段的配置加入 Hexo 文章模板中,这样每次使用 hexo new post 这是一篇新的博文 命令新建的文章都会自动在 front-matter 中加入 filename: 字段

打开博客根目录下的 scaffolds 文件夹中的 post.md 文件,并在 front-matter 部分新增字段 permalink:

1
2
3
4
5
6
7
8
---
title: {{ title }}
date: {{ date }}
updated:
categories:
tags:
filename:
---

关于 _config.yml 中永久链接 permalink 的配置参数,可以参考官方文档
千万不能使用 :path:permalink 这两个参数,否则本地搜索会出错。我已经踩过这个坑了

最后延伸一下

看过我 这篇文章 的人,如果已经熟练使用 ob 来编辑和推送博客文章,可以利用 ob 的 Linter 插件,自动生成包含 filename: 字段的 front-matter 信息