Communityライティング&編集github.com

shaul1991/structured-data

JSON-LD構造化データの作成と検証:イベント(展示会、博覧会、キャンセル・延期ステータス)、Organization + sameAs(Naverサイト関連チャンネル)、WebSite(Googleサイト名)、BreadcrumbList、ItemList。GoogleとNaverのサポート差異を含む。「構造化データ」「schema.org」「JSON-LD」「リッチリザルト」「Event schema」「イベントマークアップ」のリクエストに使用。

structured-data とは?

このスキルは、Google Search CentralとNaver Search Advisorの公式ドキュメントに基づいて、JSON-LD形式の構造化データを正確に作成・検証するためのテンプレートとガイドラインを提供します。主に対応するスキーマタイプは、Event(イベント、展示会、博覧会の詳細とステータス管理)、Organization + sameAs(Naverサイト関連チャンネル対応)、WebSite(Googleサイト名)、BreadcrumbList(パンくずリスト)、ItemList(カルーセル)です。特に、GoogleとNaverのサポート範囲の違い(例:Googleは韓国でのEventリッチリザルトをサポートしていない)を明確にし、それに応じたマークアップ戦略を立てられるよう支援します。また、見えるテキストと一致する値のみを使用するなどの共通原則に従い、検証ツール(Googleリッチリザルトテスト、Schema Markup Validator)の利用方法も含まれているため、SEOや検索エンジン最適化の実務において信頼性の高い実装が可能です。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/shaul1991/seo-skills/tree/HEAD/skills/structured-data

Installed? Explore more ライティング&編集 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

構造化データ(JSON-LD)

根拠: Google Search Central構造化データ文書とNaver Search Advisor構造化データガイド(2026-11-04確認)。判断が重要な場合は原文を再度参照します。

共通原則

  • 表示される本文と一致する値のみを入れます。不明な価格・時間・在庫・評価は空欄にし、作成しません(Google AI機能文書でも「構造化データが表示テキストと一致」を推奨)。
  • マークアップしてもリッチリザルト・表示は保証されません(Google・Naverともに明記)。
  • 形式はJSON-LDを基本とします(Googleサポート、NaverはMicrodataまたはJSON-LD推奨)。<head>または<body>内の<script type="application/ld+json">。
  • 検証: Google リッチリザルトテスト、Schema Markup Validator(Naverガイドがschema.orgツールの使用を案内)、seo-orchestratorスキルのscripts/seo-check.mjs(JSONパース・必須属性のみ確認)。

サポート差異(2026-11-04)

タイプGoogleNaver
Eventイベント検索環境の文書あり。⚠️ 提供地域リストに韓国なし(オーストラリア・ブラジル・カナダ・ドイツ・インド・中南米・スペイン・英国・米国)ガイドなし
Organization/Person + sameAs組織情報サイト関連チャンネル(ルートページ、name・url・sameAs必須)
WebSiteサイト名(ホームページ)—
BreadcrumbListサポートサポート(name必須、position任意)
ItemList(カルーセル)一部タイプのみカルーセル(ListItem)ガイドあり

韓国向けイベントサイトの場合: Eventマークアップは正確なデータ整理と他地域・将来の拡張のために残すことは可能ですが、現在韓国Google検索でイベントリッチリザルトが表示されると想定しないでください。 パフォーマンスは通常の検索結果(タイトル・スニペット)とSearch Consoleで判断します。

Event(Google基準)

ルール(Google 構造化イベントデータ):

  • イベントごとに**固有URL(リーフページ)**にマークアップ。複数イベントを列挙した一覧・スケジュールページではなく詳細ページに。
  • 必須: name(イベント名。会場名・価格・「今すぐ予約」などのプロモーション文言禁止)、startDate(ISO-8601)、location(Place + name + address)。
  • 推奨: endDate、eventStatus、description(日時・会場の繰り返しではなくイベント内容)、image(横1,920px推奨・最小720px、16:9・4:3・1:1複数枚)、offers、organizer、performer、previousStartDate。
  • 日時: 時間が不明な場合は日付のみ("2026-12-04")。T00:00:00で埋めません。時間がある場合はUTCオフセットを含める(2026-12-04T10:00:00+09:00)。
  • 複数日にわたる場合はstartDate・endDateの両方。日ごとに個別チケットが必要な場合は日付別のEvent。
  • 複数会場で同時開催の場合は会場別のEvent。
  • 無料入場が公式確認された場合のみoffers.price: 0。販売前の場合はavailability省略可能、validFromは販売開始時刻。
  • ステータス変更時は他の値はそのままにeventStatusのみ変更:
    • キャンセル EventCancelled(startDate・location削除禁止)
    • 延期・日付未定 EventPostponed(元のstartDate維持)
    • 新日程確定 EventRescheduled + 新しいstartDate/endDate + 任意previousStartDate
  • イベントでないもの(クーポン、営業時間、割引販売)をEventとしてマークしない。会員制・招待限定イベントはイベント環境の対象外。
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Event",
  "name": "<公式イベント名と回次>",
  "startDate": "<YYYY-MM-DD または YYYY-MM-DDThh:mm:ss+09:00>",
  "endDate": "<YYYY-MM-DD>",
  "eventStatus": "https://schema.org/EventScheduled",
  "location": {
    "@type": "Place",
    "name": "<会場名>",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "<道路名住所>",
      "addressLocality": "<市・区>",
      "addressRegion": "<市・道>",
      "postalCode": "<郵便番号>",
      "addressCountry": "KR"
    }
  },
  "image": ["<https://.../16x9.jpg>", "<https://.../4x3.jpg>", "<https://.../1x1.jpg>"],
  "description": "<イベント内容の概要。日時・会場の繰り返し禁止>",
  "organizer": { "@type": "Organization", "name": "<主催>", "url": "<主催公式URL>" }
}
</script>

offersは価格・販売情報が公式確認された場合のみ追加します。

一覧ページ

  • 地域・月の一覧ページにはEventを複数入れません(Googleは単一イベントページのみサポート)。代わりにBreadcrumbListと、必要に応じて詳細URLを含むItemList。
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "ItemList",
  "itemListElement": [
    { "@type": "ListItem", "position": 1, "url": "https://example.com/events/<id-1>" },
    { "@type": "ListItem", "position": 2, "url": "https://example.com/events/<id-2>" }
  ]
}
</script>

WebSite(Googleサイト名、ホームページのみ)

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "<サイト名>",
  "alternateName": ["<略称>"],
  "url": "https://example.com/"
}
</script>

og:site_name、ホームページの<title>と同じ名前を使用します。出典: サイト名

Organization + sameAs(Naverサイト関連チャンネル、ルートページ)

Naverが分析に使用する関連チャンネルドメイン(2026-11-04): Naverブログ・SmartStore・知識iN・チヂジク・クリップ、ダンゴ・スレッド・Instagram・YouTube・KakaoStory・KakaoTalkチャンネル・Tistory・TikTok・Facebook・X(Twitter)。表示は保証されません。

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "<サイト名>",
  "url": "https://example.com/",
  "sameAs": [
    "https://cafe.naver.com/<カフェ>",
    "https://pf.kakao.com/<チャンネル>",
    "https://x.com/<アカウント>"
  ]
}
</script>
  • 実際に運用中のチャンネルのみを入れます。開設前のチャンネルURLを事前に入れないでください。
  • Daumも同じ形式(Person/Organization + sameAs)を使用し、サポートドメインが異なります: YouTube、Facebook、X、Instagram、Google Play、Apple Store、KakaoStory、Daumカフェ、KakaoTV、Tistory、Brunch(daum-search)。1つのブロックに両検索エンジンの実際のチャンネルを一緒に入れて構いません。
  • Naverカフェは上記関連チャンネルリストに明示されていません(2026-11-04)。入れても構いませんが、Naverが関連チャンネルとして使用すると想定しないでください。
  • 出典: サイト関連チャンネル

BreadcrumbList(Google・Naver共通)

<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/<上位>/<下位>" }
  ]
}
</script>
  • Naver: 「ホーム」「top」のような一般語ではなくページを説明する名前、広い範囲→具体的な順序、長すぎるテキスト・数字・特殊文字のみの名前禁止。
  • 出典: Naver BreadcrumbList、Googleパンくずリスト

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

関連スキル