robots.txtだけでは守れないページがある
robots.txtはあくまでも「依頼」であり、悪意あるクローラーは無視します。特にお問い合わせフォームや会員ページは、robots.txtに関わらず直接アクセスされるリスクがあります。
保護が必要なページの種類
- お問い合わせフォーム(メールアドレスが収集される可能性)
- 会員ログインページ
- 個人情報を含む入力フォーム
- プライベートなAPIエンドポイント
- 有料コンテンツページ
方法①:robots.txtでフォームページを明示的に除外
User-agent: GPTBot
Disallow: /contact
Disallow: /contact/
Disallow: /form/
Disallow: /inquiry/
Disallow: /member/
Disallow: /login/
Disallow: /
方法②:Next.js Middlewareでフォームページを保護
// middleware.ts
import { NextRequest, NextResponse } from 'next/server';
const AI_BOTS = /GPTBot|ClaudeBot|PerplexityBot|Google-Extended|CCBot|Diffbot|Bytespider|Amazonbot|OAI-SearchBot|anthropic-ai|YouBot|cohere-ai|MistralBot/i;
const PROTECTED_PATHS = ['/contact', '/inquiry', '/form', '/member', '/api/'];
export function middleware(request: NextRequest) {
const ua = request.headers.get('user-agent') ?? '';
const path = request.nextUrl.pathname;
if (AI_BOTS.test(ua) && PROTECTED_PATHS.some(p => path.startsWith(p))) {
return new NextResponse('Forbidden', { status: 403 });
}
return NextResponse.next();
}
export const config = {
matcher: '/((?!_next/static|favicon.ico).*)',
};
方法③:Cloudflare Page Rulesで保護
Cloudflareのページルールで特定パスのみAIボットをブロック:
- Cloudflare管理画面 → WAF → カスタムルール
- 条件:
http.request.uri.path contains "/contact"ANDhttp.user_agent contains "GPTBot" - アクション: Block
方法④:HTMLフォームに非表示フィールドを追加(ハニーポット)
AIボットによるフォームの自動入力を検知する方法です:
<form action="/contact" method="post">
<!-- ハニーポット(人間には見えない) -->
<input type="text" name="website" style="display:none;" tabindex="-1" autocomplete="off">
<input type="text" name="name" placeholder="お名前">
<input type="email" name="email" placeholder="メールアドレス">
<textarea name="message"></textarea>
</form>
AI Access Monitorによる侵入検知
AI Access Monitorを設置すると、AIボットがどのURLにアクセスしているかをリアルタイムで記録します。フォームページへの不審なアクセスを早期に発見できます。