LoginSignup
7
5

More than 5 years have passed since last update.

Hugo で JSON-LD 内の URL がなぜかエスケープされる問題

Last updated at Posted at 2017-02-07

久々にブログの Hugo テンプレートをいじって JSON-LD に対応させようとして、ハマりました。バージョンは Hugo-0.18.1-windows_amd64 です。

エスケープ問題

url 属性に .Permalink を当てはめようとすると、普通に書けば以下のようになると思います。

partials/json-ld.html
<script type="application/ld+json">
{
  "@context": "http://schema.org",
  "@type": "Corporation",
  "url": "{{ .Permalink }}",
  "contactPoint": [{
    "@type": "ContactPoint",
    "telephone": "+1-401-555-1212",
    "contactType": "customer service"
  }]
}
</script>

しかし、そのレンダリング結果には余計なURLエスケープが入ってしまいます。

<script type="application/ld+json">
{
  ...
  "url": "http:\/\/localhost:1313\/about\/",
</script>

いろいろググると、「{{ .Permalink | safeJS }} を使え」とか「{{ printf "%s" .Permalink }} ならうまくいく」とか書かれていましたが、どれも結果は同じでした。

解法

最終的にたどり着いた解法は、{{ .Permalink}}" で囲わない」 でした。

partials/json-ld.html
<script type="application/ld+json">
{
  ...
  "url": {{ .Permalink }},
  ...
}
</script>

これで期待通りプレーンな URL が生成されます。

<script type="application/ld+json">
{
  ...
  "url": "http://localhost:1313/about/",
  ...
}
</script>

JSON レンダリング時に何か余計な気を使ってくれているっぽいですね。小一時間ムダにしました :disappointed:

参考になった記事

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5