关于 url 美化这篇博客讲的非常之好~推荐看一看:Hexo 博客优化:自定义文章 URL,下面就仅为个人的解决方案
# 起因
事情是这样的,今天分享面经的时候,将链接在群里一发,发现这个 url 转义后实在是太过于丑陋了 QAQ,于是在网上搜索 hexo 的 url 优化,发现这个方法。
Hexo 生成文章时,是根据文件名生成的 url,而文件名又是中文,故而 url 会进行转义,转义后的 url 如上图,显得非常冗长。
# 解决方案探寻
首先,参考官方配置永久链接(Permalinks)| Hexo 中的配置项,可知可使用的变量如下:
变量 | 描述 |
---|---|
:year | 文章的发表年份(4 位数) |
:month | 文章的发表月份(2 位数) |
:i_month | 文章的发表月份(去掉开头的零) |
:day | 文章的发表日期 (2 位数) |
:i_day | 文章的发表日期(去掉开头的零) |
:hour | 文章发表时的小时 (2 位数) |
:minute | 文章发表时的分钟 (2 位数) |
:second | 文章发表时的秒钟 (2 位数) |
:title | 文件名称 (relative to “source/_posts/“ folder) |
:name | 文件名称 |
:post_title | 文章标题 |
:id | 文章 ID (not persistent across cache reset) |
:category | 分类。如果文章没有分类,则是 default_category 配置信息。 |
:hash | SHA1 hash of filename (same as :title ) and date (12-hexadecimal) |
可在 permalink_defaults
参数下调整永久链接中各变量的默认值:
url: https://ysx.cosine.ren/ # 我绑定的域名 url | |
root: / | |
# permalink: :lang/:title/ | |
permalink: :lang/:link/ | |
permalink_defaults: | |
lang: cn |
当然,愿意的话可以直接用日期、分类、id 或者 hash 为 url,但是这样就会出现几个问题
日期、分类等进行设置,SEO 不友好
- 用日期等做 url 的话,由于百度的搜索引擎抓取网页的时:搜索引擎认为对于一般的中小型站点,3 层足够承受所有的内容了,所以经常抓取的内容是前三层,而超过三层的内容认为那些内容并不重要,所以不经常爬取。出于这个原因所以 permalink 后面跟着的最好不要超过 2 个斜杠。
使用算法为每个文章生成独一无二的 hash 或 id
- 这个方法常用于一些较大的内容发布平台,例如 CSDN 文章的发布 id,B 站的视频 BV 号等,可简单地管理大量的内容而不重复,但是生成的 URL 并不直观,好的 url 最好还是能见名知意
对于个人博客的文章,文章的 URL 最好能大致反映文章的内容,因此为每篇文章手动设置一个见名知义的 URL 后缀是我认为比较合适的方法。
# 解决步骤
在 hexo 的配置文件_config.yml 中,添加以下配置:
url: https://ysx.cosine.ren/ # 我绑定的域名 url | |
root: / | |
# permalink: :lang/:title/ | |
permalink: :lang/:link/ | |
permalink_defaults: | |
lang: cn |
在以后写博客的时候,可以直接在文章中添加见名知义的 link 即可,如下:
--- | |
title: Hexo博客url优化 | |
link: hexo-url-optimization # 文章实际链接为:https://ysx.cosine.ren/cn/hexo-url-optimization/ | |
catalog: true | |
lang: cn | |
date: 2022-04-14 21:18:56 | |
subtitle: 关于博客url转义后过于冗长这件事。 | |
header-img: /img/header_img/galaxy-ngc-3190-wallpaper-for-2880x1800-60-653.jpg | |
tags: | |
- 前端 | |
- hexo | |
categories: | |
- 工具 | |
--- |
再加一步,在 scaffolds 目录下的 post.md、draft.md,将 link 默认设置为文章标题避免遗忘,如下:
--- | |
title: <!--swig0--> | |
link: <!--swig1--> | |
subtitle: | |
date: <!--swig2--> | |
catalog: true | |
header-img: /img/header_img/galaxy-ngc-3190-wallpaper-for-2880x1800-60-653.jpg | |
tags: | |
- 前端 | |
- JavaScript | |
categories: | |
- 笔记 | |
--- |
好,现在每次发文时只需要加上 link 属性中的值改完美化后的名称即可~