mcpField
S
seo-meta-onpage

seo-meta-onpage

github.com/hainrixzマーケティング・グロース79205 回インストール3 日前に更新
リポジトリ

seo-meta-onpage について

ページスナップショットを基に、タイトル、説明、ビューポート、文字コード、言語、robots 指示などの head メタデータを監査する Claude 向けスキルです。不確かな文案や意図的なインデックス設定は人の確認に委ね、限定的な修正を提案または適用します。

主な機能

  1. 01タイトルと説明タグの監査
  2. 02ビューポート・文字コード・言語の確認
  3. 03robots メタデータの確認
  4. 04メタデータ案の提示
  5. 05選択した基本修正の適用
  6. 06スナップショットによるタグ検証

活用シーン

  1. 01タイトルタグの欠落や長さの確認
  2. 02レスポンシブ表示とページ言語の確認
  3. 03クロールしたページ間の重複メタデータ確認

インストール

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

$npx skills add https://github.com/hainrixz/claude-seo-ai --skill seo-meta-onpage

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

詳細

seo-meta-onpage(M7)

head の衛生管理は低コストで決定論的に行えるうえ、すべてのクローラーが最初に読み取るものです。参考資料:head と併用する構造化データ層については references/schema-tier1.md を参照してください(M5 が担当)。

入力

ディスパッチエンベロープで指定された PageSnapshot を使用します。<run_dir>/pages/<slug>.json から parsed(title、metas[]、robots_meta[]、canonicals[]、word_count)と headers(content-language、x-robots-tag)を読み取ります。逐語的な根拠は pages/<slug>.html を Grep して確認します。サイトの成果物は <run_dir>/site/{robots.json,sitemaps.json,discovery.json} にあります。audit.mjs がすでに出力した決定論的な検出結果は <run_dir>/findings.deterministic.json に記載されています。これらの ID は再出力せず、モデルによる判定が必要な検出結果のみ追加してください。スナップショットがなく、URL/パスを直接指定して呼び出された場合は、まず node "${CLAUDE_PLUGIN_ROOT}/scripts/snapshot.mjs" <target> --out "${CLAUDE_PLUGIN_DATA}/runs" を実行し、出力されたスナップショットのパスを使用してください。

監査

PageSnapshot を基に作業します(render.used が none でない場合は parsed_rendered、それ以外は parsed)。

  1. タイトル — <title> は正確に1つである必要があります。長さは scripts/lib/bands.mjs の共通基準(唯一の参照元。parse-html.mjs、オンページチェック、このスキルがすべて読み取ります)に照らして判定します。合格は30~60文字、おすすめは50~60文字です。50~60文字は判定 recommended、30~60文字の範囲内でそれ以外は pass、30文字未満は short、60文字超は long となり、どちらも warn であり、決して fail にはなりません。fail となるのは、タイトルがないか空の場合、または異なる URL 間でサイト全体に重複している場合のみです。すべて大文字にしないでください。キーワードだけを並べたものにしないでください。
  2. メタディスクリプション — 設定されている必要があります。長さは同じ共通基準に照らして判定します。合格は70~160文字、おすすめは150~160文字です。合格範囲外は warn であり、決して fail にはなりません。Google は説明文を自由に書き換えるためです。サイト全体で重複しないようにし、このページの内容を説明するものにしてください。定型文にしないでください。
  3. Viewport — <meta name="viewport" content="width=device-width, initial-scale=1"> が設定されている必要があります(ない場合は fail。モバイルでのレンダリング/インデックス登録に必要です)。
  4. Charset — <meta charset="utf-8"> が設定され、<head> の先頭1024バイト以内にある必要があります。
  5. 言語 — <html lang="…"> が設定され、有効な BCP-47 タグである必要があります。
  6. Robots メタ — <meta name="robots"> を確認し、ランキング対象のページに誤って noindex/nofollow が設定されていないかをフラグします。インデックス登録可否/canonical の判定(canonical タグを含む)は seo-indexability(M2) が担当します。ここでは <link rel="canonical"> の有無のみを記録し、妥当性の判定は行わないでください。

修正

  • AUTO — viewport、charset(utf-8)、<html lang> がない場合は追加します(Content-Language ヘッダーまたはページ本文から言語を推定し、曖昧な場合は TODO を残します)。これらは決定論的で、追加のみで検証可能な書き込みのため、fix 用の差分を作成します。
  • PROPOSED — <h1>、導入段落、主要トピックを基に、長さの範囲内でキーワードを考慮しつつ詰め込みはしない <title> と meta description を作成/短縮します。ブランド名のサフィックスは、サイトで使用されている場合のみ付けます。それぞれの案は個別に承認が必要です(メッセージの内容は人が決定します)。
  • ADVISORY — 意図的な noindex を自動で削除することはありません。提示したうえで、ユーザーの判断に委ねます。
  • 決して捏造しないでください — 内容が薄く値を導き出せない場合は、タイトル、説明文、lang を作成せず、ユーザーが入力するための、明確に示された TODO: プレースホルダーを残してください。

検証

  • メソッド dom_assert:node "${CLAUDE_PLUGIN_ROOT}/scripts/parse-html.mjs" --snapshot <pages/<slug>.json>(または --url <u>/--file <path>)を実行します。title(値/長さ/ok)、meta_description(値/長さ/ok)、robots_meta、canonical、head_hygiene(viewport/charset/lang)が返され、各 head 要素の有無と長さがスナップショットに照らして直接検証されます。
  • タイトル/説明文の重複チェックにはクロール対象の全ページが必要です。単一ページしかない場合、URL 間のチェック結果は needs_api と報告し、誤って pass と判定することは決してありません。

検出結果

検出結果は schema/finding.schema.json に準拠します。重大度ポリシー:5 は、サイト/テンプレートの範囲で適格性を失わせる壊滅的な事実にのみ使用します。4 は重大、3 は中程度、2 は軽微、1 は表面的、0 は情報提供のみです。また、アクティブなカテゴリにおける established の重大度 5 の fail だけがスコアに上限を設けられます(references/scoring-model.md)。head の衛生状態が 5 になることはありません。例:

  • M7.title.missing — <title> がありません(fail、重大度 3、fixable: proposed、軸 search、確信度 established)。
  • M7.title.length_out_of_band — タイトルは 78 文字で、合格範囲の 30~60 文字を超えているため、SERP で切り詰められる可能性があります(warn、重大度 3、fixable: proposed、軸 search、確信度 directional)。判定の根拠となった文字数と範囲を引用してください。
  • M7.description.length_out_of_band — 説明文が合格範囲の 70~160 文字を超えています(warn、重大度 2、fixable: proposed、軸 search、確信度 directional)。
  • M7.viewport.missing — レスポンシブ対応の viewport がありません(fail、重大度 3、fixable: auto、軸 search、確信度 established)。
  • M7.title.duplicate_across_urls — 複数のサンプル URL で同じ <title> が配信されています(warn、重大度 3、fixable: proposed、軸 search、確信度 directional)。重複クラスごとに 1 件の検出結果を出し、共通のタイトルと URL を引用してください。
  • M7.description.duplicate_across_urls — 複数のサンプル URL で同じ meta description が配信されています(warn、重大度 2、fixable: proposed、軸 search、確信度 directional)。 どちらの重複チェックも URL 間で行われます。実行時のコンテンツページが 2 ページ未満の場合、M7.title.duplicate_across_urls として needs_api ステータスで 1 回だけ報告され(重大度 0、スコア対象外)、合格として報告されることはありません。 プラットフォーム条件付き ID。 このモジュールは、profile.json でプラットフォーム(shopify、wordpress、nextjs、gatsby、jekyll、react-router)が指定されている場合にのみ発動する 6 つの ID も出力します。これらは references/routing.md の「§ Platform-conditional finding ids」に記載されており、references/platforms/<id>.md の「§10」で仕様が定められています。

各検出結果では、evidence.observed に head の内容をそのまま引用します(例:正確なタイトル文字列とその長さ)。verification.reproduce には上記の実行可能な parse-html.mjs コマンドを指定します。expected_impact は範囲と確信度を明示します(根拠のない % は不可)。

正確性

  • 「meta keywords」タグはすでに無効です。Google は無視するため、追加も推奨もしないでください。
  • タイトル/説明文の長さの範囲は SERP 表示のヒューリスティックです(Google は文字数ではなくピクセル幅で切り詰めます)。ランキング要因ではないため、範囲外の値は warn とし、fail にはしません。影響の確信度も最大で directional です。合格範囲は推奨範囲より意図的に広く設定されているため、35 文字のタイトルが不備として報告されることはありません。どちらの範囲も scripts/lib/bands.mjs から取得するため、スクリプト、レポート、このスキルの間で食い違うことはありません。
  • Google はページ上のコンテンツをもとに、表示するタイトル/説明文を頻繁に書き換えます。完璧なタグでも必ず表示されるとは限らないため、SERP スニペットがランキング向上につながると決して約束しないでください。

コメント