たまにはLinkCheckerでサイトのメンテナンスをしませんか?

どのようなサイトでも同じですが、運営期間が長くなるほど、コンテンツが多くなるほど、過去のページを確認することはほとんどないでしょう。せっかくの面白いコンテンツも画像などのリンクが切れていれば価値は半減し、そもそもリンクが切れていればアクセスすることもできません。

数十ページの小さなサイトなら手動での確認も可能です。しかし数百ページとなれば手動で確認するのは時間の無駄です。リンク切れの確認であれば、ツールを利用することで自動化できます。

ここではリンク切れをチェックする「LinkChecker」について簡単に説明します。このツールはPython2.7.2以上で動作します。現在のところPython3は非対応となっています。

インストールはPythonのパッケージ管理システムである「pip」を利用します。Python2.7.9以上であれば一緒にインストールされているはずです。

  • LinkChecker - Check websites for broken links

Pythonのインストール方法については省略します。Pythonとpipの環境が整ったら、以下の様にして「LinkChecker」をインストールします。

pip install linkchecker

これで問題ないはずですが、requestsが 2.10 の場合、

This program requires Python requests 2.2.0 or later.

というエラーが発生することがあります。この場合、

pip install requests==2.9.2

とrequestsのバージョンを下げると動作します。そのうち修正されると思いますが、詳しくはGitHubをご覧ください。

それでは利用してみましょう。以下は簡単な例なので、詳しくは「linkchecker -h」で確認してください。

linkchecker -r1 -t1 -v --ignore-url=archive -otext http://example.com/ > log.txt

-r:(recursion) 階層レベル。未指定なら全てのリンクをチェックします。
-v:詳細なログを出力します。未指定ならエラーのみ出力されます。
-t:処理スレッド数。初期値は10です。
--ignore-url:除外するURLを正規表現で指定します。除外対象は構文チェックのみ行われます。
複数設定する場合は --ignore-url=xxx --ignore-url=yyy とします。
-o:出力形式を指定します。サイトマップなら -ositemap とします。

初期設定は外部リンク (外部ドメイン) のチェックは行いません。必要であれば --check-extern を追加します。

設定ファイルを利用することで引数が不要となり、URLのみを与えることで目的の処理が行われます。例えば、設定ファイルに「filename=~/log/linkchecker-out.txt」と出力ファイルの保存場所を指定すれば「> log.txt」は不要です。

設定ファイルの場所
~/.linkchecker/linkcheckerrc

このファイル (linkcheckerrc) はデフォルトで読み込まれます。複数の設定が必要なら「-f or --config」で他の設定ファイルを指定できます。

外部リンクの扱いについて

たとえ同じドメインに含まれていても、指定したURLより上位ディレクトリであれば外部リンクとみなされます。つまり、以下の様な動作となります。

linkchecker http://example.com/blog/2016    
とした場合、
http://example.com/nikki へのリンクがあっても「外部リンク」と見なされます。
つまり、チェック対象は http://example.com/blog/2016 以下のみとなります。

引数に「--check-extern」を追加すれば、別ドメインを含めチェック対象となります。

サイトマップも出力できます

このツールの便利なところは、「サイトマップ」を出力できることです。サイトマップを作成してくれるWebサービスもありますが、細かい設定ができなかったり、URL数に制限があったりとあまり使い勝手が良くありません。

linkchecker -r1 -t1 -ositemap http://example.com/ > sitemap.xml

GUI版やWebアプリケーションもありますが

Windows版もあります。実行結果を「txt、csv、html、xml」形式で保存できます。GUIで設定できる項目は少なく、先ほどと同様に設定ファイルで調整することになります。MacにもGUI版があるようですが、パッケージからバイナリが外されているようです。GUIがあってもあまり意味がないので、コマンドラインで十分だと思います。

Webアプリケーションとして動作させることもできますが、WebサーバーでWSGI (Web Server Gateway Interface )の設定が必要となり、当然Pythonの知識も必要となります。

注意

本番サイトに利用するなら注意が必要です。スレッド数を初期値のまま実行すると、非常に高負荷となります。同じアクセス元から多数のアクセスがあれば、サイバー攻撃とも思われかねません。サイトのレスポンスにも影響しますし、他の利用者に対しても迷惑となります。また、ツールによるアクセスも転送量としてカウントされるので忘れないようにしましょう。

このツールはローカルのテスト環境に対して利用するものでしょう。もし、そのような環境がなく実際のサーバーに適用するのであれば、深夜等のアクセスの少ない時間帯に、スレッド数を減らして実行することをお勧めします。それでも、ページ数の多いサイトに対しては利用しない方がよいでしょう。

関連記事

BLOG

UPDATE