Index > ウェブサイトに残っている不要ページを削除する方法
Sun, January 18, 2009

ウェブサイトに残っている不要ページを削除する方法

大規模なサイトを管理しているとどうしても古いページがサーバに残ってしまうことがあります。
これらの古いページは、 トップページ経由でリンクをたどってアクセスするユーザの目に触れることはありませんが、 Googleなど検索エンジンから直接アクセスするユーザが、 サイト管理者の意図せずして、古いページにアクセスしてしまうことがあります。

今回、これらの古いページをまとめて削除する仕事の依頼を頂いたので、 基本的作業手順をメモしておきます。

作業環境

作業手順

ステップ1 ファイルリストを作成

まずサイト上にある html ファイルのリストを作成します。 FTPサーバのドキュメントルートが /www/ とすると、lftpを使って以下のようにして サーバ上にあるすべてのファイルリストをディレクトリ情報付きで、取得します。

$ lftp hogehoge.net
lftp> cd /www/
lftp> find ./ > pagelist

これで、ローカルPC上に pagelist ファイルが作成されます。 以下のような感じです。

./index.html
./sitemap.html
./contact/index.html
./menber/index.html
./imgs/top.gif
./imgs/logo.gif
...

ステップ2 htmlのみ抽出

lftp で作成したファイルリストは html ページ以外のファイルもリストアップされているので、 htmlで終わる(拡張子が html の)ファイルのみ抽出します。

$ cat pagelist | grep "html$" > pagelist_only_html

ステップ3 ドメイン部分を追加

pagelistonlyhtml は、以下のようになっていてそのままではブラウザでページをチェックできません。

./index.html
./sitemap.html
./contact/index.html
./menber/index.html

以下のように http://www.hogehoge.net/ を各行の先頭に追加します。

http://www.hogehoge.net/index.html
http://www.hogehoge.net/sitemap.html
http://www.hogehoge.net/contact/index.html
http://www.hogehoge.net/menber/index.html

一括置き換え

数が多い場合は、以下のような ex script でまとめて処理できます。

replace.exs %s/^./http:\/\/www.hogehoge.net/ wq

$ ex pagelist_only_html < replace.exs

ステップ4 チェック結果を管理できるようにURLリストをエクセルにインポート

ステップ3で作成した pagelistonlyhtml を pagelistonlyhtml.csv にリネームして エクセルにインポートします。
(※csv拡張子を付ける必要はないですが、説明の便宜上 csv拡張子付きファイルにリネームします。)

ただし、このままURLをエクセル上でクリックしてもブラウザで開いてくれません。 (つまりハイパーリンク扱いになっていない。) csvでインポートしたデータをハイパーリンク扱いにするには、=hyperlink() 関数を使います。

たとえば、 http://www.hogehoge.jp/index.html をハイパーリンクとしてエクセルで扱うには、 =hyperlink("http://www.hogehoge.jp/index.html") とした上で、エクセルにインポートします。

一括置き換え

数が多い場合は、以下のような ex script でまとめて処理できます。

addhyperlink.exs %s/^/=hyperlink("/ %s/$/")/ wq

$ ex pagelist_only_html.csv < addhyperlink.exs

ステップ5 人間がチェック

ステップ4までで作成した pagelistonlyhtml.csv をエクセルにインポートしておくことで、 A列にURLがリストアップされます。 あとは、人間が一件ずつチェックして、削除すべきページは B列に 'd' などの削除マークを入れておきます。

ステップ6 削除マーク付きURLを一括削除

削除対象のファイルが決まったら、lftp で一括削除します。 直接サーバ上のファイルを lftp のスクリプトを使って消すのもありですが、 今回は、いったん mirror -v でローカルにサイト全体をダウンロードしたあと、 ファイルを削除した上で、 mirror -Rev で逆ミラーをかけてアップロードしました。

 Twitter
follow me on Twitter
 Categories