2026年版 ToolShare Lab / Guide

構造化データ(JSON-LD)の書き方入門
【コピペテンプレート付き】

Google検索で星評価やFAQ、パンくずリストが表示されているのを見たことがあるだろうか。あの「リッチリザルト」は、HTMLに構造化データを埋め込むことで実現できる。この記事では、Googleが推奨するJSON-LD形式の構造化データの書き方を、コピペで使えるテンプレート付きで解説する。Article、FAQPage、HowTo、BreadcrumbListなど、よく使うスキーマタイプを網羅した。

読了時間: 約15分 更新日: 2026年3月16日

構造化データを今すぐ自動生成

テンプレートを読む前に試したい方はこちら。フォーム入力だけでJSON-LDを自動生成。Article・FAQ・LocalBusiness・Productなど主要スキーマに対応。

構造化データとは?

構造化データとは、Webページの内容を検索エンジンが「機械的に理解できる形」で記述するマークアップだ。たとえば「このページはレシピで、調理時間は30分、カロリーは350kcal」「このページはFAQで、質問が5つある」といった情報を、HTMLの中に機械可読な形式で埋め込む。

リッチリザルトとは

構造化データを正しく実装すると、Google検索の結果に「リッチリザルト」が表示される可能性がある。リッチリザルトとは、通常の検索結果(タイトル + URL + スニペット)に加えて、星評価、FAQ、パンくずリスト、画像、価格などが表示される拡張形式のことだ。通常の検索結果より目立つため、CTR(クリック率)が大幅に向上する。

3つの記述形式

構造化データの記述形式には、JSON-LD、Microdata、RDFaの3種類がある。Googleが公式に推奨しているのはJSON-LDだ。

形式 特徴 Google推奨
JSON-LD scriptタグ内にJSONで記述。HTMLと完全に分離できる 推奨
Microdata HTML要素に属性を追加して記述。HTMLと密結合 対応
RDFa HTML要素に属性を追加。Microdataに似ている 対応

Point

JSON-LDはHTMLのコンテンツと構造化データを完全に分離できるため、メンテナンス性が高い。既存のHTMLを一切変更せずにscriptタグを追加するだけで実装できるのが最大のメリットだ。この記事ではJSON-LDのみを扱う。

JSON-LDの基本構文

JSON-LDは<script type="application/ld+json">タグの中にJSON形式で記述する。以下が最小限の構造だ。

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

基本ルール

注意

JSON-LDはJSONの文法に従うため、文法エラーがあると検索エンジンに読み取ってもらえない。特に末尾のカンマ(trailing comma)やダブルクォーテーションの閉じ忘れは頻出のミスだ。記述後は必ずバリデーションツールでチェックしよう。

よく使うスキーマ テンプレート集(コピペ可能)

ここからは、実際によく使われるスキーマタイプのJSON-LDテンプレートを紹介する。○○の部分を自分のサイト情報に書き換えてそのまま使ってほしい。

Article(記事)

ブログ記事やニュース記事に使用する。Google検索の記事リッチリザルト(見出し、画像、日付)に対応する。

<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Article", "headline": "記事のタイトル", "description": "記事の概要(120文字以内推奨)", "image": "https://example.com/images/article-thumbnail.jpg", "author": { "@type": "Person", "name": "著者名", "url": "https://example.com/author/profile/" }, "publisher": { "@type": "Organization", "name": "サイト名", "logo": { "@type": "ImageObject", "url": "https://example.com/images/logo.png" } }, "datePublished": "2026-03-16", "dateModified": "2026-03-16", "mainEntityOfPage": { "@type": "WebPage", "@id": "https://example.com/article/" } } </script>

FAQPage(よくある質問)

FAQ(よくある質問)セクションがあるページに使用する。検索結果にアコーディオン形式のFAQが表示される可能性がある。

<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "FAQPage", "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>

Point

FAQPageのJSON-LDに含める質問と回答は、実際にページ上に表示されているFAQの内容と一致させる必要がある。ページに存在しないFAQを構造化データだけに書くのはGoogleのガイドライン違反だ。

HowTo(手順ガイド)

手順解説ページに使用する。検索結果にステップ形式の手順が表示される可能性がある。

<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "HowTo", "name": "○○の手順ガイド", "description": "この手順で○○を実現する方法を解説します", "totalTime": "PT30M", "step": [ { "@type": "HowToStep", "name": "ステップ1のタイトル", "text": "ステップ1の詳細な説明", "url": "https://example.com/guide/#step1" }, { "@type": "HowToStep", "name": "ステップ2のタイトル", "text": "ステップ2の詳細な説明", "url": "https://example.com/guide/#step2" }, { "@type": "HowToStep", "name": "ステップ3のタイトル", "text": "ステップ3の詳細な説明", "url": "https://example.com/guide/#step3" } ] } </script>

BreadcrumbList(パンくず)

パンくずリストを構造化データで記述する。検索結果のURLがパンくず形式で表示されるようになる。

<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/guides/" }, { "@type": "ListItem", "position": 3, "name": "記事タイトル", "item": "https://example.com/guides/article-name/" } ] } </script>

WebApplication(Webアプリ/ツール)

オンラインツールやWebアプリケーションに使用する。アプリ名、カテゴリ、対応OSなどを記述できる。

<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "WebApplication", "name": "ツール名", "description": "ツールの説明文", "url": "https://example.com/tools/tool-name/", "applicationCategory": "UtilitiesApplication", "operatingSystem": "All", "offers": { "@type": "Offer", "price": "0", "priceCurrency": "JPY" }, "author": { "@type": "Organization", "name": "サイト名" } } </script>

LocalBusiness(店舗・事業所)

実店舗や事業所の情報を記述する。Google検索やGoogleマップでのローカル検索結果に反映される。

<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "LocalBusiness", "name": "店舗名", "description": "店舗の説明", "image": "https://example.com/images/shop.jpg", "address": { "@type": "PostalAddress", "streetAddress": "○○1-2-3", "addressLocality": "○○市", "addressRegion": "○○県", "postalCode": "000-0000", "addressCountry": "JP" }, "telephone": "+81-XX-XXXX-XXXX", "url": "https://example.com/", "openingHoursSpecification": [ { "@type": "OpeningHoursSpecification", "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], "opens": "09:00", "closes": "18:00" } ], "priceRange": "$$" } </script>

Product(商品)

商品ページに使用する。検索結果に価格、在庫状況、レビュー評価が表示される可能性がある。

<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Product", "name": "商品名", "description": "商品の説明", "image": "https://example.com/images/product.jpg", "brand": { "@type": "Brand", "name": "ブランド名" }, "offers": { "@type": "Offer", "price": "3980", "priceCurrency": "JPY", "availability": "https://schema.org/InStock", "url": "https://example.com/products/product-name/" }, "aggregateRating": { "@type": "AggregateRating", "ratingValue": "4.5", "reviewCount": "120" } } </script>

Organization(組織)

会社や団体の情報を記述する。Google検索のナレッジパネルに反映される可能性がある。トップページに配置するのが一般的だ。

<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Organization", "name": "組織名", "url": "https://example.com/", "logo": "https://example.com/images/logo.png", "description": "組織の説明", "foundingDate": "2020-01-01", "contactPoint": { "@type": "ContactPoint", "telephone": "+81-XX-XXXX-XXXX", "contactType": "customer service", "availableLanguage": "Japanese" }, "sameAs": [ "https://twitter.com/example", "https://www.facebook.com/example", "https://www.instagram.com/example" ] } </script>

ツール紹介

上記のテンプレートを手動で書くのが面倒な場合は、スキーマジェネレーターを使えばフォーム入力だけで正しいJSON-LDを自動生成できる。Article・FAQ・LocalBusiness・Product・Organizationなど主要スキーマに対応している。

構造化データの検証方法

構造化データを実装したら、必ず検証ツールでエラーがないか確認しよう。JSONの文法ミスやプロパティの不足があると、リッチリザルトが表示されない。

  1. Googleリッチリザルトテスト

    Googleの公式ツール(https://search.google.com/test/rich-results)にURLまたはコードを入力すると、リッチリザルトの対象になるかどうかを判定してくれる。エラーや警告も表示されるので、修正箇所が一目でわかる。

  2. Schema Markup Validator

    Schema.orgの公式バリデーター(https://validator.schema.org/)は、JSON-LDの文法とスキーマの正しさを検証する。Google以外の検索エンジン(Bing、Yahoo等)向けの検証にも有用だ。

  3. ToolShare Lab 構造化データバリデーター

    構造化データバリデーターにJSON-LDコードを貼り付けるだけで、文法チェック・プロパティ検証・プレビューを一括で行える。ブラウザ上で完結するため、外部サイトにコードを送信する必要がない。

  4. Chrome拡張機能

    「Structured Data Testing Tool」や「SEO Meta in 1 Click」などのChrome拡張を使うと、ブラウザで表示しているページの構造化データをリアルタイムで確認できる。開発中のチェックに便利だ。

実装のベストプラクティス

構造化データは正しく実装しないとリッチリザルトが表示されないだけでなく、Googleから手動対策(ペナルティ)を受ける可能性もある。以下のルールを守ろう。

1. ページの内容と一致させる

構造化データに書いた情報は、実際にページ上に表示されている内容と一致している必要がある。たとえば、FAQPageの質問と回答がページ上に存在しない場合はガイドライン違反だ。「リッチリザルトを出すためだけに存在しない情報を書く」のは意図的なスパム行為とみなされる。

2. 必須プロパティと推奨プロパティ

各スキーマタイプには「必須プロパティ」と「推奨プロパティ」がある。必須プロパティが欠けているとリッチリザルトの対象にならない。推奨プロパティはなくてもエラーにはならないが、設定したほうがリッチリザルトの表示品質が向上する。Googleの公式ドキュメントで各スキーマの必須/推奨を確認しておこう。

スキーマタイプ 必須プロパティ 推奨プロパティ
Article headline, image, datePublished, author dateModified, publisher, description
FAQPage mainEntity(Question + Answer) -
HowTo name, step description, totalTime, image
BreadcrumbList itemListElement(position, name, item) -
Product name image, description, offers, aggregateRating
LocalBusiness name, address telephone, openingHoursSpecification, image

3. 画像URLは絶対パスで

OGPと同様、構造化データ内の画像URLはhttps://から始まる絶対パスで記述する。相対パスだとGoogleが画像を取得できず、リッチリザルトに画像が表示されない。

4. 日付はISO 8601形式で

datePublisheddateModifiedはISO 8601形式(YYYY-MM-DDまたはYYYY-MM-DDTHH:MM:SS+09:00)で記述する。「2026年3月16日」のような日本語表記はNGだ。

NG: "datePublished": "2026年3月16日" OK: "datePublished": "2026-03-16" OK: "datePublished": "2026-03-16T09:00:00+09:00"

5. 複数スキーマの併用

1つのページに複数のJSON-LDブロックを配置することは問題ない。たとえば、ブログ記事ページに「Article + FAQPage + BreadcrumbList」の3つを設置するのは一般的な手法だ。それぞれ独立した<script type="application/ld+json">ブロックとして記述する。

Point

構造化データは「書けば必ずリッチリザルトが表示される」わけではない。Googleが表示するかどうかは、ページの品質、検索クエリとの関連性、ユーザーにとっての有用性など複合的な要素で判断される。正しく書くことは前提条件であり、表示を保証するものではないことを理解しておこう。

WordPress・Next.jsでの実装方法

WordPress: プラグインで自動生成

WordPressの場合、SEOプラグインが構造化データを自動生成してくれる。手動でJSON-LDを書く必要がなく、管理画面から設定するだけで対応できる。

プラグイン 自動生成されるスキーマ カスタムスキーマ
Yoast SEO Article, BreadcrumbList, Organization, WebSite FAQ, HowToはYoast SEO Blocksで対応
Rank Math Article, BreadcrumbList, Organization, Product等 カスタムJSON-LDエディター搭載
All in One SEO Article, BreadcrumbList, Organization カスタムスキーマエディター搭載

WordPress: 手動で追加する場合

プラグインに頼らず手動で構造化データを追加したい場合は、テーマのheader.phpに直接JSON-LDを記述するか、functions.phpにフックを追加する。

// functions.php に追加 function my_json_ld_schema() { if (is_singular('post')) { global $post; $schema = array( '@context' => 'https://schema.org', '@type' => 'Article', 'headline' => get_the_title(), 'description' => mb_substr(get_the_excerpt(), 0, 120), 'image' => get_the_post_thumbnail_url($post->ID, 'full'), 'datePublished' => get_the_date('c'), 'dateModified' => get_the_modified_date('c'), 'author' => array( '@type' => 'Person', 'name' => get_the_author() ), 'publisher' => array( '@type' => 'Organization', 'name' => get_bloginfo('name'), 'logo' => array( '@type' => 'ImageObject', 'url' => 'https://example.com/images/logo.png' ) ) ); echo '<script type="application/ld+json">' . json_encode($schema, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) . '</script>'; } } add_action('wp_head', 'my_json_ld_schema');

Next.js(App Router)

Next.js 14以降のApp Routerでは、metadataオブジェクトに構造化データを直接記述する方法はないが、ページコンポーネント内にscriptタグとして埋め込む方法が一般的だ。

// app/article/page.tsx export default function ArticlePage() { const jsonLd = { '@context': 'https://schema.org', '@type': 'Article', headline: '記事タイトル', description: '記事の概要', image: 'https://example.com/images/article.jpg', datePublished: '2026-03-16', dateModified: '2026-03-16', author: { '@type': 'Person', name: '著者名', }, }; return ( <> <script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }} /> <article>...</article> </> ); }

静的HTML

静的HTMLサイトの場合は、各ページの<head>内または<body>の閉じタグの直前にJSON-LDのscriptタグを直接記述する。テンプレートエンジンを使っている場合は、ページごとの変数を差し込む形にすると管理しやすい。

構造化データを自動生成する

フォームに入力するだけでJSON-LDを自動生成。Article・FAQ・LocalBusiness・Product・Organization対応。登録不要・完全無料・データはブラウザ内のみで処理される。

よくある質問

構造化データを入れるとSEOに効果がありますか?
構造化データは直接的なランキング要因ではない。つまり、構造化データを追加しただけで検索順位が上がるわけではない。しかし、リッチリザルトが表示されるとCTR(クリック率)が大幅に向上するため、結果としてトラフィックの増加につながる。SEOの間接的な強化策として位置づけるのが正確だ。
構造化データが間違っているとペナルティになりますか?
意図的でないミス(JSONの文法エラーやプロパティの記述ミス等)であれば、ペナルティにはならない。リッチリザルトが表示されないだけだ。ただし、ページに存在しない情報を構造化データに記述する「意図的な不正」はGoogleのガイドライン違反であり、手動対策(リッチリザルトの無効化)の対象になる。
JSON-LDはHTMLのどこに書きますか?
Googleの公式ドキュメントでは<head>内を推奨しているが、<body>内のどこに配置しても問題なく読み取られる。CMSやテンプレートエンジンの都合でheadに追加しづらい場合は、bodyの閉じタグの直前に配置しても大丈夫だ。
複数のスキーマタイプを1ページに入れてよいですか?
はい。1ページに複数のJSON-LDブロックを配置するのは一般的な手法であり、推奨される。たとえば「Article + FAQPage + BreadcrumbList」の3つを1ページに設置するのは、当サイトの記事でも実際に行っている。それぞれ独立したscriptタグとして記述すればよい。
構造化データの設定を外注する場合の相場はいくらですか?
構造化データの設定を外注する場合、1ページあたり3,000〜10,000円が一般的な相場だ。ただし、サイト全体にテンプレートとして一括設定する場合は、ページ単価ではなく一式での見積もりになることが多く、5万〜20万円程度になる。当サイトのスキーマジェネレーターを使えば無料で自分で生成できるので、まずは試してみてほしい。