自分のサイトにとって何のメリットもないばかりか、時にはサイトが重くなる原因になることもある、迷惑クローラー(迷惑ボット)。
色んな情報を参考にしながら、排除・拒否する設定をしている方も多いと思いますが、意外と「勘違い」されてしまっているケースもあるようです。
1.robots.txt での制限
「この内容を読んで理解してね」と、クローラーの良心に任せる?方法です。
つまり、せっかく書いても、内容を読んでくれなかったり、書いている命令を無視する(解釈できない)クローラーもいるという事になります。
User-agent: SemrushBot
Disallow: /
のように設定する方法が広く知られていますが、UserAgent や IP アドレスなど、既に別の方法で拒否している場合、クローラーは robots.txt
も読めなくなってしまうという点が、見落とされがちです。
その場合、お行儀の悪いクローラーだと…
- お!
robots.txt
が(読め)ないから、全部クロールしていいんだな!! - でも、他の方法で拒否されていてクロールできない
- 403(Forbidden) エラーが大量発生
…という事も起こりえます。1
robots.txt は他の制限の対象外に
もし、robots.txt
をクローラーに読んでもらいたいのであれば、制限の対象外にする必要があります。
例えば、.htaccess
が利用できる場合、「robots.txt
は何の制限もしない」という命令を、他の制限命令の下に書きます。
- Apache 2.2 系
<Files robots.txt>
Allow from all
</Files>
- Apache 2.4 系
<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 系
order Allow,Deny
Allow from all
#-- SemrushBotの拒否
deny from 46.229.160.0/20
- Apache 2.4 系
<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 系
order Allow,Deny
Allow from all
#-- SemrushBotの拒否
deny from .semrush.com
- Apache 2.4 系
<RequireAll>
Require all granted
#-- SemrushBotの拒否
Require not host .semrush.com
</RequireAll>
- 46.229.168.154 の HOST は何ですか?
- crawl26.bl.semrush.com ですよ
- ならば拒否します
という流れになるため、サーバーへ少し負担をかけることになります。
2-3.UserAgent で拒否
- メリット
- 分かりやすい
- デメリット
- サーバーへ少し負担をかける(気にしすぎる必要はない)
メンテナンスもしやすく、特に初心者の方には、一番オススメできる方法だと思います。
- Apache 2.2 系
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 系
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.ファイアウォールでの制限
$ iptables -I INPUT -s 46.229.160.0/20 -j DROP
$ service iptables save
$ service iptables restart
サーバーの管理者権限を持っている場合は、「ターミナルソフト」と呼ばれるものを使ってサーバーへ接続し、こういったコマンドを叩いて設定します。
クラウド系のサービスなどでは、ウェブブラウザからの簡単な操作で、設定できるようになっている事もあります。
他の方法との違い
.htaccess
などで拒否した場合、クローラーは一度サーバーにアクセスした上で、クローリングを拒否されます。
それに対し、ファイアウォールでブロックした場合は、クローラーはサーバーに到達する事すらできなくなるというのが、大きな違いです。
クローラーにとって、そのサーバーは「この世に存在しないもの」として扱われる事になりますので、非常に強力な手段ですが、一般的なレンタルサーバーなどでは使えません。
もし、あまりにもお行儀の悪いクローラーに悩まされているようでしたら、サーバー管理者に相談してみてください。
-
ログが汚れる程度で、ほぼ実害はない場合もありますので、気にしすぎる必要はありません。 ↩