Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Internal linking as a data structure

2026年09月25日に「Dev.to」が公開したITニュース「Internal linking as a data structure」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Webサイトの内部リンクを手動管理すると、規模が大きくなると破綻する。URLを「点」、リンクを「線」とするグラフ構造で管理すれば、孤立ページやリンクの深さをプログラムで自動検出し、サイト品質を保てる。自動リンク生成や定期的なチェックも可能になり、保守効率が向上する。

出典: Internal linking as a data structure | Dev.to公開日:

ITニュース解説

Webサイトの運営において、内部リンクは非常に重要な役割を果たす。しかし、多くのサイトでは、関連するページへのリンクを編集者が手作業で追加しているのが実情である。サイトのページ数が数百を超え、規模が大きくなると、どのページがどこにリンクしているのかを誰も完全に把握できなくなり、一部のページが孤立して訪問者や検索エンジンから発見されにくくなる問題が頻繁に発生する。これは、Webサイトのユーザビリティだけでなく、検索エンジン最適化(SEO)の観点からも大きな課題となる。

この課題を解決するための一つのアプローチとして、Webサイトの内部リンクを「データ構造」として捉え、グラフ理論の考え方を適用する方法がある。具体的には、Webサイト上の個々のURLを「ノード(点)」と見なし、あるURLから別のURLへ張られた内部リンクを「エッジ(線)」と見なすことで、Webサイト全体をノードとエッジで構成される「グラフ」として表現できる。このグラフは、ページの関連性やサイト全体の構造を数値的に分析するための基盤となる。

このグラフを構築するためには、まずサイト内のすべてのノード、つまりURLを収集する必要がある。最も効率的な方法は、Webサイトのサイトマップ(sitemap.xml)を利用することである。サイトマップは、検索エンジン向けにサイト内のURLをリストアップしたXML形式のファイルであり、サイトが公開しているURLの全体像を把握するのに役立つ。記事中の例では、XMLParserというライブラリを使ってサイトマップのXMLファイルを解析し、そこに含まれるURLパスのリストを取得している。もしサイトマップ自体が複数のサイトマップファイルを指し示す「サイトマップインデックス」の形式であっても、再帰的に読み込むことで全てのURLを集めることができる。

次に、ノード間のエッジ、つまり内部リンクの情報を収集する。これは、収集した各URLに実際にアクセスし、そのページのHTMLコンテンツを解析して、内部リンク(<a>タグでhref属性が設定されたもの)を抽出する作業である。記事の例では、cheerioというライブラリを使って、サーバーサイドでHTMLを解析し、ページ内のすべての内部リンクのURLパスを特定している。このとき、外部サイトへのリンクや、メールアドレス、電話番号など、Webサイトの内部構造とは関係のないリンクは除外する。最終的に、各URLがどのURLへリンクしているかという情報を集め、「隣接リスト」と呼ばれる形式で整理する。隣接リストは、グラフの基本的な表現方法の一つであり、各ノードがどのノードに直接リンクしているかを示す。この際、抽出したリンク先が、事前にサイトマップから収集したノードリストに存在するかどうかを確認することは重要である。これにより、既に削除されたページへのリンクや、サイトマップに記載されていない未知のページへのリンクを除外できる。

グラフが構築できれば、様々な分析が可能になる。その一つが「深さ(Depth)」の計算である。これは、Webサイトのトップページ(通常はルート/)から、特定のページまで到達するのに必要なクリック数を示す。深さの計算には、「幅優先探索(BFS)」というアルゴリズムが用いられる。幅優先探索は、開始ノードから最も近いノードを順に探索していく方法であり、ノード間の最短経路を見つけるのに適している。この計算により、トップページから遠すぎるページは、訪問者や検索エンジンのクローラーにとって発見されにくい可能性があると判断できる。深さが大きいページは、一般的にSEOの観点からも重要度が低いと見なされることが多い。

深さの計算結果からは、内部リンク上の問題点も発見できる。「オーファンページ(Orphan Page)」とは、サイトマップには存在するものの、サイト内のどのページからも内部リンクが張られていない、孤立したページのことである。幅優先探索では、内部リンクで到達できないページには深さが割り当てられないため、深さが計算されなかったページがオーファンページであると特定できる。また、オーファンページではないが、他のページと相互にリンクし合っているものの、サイトの主要な部分からは完全に孤立している「孤立したクラスター」も同様に発見できる。これらは、サイトのリニューアルやコンテンツの削除に伴い、誤ってリンク構造から取り残されてしまったページであることが多く、サイトの品質を低下させる要因となる。

このようにグラフ構造を構築し分析できるようになれば、手動での内部リンク管理から脱却し、より効率的で信頼性の高い方法に移行できる。例えば、ページのタグやカテゴリなどのデータに基づいて、関連性の高いページへのリンクをビルド時に自動で生成することが可能になる。これにより、編集者の記憶に頼るのではなく、データに基づいた客観的なリンク戦略を実装できる。

さらに、深さの計算やオーファンページの検出といった分析を、サイトのデプロイ(公開)ごとに自動で実行する仕組みを導入できる。もし、あるページの深さが以前よりも大きくなった(多くのクリックが必要になった)場合や、新しいオーファンページが検出された場合、それはサイト構造上の「退行(リグレッション)」として捉え、自動テストが失敗するようにビルドを停止させる、といった品質保証の仕組みを構築できる。これにより、Webサイトの内部リンク構造の健全性を継続的に保ち、ユーザー体験やSEO品質の低下を未然に防ぐことが可能となる。

Webサイトの内部リンクを単なるコンテンツの一部としてではなく、ノードとエッジで構成される「グラフ」というデータ構造として捉えることで、サイトの構造を数値的に分析し、手作業では見過ごされがちな問題点(オーファンページ、深い階層のページなど)を自動で発見できる。さらに、この分析結果を基に、内部リンクの自動生成や継続的な品質チェックを行うことで、Webサイトの健全性と運用の効率を大幅に向上させることが可能となる。システムエンジニアにとって、このようにデータ構造とアルゴリズムを具体的な課題解決に応用する考え方は非常に重要である。

関連コンテンツ

関連IT用語