Hugo で設定した外部リンクを開くときは別ウィンドウで開けるようにしたかったので、Hugo のテーマファイルをオーバーライドして対応しました。外部リンクが設定されているときのみ a
タグに target="_blank" rel="noopener noreferrer"
が追加されるようにしました。
テンプレートファイルは GO の HTML テンプレートで書かれているので、その書式にしたがって a
タグの属性を書き換えることで、外部リンクの場合は target="_blank" rel="noopener noreferrer"
を追加します。
下記は hugo-PaperMod で、メインメニューの a
タグに target="_blank" rel="noopener noreferrer"
を追加するときのサンプルになります。
<ul class="menu" id="menu" onscroll="menu_on_scroll()">
<!-- `.Site.Menues.main` の要素数 (メニュー数) ループします -->
{{- range .Site.Menus.main }}
<!--
要素内の .URL にアクセスすることで設定されているリンクにアクセスする。
設定されている URL のプレフィクスが https:// or http:// であれば、
絶対リンクが設定されているはずなため、外部リンクが設定されているとみなす。
-->
{{- $is_abs_url := or (strings.HasPrefix .URL "https://") (strings.HasPrefix .URL "http://") }}
<!--
もし外部リンクが設定されていれば、そのまま .URL の内容を出力する。
そうでなければ、内部リンクを language プレフィクスを付与した形で出力する。
-->
{{- $menu_item_url := (cond $is_abs_url .URL (printf "%s/" .URL) ) | absLangURL }}
<li>
<!--
外部リンクが設定されていたら ($is_abs_url が true なら)
a タグに target="_blank" rel="noopener noreferrer" を設定する
-->
<a href="{{ $menu_item_url }}" {{- if $is_abs_url }} target="_blank" rel="noopener noreferrer" {{- end}}>
<span {{- if eq $menu_item_url $page_url }} class="active" {{- end }}>
{{ .Name }}
</span>
</a>
</li>
{{- end -}}
</ul>