諸事情により、Webサイトのリンク切れ調査をする必要が発生し、なんかお手軽にできないかなと調べてみたところwgetで調べることができそうだったので、実際にやってみることにした。 以下のようにオプションを付与することで、リンク切れのページをログにリストアップさせることができるようになる。

wget --spider -o ./wget.log -e robots=off -r -p http://target.domain

設定しているオプションは以下。

  • --spider … ファイルのダウンロードは行わない
  • -o ./wget.log … カレントディレクトリ配下にログを出力する(このログが重要)
  • -e robots=off … robots.txtを無視する
  • -r … 指定されたURLを再帰的に取得する
  • -p … 画像等も全て取得する

これで、調査対象のURLに対して処理を行う。 それなりに処理時間がかかるので、できればnohupなどと組み合わせてバックグラウンドジョブとしてキックするようにしてやるといいだろう。

処理後、指定したログファイル(./wget.log)にリクエストの結果が書き込まれるので、以下のようにgrepをして404エラーとなったURLを確認してやる。

grep -B2 '404 Not Found' wget.log | grep http
[root@BS-PUB-CENT7-01 ~]# grep -B2 '404 Not Found' wget.log | grep http
--2017-07-15 06:53:28--  https://sample.com/xml/rsd.xml
--2017-07-15 06:53:49--  https://sample.com/aaa.js

リンク元のページがどこなのかまでは見れないので、そこを確認したい場合は「--spider」オプションを解除して対象のリンクやファイル名でダウンロードしたファイルに対しgrepしてやればいいだろう。