構造化データ(JSON-LD)を個人ブログに入れる方法と確認手順
構造化データと聞くと難しそうですが、実際はページの情報を決まった形式で書き添えるだけです。このサイトでも記事ごとに自動で出力しています。最低限入れておきたいものから順に紹介します。
構造化データとは
人間はページを見れば「これは記事で、この人が書いて、この日に公開された」と分かります。しかし検索エンジンのプログラムにとっては、どの文字が著者名でどれが日付なのかを判断するのは簡単ではありません。
構造化データは、ページの情報を決まった語彙(schema.org)と形式で書き添えて、検索エンジンに意味を正確に伝える仕組みです。書き方は何種類かありますが、Googleが推奨しているのはJSON-LDという形式です。HTMLの本文とは別に、<script> タグの中にまとめて書けるので、デザインに影響せず、あとから追加しやすいのが利点です。
構造化データを入れると、検索結果にパンくずリストが表示されたり、記事の日付が正しく扱われたりしやすくなります。ただし、構造化データを入れたからといって検索順位が上がるわけではなく、特別な表示(リッチリザルト)が必ず出るとも限りません。「内容を正しく伝えるための補足」と考えるのが適切です。
まず入れたい2種類
個人のブログやサイトなら、まずは次の2つで十分です。このサイトでも、この2つをPHPで自動出力しています。
記事(Article / BlogPosting)
記事のタイトル、公開日、更新日、著者、画像などを伝えます。
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "構造化データ(JSON-LD)を個人ブログに入れる方法",
"datePublished": "2026-11-03",
"dateModified": "2026-11-03",
"image": "https://www.example.com/og/structured-data.png",
"author": {
"@type": "Person",
"name": "運営者の名前",
"url": "https://www.example.com/about"
},
"publisher": {
"@type": "Organization",
"name": "サイト名",
"url": "https://www.example.com/"
}
}
</script>
author に運営者情報ページのURLを入れておくと、誰が書いた記事なのかがより明確になります。ブログ記事なら BlogPosting、ニュースなら NewsArticle、技術的な解説なら TechArticle のように、Article の仲間から内容に合うものを選びます。
パンくずリスト(BreadcrumbList)
ページがサイトのどの階層にあるかを伝えます。検索結果で、URLの代わりに「サイト名 › カテゴリ › 記事」のような表示になることがあります。
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "ホーム", "item": "https://www.example.com/" },
{ "@type": "ListItem", "position": 2, "name": "ノウハウ", "item": "https://www.example.com/howto/" },
{ "@type": "ListItem", "position": 3, "name": "構造化データの入れ方" }
]
}
</script>
最後の項目(今いるページ)は、item を省略できます。画面に表示しているパンくずリストと、内容を一致させておくことが大切です。
PHPで自動出力する
記事ごとに手で書くと、日付の更新忘れや書き間違いが起きます。PHPで記事の情報から組み立てて出力すると確実です。ポイントは、文字列をつなげて作るのではなく、配列を json_encode で変換することです。
$jsonLd = [
'@context' => 'https://schema.org',
'@type' => 'BlogPosting',
'headline' => $meta['title'],
'description' => $meta['description'],
'datePublished' => $meta['date'],
'dateModified' => $meta['updated'] ?? $meta['date'],
'mainEntityOfPage' => $canonicalUrl,
'author' => ['@type' => 'Person', 'name' => '運営者の名前', 'url' => 'https://www.example.com/about'],
];
echo '<script type="application/ld+json">'
. json_encode($jsonLd, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_HEX_TAG)
. '</script>';
3つのオプションにはそれぞれ意味があります。
JSON_UNESCAPED_UNICODE:日本語をあのような形に変換せず、そのまま出力する(読みやすくなる)。JSON_UNESCAPED_SLASHES:URLの/を\/にしない。JSON_HEX_TAG:<と>を変換する。タイトルに</script>のような文字列が含まれていても、タグが途中で閉じられないようにするための安全対策です。
このサイトの記事も、PHPと日付だけで作る予約公開の仕組みで紹介した記事の情報ファイルから、同じ方法でJSON-LDを作っています。
確認の方法
- リッチリザルトテスト:Googleの「リッチリザルト テスト」にページのURLを入力すると、読み取れた構造化データと、エラーや警告が表示されます。
- スキーママークアップ検証ツール:schema.orgの検証ツールでは、Googleの対応状況に関係なく、書き方が語彙に沿っているかを確認できます。
- Search Console:公開後しばらくすると、Search Consoleの「拡張」や「ショッピング」などの欄に、サイト全体の構造化データの状態が表示されます。パンくずリストのエラーなどはここで気づけます。
Search Consoleの基本的な見方は、Search Consoleでサイトマップを送信し、インデックス状況を読み解くで紹介しています。
注意したいこと
ページに書いていないことを入れない
構造化データは、ページに実際に表示されている内容を補足するものです。ページにないレビューの星の数や、実際とは違う日付を書くと、Googleのガイドライン違反として扱われ、手動による対策の対象になることがあります。
FAQとHowToのリッチリザルト
以前は、よくある質問(FAQPage)や手順(HowTo)の構造化データを入れると、検索結果に質問や手順が展開して表示されることがありました。しかし2023年に表示方法が見直され、FAQのリッチリザルトは公的機関や健康分野などの信頼性の高いサイトに限られ、HowToのリッチリザルトは表示されなくなりました。古い解説記事を参考にする場合は、この点に注意してください。書いてあっても害はありませんが、表示を期待して時間をかける優先度は低くなっています。
更新日を正しく保つ
記事を大きく書き直したら dateModified を更新します。逆に、誤字を1文字直しただけで毎回更新日を変えるのは、実態と合わないので避けたほうがよいでしょう。
まとめ
- JSON-LDは、ページの意味を検索エンジンに正確に伝えるための補足情報。
- 個人サイトなら、記事(BlogPosting)とパンくずリスト(BreadcrumbList)から始める。
- PHPでは配列を
json_encodeで変換し、JSON_HEX_TAGで安全に出力する。 - リッチリザルトテストで確認し、ページにない情報は書かない。