gazou-compressor.jp

OGPサムネ完全設計:安全域・比率・可読タイポ・自動生成(Next.js)

OGP はシェアの顔。ですがテキストが切れる/潰れる/読みにくいとクリック率が落ちます。 本記事は比率(約1.91:1)・安全域・文字最小サイズ・コントラスト・容量を「運用できる設計」に落とし込み、 さらに Next.js の動的OGP(/og)実装まで最短で到達します。

先に結論
  • 比率は約1.91:1(例:1200×630)基準、上下左右に安全域を確保。
  • タイトルは短く太く(全角25〜30字目安)。背景と十分なコントラスト
  • 容量は過大にしない(写真ベースは AVIF/WebP、図版は PNG-8/PNG、高圧縮の検討)。
  • 動的OGPでタイトル差し替えを自動化。テンプレに安全域ガイドを焼き込み。

要点(TL;DR)

1. なぜ「安全域」が要るのか

OGPカードは媒体側の枠や角丸・テキスト重ね、表示倍率で端が欠けたり縮小されます。端ギリギリに文字や重要要素を置くと、視認性が落ちます。 そこで外周に安全域(マージン)を設け、「切れても困らない領域」を確保します。 併せて比率の揺れや端末差に耐えるデザインが必要です。

また、サムネ経由で訪れたユーザーは本文のヒーロー画像や LCP にも敏感です。サムネづくりと同時に、本文側のCLSゼロ設計 srcset/sizes を整えると、全体の体験が揃います。

2. 最短フロー(実務)

  1. テンプレートを用意(1200×630、外周80px安全域、角丸想定)。ガイド線と背景のコントラストを確保。
  2. 見出しは短い強い言葉に絞る。副題は下段に12–28px程度で薄く配置し、可読性を損ねない。
  3. 画像は 写真=AVIF/WebP、アイコンや図版は PNG系 を検討。/compare で差分を確認。
  4. Next.js の ImageResponse/og を実装し、タイトルをクエリで差し替え。CMS連携で自動化。

3. 実装レシピ(コピペOK)

3.1 動的OGP(/og)

// TypeScript / React (Next.js Edge)// app/og/route.tsx — Next.js Edge Runtimeで動的OGPを生成
import { ImageResponse } from "next/og";

export const runtime = "edge";
export const alt = "gazou-compressor.jp";
export const size = { width: 1200, height: 630 };
export const contentType = "image/png";

export async function GET(req: Request) {
  const { searchParams } = new URL(req.url);
  const title = (searchParams.get("title") || "タイトル").slice(0, 80);

  return new ImageResponse(
    (
      <div
        style={{
          width: "1200px",
          height: "630px",
          display: "flex",
          flexDirection: "column",
          justifyContent: "center",
          background: "linear-gradient(135deg,#111,#2a2a2a)",
          color: "#fff",
          fontFamily: "Noto Sans JP, sans-serif",
          position: "relative",
        }}
      >
        {/* 安全域(左右80/上下80pxを目安) */}
        <div
          style={{
            position: "absolute",
            inset: "80px",
            outline: "2px solid rgba(255,255,255,.14)",
            borderRadius: "16px",
          }}
        />
        <div style={{ fontSize: 68, fontWeight: 800, lineHeight: 1.15, padding: "0 120px", letterSpacing: "-.02em" }}>
          {title}
        </div>
        <div style={{ position: "absolute", bottom: 48, left: 120, fontSize: 28, opacity: .9 }}>
          gazou-compressor.jp
        </div>
      </div>
    ),
    { ...size }
  );
}

3.2 安全域ガイド(CSS、プレビュー用)

// CSS/* 安全域オーバーレイ(プレビュー用) */
.safe-frame {
  position: relative;
  width: 1200px;
  height: 630px; /* 1.91:1 付近 */
  background: #111;
}
.safe-frame::after {
  content: "";
  position: absolute;
  inset: 80px;              /* 余白の目安(上下左右) */
  outline: 2px dashed rgba(255,255,255,.35);
  border-radius: 16px;
  pointer-events: none;
}

3.3 メタデータ例(OG画像に /og を紐付け)

// TypeScript (Metadata)// 例:メタデータでOGP指定(概略)
export const metadata = {
  openGraph: {
    images: [
      { url: "/og?title=%E8%A8%98%E4%BA%8B%E3%81%AE%E3%82%BF%E3%82%A4%E3%83%88%E3%83%AB", width: 1200, height: 630, alt: "記事のタイトル" },
    ],
  },
};

画像の色域は基本 sRGB を既定値に。同一デザインでも P3 の飽和色は環境差が出ます(関連: Webのカラーマネジメント)。

4. 応用と使いどころ

5. 公開前チェック

6. まとめ

OGP は「読む前の体験」。比率・安全域・可読性・容量の四点をテンプレ化し、/og で自動化すれば、 “切れない・潰れない・読みやすい”を継続できます。本文側は 予約サイズ設計 レスポンシブ画像 を併せて盤石に。

FAQ(よくある質問)

画像形式の基本方針は?(写真/スクショ/透過)
写真は AVIF / WebP(画質80–85%目安)、UIやスクショはPNG / WebP Lossless、単色ロゴはSVGが基本です。 実装の詳細は srcset/sizes設計ガイド スクショ最適化 を参照してください。
圧縮しても画質を落とさないコツは?
実表示幅に合わせたリサイズ → 過大ダウンロードを防ぎ、srcset/sizes を 実描画幅に一致させます。画質は写真で 80–85% を起点に、ノイズやエッジを目視確認。 仕上げは /compare で Before/After を見比べるのがおすすめです。
CLSを悪化させない画像の置き方は?
すべての画像に width/height(または親に aspect-ratio)を与え、広告・埋め込みは 予約サイズを先に確保します。詳しくは CLSゼロ設計ガイド を参照。

公開:2025-08-31

gazou-compressor.jp 編集部

画像圧縮・変換・背景除去などの実践テクニックと、Webで“速く・軽く・崩さない”ためのノウハウを発信しています。

関連記事