ガイド

Google を締め出さずにスクレイパーを止める

欲しいクローラーとそうでないものをどう見分けるか、User-Agent による判定がなぜ無意味を通り越して有害なのか、そして「あなたの規則より行儀のよい」相手にどう対処するか。

問題はスクレイピングではなく、見分けること

ほとんどのサイトは自動化トラフィックの一部を欲しがっています。検索エンジン、チャットや SNS のリンクの裏にいるプレビュー取得、自社の監視、パートナーの連携、アクセシビリティのツール。そしてほとんどのサイトには、欲しくない自動化トラフィックもあります。価格スクレイパー、コンテンツのミラー、在庫ボット、そして近年は AI 学習用クローラー——その価値はあなたにとって意見の分かれるところです。

どちらもソフトウェアからの HTTP リクエストとしてやって来ます。どちらも、その気にならない限り自分について本当のことを言いません。つまり問題全体は分類に帰着し、分類の誤りはそれぞれ別の方向にコストを生みます。

間違えて締め出せばインデックスから落ちます——気づくのに数週間、戻すのにはもっとかかる誤りです。間違えて通せば、一時間以内に価格が競合のサイトに載ります。両方向とも安全な設定は存在せず、だからこそ、速くやるより丁寧にやる価値があります。

User-Agent による判定が失敗する理由

User-Agent はクライアントが選ぶ文字列です。主張であって証拠ではなく、証拠として扱うと同時に両方向へ失敗します。

何であれ Googlebot を名乗ることができ、スクレイパーは実際にそうします——設定一行で済み、文字列を確認するどのサイトにも通用します。規則が「Googlebot を許可」なら、あなたが書いたのは「Googlebot と名乗るものすべてを許可」です。

同時に、残したかった本物のクローラーを締め出します。列挙できないからです。見たこともない文字列を持つ正当な取得元は数十あり、毎月新しいものが登場します。

正しい検証は文字列比較ではありません。主要なクローラーについては、リクエスト元アドレスに対する逆引き DNS で運営者自身のドメインへ解決されることを確認し、続く正引きでその名前が同じアドレスへ戻ることを確認します。いくつかの運営者は署名付きの IP レンジ一覧も公開しており、取得してキャッシュできます。

難しくはありませんが、気にかけるクローラーごとに行い、レンジの変更に追随し、リクエスト経路の中で DNS を引かずに済むようキャッシュする必要があります。

robots.txt は看板であって柵ではない

robots.txt は行儀のよいクローラーに、あなたの希望を伝えます。検索エンジンがこれを守るのは、無視していると露見したときの損失がコンテンツの価値を上回るからです。スクレイパーにはその動機も、守るべき評判もありません。

さらに悪いことに、これは公開文書であり、あなたが言及するに足るほど繊細だと考えたパスの一覧です。/admin、/export、/api/internal を禁止することは、それらの存在を告知することです。信頼するクローラーへの案内として書き、セキュリティ対策としては書かないでください。

それでも維持する価値はあります。クロール遅延の指示を含む正しい robots.txt は、実際にそれを守るクローラーからの負荷を減らします——多くのサイトではそれが量の大半です——そして、オプトアウト用トークンを公開する AI クローラーに対して、あなたが持つ唯一のてこでもあります。

実際に両者を分けるもの

どれだけ答えを与えてくれるかの順に。

検証できるものは検証する。逆引きと正引き、あるいは公開されたレンジ一覧が、主要な検索エンジンについては決着をつけます。これは強い許可とし、ほかのどの規則よりも上に置くべきです。

残りにはトランスポートのフィンガープリント。スクレイパーはプログラムです。curl、Python のライブラリ、ヘッドレスブラウザ、Go の HTTP クライアント。TLS ハンドシェイクは、JA3/JA3N にまとめられる暗号スイートと拡張の順序づけられた集合を通じて、それがどれかを名乗ります。Windows 上の Chrome を名乗りながら Chrome が出さないフィンガープリントを提示したクライアントは、自分が何であるかを告げたのです。

セッション全体の振る舞い。リソースを要求しながら一度も実行しない。ミリ秒単位で均一なリクエスト間隔。ナビゲーションではなくサイトマップをなぞる巡回。対話的な要素のあるページでマウスがまったく動かない。単独では決定的でなく、束ねればほぼ決定的です。

初回接触にはレピュテーション。真新しいアドレスにはあなたとの履歴がありません。先週よそをスクレイピングしていたなら、それが最初の一リクエストで使える唯一のシグナルです。

自分に跳ね返らない遮断

確定したスクレイパーに何をするかは、検知することと同じくらい重要です。

CAPTCHA を出さないこと。解答代行サービス経由なら本気のスクレイパーには 1 セントの何分の一かで済み、あなたには一緒に巻き込まれた実在の利用者という代償が残ります。

検索エンジンをうっかり締め出さないこと。検証済みのクローラーは、いかなる採点よりも前に走る規則で許可すべきです。そうすれば採点の不具合が検索順位を奪うことはありません。これは変更のたびに、前ではなく後で確認してください。

壁ではなく低速レーンを検討する。スクレイパーに意図的に遅く、あるいは古いキャッシュから返すのは、403 よりよいことがしばしばです。相手の時間を消費させるだけで戦術変更を促さず、必要なものを締め出したときのような障害も生みません。

高くつくところで流量を制限する。検索エンドポイントと商品 API には、静的ページには不要な上限がふさわしいのです。

遮断したものだけでなく、返したものを見張る。通り始めたスクレイパーは、遮断ダッシュボード上では静かな一週間とまったく同じに見えます。遮断と配信の比を時系列で追い、その比に対してアラートを張ってください。

Karma の立ち位置

Karma は正当なクローラーを自分で検証し、判定からも——そして請求からも——除外します。Googlebot を見分けたことに課金するのは、製品自身の仕事に課金することだからです。

それ以外はすべて行動とトランスポートのシグナルから採点され、判定はゲートウェイへ渡されます。それが遮断を意味するのか、低速レーンなのか、古いキャッシュなのかを決めるのはあなたです。許可リストと拒否リストは常にプラットフォームより優先されるので、依存しているパートナーは何かを有効にする前に固定しておけます。

無料の Detect プランは、この分類を遮断オフのまま走らせます。この領域では特にそれが正しい始め方です。ここでの高くつく失敗は、三週間後の検索トラフィックの落ち込みから、規則が誤っていたと知ることだからです。

FAQ

Googlebot を締め出さずにスクレイパーを遮断するには?
User-Agent を信じるのではなく、欲しいクローラーを検証してください。主要な検索エンジンについては、リクエスト元アドレスの逆引き DNS で運営者のドメインへ解決されることを確認し、次にその名前が同じアドレスへ戻ることを確認します。署名付きレンジ一覧を公開している運営者もあります。これを、いかなる採点よりも前に走る強い許可とし、それ以外はすべて振る舞いとトランスポートのフィンガープリントで採点します。
User-Agent で Googlebot を見分けられますか?
できませんし、それに頼るのは何もしないより悪いです。User-Agent はクライアントが選ぶ文字列なので、どのスクレイパーも設定一行で Googlebot を名乗れます。文字列を許可する規則は、それを写したすべてのスクレイパーを許可します。実際に決着をつける検証は、逆引きと正引きの DNS です。
robots.txt はスクレイパーを止めますか?
止めません。それは希望の表明であり、行儀のよいクローラーが守るのは評判がそれにかかっているからです。スクレイパーには失う評判がなく、無視します。さらにそれは、あなたが繊細だと考えるパスの公開一覧でもあるので、セキュリティ対策にはなりません。信頼するクローラーのために正確に保ち、それ以外には別途対処してください。
AI クローラーは遮断すべきですか?
これはセキュリティではなくビジネスの判断で、AI の回答に登場することがコンテンツそのものより価値があるかどうかによります。遮断すると決めたなら、オプトアウト用トークンを公開し守るものは robots.txt が、守らないものはセッション水準の検知が扱います——ほかのあらゆる未申告クローラーを捕まえるのと同じシグナルです。