熊本ホームページ制作・Webマーケティング・SEO対策・MEO対策・GEO対策・Webデザイン・パンフレット・ロゴ・名刺・動画制作・広告運用・コーディング代行・オリジナルアパレル・グッズ制作は株式会社CREVIAへ

5F Shimotori Building
1-12-27 Shimotori Chuo-ku
Kumamoto-shi Kumamoto
860-0807 Japan

News

お知らせ

JSON-LDの書き方完全ガイド|業種別・タイプ別サンプルコードをコピーして使える形で徹底解説

「JSON-LDの書き方を調べたが、サンプルコードが自社の業種に合っていない」「コピーして使えるテンプレートがほしい」「複数タイプを@graphでまとめる方法がわからない」

この記事では、構造化マークアップで使用する主要タイプのJSON-LDサンプルコードを、業種別・タイプ別にコピーしてすぐ使える形で掲載します。各コードの意味・プロパティの説明・注意点もあわせて解説します。

この記事でわかること

  • JSON-LDの基本構造と@graphの使い方
  • FAQPage・LocalBusiness・Article・BreadcrumbListのサンプルコード
  • Product・Review・Event・HowTo・JobPostingのサンプルコード
  • 複数タイプを@graphでまとめる実践サンプル
  • 業種別(サービス業・飲食・EC・士業など)の推奨セット
  • サンプルを使う際の注意点と必須確認事項

1. JSON-LDの基本構造と@graphの使い方

― まずここを理解すれば、どのタイプでも応用できる ―

単一タイプの基本構造

<script type="application/ld+json">
{
  "@context": "https://schema.org",  // 必須。常にこの値
  "@type": "タイプ名",             // 必須。FAQPage・LocalBusiness等
  "@id": "https://example.com/#id",  // 推奨。このスキーマの固有ID
  // タイプに応じたプロパティを以下に記述
  "name": "値"
}
</script>

複数タイプを@graphでまとめる構造(推奨)

同一ページに複数のスキーマタイプを実装する場合は、@graphを使って1つの<script>タグにまとめることをGoogleは推奨しています。

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "タイプ1",
      // タイプ1のプロパティ
    },
    {
      "@type": "タイプ2",
      // タイプ2のプロパティ
    }
  ]
}
</script>

注意:@graphを使う場合は@contextは外側の1箇所のみに記述します。各タイプの中に@contextを重複して書くとエラーになります。

JSON記述のルール(必ず守る3点)

① 文字列は必ずダブルクォーテーション
プロパティ名・文字列値は必ず"(ダブルクォート)で囲む。シングルクォート'はエラーになる。
② 最後の要素にカンマは不要
配列・オブジェクトの最後の要素の後にカンマをつけると構文エラーになる。"name": "値",→最後だけ"name": "値"
③ 括弧・ブラケットの対応を確認
{}(オブジェクト)と[](配列)の開き・閉じが必ず対応している必要がある。ネストが深くなるほど漏れやすい。

2. FAQPage(よくある質問)のサンプルコード

― 全業種で最優先。AI検索での引用率向上にも直結する ―

FAQPageは最もよく使われるタイプの一つで、検索結果のQ&A展開表示とAI検索での引用促進の両方に効果があります。質問は3〜5問程度が推奨です。

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "@id": "https://example.com/page/#faq",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "1問目の質問文をここに記入",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "1問目の回答文をここに記入"
      }
    },
    {
      "@type": "Question",
      "name": "2問目の質問文",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "2問目の回答文"
      }
    },
    {
      "@type": "Question",
      "name": "3問目の質問文",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "3問目の回答文"
      }
    }
  ]
}
</script>

必須プロパティ
@type(FAQPage)・mainEntity・Question内のname・acceptedAnswer内のtext
必須ルール
質問・回答はページ上に実際に表示されていること。ページに存在しない内容の記述はガイドライン違反。
推奨問数
3〜5問が最適。10問を超えるとGoogleが全問表示しない場合がある。AI検索での引用を狙うなら具体的な回答文を記述する。

3. LocalBusiness(店舗・会社情報)のサンプルコード

― 来店型ビジネス必須。トップページのheadタグに実装する ―

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",  // 業種別サブタイプ例は下記参照
  "@id": "https://example.com/#organization",
  "name": "店舗名・会社名",
  "url": "https://example.com",
  "telephone": "096-XXX-XXXX",
  "email": "info@example.com",
  "description": "会社・店舗の簡単な説明文",
  "address": {
    "@type": "PostalAddress",
    "postalCode": "860-0000",
    "addressRegion": "熊本県",
    "addressLocality": "熊本市中央区",
    "streetAddress": "下通1-1-1 ○○ビル3F",
    "addressCountry": "JP"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 32.8038,  // Googleマップで確認
    "longitude": 130.7079
  },
  "openingHours": [
    "Mo-Fr 10:00-19:00",
    "Sa 10:00-17:00"
  ],
  "priceRange": "¥30,000〜",
  "areaServed": {
    "@type": "Country",
    "name": "日本"
  },
  "logo": {
    "@type": "ImageObject",
    "url": "https://example.com/logo.png"
  },
  "sameAs": [
    "https://www.instagram.com/yourhandle",
    "https://www.facebook.com/yourpage"
  ]
}
</script>

業種別サブタイプ一覧(@typeを変更するだけ)

飲食店:Restaurant
美容院:HairSalon
クリニック:MedicalClinic
歯科:Dentist
整骨院:MedicalBusiness
ホテル:LodgingBusiness
不動産:RealEstateAgent
法律事務所:LegalService
会計事務所:AccountingService
一般企業:LocalBusiness

4. Article(記事・ブログ)のサンプルコード

― ブログ・コラムページに実装。E-E-A-T評価と著者情報を強化する ―

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "@id": "https://example.com/archives/xxx/#article",
  "headline": "記事のタイトル(110文字以内)",
  "description": "記事の概要・説明文(メタディスクリプションと同じでOK)",
  "image": "https://example.com/wp-content/uploads/ogp-image.jpg",
  "datePublished": "2026-03-05",  // ISO 8601形式(YYYY-MM-DD)
  "dateModified": "2026-03-05",   // 更新時に変更する
  "author": {
    "@type": "Organization",  // 個人の場合は"Person"
    "name": "株式会社○○"
  },
  "publisher": {
    "@type": "Organization",
    "name": "株式会社○○",
    "logo": {
      "@type": "ImageObject",
      "url": "https://example.com/logo.png"
    }
  },
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://example.com/archives/xxx/"
  }
}
</script>

dateModifiedは記事を更新するたびに変更する

dateModifiedを最新の更新日に保つことで、Googleが「このページは最新情報に更新されている」と判断しやすくなります。WordPressのSEOプラグインを使用している場合はほぼ自動で設定されますが、手動実装の場合は更新のたびに変更してください。

5. BreadcrumbList(パンくずリスト)のサンプルコード

― 全ページに実装推奨。サイト構造をGoogleに正確に伝える ―

<script type="application/ld+json">
{
  "@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/category/"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "現在のページタイトル",
      "item": "https://example.com/archives/xxx/"
    }
  ]
}
</script>

positionは1から始まる連番。最後のページにもitemを記述する

最後の階層(現在のページ)にもitemプロパティを記述してください。省略するとGoogleが正しく認識しない場合があります。WordPressのSEOプラグインを使用している場合はBreadcrumbListは自動出力されるため、手動での重複実装は避けてください。

6. Product・Review・Event・HowTo・JobPostingのサンプルコード

Product(商品)― ECサイト・オンラインショップ向け

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "商品名",
  "description": "商品の説明文",
  "image": "https://example.com/product-image.jpg",
  "sku": "商品コード",
  "offers": {
    "@type": "Offer",
    "price": "12800",
    "priceCurrency": "JPY",
    "availability": "https://schema.org/InStock",
    "url": "https://example.com/product/xxx/"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.8",
    "reviewCount": "36"
  }
}
</script>

Event(イベント)― セミナー・展示会・ライブ向け

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Event",
  "name": "イベント・セミナー名",
  "description": "イベントの概要説明",
  "startDate": "2026-04-10T14:00:00+09:00",
  "endDate": "2026-04-10T16:00:00+09:00",
  "eventStatus": "https://schema.org/EventScheduled",
  "eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
  "location": {
    "@type": "Place",
    "name": "会場名",
    "address": {
      "@type": "PostalAddress",
      "addressLocality": "熊本市中央区",
      "addressRegion": "熊本県",
      "addressCountry": "JP"
    }
  },
  "organizer": {
    "@type": "Organization",
    "name": "主催会社名",
    "url": "https://example.com"
  },
  "offers": {
    "@type": "Offer",
    "price": "0",  // 無料の場合は"0"
    "priceCurrency": "JPY",
    "availability": "https://schema.org/InStock"
  }
}
</script>

JobPosting(採用情報)― Googleしごと検索への表示

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "JobPosting",
  "title": "募集職種名",
  "description": "仕事内容・募集要項の説明",
  "datePosted": "2026-03-05",
  "validThrough": "2026-06-30",  // 募集終了日
  "employmentType": "FULL_TIME",  // PART_TIME・CONTRACTOR等
  "hiringOrganization": {
    "@type": "Organization",
    "name": "採用企業名",
    "url": "https://example.com"
  },
  "jobLocation": {
    "@type": "Place",
    "address": {
      "@type": "PostalAddress",
      "addressLocality": "熊本市",
      "addressRegion": "熊本県",
      "addressCountry": "JP"
    }
  },
  "baseSalary": {
    "@type": "MonetaryAmount",
    "currency": "JPY",
    "value": {
      "@type": "QuantitativeValue",
      "value": 250000,
      "unitText": "MONTH"
    }
  }
}
</script>

7. 複数タイプを@graphでまとめる実践サンプル

― 記事ページにArticle+FAQPage+BreadcrumbListを一括実装する例 ―

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [

    // ① Article
    {
      "@type": "Article",
      "@id": "https://example.com/archives/xxx/#article",
      "headline": "記事タイトル",
      "datePublished": "2026-03-05",
      "dateModified": "2026-03-05",
      "author": { "@type": "Organization", "name": "株式会社○○" },
      "breadcrumb": { "@id": "https://example.com/archives/xxx/#breadcrumb" }
    },

    // ② FAQPage
    {
      "@type": "FAQPage",
      "@id": "https://example.com/archives/xxx/#faq",
      "mainEntity": [
        {
          "@type": "Question",
          "name": "質問文",
          "acceptedAnswer": { "@type": "Answer", "text": "回答文" }
        }
      ]
    },

    // ③ BreadcrumbList
    {
      "@type": "BreadcrumbList",
      "@id": "https://example.com/archives/xxx/#breadcrumb",
      "itemListElement": [
        { "@type": "ListItem", "position": 1, "name": "ホーム", "item": "https://example.com/" },
        { "@type": "ListItem", "position": 2, "name": "カテゴリ", "item": "https://example.com/category/" },
        { "@type": "ListItem", "position": 3, "name": "記事タイトル", "item": "https://example.com/archives/xxx/" }
      ]
    }

  ]
}
</script>

@idで相互参照するとGoogleの理解度が上がる

上記サンプルのようにArticleのbreadcrumbプロパティからBreadcrumbListの@idを参照することで、「このArticleにはこのBreadcrumbListが対応する」という関連性をGoogleに明示できます。このような@id参照の活用が、高品質な構造化マークアップの実装ポイントです。

8. 業種別・推奨実装セット一覧

― 「まず何を入れればいいか」を業種別にまとめた早見表 ―

業種 最優先(必ず実装) 追加推奨
士業・コンサル・BtoB Organization・FAQPage・BreadcrumbList Article・Person(代表者)
クリニック・歯科・整骨院 LocalBusiness(MedicalClinic等)・FAQPage・BreadcrumbList Review・OpeningHours詳細
美容院・エステ・サロン LocalBusiness(HairSalon等)・FAQPage・BreadcrumbList Review・Event(キャンペーン)
飲食店・カフェ Restaurant・FAQPage・BreadcrumbList Review・Menu・Event
リフォーム・建設・塗装 LocalBusiness・FAQPage・BreadcrumbList Review・Article・HowTo
ECサイト・通販 Product・BreadcrumbList・FAQPage Review・Organization
セミナー・スクール・教室 Event・FAQPage・BreadcrumbList Course・Review・Organization
ホームページ制作・IT Organization・Article・FAQPage・BreadcrumbList JobPosting・HowTo

9. サンプルを使う際の注意点

必ず守る3つのルール

① 自社の正確な情報に書き換える
サンプルコードのexample.com・「会社名」「質問文」などはすべて自社の実際の情報に置き換えてください。サンプルのまま使用するとガイドライン違反になります。
② ページ上に表示されている内容と一致させる
FAQPageの質問・回答、Productの価格・在庫など、構造化データに記述した内容はページ上に実際に表示されている必要があります。「構造化データだけに情報を入れてページには載せない」はガイドライン違反です。
③ 実装後は必ずリッチリザルトテストで確認する
貼り付けた後にGoogleのリッチリザルトテストでURLを入力し、エラーがないかを必ず確認してください。エラーがあるとリッチリザルトは表示されません。

エラーが出た場合は専門記事で対処法を確認してください

リッチリザルトテストやSearch Consoleで表示されるエラーの意味・修正方法は、「構造化マークアップのエラー確認・修正方法」で詳しく解説しています。

10. よくある質問(FAQ)

Q. JSON-LDはheadタグとbodyタグのどちらに書けばいいですか?
Googleはheadタグ・bodyタグのどちらでも認識します。全ページ共通のスキーマ(OrganizationやWebSiteなど)はheadタグ内への記述が推奨されます。ページ固有のスキーマ(FAQ・Eventなど)はbodyタグ内のコンテンツ近くに配置しても問題ありません。WordPressのカスタムHTMLブロックはbodyタグ内に出力されますが、Googleは正常に認識します。

Q. @graphを使う理由は何ですか?
@graphを使うと、複数のスキーマタイプを1つのscriptタグ内にまとめて記述できます。複数のscriptタグに分けた場合と比較して、Googleがタイプ間の関連性をより正確に理解しやすくなります。また管理のしやすさの面でも@graphでの一元管理が推奨されます。

Q. JSON-LDの文字列内にHTMLタグを使えますか?
FAQPageのAnswerのtextプロパティなど、一部のプロパティではHTMLタグを使用できます。ただし使用できるタグは限定的(br・p・ul・li・aなど)で、scriptやstyleなどは使用不可です。また、Googleの表示上はHTMLタグが無視されプレーンテキストとして表示されるケースがほとんどです。

Q. @idはすべてのスキーマに必要ですか?
@idはスキーマに「固有のID」を与えるためのプロパティで、必須ではありませんが設定を推奨します。@idを設定することで、異なるページの構造化データから同一エンティティを参照できるようになります。たとえばすべての記事ページからOrganizationの@idを参照することで、Googleがサイト全体の構造をより正確に理解できます。

Q. サンプルコードをコピーして使う際の注意点は何ですか?
必ず①自社の情報に書き換えること、②ページ上に表示されているコンテンツと内容が一致していること、③貼り付け後にGoogleのリッチリザルトテストでエラーがないか確認することの3点を守ってください。サンプルコードをそのままURLだけ変えて使用すると、架空の情報が構造化データに入りガイドライン違反になるリスクがあります。

構造化マークアップの実装・ご相談はCREVIAへ

「サンプルをもとに実装したがエラーが出る」「業種に合ったコードを正確に設定してほしい」「SEO・GEO対策とまとめて依頼したい」など、どの段階でもお気軽にご相談ください。

▶ 無料相談・お問い合わせはこちら

熊本・全国対応|構造化マークアップ・SEO対策・GEO対策・ホームページ制作

株式会社CREVIA|構造化マークアップ・SEO対策・GEO対策・ホームページ制作|熊本・全国対応

熊本から全国へ。検索対策・AI検索対策・ホームページ制作を一気通貫でご支援します。