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

【ITニュース解説】Tìm orphan page và đo internal link graph của website bằng Python

2026年10月31日に「Dev.to」が公開したITニュース「Tìm orphan page và đo internal link graph của website bằng Python」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Pythonでウェブサイトを巡回し、どこからもリンクされていない「孤立ページ」を見つけ出す方法を解説。クローラーで内部リンクの繋がりを可視化することで、検索エンジン評価やユーザーの回遊性を向上させるサイト改善に活用する。

ITニュース解説

ウェブサイトの構造を理解し、その健全性を保つことは、システムエンジニアにとって重要な業務の一つである。特に、ウェブサイト内のリンク構造は、検索エンジンの評価やユーザーのサイト体験に大きく影響を与える。この解説では、Pythonを使ってウェブサイトの内部リンクを分析し、「オーファンページ」と呼ばれる見つけにくいページを特定する方法、そしてサイト全体のリンク構造を把握する技術について説明する。

オーファンページとは、サイト内のどのページからも内部リンクが張られていない、まるで孤児のようなページを指す。このようなページは、たとえサイトマップに登録されていればGoogleの検索エンジンに見つけてもらえる可能性があるものの、検索エンジンはどのトピックに属し、どの程度重要なのかというシグナルを受け取れない。その結果、検索結果での表示順位が下がったり、関連性の低いと判断されたりする恐れがある。また、ユーザーがサイト内を巡回する際にも、オーファンページへ直接アクセスする方法がないため、そのページが存在しないも同然の状態になってしまう。

Googleなどの検索エンジンがウェブサイトのリンクをどのように認識するのかを理解することは、サイト構築の基礎である。Google Search Centralのガイドラインによると、検索エンジンは通常、<a>タグとhref属性で記述されたハイパーリンクを確実に読み取る。これは、HTMLの基本的なリンクの形式である。一方で、JavaScriptで動作するボタンのようにhref属性を持たないリンクや、代替テキスト(alt属性)が設定されていない画像に含まれるリンクは、検索エンジンによって見過ごされる可能性がある。ウェブサイトを設計する上で、Googleはすべての重要なページがサイト内の少なくとも他の1つのページからリンクされているべきだと推奨している。これは、内部リンクが検索エンジンにページの重要性や関連性を伝える強力なシグナルとなるためである。

ウェブサイトのリンク構造を分析するためには、まずサイト全体を巡回し、リンク情報を収集する必要がある。これは「クローリング」と呼ばれるプロセスであり、Pythonを使うことで効率的に実現できる。Pythonにはrequestsというライブラリがあり、これを使ってウェブページの内容をHTTPリクエストで取得できる。取得したHTMLデータは、BeautifulSoupというライブラリを使って解析され、ページ内の<a>タグからリンクのURLを抽出する。また、urllib.parseライブラリはURLの解析や結合に役立つ。巡回中に収集したリンク情報は、collections.defaultdictのようなデータ構造に格納される。これは、特定のURLにどのページからリンクが張られているか(vao辞書)、またそのリンクのアンカーテキスト(リンクに表示される文字)が何か(anchor辞書)を記録するために使用される。このクローリングプログラムでは、サイト内のすべてのリンクを対象とするのではなく、main要素やarticle要素内にあるリンクのみを抽出する工夫がされている。これは、ナビゲーションメニューやフッター、サイドバーなどに設置されたリンクはすべてのページに共通して存在することが多く、これらを含めてしまうと、本来のオーファンページが見えにくくなるためである。プログラムは開始URLから順にリンクをたどり、指定された上限数までページを巡回し、リンクのマップを構築していく。

オーファンページを特定するには、構築したリンクマップだけでは不十分である。なぜなら、クローラーはリンクが張られているページしか発見できないため、真のオーファンページはそもそもクローリングの対象にならないからである。そこで、ウェブサイトに存在するすべてのURLのリストと比較する必要がある。このリストとして一般的に利用されるのが「サイトマップ」である。サイトマップはウェブサイト内のすべてのページのリストを検索エンジンに伝えるXML形式のファイルである。Pythonでは、xml.etree.ElementTreeライブラリを使ってサイトマップのXMLファイルを解析し、そこに含まれるすべてのURLを抽出できる。このサイトマップのURLリストと、クローラーが見つけたリンクマップ(vao辞書)を比較することで、サイトマップには存在するが、どのページからも内部リンクが張られていないオーファンページを洗い出すことができる。もしWordPressのようなCMS(コンテンツ管理システム)を使用しており、Yoast SEOのようなプラグインがサイトマップを生成している場合、それは単一のファイルではなく、複数の子サイトマップを指し示すインデックスファイルである場合があるため、それらを再帰的に読み込む処理が必要となることもある。

ウェブサイトのリンク構造の分析は、オーファンページの特定にとどまらない。サイト内で最も多くの内部リンクを受けているページを特定することも、そのページの重要度を測る上で役立つ。プログラムでは、vao辞書に格納された各URLへのリンク数を数え、その数が多い順にページを並べ替える機能も提供される。このランキングは、ウェブサイトの現在のリンク構造が、ビジネス上の優先順位や情報アーキテクチャの意図と一致しているかを確認するために非常に有用である。例えば、GoogleのJohn Mueller氏も、内部リンクは戦略的に構築されるべきであり、その構造はサイト運営者が最も重要だと考えるページを反映しているべきだと述べている。もし、ビジネスの主要サービスページがリンク数の少ない下位にあり、企業情報や自己紹介のページが上位に位置しているならば、それはサイトのリンク構造が本来の優先順位と逆行している可能性を示している。

内部リンクのアンカーテキスト(リンク文字列)も、検索エンジンにとって重要な情報源である。アンカーテキストは、リンク先のページの内容を簡潔に説明する役割を持つ。そのため、anchor辞書に収集されたアンカーテキストを分析することで、リンク構造の品質を評価できる。例えば、アンカーテキストが空白(画像リンクのalt属性がない場合など)であったり、「こちら」や「続きを読む」といった汎用的な言葉ばかりであったり、あるいは不自然に同じフレーズばかりが繰り返されている場合は、リンク構造が最適ではない可能性を示している。多様で関連性の高いアンカーテキストを用いることは、検索エンジンが各ページの内容をより正確に理解し、ユーザーがリンク先を予測する上で役立つ。

このようなウェブクローリングツールを自作し実行する際には、いくつかの重要な注意点がある。まず、ウェブサイトへの負荷を考慮し、リクエストの間に適切な待機時間(time.sleepなど)を設けて、ゆっくりと巡回する必要がある。急激なアクセスはサーバーに負担をかけ、最悪の場合、アクセス拒否につながる可能性がある。また、クローリングは必ず自分の管理するウェブサイトでのみ実行すべきである。他人のウェブサイトに対して無許可でクローリングを行うことは、倫理的にも法的にも問題となることがある。さらに、URLの正規化も重要である。例えば、末尾にスラッシュがあるかないか、またはURLに含まれるパラメータの違いによって、同じページが複数の異なるURLとして認識されてしまうことを避けるために、統一された形式に変換する処理が必要となる。最後に、内部リンクにrel="nofollow"属性を付与する必要はない。nofollowは通常、信頼できない外部サイトへのリンクや、広告リンクなどに使われるものであり、サイト内部のページ間のリンクではその必要がない。もし内部リンクにnofollowが多く見られる場合は、何らかの理由があって設定されているため、その意図を確認し、再検討する必要がある。

これらの技術は、ウェブサイトの健全な運用と検索エンジン最適化(SEO)の基盤を理解し、実践する上で、システムエンジニアが習得すべき重要なスキルとなる。

関連コンテンツ

関連IT用語