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

记一次魔改Hexo的URL结构

今天折腾了一晚上Hexo,终于把URL的问题搞定了!事情是这样的:Hexo默认生成的URL是域名/年/月/日/文件名,这种格式不仅长,而且如果文件名是中文,URL会变成一堆乱码,看起来特别不友好。于是我就想着能不能改一下URL的结构,让它更简洁一些。结果没想到,这一改还牵扯出了SEO的问题,最后经过一番思考和群友的讨论,终于找到了一个完美的解决方案。下面就来记录一下这次魔改的全过程。

为什么要改URL?

Hexo默认的URL格式是/:year/:month/:day/:title/,这种格式有几个问题:

  1. 太长:尤其是当文章标题很长的时候,URL会变得特别冗长,不利于分享。
  2. 中文乱码:如果文章标题是中文,URL会被编码成一堆%xx的字符,看起来特别乱。
  3. 不美观:我个人更喜欢简洁的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
2
3
4
---
title: 我的文章
url: /posts/article/
---

这样生成的URL就会是/posts/article,既短又好看。

第二步:意识到SEO问题

就在我准备提交修改的时候,突然意识到一个问题:如果我改了URL,那么原来被搜索引擎收录的链接就会失效!这意味着我之前文章的SEO排名可能会掉,甚至直接404,这对网站的流量影响很大。

于是我开始思考,有没有办法既能用新的URL,又能保留原来的URL,让两者共存?

第三步:和“鱼塘”群友讨论

我把这个问题发到了“鱼塘”(一个技术交流群),群u给出了建议。有人建议用插件,有人说直接在posts中copy复制出来一份文件,然后新的文章使用插件或者使用自定义url,旧的文章不需要修改直接隐藏掉,但都有问题,缺点就是不能保留原来的链接,最后还是会导致原来url失效。最后,经过不断尝试:让一篇文章有两个URL,一个用原来的格式,一个用新的格式,然后在博客网站页面上隐藏原来的URL的文章。

理论可行,试试。

第四步:实现双URL共存

经过一番尝试,我终于找到了一个简单又有效的方法:

  1. 保留原来的URL:在_config.yml中把permalink参数改成:url,然后在每篇文章的front-matter中手动指定原来的URL。比如:

    1
    2
    3
    4
    ---
    title: 我的文章
    url: /2025/02/25/我的文章/
    ---
  2. 添加新的URL:把原来的文章复制一份,然后在复制的文章的front-matter中指定新的URL。比如:

    1
    2
    3
    4
    ---
    title: 我的文章
    url: /posts/article/
    ---
  3. 隐藏原来的文章:在原来文章的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都能正常访问:

  • 原来的URL(/2025/02/25/我的文章)仍然有效,搜索引擎收录的链接不会失效。
  • 新的URL(/posts/article)简洁美观,适合分享。

两个url都能访问

而且,由于原来的文章被隐藏了,网站的文章列表里只会显示新的URL,用户体验完全不受影响。

总结

这次魔改Hexo的URL结构,虽然一开始只是想让它更简洁,但没想到还牵扯出了SEO的问题。经过一番思考和群友的讨论,最终找到了一个完美的解决方案:让一篇文章有两个URL,一个保留原来的格式用于SEO,一个用新的格式用于展示。这样既不影响搜索引擎的收录,又能让URL更简洁美观。

我真是个天才。【笑】