構造化データ(JSON-LD)完全入門 — Google に正しく情報を伝える方法

構造化データとは

構造化データは、ページの内容を検索エンジンに「機械が読める形」で伝えるための仕組みです。HTML はページの見た目を定義しますが、構造化データはページの「意味」を定義します。

HTML:  「このテキストは記事のタイトルです」 → 人間が読んで理解
JSON-LD: 「このページは BlogPosting で、タイトルは〇〇、著者は△△」 → 検索エンジンが理解

なぜ重要なのか

構造化データを正しく実装すると、以下のメリットがあります。

JSON-LD の基本構文

構造化データのフォーマットは3種類ありますが、Google が推奨しているのは JSON-LD です。

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "スキーマの種類",
  "プロパティ名": "値"
}
</script>

<head> または <body> 内のどこにでも配置できます。ページの表示には影響しません。

実践: よく使うスキーマ6選

1. WebSite(トップページ)

サイト全体の情報を定義します。トップページに1つだけ配置します。

{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "サイト名",
  "url": "https://example.com/",
  "description": "サイトの説明",
  "publisher": {
    "@type": "Organization",
    "name": "運営組織名"
  }
}

2. Organization(About ページ)

運営組織の情報を定義します。E-E-A-T の信頼性を高めます。

{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "組織名",
  "url": "https://example.com/",
  "logo": {
    "@type": "ImageObject",
    "url": "https://example.com/logo.png"
  },
  "description": "組織の説明"
}

3. BlogPosting(記事ページ)

ブログ記事の情報を定義します。リッチリザルトに影響する重要なスキーマです。

{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "記事タイトル",
  "description": "記事の説明",
  "datePublished": "2026-03-24T00:00:00Z",
  "dateModified": "2026-03-24T00:00:00Z",
  "image": ["https://example.com/image.png"],
  "author": {
    "@type": "Organization",
    "name": "著者名"
  },
  "publisher": {
    "@type": "Organization",
    "name": "発行者名",
    "logo": {
      "@type": "ImageObject",
      "url": "https://example.com/logo.png"
    }
  }
}

image プロパティは必須です。未設定だとリッチリザルトの対象外になります。

4. BreadcrumbList(パンくずリスト)

ページの階層構造を定義します。検索結果にパンくずが表示されます。

{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "ホーム",
      "item": "https://example.com/"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "記事タイトル",
      "item": "https://example.com/posts/slug/"
    }
  ]
}

5. Service(サービスページ)

提供するサービスの情報を定義します。

{
  "@context": "https://schema.org",
  "@type": "Service",
  "name": "サービス名",
  "description": "サービスの説明",
  "provider": {
    "@type": "Organization",
    "name": "提供者名",
    "url": "https://example.com/"
  }
}

6. ProfessionalService(サービス一覧)

複数のサービスをまとめて定義する場合に使います。

{
  "@context": "https://schema.org",
  "@type": "ProfessionalService",
  "name": "組織名",
  "hasOfferCatalog": {
    "@type": "OfferCatalog",
    "name": "サービス一覧",
    "itemListElement": [
      {
        "@type": "Offer",
        "itemOffered": {
          "@type": "Service",
          "name": "サービス1"
        }
      }
    ]
  }
}

使ってはいけないスキーマ

以下のスキーマは、Google が制限またはサポートを終了しているため、使用を避けてください。

スキーマ状態
HowTo2023年にリッチリザルト非対応化。使っても効果なし
FAQPage政府・医療サイト以外ではリッチリザルト非対応

Astro での実装方法

Astro では、フロントマター(--- ブロック)で JSON-LD オブジェクトを定義し、テンプレートで <script> タグとして出力します。

---
const jsonLd = {
  '@context': 'https://schema.org',
  '@type': 'BlogPosting',
  headline: 'タイトル',
  datePublished: '2026-03-24',
};
---

<script
  type="application/ld+json"
  set:html={JSON.stringify(jsonLd)}
/>

set:html ディレクティブを使うことで、Astro がエスケープせずに JSON をそのまま出力します。

検証方法

実装した構造化データは、以下のツールで検証できます。

まとめ

構造化データは「検索エンジンに正しく情報を伝える」ための仕組みです。

正しく実装すれば、同じコンテンツでも検索結果での見え方が変わり、クリック率の向上につながります。