orphan-pages-internal-linking-opportunities
orphan-pages-internal-linking-opportunities について
サイトのブログ記事への内部リンクを監査し、孤立ページ向けのキーワード調査付きリンク案を含む HTML レポートを作成するスキルです。
主な機能
- 01サイトマップからブログ URL を特定
- 02記事間の被リンクをマッピング
- 03孤立ページと低リンクページを分類
- 04孤立ページのキーワードを調査
- 05各孤立ページに3件の配置案を作成
- 06自己完結型 HTML レポートを保存
活用シーン
- 01内部リンクのない記事を見つける
- 02被リンクの少ない記事を抽出する
- 03孤立ページへの文脈に沿ったリンクを計画する
MCP 対応
WebFetch と ToolSearch を使ってページを調べ、アンカーテキストを調査します。DataForSEO の検索ボリュームツールも呼び出します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ infrasity-labs/ dev-gtm-claude-skills --skill orphan-pages-internal-linking-opportunitiesインストール後、Claude Code で/orphan-pages-internal-linking-opportunitiesを入力して読み込まれたか確認します。
同梱ファイルREADME.mdreferences/report-style-reference.html
詳細
孤立ページ監査と内部リンク提案書の生成
完全な SEO 孤立ページ監査を実施します。ユーザーは args を通じてドメインを入力しています。利用可能なツールを使用して、以下のすべてのフェーズを順番に実行し、現在の作業ディレクトリに保存した、ダウンロード可能な単一の HTML レポートファイルを作成してください。
入力ドメイン: {args}
フェーズ 1 — ドメインの正規化とサイトマップの検出
-
入力ドメインを正規化します。
- 先頭と末尾の空白を削除します。
httpで始まっていない場合は、先頭にhttps://を付けます。www.がなく、ベースドメインにwww.を付けた場合に名前解決できる場合は、www.を使用します。- 末尾のスラッシュを削除します。
BASE_URLとして保存します(例:https://www.example.com)。
-
WebFetch を使用して
BASE_URL/robots.txtを取得します。Sitemap:ディレクティブを探し、見つかった場合はその URL をサイトマップの場所として使用します。見つからない場合は、BASE_URL/sitemap.xmlを既定値として使用します。 -
サイトマップ URL を取得します。種類を判定します。
- サイトマップインデックス(
<sitemapindex>タグがある場合):すべての子サイトマップ URL(<loc>)を抽出してそれぞれ取得し、すべての子サイトマップから抽出した<loc>URL を統合して、単一のマスター URL リストを作成します。 - 通常のサイトマップ(
<urlset>タグがある場合):すべての<loc>URL を直接抽出します。
- サイトマップインデックス(
-
マスター URL リスト全体を保存します。
フェーズ 2 — ブログ URL の特定
マスター URL リストから、次の処理を行います。
-
すべての URL パターンを分析し、ブログ/コンテンツセクションを特定します。均一なパターンで最も多く出現する URL プレフィックスを探します。確認する一般的なプレフィックスは、
/blog/、/articles/、/posts/、/insights/、/resources/、/learn/、/news/、/guides/です。 -
ブログコンテンツを最もよく表すプレフィックスを選択します(URL 数が最も多く、構造が最も均一なもの)。複数のプレフィックスが条件を満たす場合は、すべて含めます。
-
マスター URL リストをフィルタリングし、特定したブログプレフィックスに一致する URL のみを含めます。インデックス/一覧ページ(例:スラッグが続かない
BASE_URL/blog)は除外します。BLOG_URLSとして保存します。 -
サイトマップからブログプレフィックスを特定できない場合は、
BASE_URLのホームページを取得してブログ/記事へのナビゲーションリンクを探します。次に、そのページを取得し、すべての投稿 URL を抽出します。 -
合計件数を記録します:「
BASE_URLでブログ投稿が {N} 件見つかりました」
フェーズ 3 — クロールとインバウンドリンクマップの作成
すべてのブログ投稿を並列でクロールする ワークフロー を実行します。ワークフローは次のとおりです。
スクリプトのロジック:
BLOG_URLSを項目リストとして使用します。- URL ごとにエージェントを起動し、次の処理を行います。
- WebFetch を使用してページを取得します。
- 本文/記事コンテンツ内にあり(ナビゲーション、ヘッダー、フッターを除く)、同じドメイン上のブログ URL パターンに一致する他のページを指す href リンクをすべて抽出します。
- 見つかったリンクをすべて絶対 URL に正規化します(末尾のスラッシュ、クエリパラメーター、ハッシュを除去)。
{ source_url, outbound_blog_links: [...] }を返します。
- 次のスキーマを使用します:
{ type: 'object', properties: { source_url: { type: 'string' }, outbound_blog_links: { type: 'array', items: { type: 'string' } } }, required: ['source_url', 'outbound_blog_links'] }
ワークフローの完了後、結果を集計します。
inbound_countマップを作成します:すべてのBLOG_URLSを 0 で初期化した{ url -> number }inbound_sourcesマップを作成します:すべてのBLOG_URLSを[]で初期化した{ url -> [source_url, ...] }- 各クロール結果について、
outbound_blog_linksを反復処理し、有効なリンクごとにインバウンド数を増やし、ソース URL を追加します。
すべてのページを分類します。
- 孤立ページ = インバウンドリンクが 0 件 →
ORPHAN_URLSとして保存 - リンクが少ないページ = インバウンドリンクが 1~2 件 →
LOW_LINKED_URLSとして保存 - 健全なページ = インバウンドリンクが 3 件以上 →
HEALTHY_URLSとして保存
FULL_INBOUND_MAP を作成します:{ url, inbound, linked_from } の配列を、インバウンド数の降順で並べ替えます。
PHASE 4 — 孤立ページのキーワード調査
ワークフローを実行し、各孤立ページで米国の検索ボリュームが最も多いキーワードを取得します。ワークフローでは、次の処理を行います。
スクリプトのロジック:
ORPHAN_URLSを項目リストとして使用する- 孤立 URL ごとにエージェントを起動し、次の処理を行う:
- URL からスラッグ(パスの最後のセグメント)を抽出する
- スラッグからキーワードのバリエーションを 6~8 個生成する(ハイフンをスペースに変換し、語順を変えたり、修飾語を追加・削除したりする)
- ToolSearch を使用して
mcp__claude_ai_DataForSEO__kw_data_google_ads_search_volumeを読み込み、キーワードのバリエーションとlocation_code: 2840(米国)、language_code: "en"を指定して呼び出す - 米国の月間検索ボリュームが最も多いキーワードを
anchor_textとする - フォールバック:DataForSEO からデータが返されない場合、またはエラーが発生した場合は、スラッグを語句に変換(ハイフン → スペース)し、
anchor_textとする - ページを取得し、そのページの内容を 2~3 文の
page_summaryにまとめる { orphan_url, anchor_text, us_monthly_volume, page_summary }を返す
- 次のスキーマを使用する:
{ type: 'object', properties: { orphan_url: { type: 'string' }, anchor_text: { type: 'string' }, us_monthly_volume: { type: 'number' }, page_summary: { type: 'string' } }, required: ['orphan_url', 'anchor_text', 'us_monthly_volume', 'page_summary'] }
結果を KEYWORD_DATA として保存します。形式は { orphan_url -> { anchor_text, us_monthly_volume, page_summary } } のマップです。
PHASE 5 — 孤立ページの内部リンク概要を作成する
ORPHAN_URLS を対象に、2 段階のパイプラインを使用するワークフローを実行します。
ステージ 1 — キーワードデータを受け渡す(すでに計算済みのため、エージェントは不要です。KEYWORD_DATA を直接使用します)
ステージ 2 — 孤立ページごとにエージェントを起動し、次の処理を行う:
orphan_url、anchor_text、page_summary、およびBLOG_URLSの全リストを受け取るBLOG_URLSから、トピックに関連する参照元ページを正確に3 件選ぶ(孤立ページ自体は除外し、内部リンクの多い孤立していないページを優先する)- WebFetch を使用して、3 件の参照元ページをそれぞれ取得する
- 各参照元ページについて、次の内容を作成する:
source_url:参照元ページの完全な URLwhere_to_place:そのページ内の配置場所を具体的かつ正確に説明する。H2/H3 セクション名、該当する段落、および前後の内容を明記すること。コンテンツ編集者が迷わず場所を特定できるだけの具体性が必要ですcontext_copy:その場所に挿入する、自然な流れの文章を 300 文字以上作成する。anchor_textは<a href="ORPHAN_URL">ANCHOR_TEXT</a>として、その中に必ず 1 回だけ含めること。文章は、宣伝的でも無理に挿入したようでもなく、最初から記事の一部だったかのように自然に読める必要があります。3 か所すべてで同じアンカーテキストを使用します
{ orphan_url, anchor_text, placements: [{ source_url, where_to_place, context_copy }, ...] }を返す
placementsを 3 個のオブジェクトからなる配列とし、各オブジェクトでsource_url、where_to_place、context_copyを必須とするスキーマを使用する
ワークフローの完了後、各 context_copy を後処理します。
anchor_textがハイパーリンクとして記載されているか確認する(href="orphan_url"が含まれているか)- 含まれていない場合、
anchor_textが最初に出現する箇所(大文字・小文字を区別しない)を見つけ、<a href="orphan_url">anchor_text</a>に置き換える
BRIEFS として保存します。
PHASE 6 — HTML レポートを作成する
Write ツールを使用し、現在の作業ディレクトリに orphan-audit-{domain}-{YYYYMMDD}.html という名前の、自己完結型 HTML ファイルを 1 つ保存します。ここで、{domain} はベースドメイン(プロトコルと www を含まず、ドットをハイフンに置換)で、{YYYYMMDD} は今日の日付です。
HTML ファイルは完全に自己完結している必要があります。すべての CSS を <style> タグ内に記述し、外部 CDN やフォントのインポートは使用せず、オフラインで動作させます。以下の構成に従い、すっきりとしたプロフェッショナルなデザインにします。
HTML レポートの構成
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Orphan Page Audit — {domain}</title>
<style>
/* Full inline CSS — professional design, light background, clean typography */
/* Use system fonts: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif */
/* Color palette: #0f172a (headings), #334155 (body), #3b82f6 (accent/links), #f1f5f9 (backgrounds), #e2e8f0 (borders) */
/* Stat cards, tables, collapsible sections, copy buttons */
</style>
</head>
<body>
セクション 1 — ヘッダー
- ドメイン名を大きく表示するサイトのロゴ領域
- 監査日
- 「レポートをダウンロード」ボタン(
window.print()を実行するか、ファイルを直接保存)
セクション 2 — エグゼクティブサマリー 横並びの統計カード 4 枚:
- 見つかったブログ投稿の合計:
{BLOG_URLS.length} - 孤立ページ:
{ORPHAN_URLS.length}+ 全体に占める割合 - 内部リンクが少ないページ:
{LOW_LINKED_URLS.length}(被リンク 1~2 件) - 健全なページ:
{HEALTHY_URLS.length}(被リンク 3 件以上)
孤立ページ/内部リンクが少ないページ/健全なページの割合を視覚的に示す横棒グラフ。
セクション 3 — 孤立ページの一覧
列:# | ページ URL(クリック可能なリンク)| アンカーテキスト | 米国の月間検索ボリューム
孤立ページごとに 1 行。
セクション 4 — 被リンクマップ(孤立ページ以外)
被リンク数の降順で並べた表:ページ URL | 被リンク | リンク元
「リンク元」列には、各リンク元 URL を改行して記載するか、コンマ区切りで列挙します。
セクション 5 — 内部リンク案 孤立ページごとに、次の内容を含むカードを表示します。
- 孤立 URL(h3、クリック可能)
- アンカーテキスト(バッジ/ピル)
- 米国の月間検索ボリューム
- 次の内容を表示する 3 つの配置ブロック:
- リンク元ページ URL(太字、クリック可能)
- 「配置場所」— スタイル設定した引用ブロックまたは情報ボックスとして表示
- 「文脈に合わせた文章」— スタイル設定した
<pre>または<div>として表示。「コピー」ボタンを使ってnavigator.clipboard.writeText()で HTML をコピーします。
セクション 6 — フッター
- 「Infrasity Orphan Page Audit Skill が生成」
- 監査日とドメイン
JavaScript(インラインの <script> タグ)
- コピー機能:
navigator.clipboard.writeText(element.innerText) - ナビゲーションリンクをスムーズにスクロール
- オプション:内部リンク案カードの折りたたみ/展開
フェーズ 7 — ユーザーへの確認と報告
HTML ファイルを保存した後:
- ファイルパスをユーザーに報告します
- 次の内容を簡潔にまとめます。
- 見つかったブログ投稿の合計
- 孤立ページの数
- 生成した内部リンク案の数
- ファイル名と保存場所
- DataForSEO からキーワードデータを取得できず、スラッグで代替したページがあれば、その旨を記載します
重要なルール
/blog/をハードコードしないでください — 実際のサイトマップから URL パターンを必ず検出します- アンカーテキストは孤立ページごとに固定します — 同じ
anchor_text文字列を、その孤立ページの 3 つのcontext_copyブロックすべてで、必ずハイパーリンクとして使用します - 文脈に合わせた文章は最低 300 文字必要です — 厳密に徹底します。エージェントがこれより短い文章を返した場合は、警告を出します
- 配置場所は具体的に指定します — セクション見出し、段落内の位置、前後のコンテンツの文脈を示します
- HTML レポートは自己完結型にします — 外部リクエストや CDN を使用せず、オフラインで動作します
- DataForSEO のフォールバック — API からデータが返されない場合は、スラッグを読みやすい語句に変換して使用します
- ハイパーリンクを後処理します — すべての内部リンク案を生成した後、HTML を書き込む前にアンカーテキストのハイパーリンクを必ず確認して修正します
- ファイル名 —
orphan-audit-{domain}-{YYYYMMDD}.htmlとし、ユーザーの現在の作業ディレクトリに保存します