150万ページのサイトを守り抜け!スクレイピング対策に明け暮れた怒涛の1年を振り返る
A year of fighting scrapers on my 1.5 million-page website
A year of fighting scrapers on my 1.5 million-page website
150万ページもの巨大サイトを運営していると、スクレイパーからの執拗な攻撃は避けて通れません。この1年間、どのように彼らのボットと戦い、サイトを守り抜いてきたのか。その泥臭い格闘の記録と、実際に効果のあった対策術を共有します。
ああ、その通り。私のサイトも公開ドキュメントをスクレイピングしてデータを取得している。つまり、スクレイパーを批判するブログ記事を書いている張本人がスクレイパーってこと。どう聞こえるかは自覚してるよ。
私も似たような状況。おそらく99.999%はボットだね。Cloudflareの統計ではユニーク「訪問者」が100万近くあるけど、実際のユーザーは1日数十人程度。それでも、私はオープンなインターネットが好きだし、できる限りオープンな状態を維持したいと思ってる。
ここにはリアルな葛藤があるね。GoogleやBing、DuckDuckGoにはサイトをクロールして新しい読者を連れてきてほしい。でも、それ以外の連中に丸ごと吸い上げられるのは御免だ。
これって、ピアツーピアのネットワークが欠けているってことかも。
同じデータを何度も何度もダウンロードするんじゃなくて、一度だけダウンロードしてそれをシェアすればいい。
それなら関係者全員にとってメリットがあるんじゃないかな?
もしInternet Archiveに何かあった場合でも、分散型のWayBack Machineとして機能するしね。(ボットの黙示録はさておき、これこそ切実に必要だと思う。)
Anubis[1]はCloudflareやFastly、Bunnyなどが導入されていないサイトにとって最高の修正案だよ。うちは世界中に配信しているサイトで何百万ものボットアクセスがあったから、国単位でブロックすることはできなかったし、偽のユーザーエージェントを使われるからそれでのブロックも無理だった。これは『プルーフ・オブ・ワーク(作業証明)』を使って、本物のブラウザソフトウェアかどうかを判定するんだ。
私はサーバーで1時間ごとにスクリプトを回して、訪問者のトップ25(/24サブネットで集計)をチェックしている。その中に中国やベトナムなどからのアクセスがあったり、AlibabaやAmazonなどのIPが含まれていれば、その/24ブロック全体をiptablesで遮断するようにしている。
完璧とは程遠いけど、ベトナムなどの国からの正規のアクセスを完全に遮断せずに、ボットを排除する手っ取り早い方法だった。
ただ、私が管理しているGitlabインスタンス(ユーザー500名)では、GitログやIssues以外のほぼすべてを閲覧制限しなきゃならなかった。ボットが攻撃的すぎたんだ。中国のクローラーは膨大なIP範囲を持っていて、1日あたり10〜20リクエストしか送らないことが多いのに、合計すると1日5万リクエストを超えてくる。そのおかげでサーバー負荷は99%から0.1%まで下がったよ(かなり大きなサーバーなんだけどね)。
「サイト運営の通常料金は月90ドル程度。あるひどい月には約500%も跳ね上がった」
これってD1の話だよね。驚くようなコストがかかることがある。D1をやめて静的サイトに移行したほうがいいかもよ。サイトにこれほどの費用がかかるべき理由なんてないはずだ。
ここで懸念すべきなのは、多くの人が自分のWebサイトを誰が見られるかという決定権を、巨大企業(Cloudflare)に委託してしまっていることだ。もしその企業があるユーザーにサイトを見せないと判断すれば、そのユーザーはサイトを見ることができず、誰もその事実を知ることはなく、ユーザーには異議を申し立てる手段さえない。それが私が望むオープンなWebの姿ではない。
ボット対策への脊髄反射的な反応によるもう一つの副作用は、すべてのボットと戦おうとすると、ボットを使っている『本物のユーザー』までも傷つけてしまうことだ。もし私があなたのサイトからWebページを取得する必要があるローカルスクリプトやLLMを動かしていて、あなたがそれをボットとしてブロックしてしまったら、ユーザーである私が困る。私は情報が欲しかっただけで、自分の時間と労力をかけてわざわざサイトを訪れる以外に方法がない。それが想定内かどうかは別として、考慮に値することだと思う。
最後に、ボットについて文句を言うオーナーは多いけど、実際の問題はWebサイトの作りが甘いだけで、どちらにせよ改善すべきだというケースが非常に多いことに注目すべきだ。ボットトラフィックが必ずしも悪とは限らない。
これの根本的なモチベーションを理解するのを誰か手伝ってくれないか?
Googleのようなクローラーがインターネット全体をインデックスしたいというのは理解できる。でも、1時間前に取得したページを同じクローラーが再度取得し直す意味って何なんだ? もしかしてこのトラフィックはすべて独立したエンティティで、それぞれがインターネットをキャッシュしようとしているのか? ボットトラフィックの規模を考えると、そうとは思えないんだが。
同じエンティティが1時間も経たずに再取得を繰り返すモチベーションは何なんだろう?
私が運営しているSignalBloom(https://www.signalbloom.ai )のCloudflareをチェックしてみた。
過去72時間で、Claude-searchbot [1] だけで約20万5千ページを取得していた。送られてきたリファラーはたったの1つ。サイトには無料の金融データがたくさんあって、本物のユーザーに使ってもらいたいと願っているのに。Anthropic側が私に何のクレジットも報酬も支払わずに、ユーザーに対して「見つけた!」と主張できる状況は、少し騙されているような気分になるよ。
[1] 正確なユーザーエージェント:Claude-SearchBot/1.0; +searchbot@anthropic.com
証拠:https://i.postimg.cc/Pqc3SS8T/Screenshot-2026-08-07-at-5-33-18-PM.png
この記事で怪しいほど触れられていないのは、その一部が実は人間によるアクセスではないかという点だ。人間が直接サイトに行く代わりに、ChatGPTや類似のクエリを使っているケースだね。
人間がチャリティについての集計情報を求めてWeb検索をトリガーし、結果のリンクをたどって詳細を取得しているとしたら、それは本当にボットと呼べるのか?まあ、明らかにボットではあるけど、この記事が示唆するような『スクレイパーに制限をかけていない』[1]状態とは全く別物だ。
データセンターASNの46番をブロック。人間はAWSからブラウジングしない。
クラウド上にワークステーションを持っている人はそうするよ。
ボットが請求額の99%を占めているのに、支払いは100%私だ。
そういうやり方でサイトを運営すると、常に「ウォレットDDoS」のリスクがあるね。
[1] もちろん、大半は人間が介在しない純粋な自動化だろう。私の仮定に過ぎないが、安全な推測だと思う。