方法一:HTML 标签的方法

[markup]
  [markup.goldmark]
    [markup.goldmark.renderer]
      unsafe = true

这样支持了 HTML 标签:

<a href="https://example.com" target="_blank">example.com</a>

但比较麻烦,不推荐,不过建议开启这个功能以支持 HTML 语法。

方法二:在 blackFriday 中渲染

Hugo 已在 v0.60 后默认使用了符合 CommonMark 标准的 Goldmark 渲染器。

不过仍然可以启用 blackFriday 渲染器来设定其 hrefTargetBlank 属性为 true

[markup]
  defaultMarkdownHandler = 'blackFriday'
  [markup.blackFriday]
    hrefTargetBlank = true

但这样就放弃了更快更标准的 Markdown 渲染器。

方法三(推荐):使用 Goldmark 的 Markdown Render Hooks

需要版本大于 v0.62.0 并启用(默认)Goldmark。

创建 render-link.html 文件在 ./themes/<你的主题>/layouts/_default/_markup/ 目录。

内容:(参考官方文档

<a href="{{ .Destination | safeURL }}"{{ with .Title}} title="{{ . }}"{{ end }}{{ if strings.HasPrefix .Destination "http" }} target="_blank" rel="noopener"{{ end }}>{{ .Text | safeHTML }}</a>

推荐使用此方法,自动为所有文章内的链接加上了 target="_blank" rel="noopener"

不影响相对路径的链接,文章内链接本站其他页面可以使用相对路径:

[title](/foo/bar/)
↓ 会被简单解析为: ↓
<a href="/foo/bar/">title</a>