アルパカログ

Notion Blogで記事ごとに設定したOG Imageを使う

2021年1月13日
🔖Notion Blog

Notion Blogで記事ごとにOG Imageを設定して使いたいということがあります。

少しカスタマイズが必要ですが、Notion Blogならもちろん可能です。

このエントリでは、記事テーブルにOG Image用の列を追加し、アップロードした画像をOG Imageとして使う方法を説明します。

記事テーブルにOG Image用の列を追加する

まず最初にブログの記事テーブルにOG Image用の列を OGImage という名前で Files & media として追加します。

列を追加したら、動作確認のために適当な画像をアップロードしておきましょう。

記事テーブルは下記のようになりました。

An image from Notion
OGImage列を追加して画像をアップロードした

OG Imageをheadのメタタグに設定する

Notion BlogはデフォルトではOG Imageは固定になっています。記事ごとに設定したOG Imageで変更できるようにしたいので、引数を設定し、受け取った引数によってOG Imageを変更できるようにします。

下記のコミットは同時に description も受け取れるようにしていますが、ぜひ参考にしてみてください。

次に Header に対してOG Imageを渡します。

これで完成と思いきや、そうではありません。Notionにアップロードした画像は公開されていないのでそのままでは画像切れてしまいます。アップロードした画像をNotion Blogで表示するにはAPIを使って公開用のURLを取得する必要があるのです。

下記のコミットを参考にして ogImageUrl を修正します。

少し踏み込んだ話をしますと、画像URLを取得するAPIは /api/asset?assetUrl={encodedImageUrl}&blockId={blockId} という形式になっていて、画像のURL ( post.OGImage で得られるもの) の他に blockId が必要になります。

Notion では全てのコンテンツがブロックという単位で管理されていて、記事の本文に含まれる画像であれば「画像ブロック」という扱いで簡単に blockId を取得することができますが、今回のように記事テーブルに画像がある場合は blockId の取得は少し厄介になります。

記事テーブルに画像をアップロードした場合は、どうやらテーブル(データベース)の行ブロックが該当の blockId になるということがわかりました。

ですので↑のコミットでは同時にテーブルの行ブロックのIDを頑張って取得しています。

これで記事ごとに個別のOG Imageが設定できました。OG Imageの確認にはTwitterのCard Validatorが便利なので使ってみてください。

An image from Notion
Card validatorでOG Imageなどが確認できる

以上です。このエントリでは、記事テーブルにOG Image用の列を追加し、アップロードした画像をOG Imageとして使う方法を説明しました。

タグ