Community画像github.com

getpaidskills/og-image-kit

Webサイトの全ページに対してOpen Graph / Twitter (X) 共有画像を生成し、og:* および twitter:* メタタグを設定、さらにソーシャルプレビューを検証します。Next.js App Router(opengraph-image.tsx と next/og ImageResponse)、Astro(satori + resvg によるビルド時PNG)、および任意の静的サイト(Pillowスクリプト)をサポートします。OG画像、ソーシャルシェアカード、リンクプレビュー、「X/Slack/LinkedIn/WeChatでリンクの見た目が悪い」、twitter:card、またはサイト公開前にユーザーが尋ねた場合に使用してください。

og-image-kit とは?

og-image-kit は、サイトの全公開ページに 1200×630 のソーシャルシェア画像を生成し、正しい `og:*` および `twitter:*` メタタグを設定した上で、検証スクリプトを使って実際に動作確認まで行うためのスキルです。対応フレームワークは Next.js(App Router / Pages Router)、Astro、そして静的サイト(Hugo、Jekyll、Vite SPA など)で、各環境に最適な画像生成方式を自動選択します。Next.js では `next/og` の `ImageResponse` を利用、Astro ではビルド時に `satori` + `resvg-js` でPNGを生成、静的サイトでは Python の Pillow ライブラリで一括生成します。最終ステップとして `scripts/check_og.py` を実行し、全ページのOGタグが正しく設定され、画像が適切なサイズ・フォーマットであるかを自動検証、エラーがあった場合は修正を促します。ソーシャルプラットフォームのキャッシュ問題にも対応するため、各種デバッガの使い方もドキュメント化されています。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/getpaidskills/skills/tree/HEAD/skills/og-image-kit

Installed? Explore more 画像 skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

og-image-kit は何をしますか?

目標: すべての公開ページに 1200×630 の共有画像と正しい og:* / twitter:* タグが設定され、scripts/check_og.py を使って検証されていること。単に書き込んだだけでは不十分です。

ステップ 1 — スタックを判別する

コードを書く前にリポジトリを確認してください:

シグナルスタック移動先
package.json に next があり、app/(または src/app/)ディレクトリがあるNext.js App Routerステップ 2A
next があるが pages/ のみNext.js Pages Routerステップ 2C(静的)または /api/og を ImageResponse で追加
package.json に astro があるAstroステップ 2B
プレーンHTML、Hugo、Jekyll、Vite SPA、その他静的ステップ 2C

また、サイトの正規ベースURL(環境変数 NEXT_PUBLIC_SITE_URL、astro.config.* の site)、ブランドカラー、ロゴ、使用フォントも見つけてください。見つからない場合のみユーザーに質問してください。

ステップ 2A — Next.js App Router

  1. ルートレイアウトが metadataBase をエクスポートしていることを確認します(OG URLは絶対パスである必要があります):
    export const metadata = { metadataBase: new URL(process.env.NEXT_PUBLIC_SITE_URL ?? "http://localhost:3000") }
    
  2. assets/nextjs/opengraph-image.tsx を app/opengraph-image.tsx にコピーします(サイトデフォルト)。 BRAND、色、タグラインを編集します。
  3. 動的ルート(ブログ記事、商品など)の場合、ルートセグメントにコピーします(例: app/blog/[slug]/opengraph-image.tsx)。assets/nextjs/dynamic-opengraph-image.tsx を使用します。これは params を読み取り、データソースからタイトルを読み込みます。 Next.js 15+ では params は Promise です — await してください。
  4. Xカードを変更する必要がある場合のみ twitter-image.tsx も追加します。それ以外の場合、Next.js はメタデータで twitter: { card: "summary_large_image" } を設定すればOG画像を再利用します。
  5. ページごとのテキスト: 各ページの metadata / generateMetadata で title と description を設定します。
  6. カスタムフォント: fetch(new URL("./Inter-Bold.ttf", import.meta.url)) または readFile でTTF/OTF(WOFF2不可)を読み込みます。CJKテキストにはCJKフォントファイルが必要です。そうしないと文字が表示されません — サイズを抑えるためにサブセット化してください。

守るべき制限(next/og / satori): flexboxのみ(grid不可)。複数の子を持つ div にはすべて display: "flex" が必要です。バンドルサイズを小さく保ってください — Next.js の ImageResponse ドキュメントでは、JSX + CSS + フォント + 画像で500 KBの制限が記載されています。大きなフォントはレンダリングを遅くするので、サブセット化してください。

ステップ 2B — Astro

assets/astro/og-endpoint.ts を src/pages/og/[...slug].png.ts として使用します。ビルド時に satori + @resvg/resvg-js(npm i satori @resvg/resvg-js)でページごとにPNGをレンダリングし、レイアウトから参照します:

<meta property="og:image" content={new URL(`/og/${slug}.png`, Astro.site)} />

Astro.site は astro.config.mjs で設定する必要があります。フォントファイル: TTFを src/assets/fonts/ に配置します。

ステップ 2C — 静的サイト / その他

PNGを一度生成してコミットします:

python3 scripts/generate_og.py --pages pages.json --out public/og --brand "Acme" --bg "#0f172a" --fg "#ffffff" --accent "#38bdf8"

pages.json は {"slug": "pricing", "title": "...", "subtitle": "..."} のリストです(assets/pages.example.json 参照)。Pillowが必要です(pip install pillow)。ブランドフォントやCJKテキスト(例: Noto Sans SC)には --font path/to/font.ttf を渡します。その後、各ページにタグを追加します(テンプレートは references/meta-tags.md)。

ステップ 3 — 必須タグ(すべてのページ)

<meta property="og:title" content="ページタイトル" />
<meta property="og:description" content="1文、約160文字以内" />
<meta property="og:image" content="https://example.com/og/page.png" />   <!-- 絶対URL -->
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:url" content="https://example.com/page" />
<meta property="og:type" content="website" />
<meta name="twitter:card" content="summary_large_image" />

Next.js は metadata + opengraph-image.tsx からこれらを生成します。重複して手動で記述しないでください。

ステップ 4 — 検証(省略しないこと)

実行中のサイト(開発サーバー、プレビューデプロイ、または本番)に対して実行:

python3 scripts/check_og.py http://localhost:3000/ http://localhost:3000/pricing
python3 scripts/check_og.py --json https://example.com/   # 機械可読

各ページを取得し、必須タグの存在、og:image が絶対URLでアクセス可能で画像コンテンツタイプであること、縦横比が約1.91:1、幅が600px以上、サイズが5MB未満であることをチェックします。エラーがあると終了コード1。ERROR とマークされたものはすべて修正してください。WARN は推奨事項です。

注意: ソーシャルプラットフォームはプレビューをキャッシュします。修正後、各プラットフォームのデバッガ(LinkedIn Post Inspector、Facebook Sharing Debugger)を使用して再スクレイピングしてください。Xには現在公開バリデータはありません。下書き/DMに投稿して確認します。localhost URLはそれらのツールでスクレイピングできません — 先にデプロイしてください。

画像のデザインルール

  • 1200×630、PNG、テキストは約60pxの安全マージン内。タイトルは約60文字以内、最大3行。
  • 高いコントラスト。フィードでは小さく表示される(約500px幅)。50%ズームでテストしてください。
  • ブランド名/ロゴを含める。小さなテキスト(1200幅で28px未満)は避けてください。
  • プラットフォームごとの注意点は references/platform-specs.md を参照してください。

完了条件

  • インデックス可能なすべてのページが og:title、og:description、og:image(絶対URL)、twitter:card を返す
  • check_og.py がホームページと各ルートタイプの少なくとも1ページで終了コード0を返す
  • 画像が正しく見える(PNGを1つ開いて確認する)

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

getpaidskills/agents-md-starter

Creates or upgrades a repository's AGENTS.md (read by Codex, Cursor, and other agents) and a CLAUDE.md that imports it, so Claude Code, Codex, Cursor and Gemini CLI share one set of project rules. Scans the repo to detect languages, package manager, real build/test/lint commands, framework, directory layout and existing rule files (.cursorrules, .cursor/rules, CLAUDE.md, copilot-instructions), then writes a concise, verified rules file. Use when the user asks to set up AGENTS.md or CLAUDE.md, "project rules", "make Claude Code and Codex follow the same conventions", onboard an agent to a repo, or migrate .cursorrules.

getpaidskills/directory-launch-kit

Prepares a product for submission to launch platforms and directories (Product Hunt, Show HN, BetaList, Uneed, Fazier, SaaSHub, TinyLaunch, AI tool directories, agent-skill marketplaces, Reddit, V2EX and more) without submitting anything itself. Picks only the directories the product fits, writes the copy for each form within its field limits from one product.json, resizes screenshots to each platform's sizes (Product Hunt 1270x760 gallery and 240x240 thumbnail, 1200x630 OG), builds a tracker CSV, re-checks prices and rules on the live pages, and later verifies which listings went live and whether their backlinks are follow or nofollow. Use when the user asks where to launch, how to submit to Product Hunt or AI directories, wants launch copy, a directory list, backlinks, or a launch tracker.

getpaidskills/launch-checklist

Pre-launch audit for a website or SaaS - checks SEO tags (title, description, canonical, lang, Open Graph), robots.txt, sitemap.xml, favicon and apple-touch-icon, real 404 status, HTTPS redirect, legal pages (privacy, terms, refund), image alt text, page weight and response time, plus a payment self-check (webhook signature, raw body, idempotency, refunds, secrets, success-page grants), then lists the problems and fixes them in the codebase. Ships a no-dependency crawler script (audit_site.py) that produces a pass/warn/fail report. Use when the user says they are about to launch, ship, go live, submit to Product Hunt or AI directories, or asks "is my site ready", "SEO check", "why is my site not indexed", or wants a launch checklist, or asks whether their payment or webhook setup is safe.

getpaidskills/legal-pages

Drafts a Privacy Policy, Terms of Service and Refund Policy for a SaaS, digital product or website from a short questionnaire, adapted to the payment provider (Creem, Paddle, Lemon Squeezy as Merchant of Record, or Stripe/direct) and to where users are (EU/UK GDPR, California CCPA/CPRA, China PIPL notes), then renders them as Markdown, HTML or Next.js pages and links them in the footer. Output is a starting template, NOT legal advice - the user must review it and have it checked by a qualified lawyer. Use when the user needs privacy policy, terms, refund policy, legal pages, or a payment provider (Paddle/Creem/Lemon Squeezy/Stripe) review asks for them.

関連スキル