LoginSignup
8
7

More than 3 years have passed since last update.

迷惑クローラーの排除・拒否方法についての解説&よくある勘違い(初心者向け)

Last updated at Posted at 2019-06-21

自分のサイトにとって何のメリットもないばかりか、時にはサイトが重くなる原因になることもある、迷惑クローラー(迷惑ボット)。

色んな情報を参考にしながら、排除・拒否する設定をしている方も多いと思いますが、意外と「勘違い」されてしまっているケースもあるようです。


1.robots.txt での制限

「この内容を読んで理解してね」と、クローラーの良心に任せる?方法です。

つまり、せっかく書いても、内容を読んでくれなかったり、書いている命令を無視する(解釈できない)クローラーもいるという事になります。

robots.txt
User-agent: SemrushBot
Disallow: /

のように設定する方法が広く知られていますが、UserAgent や IP アドレスなど、既に別の方法で拒否している場合、クローラーは robots.txt も読めなくなってしまうという点が、見落とされがちです。

その場合、お行儀の悪いクローラーだと…

  1. お! robots.txt が(読め)ないから、全部クロールしていいんだな!!
  2. でも、他の方法で拒否されていてクロールできない
  3. 403(Forbidden) エラーが大量発生

…という事も起こりえます。1


robots.txt は他の制限の対象外に

もし、robots.txt をクローラーに読んでもらいたいのであれば、制限の対象外にする必要があります。

例えば、.htaccess が利用できる場合、「robots.txt は何の制限もしない」という命令を、他の制限命令の下に書きます。

  • Apache 2.2 系
.htaccess
<Files robots.txt>
    Allow from all
</Files>
  • Apache 2.4 系
.htaccess
<Files robots.txt>
    Require all Granted
</Files>

.htaccess が使えない環境もある

.htaccess は、「Apache(アパッチ)」という Web サーバーソフトウェアで使える仕組みで、実際に使った事がある方も多いと思います。

しかし最近では、軽量&高速に動作する「Nginx(エンジンエックス)」という Web サーバーソフトウェアが、急激にシェアを伸ばしています。

WordPress のチューニングなどでも、Nginx の利用(あるいは併用)は非常に効果的です。

ただ残念ながら、.htaccess は「Nginx」では使えません。WordPress のプラグインでは、.htaccess が使える事を前提としているものもありますので、注意してください。


2.htaccess での制限

2-1.IP アドレスで拒否

  • メリット
    • サーバーに優しい(他の方法より負荷が少ない)
  • デメリット
    • 何を制限したのか分かりにくい
    • IP アドレスが変わる場合がある

IP アドレスで拒否する際は特に、# を使ってコメントを書くことを心がけると良いです。

  • Apache 2.2 系
.htaccess
order Allow,Deny
Allow from all

#-- SemrushBotの拒否
deny from 46.229.160.0/20
  • Apache 2.4 系
.htaccess
<RequireAll>
    Require all granted

    #-- SemrushBotの拒否
    Require not ip 46.229.160.0/20
</RequireAll>

IP は「単発」ではなく「範囲」を指定する

クローラーの IP アドレスが 1 つに固定されている事は稀で、通常は、複数の IP アドレスからやってきます。

上記の例では、46.229.160.0/20 のような書き方をしていますが、これは「CIDR 表記」と呼ばれる「IP アドレスの範囲」を表現する方法です。

初心者の方は、WordPress のセキュリティ系プラグイン等でも利用されている、↓のサイトを利用すると、簡単に調べられると思います。

例えば、「46.229.168.154」で検索した結果がコチラです。

画面を下の方にスクロールさせると、46.229.160.0/20 と書いてあると思いますが、これが CIDR 表記となります。

英語のページですが、初心者の方にも簡単に使えると思いますので、活用してみてください。


2-2.HOST で拒否

  • メリット
    • IP アドレスより分かりやすい
  • デメリット

    • サーバーへ少し負担をかける
    • HOST が変わる場合がある(IP アドレスに比べると頻度はかなり低い)
  • Apache 2.2 系

.htaccess
order Allow,Deny
Allow from all

#-- SemrushBotの拒否
deny from .semrush.com
  • Apache 2.4 系
.htaccess
<RequireAll>
    Require all granted

    #-- SemrushBotの拒否
    Require not host .semrush.com
</RequireAll>
  1. 46.229.168.154 の HOST は何ですか?
  2. crawl26.bl.semrush.com ですよ
  3. ならば拒否します

という流れになるため、サーバーへ少し負担をかけることになります。


2-3.UserAgent で拒否

  • メリット
    • 分かりやすい
  • デメリット
    • サーバーへ少し負担をかける(気にしすぎる必要はない)

メンテナンスもしやすく、特に初心者の方には、一番オススメできる方法だと思います。

  • Apache 2.2 系
.htaccess
SetEnvIf User-Agent "SemrushBot" deny_bot
SetEnvIf User-Agent "BLEXBot" deny_bot
SetEnvIf User-Agent "DomainCrawler" deny_bot

order Allow,Deny
Allow from all
Deny from env=deny_bot
  • Apache 2.4 系
.htaccess
SetEnvIf User-Agent "SemrushBot" deny_bot
SetEnvIf User-Agent "BLEXBot" deny_bot
SetEnvIf User-Agent "DomainCrawler" deny_bot

<RequireAll>
    Require all Granted
    Require not env deny_bot
</RequireAll>

3.ファイアウォールでの制限

CentOS6でiptablesを使う例
$ iptables -I INPUT -s 46.229.160.0/20 -j DROP
$ service iptables save
$ service iptables restart

サーバーの管理者権限を持っている場合は、「ターミナルソフト」と呼ばれるものを使ってサーバーへ接続し、こういったコマンドを叩いて設定します。

クラウド系のサービスなどでは、ウェブブラウザからの簡単な操作で、設定できるようになっている事もあります。


他の方法との違い

.htaccess などで拒否した場合、クローラーは一度サーバーにアクセスした上で、クローリングを拒否されます。

それに対し、ファイアウォールでブロックした場合は、クローラーはサーバーに到達する事すらできなくなるというのが、大きな違いです。

クローラーにとって、そのサーバーは「この世に存在しないもの」として扱われる事になりますので、非常に強力な手段ですが、一般的なレンタルサーバーなどでは使えません。

もし、あまりにもお行儀の悪いクローラーに悩まされているようでしたら、サーバー管理者に相談してみてください。


  1. ログが汚れる程度で、ほぼ実害はない場合もありますので、気にしすぎる必要はありません。 

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7