未分類
OGP画像自動生成 実装ガイド
概要
SNSでシェア時にタイトル+アイコンを含む画像を自動生成する機能。ZennやNoteのようにシェアプレビューで記事タイトルが画像に表示される。
使用技術
- nuxt-og-image v5: Nuxt公式のOG画像生成モジュール
- Satori: VueコンポーネントをSVGに変換
- Google Fonts: Noto Sans JP(自動ダウンロード)
実装内容
nuxt.config.ts
modules: [
// ... 他のモジュール
"nuxt-og-image"
],
ogImage: {
defaults: {
width: 1200,
height: 630,
renderer: 'satori'
},
fonts: [
'Noto+Sans+JP:400',
'Noto+Sans+JP:700'
],
runtimeBrowser: false,
compatibility: {
prerender: {
satori: 'node',
resvg: 'node'
}
}
}
OG画像テンプレート
apps/web/app/components/OgImage/OgImageTemplate.vue
- 紫グラデーション背景
- ターミナルアイコン(SVG、text要素は使用不可)
- 記事タイトル(中央配置)
- サイト名(右下)
注意: SatoriはSVGの<text>要素をサポートしていない。<path>に変換するか、テキストはVueテンプレートで表示する。
ページでの使用
// defineOgImage(v5のAPI)を使用
defineOgImage({
component: 'OgImageTemplate',
title: '記事タイトル'
});
useSeoMetaでogImage/twitterImageは設定不要。nuxt-og-imageが自動で設定する。
OG画像デザイン
┌──────────────────────────────────────────────────────┐
│ ████████████████████ (グラデーション背景) │
│ │
│ [ターミナルアイコン] │
│ │
│ 記事タイトル │
│ (大きく白文字で中央配置) │
│ │
│ log.eurekapu.com │
└──────────────────────────────────────────────────────┘
サイズ: 1200 x 630px
確認方法
ローカル確認
pnpm dev
個別ページのOG画像URL:
# トップページ
http://localhost:3000/__og-image__/image/og.png
# 記事ページ
http://localhost:3000/__og-image__/image/2025-12-23/記事スラッグ/og.png
注意: /__og-image__/(一覧ページ)は開発モードでは動作しない。Nuxt DevToolsまたは個別URLで確認する。
デプロイ後確認
生成フロー
pnpm generateを実行- nuxt-og-imageが全ページを巡回
- 各ページのOG画像を
dist/__og-image__/に生成 - 静的ファイルとしてCloudflare Pagesにデプロイ
変更ファイル一覧
| ファイル | 変更内容 |
|---|---|
nuxt.config.ts | nuxt-og-imageモジュール追加・設定 |
app/pages/[...slug].vue | defineOgImage追加 |
app/pages/index.vue | defineOgImage追加 |
app/components/OgImage/OgImageTemplate.vue | 新規作成 |