VideoObject JSON-LD の LLMO 活用|AI 検索引用に効くスキーマ設計の具体実装
schema.org の VideoObject JSON-LD を LLMO 観点で実装する完全ガイド。name・description・thumbnailUrl・uploadDate・duration・contentUrl 各フィールドが AI 検索引用に与える影響と次の打ち手が見える実装戦略。
目次(26項目)
- はじめに
- 第 1 章:VideoObject の基本設計
- 1-1. JSON-LD vs Microdata vs RDFa:なぜ JSON-LD か
- 1-2. VideoObject の型階層
- 1-3. 必須フィールドと推奨フィールドの全体像
- 第 2 章:フィールド別 LLMO 影響分析
- 2-1. name(動画タイトル): 影響度 ★★★★★
- 2-2. description(動画説明): 影響度 ★★★★★
- 2-3. thumbnailUrl(サムネイル): 影響度 ★★★☆☆
- 2-4. uploadDate(アップロード日): 影響度 ★★★★☆
- 2-5. duration(動画長): 影響度 ★★★☆☆
- 2-6. contentUrl と embedUrl: 影響度 ★★★★☆
- 第 3 章:LLMO 最重要フィールド hasPart
- 3-1. hasPart(クリップ)が AI 引用を変える理由
- 3-2. hasPart の完全実装例
- 3-3. クリップタイトルの LLMO 最適化
- 第 4 章:信頼性フィールド群
- 4-1. publisher(公開者): 影響度 ★★★★☆
- 4-2. author(著者): 影響度 ★★★☆☆
- 4-3. keywords(キーワード): 影響度 ★★★☆☆
- 第 5 章:実装とバリデーション
- 5-1. Next.js での完全実装
- 5-2. バリデーションと監視の自動化
- よくある質問 (Q&A)
- 関連用語
- 関連記事
VideoObject JSON-LD の LLMO 活用|AI 検索引用に効くスキーマ設計の具体実装
この記事の結論: schema.org の VideoObject JSON-LD は AI 検索エンジンへの「動画紹介状」だ。
name・description・thumbnailUrl・uploadDate・duration・contentUrlの各フィールドを LLMO 最適化の観点で設計することで、AI 引用に関する次の打ち手が見えてくる具体的な実装戦略を提供する。
最終更新日: 2026-05-10
はじめに
json-ld(JavaScript Object Notation for Linked Data)は、schema-org が定義した構造化データを Web ページに実装する最も推奨される形式だ。その中でも VideoObject は YouTube 動画を AI が機械的に理解するための標準仕様として、Google・Bing・Perplexity などが広く参照している。
VideoObject が「あれば良い」から「なければ引用されない」に変わりつつある 2026 年において、正確な実装と LLMO 観点での最適化が競合との差を生む。
本記事では VideoObject の全フィールドについて、LLMO への影響度・最適な入力値・よくある実装ミスを体系的に解説する。各フィールドが AI 検索引用にどう影響するかを理解することで、効果的な改善の優先順位がつけられる。
第 1 章:VideoObject の基本設計
1-1. JSON-LD vs Microdata vs RDFa:なぜ JSON-LD か
structured-data の実装形式には JSON-LD・Microdata・RDFa の 3 種類がある。
JSON-LD が推奨される理由
- HTML の構造と独立して
<script>タグに記述できる - JavaScript で動的に生成しやすい(Next.js / React との相性が良い)
- Google が明示的に JSON-LD を推奨している(Google 公式ドキュメント参照)
- 既存の HTML を変更せずに追加できるため、デザインへの影響がない
Microdata は HTML の各要素に属性として記述するため、テンプレートの変更が大きく保守コストが高い。RDFa は特殊な用途を除いて現在ほぼ使用されていない。
VideoObject は JSON-LD で実装することを前提に以降を進める。
1-2. VideoObject の型階層
schema.org における VideoObject の型階層を理解しておくと、フィールド設計の理解が深まる。
Thing
└── CreativeWork
└── MediaObject
└── VideoObject
VideoObject は MediaObject を継承するため、MediaObject のフィールド(contentUrl・embedUrl・duration など)もすべて使用可能だ。さらに CreativeWork のフィールド(author・keywords・inLanguage など)も継承している。
1-3. 必須フィールドと推奨フィールドの全体像
Google が VideoObject でリッチリザルトを生成するために必要なフィールドと、LLMO 観点で追加推奨するフィールドの一覧を示す。
| フィールド | Google 必須 | LLMO 推奨 | AI 引用影響度 |
|---|---|---|---|
name | ○ | ○ | ★★★★★ |
description | ○ | ○ | ★★★★★ |
thumbnailUrl | ○ | ○ | ★★★☆☆ |
uploadDate | ○ | ○ | ★★★★☆ |
duration | - | ○ | ★★★☆☆ |
contentUrl | △ | ○ | ★★★★☆ |
embedUrl | △ | ○ | ★★★☆☆ |
hasPart (Clip) | - | ○ | ★★★★★ |
publisher | - | ○ | ★★★★☆ |
author | - | ○ | ★★★☆☆ |
keywords | - | ○ | ★★★☆☆ |
inLanguage | - | ○ | ★★☆☆☆ |
potentialAction | - | ○ | ★★★★☆ |
第 2 章:フィールド別 LLMO 影響分析
2-1. name(動画タイトル): 影響度 ★★★★★
役割
AI 検索エンジンがユーザーのクエリと動画を照合する際の最重要フィールド。name の内容がクエリと意味的に近いほど引用確率が高い。
最適な入力値
VideoObject の name は YouTube のタイトルと完全一致させることを推奨する。異なる値を設定すると AI が混乱し、信頼性スコアが下がる可能性がある。
"name": "VideoObject JSON-LD の LLMO 活用|AI 検索引用に効くスキーマ設計の具体実装"
LLMO 観点での最適化ポイント
- ターゲットキーワードを
nameの冒頭に配置する - 年号(「2026年版」)を含めることで情報の鮮度が明示される
- 記号(|・【】)を使って情報密度を高める
- 100 文字以内に収める(表示が省略される場合がある)
2-2. description(動画説明): 影響度 ★★★★★
役割
AI 検索エンジンが「この動画が質問に答えられるか」を判断する際の主要テキストソース。Google のリッチリザルトテストでは description が必須フィールドになっている。
最適な入力値
多くの実装例で見られる失敗は description に短すぎる文字数しか設定しないことだ。Google のガイドラインには最小文字数の規定はないが、LLMO の観点では 200 文字以上の詳細な説明が望ましい。
"description": "この動画では schema.org の VideoObject JSON-LD を LLMO(大規模言語モデル最適化)の観点で実装する方法を完全解説します。name・description・thumbnailUrl・uploadDate・duration・contentUrl・hasPart の各フィールドが AI 検索エンジン(Perplexity・ChatGPT Search・Google AI Overview)への引用にどう影響するかを詳細に分析し、Next.js・WordPress などの主要プラットフォームでの実装例を提供します。スキーマのバリデーション方法と、よくある実装ミスの修正方法も網羅した 2026 年版の完全ガイドです。"
この説明には:
- ターゲットキーワード(VideoObject JSON-LD・LLMO)が自然に含まれている
- 各フィールド名が列挙されているため、各フィールドに関するクエリでも引用候補になりうる
- 実装対象プラットフォームが明示されている
- 対象となる AI 検索エンジン名が含まれている
2-3. thumbnailUrl(サムネイル): 影響度 ★★★☆☆
役割
Google のリッチリザルトに動画サムネイルを表示するための必須フィールド。AI 検索エンジンは主にテキスト情報で動画を評価するが、サムネイルの存在・品質が「完全な VideoObject 実装」の評価に影響する。
最適な入力値
Google は複数のアスペクト比のサムネイルを推奨している。
"thumbnailUrl": [
"https://example.com/thumbnail-1x1.jpg",
"https://example.com/thumbnail-4x3.jpg",
"https://example.com/thumbnail-16x9.jpg"
]
単一の値を文字列で指定することも可能だが、配列での複数指定が推奨。
サムネイル品質要件
- 最小サイズ: 160×90px(Google の最低要件)
- 推奨サイズ: 1280×720px
- ファイル形式: JPG・PNG・WebP のいずれか
- アクセス可能性: Googlebot・AIクローラーが 403 エラーなしでアクセスできること
2-4. uploadDate(アップロード日): 影響度 ★★★★☆
役割
「最新情報」を求めるクエリへの引用において、uploadDate は重要な役割を果たす。Perplexity・ChatGPT Search は情報の鮮度を評価基準の一つとしているため、uploadDate が古い動画は「最新情報」系クエリでは不利になる。
最適な入力値
ISO 8601 形式で、タイムゾーン情報を含めることが推奨。
"uploadDate": "2026-05-10T09:00:00+09:00"
単純な日付形式("2026-05-10")でも受け入れられるが、時刻・タイムゾーン付きの形式が精度が高い。
よくあるミス
- フォーマット不正:
"2026/05/10"(スラッシュ区切りは不可) - 不正な日付:
"2026-13-45"(月・日の値が範囲外) - 空文字:
""(必須フィールドなので空は不可)
2-5. duration(動画長): 影響度 ★★★☆☆
役割
ユーザーのクエリ性質によって「長い動画」「短い動画」を使い分ける AI 検索エンジンにとって、duration は動画選択の基準になる。「〇〇について詳しく」→長い動画、「〇〇 簡単解説」→短い動画、という傾向がある。
最適な入力値
ISO 8601 の期間形式(PT〇H〇M〇S)で指定。
"duration": "PT14M30S" // 14分30秒
| 形式 | 意味 |
|---|---|
"PT30S" | 30 秒 |
"PT5M" | 5 分 |
"PT1H30M" | 1 時間 30 分 |
"PT25M30S" | 25 分 30 秒 |
LLMO 観点での duration 設計
ターゲットクエリが「詳細解説」系か「クイック回答」系かを事前に分析し、動画の長さを設計する。LLMO の観点では「コンテンツの質が高く適切な長さ」が最善で、長ければ良いわけでも短ければ良いわけでもない。
2-6. contentUrl と embedUrl: 影響度 ★★★★☆
役割
contentUrl は動画ファイルの直接 URL、embedUrl は埋め込みプレーヤーの URL。Google が動画をクロールし内容を確認するために参照する。
YouTube 動画の場合の設定
YouTube の動画は contentUrl として直接ファイル URL を提供できないが、以下の形式で設定する。
"contentUrl": "https://www.youtube.com/watch?v=VIDEO_ID",
"embedUrl": "https://www.youtube.com/embed/VIDEO_ID"
contentUrl と embedUrl の少なくとも一方が必須。YouTube 動画の場合は両方設定することを推奨。
第 3 章:LLMO 最重要フィールド hasPart
3-1. hasPart(クリップ)が AI 引用を変える理由
VideoObject のフィールドの中で LLMO への影響度が最も高いのが hasPart だ。このフィールドで動画の「クリップ(チャプター)」を定義することで、AI 検索エンジンが動画の特定部分を「特定の質問への回答」として引用できるようになる。
hasPart なしの場合:
- AI Overview が「この動画全体が参考になります」という形での全体引用のみ可能
hasPart ありの場合:
- AI Overview が「動画の 3 分 20 秒から説明している部分が参考になります」という形でのクリップ単位引用が可能
- Google 検索の「Key Moments」として動画の特定チャプターが検索結果に表示される
3-2. hasPart の完全実装例
{
"@context": "https://schema.org",
"@type": "VideoObject",
"name": "VideoObject JSON-LD の LLMO 活用",
"hasPart": [
{
"@type": "Clip",
"name": "JSON-LD と VideoObject の基礎",
"startOffset": 0,
"endOffset": 120,
"url": "https://www.youtube.com/watch?v=VIDEO_ID&t=0s"
},
{
"@type": "Clip",
"name": "name フィールドの LLMO 最適化",
"startOffset": 120,
"endOffset": 360,
"url": "https://www.youtube.com/watch?v=VIDEO_ID&t=120s"
},
{
"@type": "Clip",
"name": "description フィールドで AI 引用率を上げる",
"startOffset": 360,
"endOffset": 600,
"url": "https://www.youtube.com/watch?v=VIDEO_ID&t=360s"
},
{
"@type": "Clip",
"name": "hasPart クリップ設定で Key Moments を実現する",
"startOffset": 600,
"endOffset": 840,
"url": "https://www.youtube.com/watch?v=VIDEO_ID&t=600s"
}
]
}
3-3. クリップタイトルの LLMO 最適化
hasPart の各クリップの name は、YouTube のチャプタータイトルと一致させつつ、AI 検索クエリを意識した表現にする。
クリップタイトル設計のポイント:
- 「〇〇 とは」「〇〇 する方法」「〇〇 の設定手順」などクエリに近い文体
- 各クリップが独立して引用されたとき、それだけで意味が通じる内容
- 過度に短い(2-3 文字)クリップタイトルは AI の理解精度が低い
第 4 章:信頼性フィールド群
4-1. publisher(公開者): 影響度 ★★★★☆
"publisher": {
"@type": "Organization",
"name": "チャンネル名 / 組織名",
"url": "https://example.com",
"logo": {
"@type": "ImageObject",
"url": "https://example.com/logo.png",
"width": 600,
"height": 60
}
}
publisher フィールドはコンテンツの発行者を明示し、AI 検索エンジンが「このコンテンツは信頼できる組織によって作成された」と判断する根拠になる。
4-2. author(著者): 影響度 ★★★☆☆
"author": {
"@type": "Person",
"name": "著者名",
"url": "https://example.com/about",
"sameAs": [
"https://twitter.com/username",
"https://www.linkedin.com/in/username"
]
}
sameAs フィールドで SNS プロフィールを設定することで、Google Knowledge Graph との照合が可能になる。著者が Knowledge Graph のエンティティとして認識されると、その著者が関わる動画全体の信頼性評価が向上する。
4-3. keywords(キーワード): 影響度 ★★★☆☆
"keywords": "VideoObject, JSON-LD, LLMO, 構造化データ, AI検索, YouTube SEO, schema.org"
schema.org の公式フィールドではないが、多くの AI 検索エンジンが参照する事実上の標準フィールド。カンマ区切りで主要キーワードを列挙する。過多な設定(20 個以上)は逆効果の可能性があるため、5-10 個が推奨。
第 5 章:実装とバリデーション
5-1. Next.js での完全実装
// components/VideoObjectSchema.tsx
interface VideoObjectProps {
title: string
description: string
thumbnailUrl: string | string[]
uploadDate: string
duration: string
youtubeId: string
chapters?: Array<{
name: string
startOffset: number
endOffset: number
}>
author?: string
publisher?: string
}
export function VideoObjectSchema({
title,
description,
thumbnailUrl,
uploadDate,
duration,
youtubeId,
chapters = [],
author,
publisher,
}: VideoObjectProps) {
const schema = {
'@context': 'https://schema.org',
'@type': 'VideoObject',
name: title,
description,
thumbnailUrl: Array.isArray(thumbnailUrl) ? thumbnailUrl : [thumbnailUrl],
uploadDate,
duration,
contentUrl: `https://www.youtube.com/watch?v=${youtubeId}`,
embedUrl: `https://www.youtube.com/embed/${youtubeId}`,
...(chapters.length > 0 && {
hasPart: chapters.map(chapter => ({
'@type': 'Clip',
name: chapter.name,
startOffset: chapter.startOffset,
endOffset: chapter.endOffset,
url: `https://www.youtube.com/watch?v=${youtubeId}&t=${chapter.startOffset}s`,
})),
}),
...(author && {
author: { '@type': 'Person', name: author },
}),
...(publisher && {
publisher: { '@type': 'Organization', name: publisher },
}),
potentialAction: {
'@type': 'SeekToAction',
target: `https://www.youtube.com/watch?v=${youtubeId}&t={seek_to_second_number}`,
'startOffset-input': 'required name=seek_to_second_number',
},
}
return (
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(schema, null, 2) }}
/>
)
}
5-2. バリデーションと監視の自動化
VideoObject の実装品質を継続的に監視するための自動化スクリプト例。
import requests
from bs4 import BeautifulSoup
import json
def validate_video_object(page_url: str) -> dict:
"""ページのVideoObjectを検証する"""
response = requests.get(page_url)
soup = BeautifulSoup(response.text, 'html.parser')
# JSON-LD スクリプトを取得
scripts = soup.find_all('script', type='application/ld+json')
video_objects = []
for script in scripts:
try:
data = json.loads(script.string)
if isinstance(data, list):
for item in data:
if item.get('@type') == 'VideoObject':
video_objects.append(item)
elif data.get('@type') == 'VideoObject':
video_objects.append(data)
except json.JSONDecodeError:
continue
results = {
'found': len(video_objects) > 0,
'count': len(video_objects),
'issues': []
}
for vo in video_objects:
# 必須フィールドのチェック
required_fields = ['name', 'description', 'thumbnailUrl', 'uploadDate']
for field in required_fields:
if field not in vo:
results['issues'].append(f'必須フィールド "{field}" が欠落')
# 推奨フィールドのチェック
recommended = ['duration', 'contentUrl', 'hasPart', 'publisher']
for field in recommended:
if field not in vo:
results['issues'].append(f'推奨フィールド "{field}" が未設定')
# description の文字数チェック
if 'description' in vo and len(vo['description']) < 100:
results['issues'].append(f'description が短すぎる({len(vo["description"])}字)')
# hasPart の構造チェック
if 'hasPart' in vo:
for i, clip in enumerate(vo['hasPart']):
if 'name' not in clip:
results['issues'].append(f'hasPart[{i}] に name がない')
if 'startOffset' not in clip or 'endOffset' not in clip:
results['issues'].append(f'hasPart[{i}] に時間情報がない')
return results
/tools/ai-citation-scorer を活用すれば、このバリデーションを自動的に行い定期レポートとして確認できる。
よくある質問 (Q&A)
Q1. VideoObject は YouTube 埋め込みがないページにも設置できますか?
A. VideoObject は「ページ内に動画コンテンツが存在する」という前提で使用するスキーマです。YouTube 埋め込みがないページに設置することは、Google のガイドラインに反します。必ず実際に動画が埋め込まれたページに実装してください。
Q2. 一つのページに複数の VideoObject を設置できますか?
A. はい、可能です。複数の動画を紹介するページ(「おすすめ動画まとめ」など)では、各動画に対応する VideoObject を JSON-LD 配列([{...}, {...}])または個別の <script> タグで設置できます。
Q3. VideoObject の description と YouTube 概要欄は同じ内容にすべきですか?
A. 完全一致でなくても問題ありませんが、内容が一致していることが推奨です。VideoObject の description はより凝縮した情報を、YouTube 概要欄はより詳細な情報を提供する「要約と詳細」の関係が理想的です。
Q4. 動画が削除・非公開になった場合、VideoObject も削除すべきですか?
A. はい、動画が存在しなくなった場合は VideoObject も削除またはページから削除してください。削除された動画の VideoObject が残っていると、Google がクロール時にエラーを検出し、サイト全体の評価に悪影響を与える可能性があります。
Q5. potentialAction(SeekToAction)の設定は必須ですか?
A. Google の公式必須フィールドではありませんが、実装することで Google 検索における動画の直接ジャンプ機能(検索結果から特定時間にジャンプ)が有効になります。LLMO 観点では hasPart との組み合わせでクリップ単位の引用精度が向上するため、実装を強く推奨します。
関連用語
- json-ld(JSON-LD)
- schema-org(schema.org)
- video-schema(ビデオスキーマ)
- structured-data(構造化データ)
- llmo(LLMO)
- ai-overview(AI Overview)
- youtube-seo(YouTube SEO)
- chapter-marker(チャプターマーカー)
関連記事
参考文献
- Schema.org - VideoObject — Schema.org(参照: 2026-05-10)
- Google Search Central - Video structured data — Google(参照: 2026-05-10)
- Google Search Central - Rich Results Test — Google(参照: 2026-05-10)
- Google Search Central - SeekToAction — Google(参照: 2026-05-10)
関連用語
- キーワード
キーワードとは、ユーザーが検索エンジンやChatGPT等のAI検索に打ち込む単語・フレーズ。SEO・LLMO両対策の出発点。ビッグ/ロングテール選定基準と無料ツールを使った選び方を初心者向けに解説します。
- クエリ
クエリとは、ユーザーが実際に検索窓に入力した検索語のこと。SEOで使う「キーワード」と似ていますが、キーワードが事前に狙う言葉、クエリが実際に打たれた言葉、というニュアンスの違いがあります。
- クローラー
クローラーとは、Web上のページを自動巡回してデータを集めるプログラムのこと。Googleの「Googlebot」が代表例で、これに見つけてもらわないと検索結果に表示されません。
- 構造化データ
構造化データとは、Webページの内容を検索エンジンが理解しやすい形式で記述したメタ情報。記事の著者・公開日、商品の価格・在庫などを機械可読にすることでリッチリザルトやAI引用の対象になります。
- JSON-LD
JSON-LDとは「JSON for Linking Data」の略で、構造化データをJSON形式で記述する方式。Google公式が推奨する構造化データ実装フォーマットで、scriptタグでHTML内に書きます。
- schema.org
schema.orgとは、Google・Microsoft・Yahoo・Yandexが共同で策定した「構造化データの語彙集」。ArticleやProduct、Personなど数百種類のタイプが定義されており、JSON-LDで使う「単語帳」にあたります。

