参照サイト
https://support.google.com/programmable-search/answer/1626955?hl=en
404 Not Found: ページが存在していません
Google 検索結果をちょっとリッチにするためのサムネイル画像の指定方法。
Google 検索結果にサムネイルを表示したいケースでは、いくつかの指定方法がある。
<head>
に記載するthumbnail
metaタグを記載する404 Not Found: ページが存在していません
普通のタグ操作と変わらないので特に困らない。表示したい画像を指定できるようにする。
<meta name="thumbnail" content="http://example/foo.jpg" />
サンプルでは以下の通り記載されている。コメント内に <PageMap>
を記載することになる。
<!--
<PageMap>
<DataObject type="thumbnail">
<Attribute name="src" value="http://www.example.com/recipes/applepie/applepie.jpg"/>
<Attribute name="width" value="100"/>
<Attribute name="height" value="130"/>
</DataObject>
</PageMap>
-->
ここで Hugo の場合、ちょっとした問題が生じる。ビルドしたデータを公開する際に、データサイズを小さくするための圧縮( hugo --minify
)を用いられるケースの方が多いのではないだろうか(デメリットがないため)。
しかし、 <PageMap>
データはHTMLコメント内に記載しなければならないことから、この情報が --minify
によって取り除かれてしまう。
まず最初に、Hugo の HTMLテンプレート(Goテンプレート)にて HTMLコメントを出力するには、 {{"<!--" | safeHTML}}
を利用すればよい。
{{"<!--" | safeHTML}}
<PageMap>
....
</PageMap>
{{"-->" | safeHTML}}
この状態だと開発モードでは表示できるが、 hugo --minify
して公開用データを生成したタイミングでは削除されてしまう。
--minify
実装Hugo 公式ドキュメントの Configuration ページによると、コメントを残す条件を指定できる。ここで『 <head>
タグ内だけ残す』という実装が可能であれば都合よいのだが、そううまくはいかない。
minify:
tdewolff:
html:
keepComments: false
keepConditionalComments: true
keepDefaultAttrVals: true
keepDocumentTags: true
keepEndTags: true
keepQuotes: false
keepWhitespace: false
ここで、 keepConditionalComments
設定の挙動を確認する。 tdewolff/minify ライブラリによると、IE Conditional comments を残す実装となっている。
KeepConditionalComments
preserve all IE conditional comments such as<!--[if IE 6]><![endif]-->
and<![if IE 6]><![endif]>
次に、 IE Conditoinal comments にはどのような表現ができるのかを確認する。
もちろん今回、条件分岐をしたいわけではなく、Hugo の minifier を回避することが目的である。そうなると以下の2種類が候補として挙がる。
Item | Example | Comment |
---|---|---|
true | [if true] |
Always evaluates to true. |
false | [if false] |
Always evaluates to false. |
以下のコードで完成。
{{"<!--[if true]>" | safeHTML}}
<PageMap>
<DataObject type="thumbnail">
<Attribute name="src" value="{{ $metaThumbnailImage | absURL }}"/>
<Attribute name="width" value="{{ $width }}"/>
<Attribute name="height" value="{{ $height }}"/>
</DataObject>
</PageMap>
{{"<![endif]-->" | safeHTML}}
true
/ false
のいずれにおいても全くの実害はなく、ちょっと目障りな程度で目的は十分に達成できると考えられる。<meta thumbnail
と併用すべきである。