HUGOのscriptタグ内のURLがエスケープされないようにする方法
|
Hugo で JSON-LD を実装していたのですが、script タグ内の URL がエスケープされ、正常な値が設定されていませんでした。script タグ内の URL がエスケープされないようにする方法をメモします。
““を除外する
出力する値を"“で囲っている場合、それを除外することで、URL がエスケープされずに出力されます。
1<script type="application/ld+json">
2 {
3 "@context": "http://schema.org/",
4 "@type": "Blog",
5 "name": "{{ .Site.Title }}",
6 "creator": {
7 "@type": "Person",
8 "name": "{{ .Site.Params.Author }}"
9 },
10 "image": {{ $logoURL }}, // ←""で囲まない
11 "url": {{ .Site.BaseURL }}, // ←""で囲まない
12 "description": "{{ with .Description }}{{ . }}{{ else }}{{ with .Site.Params.description }}{{ . }}{{ end }}{{ end }}",
13 "license": "https://creativecommons.org/licenses/by-nc-sa/3.0/us/deed.en_US"
14 }
15</script>
注意点
Hugo のウェブサイトを本番環境にビルドする際、--minify
オプションを付与して圧縮するケースがあると思います。
1hugo --gc --minify
その場合、with や if などを直接 JSON-LD の設定値に用いるとエラーが発生し、ビルドに失敗します。
↓ 例: エラーになるパターン
1<script type="application/ld+json">
2 {
3 "@context": "http://schema.org/",
4 "@type": "Blog",
5 "name": "{{ .Site.Title }}",
6 "creator": {
7 "@type": "Person",
8 "name": "{{ .Site.Params.Author }}"
9 },
10 "image": {{ with hogehgoe }}{{ . }}{{ end }}, // ←""で囲まないとエラーになってしまう。
11 "url": {{ .Site.BaseURL }},
12 "description": "{{ with .Description }}{{ . }}{{ else }}{{ with .Site.Params.description }}{{ . }}{{ end }}{{ end }}",
13 "license": "https://creativecommons.org/licenses/by-nc-sa/3.0/us/deed.en_US"
14 }
15</script>
このエラーを回避するには、変数に代入したあとにその変数を JSON-LD に設定します。