この記事の対象読者
- VPS やサーバーを運用していて不要なボットのアクセスが多い人
- SemrushBot や TikTokSpider などのクローラーをブロックしたい人
- nginx でサーバーリソースを守りたい人
目次
なぜボットをブロックするのか
Web サーバーには検索エンジンのクローラーだけでなく、SEO 分析ツールや SNS のスパイダーなど、さまざまなボットがアクセスしてきます。
これらのボットは以下の問題を引き起こします。
- サーバーリソースの消費: CPU・メモリ・帯域幅を無駄に使う
- ログの汚染: アクセスログがボットだらけになり、分析が困難になる
- 競合への情報提供: SEO ツールのボットがサイト情報を収集し、競合がそのデータを利用できる
Googlebot、Bingbot などの 検索エンジンのクローラー はブロックしてはいけません。これらをブロックすると検索結果に表示されなくなり、サイトへの流入が激減します。
ブロックすべきボットの見分け方
サーバーのアクセスログを確認すると、ボットの User-Agent が記録されています。
47.128.117.213 - - [21/Feb/2026] "GET /article/programming/javascript/ HTTP/1.1" 200 - "Mozilla/5.0 (Linux; Android 5.0) AppleWebKit/537.36 (compatible; TikTokSpider; ttspider-feedback@tiktok.com)"
185.191.171.6 - - [21/Feb/2026] "GET /robots.txt HTTP/1.1" 200 - "Mozilla/5.0 (compatible; SemrushBot/7~bl; +http://www.semrush.com/bot.html)"
代表的な不要ボット
| ボット名 | 運営元 | 目的 | ブロック推奨 |
|---|---|---|---|
| SemrushBot | Semrush(SEO ツール) | サイトの SEO データ収集 | 推奨(自分が Semrush を使っていなければ不要) |
| TikTokSpider | TikTok | リンクプレビュー生成等 | 推奨(SEO メリットなし) |
| AhrefsBot | Ahrefs(SEO ツール) | 被リンク・キーワード分析 | 推奨(自分が Ahrefs を使っていなければ不要) |
| MJ12bot | Majestic(SEO ツール) | 被リンクデータ収集 | 推奨 |
| DotBot | Moz(SEO ツール) | SEO データ収集 | 推奨(自分が Moz を使っていなければ不要) |
Googlebot、Bingbot、Applebot、Twitterbot(X のプレビュー生成用)など、検索エンジンや SNS のプレビュー生成に必要なボットはブロックしないでください。
robots.txt での対策(お願いベース)
robots.txt はボットに対して「このページにはアクセスしないでください」と お願い するためのファイルです。
User-agent: *
Disallow: /admin/
Disallow: /login/
User-agent: SemrushBot
Disallow: /
User-agent: TikTokSpider
Disallow: /
User-agent: AhrefsBot
Disallow: /
Sitemap: https://example.com/sitemap.xml
User-agent: * は全ボット向けのルールで、特定のボット(SemrushBot 等)に専用ルールがある場合、そちらが優先されます。つまり Googlebot など他のボットには影響しません。
robots.txt はあくまで「お願い」であり、強制力がありません。行儀の悪いボットは robots.txt を無視してアクセスしてきます。確実にブロックするには、次に紹介する nginx での対策が必要です。
nginx での確実なブロック方法
nginx の設定で User-Agent を判定し、不要なボットに対して 403 Forbidden を返します。これによりリクエストが Django 等のアプリケーションに到達する前にブロックできるため、サーバーリソースの節約にもなります。
設定方法
nginx の server ブロック内に以下を追加します。
server {
listen 443 ssl;
server_name example.com;
# 不要なボットをブロック
if ( ~* (SemrushBot|TikTokSpider|AhrefsBot|MJ12bot|DotBot)) {
return 403;
}
location / {
proxy_pass http://127.0.0.1:8080;
# ...
}
}
設定のポイント
| 項目 | 説明 |
|---|---|
| リクエストの User-Agent ヘッダーを参照する nginx 変数 |
~* | 大文字・小文字を区別しない正規表現マッチ |
(A|B|C) | 複数のボット名を |(OR)で列挙 |
return 403 | アクセス禁止を返す(アプリに到達しない) |
設定の反映
# 設定ファイルの文法チェック
sudo nginx -t
# 問題なければリロード(サービスを停止せずに反映)
sudo systemctl reload nginx
- robots.txt: 行儀の良いボット向け。クローラーが自主的に従う
- nginx: 確実なブロック。サーバーレベルでアクセスを拒否する
両方設定しておくのがベストプラクティスです。
Google AdSense への影響
ボットをブロックしても Google AdSense の収益には影響しません。
- Google AdSense は ボットのアクセスを自動的に除外 しており、広告表示やクリックとしてカウントしません
- SemrushBot や TikTokSpider のアクセスでは広告が表示されず、収益は発生しません
- むしろボットをブロックすることで、サーバーの応答速度が改善され、実際のユーザー体験が向上します
Google Analytics も同様にボットトラフィックを除外しているため、ボットをブロックしても PV 数は変わりません。ログに表示されるボットのアクセスは、実際のユーザー訪問とは別物です。
設定の確認方法
curl コマンドでボットの User-Agent を偽装してアクセスし、403 が返ることを確認します。
# SemrushBot を偽装してアクセス
curl -I -A "Mozilla/5.0 (compatible; SemrushBot/7~bl)" https://example.com/
# TikTokSpider を偽装してアクセス
curl -I -A "Mozilla/5.0 (compatible; TikTokSpider)" https://example.com/
# 通常のブラウザでアクセス(200 が返ること)
curl -I https://example.com/
ボットの User-Agent では 403 Forbidden、通常のブラウザでは 200 OK が返れば正しく設定されています。