Hugo常见问题指北

从Hexo到WordPress、Typecho又回到Hexo,再到现在的Hugo,换了许多博客框架,但最终还是选择了Hugo。

修改RSS订阅地址

Hugo的RSS订阅都知道是index.xml,但有时就是看着不爽,也可能误导别人这是什么东西。 如果想换成feed.xmlrss.xml也都是可以的。

实现

打开博客根目录下的配置文件,在[mediaTypes]块中定义一个RSS输出

1[mediaTypes]
2  [mediaTypes.'application/atom+xml']
3    suffixes = ['xml']

接着在[outputFormats]添加引用

1[outputFormats]
2  [outputFormats.atom]
3    mediaType = 'application/atom+xml'
4    noUgly = true
5    baseName = "feed"

这里解释一下什么是ugly urls(丑陋url),Hugo官方可能认为给url后面添加上扩展名就很难看,去除就比较好看(pretty urls),这个看个人喜好,我以前就挺喜欢加扩展名的(maybe),下面是例子。

1# ugly url
2https://example.org/section/article.html
3# pretty url
4https://example.org/section/article/

更多配置详情请移步Hugo关于ugly urls的说明页面,点这

outputs添加rssfeed,保留一个就行

1[outputs]
2  home = ["html", "rss", "feed"]

layouts/下创建一个feed.xml,可以抄本站的配置

1{{- $options := dict "Site" .Site "Config" .Site.Params.feed "OutputFormats" .OutputFormats -}}
2{{- $options = dict "Permalink" .Permalink "Version" (.Scratch.Get "version") | merge $options -}}
3{{- $options = dict "Title" .Site.Title "Pages" (.Scratch.Get "mainSectionPages") | merge $options -}}
4{{- partial "feed/rss.html" $options -}}

配置完成,现在hugo server,在网址后面添加上feed.xml正常就能看到输出了。

修改sitemap.xml的内容

有时候,我们并不想让搜索引擎爬取分类、标签的东西,只想展示文章,那就跟我来做做

原理

主题给的sitemap模板一般都是包含生成的所以页面的,就必须指定页面类型,同时在模板内用where函数筛选页面类型,达到让sitemap在生成时只包含文章。

实操

在博客根目录的layouts下创建一个sitemap模板,名为sitemap.xml,将其改为以下内容

 1{{ printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }}
 2<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">
 3  {{- range where .Pages "Type" "eq" "posts" -}}  # 指定只包含页面类型为"posts"的页面
 4  {{ if .Permalink }}
 5  <url>
 6    <loc>{{ .Permalink }}</loc>
 7    {{ if not .Lastmod.IsZero }}
 8    <lastmod>{{ safeHTML (.Lastmod.Format "2006-01-02T15:04:05-07:00") }}</lastmod>
 9    {{ end }}
10    {{ with .Sitemap.ChangeFreq }}
11    <changefreq>{{ . }}</changefreq>
12    {{ end }}
13    {{ if ge .Sitemap.Priority 0.0 }}
14    <priority>{{ .Sitemap.Priority }}</priority>
15    {{ end }}
16    {{ if .IsTranslated }}
17    {{ range .Translations }}
18    <xhtml:link rel="alternate" hreflang="{{ .Language.LanguageCode }}" href="{{ .Permalink }}" />
19    {{ end }}
20    {{ end }}
21  </url>
22  {{ end }}
23  {{- end -}}
24</urlset>

在文章的Front-matter指定typeposts

1type: posts

注意:你文章放在posts目录下就跟上面的模板一样就行,如果目录是postFront-mattersitemap.xml的文章类型都要改成post

大功告成,现在生成的站点地图就只会包含文章了

配置slug以实现URL美化

Hugo在Front-matter中可以通过slug字段来指定文章的URL链接,方便SEO,如果不配置直接根据文章标题自动转译的话,看着还是太炸裂了。

通过模板函数自动生成slug

我这人比较懒,有时候不想去自己思考slug怎么写,那么就可以使用以下的方法在生成文章时自动生成一串随机字符串来作为slug

修改archetypes/default.md(根据需求自行更改,比如使用的是posts.md

1slug: {{ printf "%s-%s" .Date | md5 | truncate 8 "" }}

这里是根据当前时间转化为md5,并截取前八位作为slug

部署相关

关于本站部署的一些事…

Hugo不是扩展版

本站最开始部署在Netlify上,本来是一切正常,但有一次魔改了一下Twikoo评论的样式,就因为CSS文件的扩展是.SCSS,必须要用扩展版。推送到Netlify后一直报错,使用的不是扩展版,在网上找了一圈也没有找到答案,最后无意把项目删了重新部署就好了,其它平台也同理。没试过(

平台推荐

Netlify

有账号的非常推荐,速度稳定且快,就是最近发生了一点特殊原因导致测速部分节点失败。

Vercel

vercel速度也不错,需搭配优选后食用更加稳定。

后记

这篇文章可能有的地方有一些问题,我对Go的了解并不多,如果修改时遇到了其它什么欢迎在评论中交流讨论

本文章会根据我牢Hugo的情况持续更新