seo-meta-onpage について
ページスナップショットを基に、タイトル、説明、ビューポート、文字コード、言語、robots 指示などの head メタデータを監査する Claude 向けスキルです。不確かな文案や意図的なインデックス設定は人の確認に委ね、限定的な修正を提案または適用します。
主な機能
- 01タイトルと説明タグの監査
- 02ビューポート・文字コード・言語の確認
- 03robots メタデータの確認
- 04メタデータ案の提示
- 05選択した基本修正の適用
- 06スナップショットによるタグ検証
活用シーン
- 01タイトルタグの欠落や長さの確認
- 02レスポンシブ表示とページ言語の確認
- 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)。
- タイトル —
<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 間でサイト全体に重複している場合のみです。すべて大文字にしないでください。キーワードだけを並べたものにしないでください。 - メタディスクリプション — 設定されている必要があります。長さは同じ共通基準に照らして判定します。合格は70~160文字、おすすめは150~160文字です。合格範囲外は
warnであり、決してfailにはなりません。Google は説明文を自由に書き換えるためです。サイト全体で重複しないようにし、このページの内容を説明するものにしてください。定型文にしないでください。 - Viewport —
<meta name="viewport" content="width=device-width, initial-scale=1">が設定されている必要があります(ない場合はfail。モバイルでのレンダリング/インデックス登録に必要です)。 - Charset —
<meta charset="utf-8">が設定され、<head>の先頭1024バイト以内にある必要があります。 - 言語 —
<html lang="…">が設定され、有効な BCP-47 タグである必要があります。 - 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 スニペットがランキング向上につながると決して約束しないでください。