mcpField
S
seo-page

seo-page

github.com/serankingマーケティング・グロース19181 回インストール18 週間前に更新
リポジトリ

seo-page について

seo-pageは、SE Rankingのデータとページ検査を使い、SEO担当者が単一URLを評価するスキルです。根拠に基づき、維持・更新・統合・削除の判定と対応計画を作成します。

主な機能

  1. 01URL単位の順位とトラフィック分析
  2. 02ページオーソリティと履歴の確認
  3. 03SERPとAI Overviewの分析
  4. 04HTMLとメタデータの検査
  5. 05同一ドメイン内の競合確認
  6. 06根拠ファイルとキーワードCSV

活用シーン

  1. 01ページの維持か更新かを判断
  2. 02同一ドメイン内の競合ページを発見
  3. 03SERPの根拠に基づく修正の優先付け

MCP 対応

SE Ranking MCP サーバーへの接続が必要です。SEO指標、順位、SERPデータを取得します。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/seranking/seo-skills --skill seo-page

インストール後、Claude Code で/seo-pageを入力して読み込まれたか確認します。

詳細

出力例:examples/seo-page-notion-keyboard-shortcuts-20260514/PAGE.md

ページインテリジェンス

単一の URL がどのキーワードでランクインしているか、どれだけのトラフィックを獲得しているか、強みと弱みはどこか、そして何をすべきかを示します。成果物は、SE Ranking の URL レベルのデータに基づく、KEEP、REFRESH、CONSOLIDATE、KILL のいずれかの明確な判定です。

前提条件

  • SE Ranking MCP サーバーに接続されていること。
  • Claude の WebFetch ツールが利用可能であること(ページレベルの HTML の確認用)。
  • ユーザーからの指定:(a)対象 URL、必要に応じて(b)対象市場の国(デフォルト:us)、(c)主要なトピックキーワード(指定がない場合は <title> と <h1> から自動推定)。

プロセス

  1. 対象を検証し、事前確認を行います。 標準の 3 段階の事前確認(クレジット残高、Firecrawl の利用可否、Google API)については、skills/seo-firecrawl/references/preflight.md を参照してください。スキル固有の注意事項:

    • URL を取得できることを確認し、親ドメインを特定します。ユーザーが主要キーワードを指定している場合はそれを使用し、指定がない場合はステップ 3 で推定します。
    • このスキルで見込まれる SE Ranking のコスト:通常約 10~15 クレジット(URL 概要、ランキングキーワード、ページオーソリティ、上位 3~5 キーワードの SERP コンテキスト)。
    • Firecrawl:WebFetch によるフォールバックが可能な任意機能で、利用可能な場合は約 1 Firecrawl クレジットを使用します。利用可能な場合、ステップ 6 では raw <head> から og:*、twitter:*、canonical、robots meta、JSON-LD の種類、hreflang の数を取得します。WebFetch が返すのは Markdown のみで、これらのフィールドは削除されます。Firecrawl がない場合、該当する行には PAGE.md に (skipped — Firecrawl not installed) と出力されます。インストール済みでも Firecrawl を利用不可として扱うには、クレジットを節約するために --no-firecrawl を指定します。
    • Google API:tier 1(GSC が利用可能)の場合、ページオーソリティのステップの後にステップ 4b(GSC の URL パフォーマンス+URL 検査)を実行できます。詳しい手順については、skills/seo-google/references/cross-skill-integration.md の「seo-page」を参照してください。
  2. URL レベルの概要 DATA_getUrlOverviewWorldwide

    • キーワード数、オーガニックトラフィックの推定値、有料キーワード数、有料トラフィックの推定値、上位地域を取得します。
    • 注:トラフィックの推定値は傾向を示すものであり、Google Search Console の代わりにはなりません。
  3. ランキングキーワード DATA_getDomainKeywords(完全一致には filter_url ではなく url パラメーターを使用します)

    • 対象国でその URL がランクインしているすべてのキーワードと順位を取得します。
    • トラフィック加重スコア volume × CTR-by-position で並べ替えます(標準的な CTR カーブを使用します:1=28%、2=15%、3=11%、4=8%、5=7%、6=5%、7=4%、8=3%、9=2%、10=2%、11+=1%)。
    • 上位 3~5 件を、ステップ 5 の SERP 調査で使用する URL の「主要キーワード」とします。
  4. ページオーソリティ DATA_getPageAuthority + DATA_getPageAuthorityHistory

    • 現在の PA スコアと過去 12 か月の推移を確認します。
    • 過去 90 日間で 5 ポイントを超える低下があれば指摘します。 4b. GSC URL パフォーマンス + URL 検査 (google-api.json が存在し、tier ≥ 1 の場合のみ)
    • ステップ 2 の方向性を示すトラフィック推定を、対象 URL のファーストパーティの Google データに置き換えます。
    • URL の GSC 検索アナリティクスを取得します(過去 28 日間、クエリ別・ページ別)。 python3 scripts/gsc_query.py --property "{config.default_property}" --url "{target_url}" --days 28 --json
    • URL 検査を取得します(実際のインデックス登録状況、Google が認識している正規 URL、最終クロール日)。 python3 scripts/gsc_inspect.py "{target_url}" --site-url "{config.default_property}" --json
    • URL のドメインが GSC プロパティとして確認されていない場合は、「GSC: {target_domain} not verified — add it in Search Console」と表示し、SE Ranking のデータのみで続行します。
    • PAGE.md の「## Snapshot」に、次の内容を表示します。GSC last 28d: {clicks}/{impressions}/{ctr}% CTR / pos {position} および Google sees: {INDEXED|EXCLUDED} · canonical {userCanonical} → {googleCanonical} · last crawled {date}。
    • 判定ヒューリスティックに反映します: INDEXED + 表示回数 > 100 + 順位 4–10 → REFRESH を強く推奨します(明確なクイックウィン)。EXCLUDED(理由を問わず)→ KILL または CONSOLIDATE を強く推奨します。userCanonical ≠ googleCanonical → 判定にかかわらず重大な問題としてフラグを付けます。
    • 詳しい手順は skills/seo-google/references/cross-skill-integration.md の §「seo-page」を参照してください。
  5. SERP の状況 DATA_getSerpResults および DATA_getAiOverview

    • 主要キーワード 3~5 個それぞれについて、以下を確認します。
      • オーガニック検索結果の上位 10 件(URL、タイトル、スニペット)。
      • 表示されている SERP 機能(PAA、画像カルーセル、動画、ショッピングなど)。
      • AIO の有無と引用元 — この URL は AIO で引用されているか。
  6. HTML の確認 WebFetch(常時)+ mcp__firecrawl-mcp__firecrawl_scrape(利用可能な場合)

    • まず WebFetch(無料、即時):<title>、meta description、すべての <h1..h6>、lang、単語数、内部リンク数、画像数を抽出します。WebFetch は Markdown を返すため、<title> 以外の <head> 内の内容は失われます。次の項目でそれを補います。
    • 次に Firecrawl(Firecrawl クレジット 1 件。formats: ["rawHtml"] を渡します)— WebFetch では取得できない情報を補います。形式は rawHtml に固定してください。デフォルトの html は後処理され、多くのサイトで canonical、hreflang、<script type="application/ld+json"> ブロックが気付かないうちに削除されます。明らかに存在するはずのサイト(主要な SaaS のホームページなど)で、これらの head フィールドがゼロになる場合は、rawHtml フラグを忘れています。再実行してください。
      • metadata から、og:title、og:description、og:image、twitter:card、viewport、robots meta、canonical URL を取得します。
      • 返された rawHtml から、すべての <script type="application/ld+json"> ブロックを取得します。それぞれを JSON として解析し、検出された @type(Article、BreadcrumbList、Organization、Product など)を列挙します。解析に失敗したブロックがあれば記録します。
      • hreflang:rawHtml 内の <link rel="alternate" hreflang="…"> の出現数を数えます。
    • Firecrawl が利用できない場合: WebFetch の処理は引き続き実行し、Page basics の OG / Twitter / canonical / robots / JSON-LD / hreflang の各行には (skipped — Firecrawl not installed) を入力します。Markdown から推測しないでください。
    • 確認: ページの title と H1 は、実際に上位表示されているキーワードを扱っていますか。ページが本文で扱っていないキーワードで上位表示されている場合は、統合を強く検討するシグナルです。
  7. ドメインの状況 DATA_getDomainOverviewWorldwide(親ドメイン)

    • 簡易情報:親ドメインの DA、キーワード総数、トラフィック総量。ページの PA をドメインと比較して把握するために使用します。
  8. カニバリゼーションの確認 DATA_getDomainPages

    • 親ドメインのページをオーガニックトラフィック順に取得します。上位 50 件までに絞ります。カニバリゼーションのリスクが集中する範囲です。
    • 候補 URL のトラフィック加重上位 3 キーワード(ステップ 3)について、同じドメイン内の別の URL がいずれかのキーワードで上位 20 位以内にランクインしているか、同一ドメインのページ一覧を確認します。
    • カニバリゼーションの兆候: 候補の上位 3 キーワードで、競合ページの URL が 20 位以内にランクインしている場合です。競合 URL、キーワード、競合ページと候補ページの順位、競合ページのトラフィックを記録します。
    • 従来の方法より低コストです。 以前のバージョンでは、親ドメインに対して DATA_getDomainKeywords を使って相互確認していました。このエンドポイントは、大規模サイトでは数万行を返すことがあり、この確認には過剰です。トラフィック順に並べた DATA_getDomainPages を使えば、影響の大きい競合ページを直接確認できます。
    • 競合するページがなければ、このシグナルは「カニバリゼーションは検出されませんでした」となります。ステップ 9 に進みます。
  9. 判定をまとめる

    • 判定ヒューリスティック(ヒントを参照)を適用し、KEEP/REFRESH/CONSOLIDATE/KILL を決定します。
    • REFRESH の場合は、具体的な変更点を上位 3 つ特定します(例:「SERP の勝者 10 件中 7 件が使っている『alternatives』の H2 を追加する」)。
    • PAGE.md を作成します(以下の出力仕様を参照)。

出力形式

次のフォルダーを作成します:seo-page-{target-slug}-{YYYYMMDD}/

seo-page-{target-slug}-{YYYYMMDD}/
├── PAGE.md                       (synthesised verdict + plan — primary deliverable)
├── keywords.csv                  (full keyword list with positions — load-bearing CSV the auditor walks through row-by-row)
├── 04-serp-context.md            (top 10 + AIO for top 3–5 keywords — load-bearing reference for SERP-driven REFRESH discussions)
└── evidence/
    ├── 01-url-overview.md        (raw DATA_getUrlOverviewWorldwide)
    ├── 02-keywords.md             (raw DATA_getDomainKeywords filtered)
    ├── 03-authority.md            (PA + history)
    ├── 05-page-snapshot.md        (HTML extracts)
    └── 06-cannibalization.md      (peer pages on the same domain competing for the top-3 keywords)

トップレベルには PAGE.md、keywords.csv、04-serp-context.md を配置します。その他のステップファイルには、再現性を確保するため、生の API/HTML 抽出データを evidence/ に保存します。監査担当者が参照するのは CSV と SERP コンテキストであり、API 呼び出しごとのダンプではありません。

PAGE.md は次の形式に従います。

# Page Intelligence: {URL}

> Snapshot dated {YYYY-MM-DD} · Country: {country} · Primary keyword: {keyword}

## Snapshot
- Ranking keywords: {n}
- Estimated monthly organic traffic: {n}
- Page authority: {PA} ({↑/↓ trajectory over 90 days})
- Primary topic: {topic}
- AIO citations: {n} of {checked} primary-keyword AIOs cite this URL
- GSC last 28d: {clicks} clicks / {impressions} impressions / {ctr}% CTR / avg position {n}  *(or `not configured` / `property not verified`)*
- Google sees: {INDEXED|EXCLUDED|...} · canonical {userCanonical} {→ googleCanonical if differ} · last crawled {YYYY-MM-DD}

## Page basics
- `<title>`: {value}
- meta description: {value | absent}
- `og:title`: {value | absent | skipped — Firecrawl required}
- `og:description`: {value | absent | skipped}
- `og:image`: {url | absent | skipped}
- `twitter:card`: {summary | summary_large_image | absent | skipped}
- `<link rel="canonical">`: {URL | self-referential | absent | skipped}
- meta robots: {index,follow | noindex,nofollow | absent | skipped}
- JSON-LD types detected: {Article, BreadcrumbList, Organization | none | skipped}
- hreflang variants: {n | skipped}

## What this page wins
- {keyword} — position {n}, ~{volume} monthly searches, ~{traffic} monthly clicks.
- ... (top 3–5)

## Almost-wins (page-2 refresh opportunities)
- {keyword} — position {n}, ~{volume} monthly searches. The top 3 SERP winners all do {pattern} that this page doesn't.
- ... (top 3 examples)

## What this page misses
- {keyword} — competitors {comp1}, {comp2} rank in top 5; this page is absent.
- ...

## Same-domain cannibalization
- {peer URL} — ranks position {n} for "{keyword}" (candidate ranks position {m}). Peer estimated traffic: {n}/mo.
- ... (only list rows where a peer URL ranks ≤ 20 for one of the candidate's top-3 keywords; if none, write "No same-domain cannibalization detected on top-3 keywords.")

## AI Search angle
- {n} of {checked} AIO queries on the URL's keywords cite this page.
- The AIOs that DON'T cite this page tend to cite {pattern} (e.g., comparison tables, step-by-step how-tos).
- Recommended GEO move: {one specific change}.

## Verdict: {KEEP | REFRESH | CONSOLIDATE | KILL}

Reasoning: {1–2 sentences anchored in objective signals from above}.

### If REFRESH — top 3 changes
1. {Specific change}
2. {Specific change}
3. {Specific change}

## Raw data
- keywords.csv — full enriched ranking-keyword list
- 04-serp-context.md — per-keyword SERP top-10 with AIO
- evidence/05-page-snapshot.md — HTML extracts

keywords.csv の列:keyword,volume,kd,position,intent,traffic_estimate,url

ヒント

  • SE Ranking Data API のレート制限(1 秒あたり 10 リクエスト)を守ってください。ステップ 5 の 3~5 件の SERP クエリは、順番に間隔を空けて実行してください。
  • 実行前に DATA_getCreditBalance を呼び出してください。1 URL あたり 10~15 クレジットが一般的です。
  • 判定の目安:
    • KEEP:PA が安定または上昇している。トラフィックが安定または上昇している。上位 3 件のキーワードが順位を維持している。AIO が表示される箇所では、AIO の引用がある。
    • REFRESH:次のいずれかに該当する場合(90 日間で PA が 5 超低下した。トラフィックが 20% 超低下した。上位 3 件のキーワードが 11 位以下に下落した。競合が引用されている一方で、AIO の引用がない)。GSC データ(ステップ 4b)で INDEXED、インプレッション数が 100 超、平均掲載順位が 4~10 位と示されている場合は、さらに確度が高まります(明確なクイックウィンの可能性があります)。
    • CONSOLIDATE:カニバリゼーションが検出された場合(ステップ 8)— 同一ドメインの関連 URL が、候補ページの上位 3 件のキーワードの 1 つ以上で 20 位以内にランクインしている場合です。関連ページが候補ページを上回り、かつより多くのトラフィックを獲得している場合は、CONSOLIDATE の確度が高まります。それ以外の場合、CONSOLIDATE の推奨内容は「候補ページを削除する」ではなく「候補ページに統合する」です。
    • KILL:PA が 10 未満、トラフィックが月間 50 未満、上位 10 位以内のキーワードがなく、そのページを指す内部リンクもない場合です。JSON-LD スキーマも存在しない場合(Firecrawl がブロックを 0 件検出)は、さらに確度が高まります。そのページには、オーガニック検索にも AI にも、どのクローラーに対してもシグナルがありません。URL Inspection(ステップ 4b)が理由を問わず EXCLUDED を返した場合も、確度が高まります。
    • **GSC の正規 URL 不一致(すべての判定に適用):**ステップ 4b で userCanonical ≠ googleCanonical が検出された場合、判定にかかわらず、これを重大な問題として PAGE.md に記載してください。判定だけでは解決できないインデックス登録の不安定さを示しています。
  • 理由を捏造しないでください。PAGE.md の主張はすべて、元データファイルの数値に基づかせてください。
  • KEEP と REFRESH の判断に迷った場合は、REFRESH を選んでください。小規模な更新も積み重なります。
  • keywords.csv は監査可能な記録です。関係者から判定に疑問を呈された場合は、CSV の各行を順に確認してください。
  • データが非常に少ないページ(新しいページ、ランクインしているキーワードが 5 件未満)は、判定の信頼性が低くなります。無理に判定せず、「データ不足 — 60 日後に再実行」と記載してください。
  • **DATA_getPageAuthorityHistory のすべてゼロの場合の注意点:**エンドポイントが履歴期間中のすべての日付で inlink_rank: 0(または同等の値)を返した場合は、「履歴データ不足」として扱ってください。低下を主張したり、それを根拠に REFRESH を推奨したりしないでください。指標が飽和している非常に高権威のページや、長期的なデータがまだ十分に蓄積されていない URL でよく発生します。DATA_getPageAuthority(現在の値)と照合してください。現在の PA に意味のある値がある一方で、履歴がすべてゼロの場合は、推移を捏造せず、その乖離を PAGE.md に明記してください。

コメント