Kodama's home / tips.

HTML文書のリンク切れを調べる

HTML 文書のリンク切れが無いかどうかを, いちいちブラウザでリンクをクリックしないで調べるにはどうすれば良いだろうか.
  1. W3C Link Checker で調べる方法
  2. wget の動作で調べる方法
  3. ruby で html ファイルを調べる方法

W3C Link Checker で調べる方法

単独の html 文書内のリンクの調査の場合は, 最も手軽には, web 上のサービスとして W3C の Link Checker で URL を入力するとページ中のリンクを確認してくれる. これは perl で実現されており, CPAN からもダウンロードできるようになっている.

wget の動作で調べる方法

wget なら 特定のディレクトリ以下の html 文書をまとめてダウンロードできるので, リンク切れの調査も一気にできる. wget で --verbose(-v) を指定して, ERROR 行を探す. -v 以外のオプションは適当で良いが, 実行後, ダウンロードしたファイルは削除する(--delete-after) 方が良い. --delete-after でファイルは削除するが, 作業ディレクトリは残るので, rm -rf で削除する.
実行例:
$ LC_ALL=C wget -v --delete-after -m -np -k -p http://www.math.kobe-u.ac.jp/~kodama/ 2>&1 | gawk '/ERROR/{print $0" "l}/=>/{l=$0}'
$ rm -rf www.math.kobe-u.ac.jp

この方法だと, リンクの参照先は分かるが, 複数の html ファイルのどれが参照元(href がある箇所)なのか, 別に探す必要がある.

ruby で html ファイルを調べる方法

html ファイルを読み取って, href=... を探し, それが生きているか調べる. find で全ての html ファイルを一気に調査してしまう.

スクリプトを見ると分かると思うが, 参照元のファイル名も表示するので, リンク切れの修正作業には, wget 版よりもこちらの方が使いやすい.

ダウンロード: check-link.rb

使用法:
$ cd ~/public_html ; find . -name '*.htm*' -type f | check-link.rb

check-link.rb 先頭部分に http のホスト名などがあるので,適当に修正してから使う.

手元に, 参照元の html ファイルがあることが前提なので, blog や wiki には向かない. (参照元の html を ファイル名でなく URI で指定するように改造すると良いのだが, とりあえず省略.)

別ホストへのリンク切れに関しては, このスクリプトだと, 別ホストでも http の試験をすることになる. wget のデフォルトだと -r(又は -m) では別のホストへのリンクは確認はしない.

html をちゃんと解析すべきなのだが, その辺は手抜き. 大抵の場合は, これで問題が無い.


Kodama's home / tips.