構造化データとは——Googleへの「説明書」
構造化データは、WebページのコンテンツをGoogleが機械的に理解できる形式で記述する仕組みです。JSON-LD(JavaScript Object Notation for Linked Data)形式で <script> タグに記述するのが現在の標準です。
構造化データを正しく実装することで:
- リッチリザルト:検索結果に星評価・パンくず・FAQが表示される
- ナレッジグラフ:Googleの知識グラフに組織情報が登録される
- 音声検索対応:Googleアシスタントが情報を取得しやすくなる
主な構造化データの種類
| タイプ | 用途 | リッチリザルト |
|---|---|---|
| Organization | 組織情報 | ナレッジグラフ |
| BreadcrumbList | パンくずリスト | 検索結果のURL表示 |
| FAQPage | よくある質問 | FAQ展開表示 |
| Article | 記事 | 記事カルーセル |
| LocalBusiness | 地域ビジネス | マップ・営業時間 |
| Product | 商品 | 価格・在庫・評価 |
| HowTo | 手順説明 | ステップ展開表示 |
組織情報(Organization)
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "株式会社WR",
"alternateName": "Wr Co. Ltd.",
"url": "https://wr-corporation.com",
"logo": {
"@type": "ImageObject",
"url": "https://wr-corporation.com/images/logo.png",
"width": 200,
"height": 60
},
"description": "PHP/Laravel・Python・Node.jsを活用したWebシステム開発、EC自動化、データ収集・分析のシステム開発会社",
"foundingDate": "2021-01-25",
"address": {
"@type": "PostalAddress",
"streetAddress": "松戸1230-1 ピアザビル9階",
"addressLocality": "松戸市",
"addressRegion": "千葉県",
"postalCode": "271-0092",
"addressCountry": "JP"
},
"contactPoint": {
"@type": "ContactPoint",
"contactType": "customer support",
"email": "wr.corporation.nt@gmail.com",
"availableLanguage": "Japanese"
},
"sameAs": [
"https://github.com/yourorganization"
]
}
</script>
FAQページ(FAQPage)
よくある質問ページに実装すると、検索結果でQ&Aが展開表示されます。
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "対応しているプログラミング言語・フレームワークは何ですか?",
"acceptedAnswer": {
"@type": "Answer",
"text": "PHP(Laravel)・Python・Node.js・JavaScript(Vue.js・Tailwind CSS)を中心に対応しています。データベースはPostgreSQL・MySQLに対応しています。"
}
},
{
"@type": "Question",
"name": "開発の依頼から納品までどれくらいかかりますか?",
"acceptedAnswer": {
"@type": "Answer",
"text": "プロジェクトの規模によって異なります。小規模なWebサイトや自動化ツールは2〜4週間、中規模のWebシステムは2〜3ヶ月が目安です。まずはお問い合わせください。"
}
},
{
"@type": "Question",
"name": "スクレイピング・データ収集ツールの開発は対応していますか?",
"acceptedAnswer": {
"@type": "Answer",
"text": "対応しています。EC価格監視・競合分析・在庫管理など様々なスクレイピングシステムの開発実績があります。利用規約・法的要件を確認した上で適切な実装を行います。"
}
}
]
}
</script>
ブログ記事(Article)
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Laravel Eloquentをもっと使いこなす——スコープ・リレーション・Eagerロード",
"datePublished": "2022-01-12T09:00:00+09:00",
"dateModified": "2024-03-15T09:00:00+09:00",
"author": {
"@type": "Organization",
"name": "株式会社WR",
"url": "https://wr-corporation.com"
},
"publisher": {
"@type": "Organization",
"name": "株式会社WR",
"logo": {
"@type": "ImageObject",
"url": "https://wr-corporation.com/images/logo.png"
}
},
"image": "https://images.unsplash.com/photo-1544383835-bda2bc66a55d?auto=format&fit=crop&w=1200&q=80",
"description": "Laravel EloquentのQueryScope・HasMany/BelongsTo・Eagerローディングを理解することで、N+1問題を防ぎ、読みやすいコードが書けるようになります。"
}
</script>
Laravelでの動的生成
// app/Helpers/StructuredData.php
class StructuredData
{
public static function article(WrPost $post): string
{
$data = [
'@context' => 'https://schema.org',
'@type' => 'Article',
'headline' => $post->title,
'datePublished' => $post->published_at->toIso8601String(),
'dateModified' => $post->updated_at->toIso8601String(),
'author' => [
'@type' => 'Organization',
'name' => '株式会社WR',
'url' => config('app.url'),
],
'description' => $post->excerpt,
'image' => $post->cover_image,
];
return '<script type="application/ld+json">' . json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) . '</script>';
}
}
{{-- Bladeテンプレートで使用 --}}
{!! \App\Helpers\StructuredData::article($post) !!}
実装後の確認方法
- Googleリッチリザルトテスト:実装した構造化データが正しく認識されるか確認
- Schema.org バリデーター:構文エラーがないか確認
- Google Search Console:実際に検索結果でリッチリザルトが表示されているか監視
まとめ
JSON-LDによる構造化データは実装コストが低いわりに、検索流入向上・リッチリザルト表示という大きなSEO効果をもたらします。弊社ではすべてのWebプロジェクトで構造化データを実装しています。
WebサイトのSEO改善・制作についてはお気軽にご相談ください。