nginx

nginx で不要なボット(SemrushBot・TikTokSpider)をブロックする方法

この記事の対象読者

  • 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)"

代表的な不要ボット

ボット名運営元目的ブロック推奨
SemrushBotSemrush(SEO ツール)サイトの SEO データ収集推奨(自分が Semrush を使っていなければ不要)
TikTokSpiderTikTokリンクプレビュー生成等推奨(SEO メリットなし)
AhrefsBotAhrefs(SEO ツール)被リンク・キーワード分析推奨(自分が Ahrefs を使っていなければ不要)
MJ12botMajestic(SEO ツール)被リンクデータ収集推奨
DotBotMoz(SEO ツール)SEO データ収集推奨(自分が Moz を使っていなければ不要)
注意

Googlebot、Bingbot、Applebot、Twitterbot(X のプレビュー生成用)など、検索エンジンや SNS のプレビュー生成に必要なボットはブロックしないでください。

robots.txt での対策(お願いベース)

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 はあくまで「お願い」であり、強制力がありません。行儀の悪いボットは robots.txt を無視してアクセスしてきます。確実にブロックするには、次に紹介する nginx での対策が必要です。

nginx での確実なブロック方法

nginx の設定で User-Agent を判定し、不要なボットに対して 403 Forbidden を返します。これによりリクエストが Django 等のアプリケーションに到達する前にブロックできるため、サーバーリソースの節約にもなります。

設定方法

nginx の server ブロック内に以下を追加します。

/etc/nginx/sites-enabled/example.com
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
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
robots.txt と 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 が返れば正しく設定されています。

HTTP/2 403 ← ボットはブロック
HTTP/2 200 ← 通常アクセスは OK