Vercel×SatoriでOGP画像を生成した【astro-notion-blog】

Twitter(Xとは呼ばない)でシェアしたときに記事のタイトルが大きく表示されたらわかりやすいなと思い実装しました。

基本はぐだぐだマンさんの通りです。圧倒的感謝…!

Vercelでデプロイするにはプラスで作業が必要だったので備忘録も兼ねてメモします。

sharpのバージョンを変更する

何故かvercelで最新のsharpを読み込むとエラーが起きるみたいです。

npm uninstall sharpで削除、npm install sharp@0.32.6で古いバージョンに変更すると動くようになります。

OGP画像を静的に生成する

Satoriは各記事のタイトルを取得して動的にOGP画像を生成します。
記事は静的(デプロイ時にposts/[slug/index.htmlとして生成)です。

静的なページに動的な画像は表示できないのでOGP画像も静的(StaticAssets)にする必要があります。

↑この理解ですが、合っているか自信ありません 💦
とりあえずOGP画像をStaticAssetsにします。

▽対応方法はこちらの記事を参考にしました。

src/pages/og/[slug].png.tsを編集する

import { getOgImage }~の下にimport type { RequestHandler } from '@sveltejs/kit’

を追加、export async function getStaticPaths() ~の上にexport const prerender = trueを追加します。

src/pages/posts/[slug].astroを編集する

OGP画像を表示しているページにリンクを追加します。
自分は個別ページにのみ載せているのでsrc/pages/posts/[slug].astroのみ編集します。

<img src={'/og/' + ${post.Slug} + '.png'}~の上に<a href={'/og/' + ${post.Slug} + '.png'} />を追加します。これで本番URLでもOGP画像が見えるはず!

完成!

Image in a image block

きゃわ… 💕
OgImage.tsxもいじってサイトの雰囲気に馴染むようにしてみました。
グラデーションがくどい気もしますが個人サイトだから己の好みを優先します。

ちゃんとシェアしたときもでる!!