·8分で読める

Vercel Edge FunctionsでAIボットをブロックする方法

Vercel Edge MiddlewareとEdge Functionsを使ってAIクローラーをエッジでブロックする実装方法を、設定例・パフォーマンスのコツとともに解説します。

VercelEdge FunctionsMiddlewareAIクローラーNext.js

Vercel Edge FunctionsでAIボットをブロックする方法

Vercel Edge Middlewareによるブロックのメリット

VercelでホストされたNext.jsアプリケーションでAIボットをブロックする最も効率的な方法は、Edge Middlewareを使うことです。

Edge Middlewareの利点:

  • グローバルエッジ実行:ユーザーに最も近いエッジノードで処理されるため、オリジンサーバーへの負荷がゼロ
  • レイテンシ最小化:判定処理が数ms以内で完了
  • 全ルートに自動適用:一度設定すれば全ページに適用される
  • デプロイ不要の更新:middleware.tsを変更するだけで即反映

基本実装:middleware.tsでAIボットをブロック

src/middleware.ts または middleware.ts

import { NextRequest, NextResponse } from "next/server";

const AI_BOT_PATTERN = /GPTBot|OAI-SearchBot|ClaudeBot|anthropic-ai|PerplexityBot|Google-Extended|Amazonbot|Bytespider|CCBot|cohere-ai|MistralBot|Diffbot/i;

export function middleware(req: NextRequest) {
  const ua = req.headers.get("user-agent") ?? "";

  if (AI_BOT_PATTERN.test(ua)) {
    return new NextResponse(
      JSON.stringify({ error: "AI crawlers are not permitted" }),
      {
        status: 403,
        headers: { "Content-Type": "application/json" }
      }
    );
  }

  return NextResponse.next();
}

export const config = {
  matcher: [
    // 静的ファイルとAPIルートを除外
    "/((?!_next/static|_next/image|favicon.ico|api/).*)",
  ],
};

高度な実装:Check APIと連携した判定

AI Access MonitorのCheck APIを使えば、パターンマッチングよりも精度の高い判定ができます:

import { NextRequest, NextResponse } from "next/server";

// 高速な事前フィルタ(明らかなボットを即ブロック)
const OBVIOUS_BOT_PATTERN = /GPTBot|ClaudeBot|PerplexityBot|Amazonbot|Bytespider/i;

export async function middleware(req: NextRequest) {
  const ua = req.headers.get("user-agent") ?? "";
  const siteId = process.env.MONITOR_SITE_ID ?? "";

  // 明らかなボットは即座にブロック(レイテンシ最小化)
  if (OBVIOUS_BOT_PATTERN.test(ua)) {
    return new NextResponse(null, { status: 403 });
  }

  // グレーゾーンのUAはCheck APIで判定(Proプランのみ推奨)
  // Edge Runtimeからの外部API呼び出しはタイムアウトに注意

  return NextResponse.next();
}

export const config = {
  matcher: ["/((?!_next|favicon.ico).*)"],
};

robots.txtをEdge Functionで動的生成

// app/robots.ts (Next.js 13.3+ App Router)
import { MetadataRoute } from "next";

export default function robots(): MetadataRoute.Robots {
  return {
    rules: [
      // AIクローラーをすべてブロック
      {
        userAgent: "GPTBot",
        disallow: "/",
      },
      {
        userAgent: "OAI-SearchBot",
        disallow: "/",
      },
      {
        userAgent: "ClaudeBot",
        disallow: "/",
      },
      {
        userAgent: "anthropic-ai",
        disallow: "/",
      },
      {
        userAgent: "PerplexityBot",
        disallow: "/",
      },
      {
        userAgent: "Google-Extended",
        disallow: "/",
      },
      {
        userAgent: "Amazonbot",
        disallow: "/",
      },
      {
        userAgent: "Bytespider",
        disallow: "/",
      },
      {
        userAgent: "CCBot",
        disallow: "/",
      },
      {
        userAgent: "Applebot-Extended",
        disallow: "/",
      },
      // 通常の検索エンジンは許可
      {
        userAgent: "*",
        allow: "/",
      },
    ],
    sitemap: "https://yourdomain.com/sitemap.xml",
  };
}

Vercel Firewall Rules(有料プラン)

Vercel ProプランではFirewall Rulesも利用できます:

// vercel.json
{
  "firewall": {
    "rules": [
      {
        "name": "Block AI Bots",
        "description": "Block known AI training crawlers",
        "conditionGroup": [
          {
            "conditions": [
              {
                "type": "user_agent",
                "op": "re",
                "value": "GPTBot|ClaudeBot|PerplexityBot|Amazonbot|Bytespider"
              }
            ]
          }
        ],
        "action": {
          "type": "block"
        }
      }
    ]
  }
}

Edge Middlewareでのパフォーマンス最適化

Edge Middlewareはリクエストごとに実行されるため、処理を最小限にすることが重要です:

  • 正規表現はコンパイル済みを使う:モジュールレベルで定義し、毎リクエスト再コンパイルしない
  • 外部API呼び出しを避ける:Edge Runtimeの実行時間制限(通常1〜5秒)に注意
  • 早期リターン:ボット検知したら即座に返す

VercelデプロイとAI Access Monitorの組み合わせ

Vercel上のNext.jsサイトにAI Access Monitorを設置すると、Middlewareでブロックしたアクセスも含めてAIボットの全体像を把握できます。

VercelへのデプロイはGitHub連携で自動化できます。AI Access Monitorを無料で試す →

AI Access Monitor

まず計測から始めよう

1行のコード追加で、AIクローラーの計測を今日から開始。無料・設定不要。

無料で始める →