seo-schema について
Web ページの Schema.org JSON-LD を検出、検証、生成するマーケティングスキルです。SEO 担当者向けに貼り付け可能なマークアップとレポートを作成し、既存スキーマの確認には Firecrawl による HTML 取得が必要です。
主な機能
- 01既存の JSON-LD の検出
- 02スキーマプロパティの検証
- 03ページ意図の判定
- 04JSON-LD ブロックの生成
- 05競合スキーマの比較
活用シーン
- 01対象 URL のスキーマ監査
- 02ページ内容に沿ったマークアップ作成
- 03検索上位ページのスキーマ型の比較
MCP 対応
Firecrawl MCP サーバーを使い、スキーマの検出と検証に必要な生 HTML を取得できます。競合分析には任意で SE Ranking MCP サーバーを利用します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ seranking/ seo-skills --skill seo-schemaインストール後、Claude Code で/seo-schemaを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/google-rich-results.mdtemplates/article.jsonbreadcrumb-list.jsonfaq-page.jsonlocal-business.jsonproduct.json詳細
出力例:examples/seo-schema-budgetbytes-slow-cooker-chicken-noodle-soup-20260514/SCHEMA.md
スキーママークアップ
ページのSchema.org JSON-LDを検出、検証、生成します。CMSやページテンプレートにそのまま貼り付けられる <script> ブロックと、現在の状態および問題点をまとめた検証レポートを出力します。
前提条件
- 検出/検証の手順で必須:
mcp__firecrawl-mcp__firecrawl_scrape(生のHTMLへのアクセス)。WebFetchが返すのはMarkdownのみです。すべての<script type="application/ld+json">ブロックは、このスキルが読み取る前に削除されます。Firecrawlがなくても、意図の検出(ステップ4~6)に基づいて新しいスキーマを生成できますが、ページ上にすでに存在するものの検出や検証(ステップ2~3、7)はできません。 - 任意:SE Ranking MCP サーバー(ステップ7で競合のスキーマをベンチマークする際に使用します)。
- ユーザーが指定するもの:対象URL。URLのパターンからページの種類が明らかでない場合は、「これは商品ページです」「これはハウツー記事です」など、ページの意図を示すヒントも指定できます。
プロセス
-
HTMLを取得
mcp__firecrawl-mcp__firecrawl_scrape(推奨)または代替手順を実行- コストに関する注意: Firecrawlでは対象URLに1クレジット、さらにステップ7(競合ベンチマーク)を実行する場合は10クレジット(検索結果上位10件につき1クレジット)が必要です。クレジットを節約するため、ユーザーは
--no-firecrawlを指定して代替手順(生成のみのモード)を強制できます。 - Firecrawlを利用できる場合: 対象URLをスクレイピングします。SPAの場合は
waitFor: 2000(またはメインコンテンツのCSSセレクター)を渡し、JavaScriptでレンダリングされたDOMを取得します。ステップ2でのJSON-LD解析にはレスポンスのhtmlを、canonical/robotsの照合にはmetadataを使用します。 - Firecrawlを利用できない場合: 生のHTMLが必要なステップ2、3、7をすべてスキップします。ステップ4~6は引き続き実行されます。このスキルは「生成のみ」となり、ページ上にあるスキーマとの比較は行わず、意図の検出に基づいて推奨JSON-LDブロックを生成します。
SCHEMA.mdに次の内容を明記します:Existing-schema detection: skipped — Firecrawl required (WebFetch returns markdown only). Install via extensions/firecrawl/install.sh. - Firecrawlを利用できる場合でも、JSON-LDブロックがJavaScriptのレンダリング後にのみ表示される場合は、出力に次の警告を記載します:「JavaScriptでレンダリングされたスキーマは、すべてのクローラーで検出されない可能性があります。可能な場合は、サーバーサイドでJSON-LDをレンダリングしてください。」
- コストに関する注意: Firecrawlでは対象URLに1クレジット、さらにステップ7(競合ベンチマーク)を実行する場合は10クレジット(検索結果上位10件につき1クレジット)が必要です。クレジットを節約するため、ユーザーは
-
既存のスキーマを検出(ステップ1で取得したFirecrawlのHTMLが必要です)
- 返された
htmlから、すべての<script type="application/ld+json">ブロックを抽出します。 - 各ブロックをJSONとして解析します。構文エラーを報告します。
- 検出した
@typeをそれぞれ列挙します。 - Microdata(
itemscope/itemprop)とRDFa(typeof/property)も検出します。レガシー形式として示し、JSON-LDへの移行(Googleが明示している推奨形式)を推奨します。 - ステップ1で代替手順を実行した場合: このステップをスキップします。
01-detected.mdにExisting-schema detection skippedと記録します。
- 返された
-
Googleの仕様に照らして検証
references/google-rich-results.mdを読み込みます。- 検出した各
@typeについて、必須プロパティと推奨プロパティを確認します。 - よくあるエラーを提示します。例:
@contextの欠落、ISO 8601形式ではない日付、数値で指定された価格(文字列で指定する必要があります)、schema.orgのURLではなくプレーンテキストで指定されたavailability、国際形式ではない電話番号。
-
ページの意図を検出
- URLのパターン(
/blog/、/products/、/contact/、/how-to/、`/faq/)に基づきます。 <title>と<h1>の語調に基づきます。- コンテンツのシグナルに基づきます(番号付き手順のリスト → HowTo、画面上に表示されたQ&Aブロック → FAQPage、価格+購入ボタン → Product、住所+営業時間 → LocalBusiness)。
- 複数の意図が検出された場合は、それぞれに対応するスキーマを生成します。
- URLのパターン(
-
不足している JSON-LD を生成する
- 有効なスキーマが一致しない検出済みのインテントごとに、
templates/から該当するテンプレートを読み込みます。article.json— 編集記事/ブログコンテンツ用product.json— 商品/SKU ページ用local-business.json— 実店舗のランディングページ用faq-page.json— 明示的な Q&A ブロック用(政府機関/医療機関の許可リストに限る —references/google-rich-results.mdを参照)breadcrumb-list.json— パンくずナビゲーションがあるページ用
- ライブ HTML の情報を使ってテンプレートのフィールドを埋めます(タイトル → headline、h2 → mainEntity の質問など)。
- 自動入力できなかったフィールドには
{REPLACE: ...}を付け、ユーザーが入力すべき箇所を示します。 HowToは生成しないでください — Google は 2023 年 9 月に HowTo リッチリザルトを終了しました(モバイルとデスクトップ)。意味を明確にするためにスキーマを含めることはできますが、リッチリザルトの向上は見込めません。HowTo を現在利用可能な選択肢として扱わず、推奨理由にこの点を記載してください。
- 有効なスキーマが一致しない検出済みのインテントごとに、
-
生成した JSON-LD を検証する
- ステップ 3 と同じ検証基準を、生成したブロックに再適用します。
{REPLACE: ...}のまま残っている必須フィールドを明示します。
-
任意:上位 SERP 結果とのベンチマーク
DATA_getSerpResults+mcp__firecrawl-mcp__firecrawl_scrape- ページの主要キーワードを特定します(
<title>またはユーザー入力から)。 - オーガニック検索結果の上位 10 件を取得します。
- Firecrawl が利用可能な場合: 上位 10 件をそれぞれスクレイピングします(Firecrawl クレジットを 10 消費)。各ページについて、返された
htmlから JSON-LD ブロックを解析し、検出された@typeを一覧表示します。これにより、Markdown から推測するのではなく、実際のスキーマデータを取得できます。 - Firecrawl が利用できない場合: ベンチマークをスキップします。WebFetch の Markdown ではスキーマブロックが除去されるため、そこからの「検出」は推測にすぎません。
04-competitor-benchmark.mdにCompetitor benchmark skipped — Firecrawl required to read JSON-LD from competitor pages.と記載します。 - 「上位 10 件のうち 6 件以上で使われており、このページにはないスキーマタイプ」を明示します。優先度の高い追加候補の一覧です。(ベンチマークを実施した場合のみ出力します。)
- ページの主要キーワードを特定します(
-
SCHEMA.mdを作成する- 検証レポート(既存のスキーマについて、ブロックごとの合格/不合格)。
- 推奨する追加項目(ステップ 4 の検出結果またはステップ 7 のベンチマークに基づく理由を記載)。
- そのまま貼り付けて使える生成済みの
<script>ブロック。
出力形式
seo-schema-{target-slug}-{YYYYMMDD}/ フォルダーを作成し、次を含めます。
seo-schema-{target-slug}-{YYYYMMDD}/
├── 01-detected.md (existing schema, validation results)
├── 02-recommended.md (which types this page should add and why)
├── 03-generated/
│ ├── article.jsonld
│ ├── faq-page.jsonld
│ └── ... (per generated type)
├── 04-competitor-benchmark.md (only if step 7 ran)
└── SCHEMA.md (deliverable: paste-ready blocks + install instructions)
SCHEMA.md は次の形式に従います。
# Schema Markup: {URL}
> Snapshot dated {YYYY-MM-DD}.
## Currently present
- `Article` — valid ✓
- `BreadcrumbList` — invalid ✗ (missing `position` on item 2)
- ...
## Recommended additions
- `FAQPage` — page has 6 visible Q&A blocks but no FAQ schema. Adding this is eligible for FAQ rich results (subject to Google's 2024+ tightening — see references/google-rich-results.md).
- `HowTo` — ...
## Paste these into the `<head>` of the page
### FAQPage
\`\`\`html
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [...]
}
</script>
\`\`\`
### ... (per generated block)
## Validation pass
- All generated blocks parse cleanly ✓
- All required fields filled ({n} {REPLACE: ...} placeholders remain — see below)
- {REPLACE: ...} placeholders to fill manually:
- article.jsonld → `image` (need a hero image URL ≥ 1200×800)
- ...
## Install
1. Copy each `<script>` block above.
2. Paste into the `<head>` of the relevant page (or the global `<head>` template, gated by page type).
3. Test with [Google's Rich Results Test](https://search.google.com/test/rich-results).
4. Submit the URL to GSC for re-indexing if changes are critical.
ヒント
- JSON-LD は
<head>または<body>の先頭に配置します。奥深くに埋め込まないでください。 - 公開前に、生成した各ブロックを Google のリッチリザルト テスト でテストしてください。ステップ 3/6 の検証は公開仕様に準拠していますが、Google の実際のテスト結果が最終的な判断基準です。
references/google-rich-results.mdには日付があります。このスキルの実行時点で 6 か月以上前の情報であれば、出力に古い情報であることを明記し、ユーザーに最新のドキュメントで確認するよう勧めてください。- ページ上に表示されていないコンテンツにはマークアップを付けないでください。 Google は非表示コンテンツのスキーマをペナルティの対象とします。ページ上に FAQ が実際に表示されていない場合は、FAQPage スキーマを生成しないでください。
- Article スキーマでは
imageが必須です。ページに明確なメイン画像がない場合は、推測せずに{REPLACE: hero image URL}のプレースホルダーを残してください。 - このスキルによる SE Ranking の利用は、読み取り中心です。ステップ 7(競合ベンチマーク)を依頼されない限り、SE Ranking クレジットは消費しません。依頼された場合は
DATA_getSerpResultsにより SE Ranking クレジットを約 5~10 消費します。Firecrawl のコストは別途かかります。対象 URL で 1 クレジット、ステップ 7 の実行時にさらに 10 クレジットです。 - デプロイ後に検証してください: 生成したスキーマを CMS に貼り付けて再デプロイしたら、同じ URL でこのスキルを再実行してください。新しい実行結果の「Currently present」セクションでライブ状態を確認し、スキーマが実際に表示されていること(CMS に保存されただけで、まだ公開されていない状態ではないこと)を確認できます。代替手段として、URL に対して
seo-firecrawlを実行し、META.mdで想定される@typeを検索する方法もあります。