Hexo魔改日记-文章双URL,短链接与SEO两不误

Hexo魔改日记-文章双URL,短链接与SEO两不误
凌尘k记一次魔改Hexo的URL结构
今天折腾了一晚上Hexo,终于把URL的问题搞定了!事情是这样的:Hexo默认生成的URL是域名/年/月/日/文件名
,这种格式不仅长,而且如果文件名是中文,URL会变成一堆乱码,看起来特别不友好。于是我就想着能不能改一下URL的结构,让它更简洁一些。结果没想到,这一改还牵扯出了SEO的问题,最后经过一番思考和群友的讨论,终于找到了一个完美的解决方案。下面就来记录一下这次魔改的全过程。
为什么要改URL?
Hexo默认的URL格式是/:year/:month/:day/:title/
,这种格式有几个问题:
- 太长:尤其是当文章标题很长的时候,URL会变得特别冗长,不利于分享。
- 中文乱码:如果文章标题是中文,URL会被编码成一堆
%xx
的字符,看起来特别乱。 - 不美观:我个人更喜欢简洁的URL格式,比如
/posts/自定义名
,这样既短又好看。
于是我就想着改一下Hexo的URL生成规则,让它更符合我的需求。
第一步:修改_config.yml
中的permalink
参数
Hexo的URL生成规则是通过_config.yml
文件中的permalink
参数来控制的。默认的配置是:
1 | permalink: :year/:month/:day/:title/ |
我想把它改成更简洁的格式,比如:
1 | permalink: :url |
然后在每篇文章的front-matter
(文章头部)中手动指定URL。比如:
1 | --- |
这样生成的URL就会是/posts/article
,既短又好看。
第二步:意识到SEO问题
就在我准备提交修改的时候,突然意识到一个问题:如果我改了URL,那么原来被搜索引擎收录的链接就会失效!这意味着我之前文章的SEO排名可能会掉,甚至直接404,这对网站的流量影响很大。
于是我开始思考,有没有办法既能用新的URL,又能保留原来的URL,让两者共存?
第三步:和“鱼塘”群友讨论
我把这个问题发到了“鱼塘”(一个技术交流群),群u给出了建议。有人建议用插件,有人说直接在posts中copy复制出来一份文件,然后新的文章使用插件或者使用自定义url,旧的文章不需要修改直接隐藏掉,但都有问题,缺点就是不能保留原来的链接,最后还是会导致原来url失效。最后,经过不断尝试:让一篇文章有两个URL,一个用原来的格式,一个用新的格式,然后在博客网站页面上隐藏原来的URL的文章。
理论可行,试试。
第四步:实现双URL共存
经过一番尝试,我终于找到了一个简单又有效的方法:
保留原来的URL:在
_config.yml
中把permalink
参数改成:url
,然后在每篇文章的front-matter
中手动指定原来的URL。比如:1
2
3
4---
title: 我的文章
url: /2025/02/25/我的文章/
---添加新的URL:把原来的文章复制一份,然后在复制的文章的
front-matter
中指定新的URL。比如:1
2
3
4---
title: 我的文章
url: /posts/article/
---隐藏原来的文章:在原来文章的
front-matter
中加上hidden: true
标签,这样在生成的网站中就不会显示这篇文章,但它的URL仍然可以访问。(hedden需要装插件,自行百度一下如何隐藏文章)1
2
3
4
5---
title: 我的文章
url: /2025/02/25/我的文章
hidden: true
---
这样,当我运行hexo g
生成静态文件时,Hexo会生成两个URL:
/2025/02/25/我的文章
(原来的URL,用于SEO)/posts/article
(新的URL,用于展示)
第五步:测试效果
生成文件后,我打开网站测试了一下,发现两个URL都能正常访问:
- 原来的URL(
/2025/02/25/我的文章
)仍然有效,搜索引擎收录的链接不会失效。 - 新的URL(
/posts/article
)简洁美观,适合分享。
而且,由于原来的文章被隐藏了,网站的文章列表里只会显示新的URL,用户体验完全不受影响。
总结
这次魔改Hexo的URL结构,虽然一开始只是想让它更简洁,但没想到还牵扯出了SEO的问题。经过一番思考和群友的讨论,最终找到了一个完美的解决方案:让一篇文章有两个URL,一个保留原来的格式用于SEO,一个用新的格式用于展示。这样既不影响搜索引擎的收录,又能让URL更简洁美观。
我真是个天才。【笑】