Webサイトで、ChatGPTに代表される生成AIのアクセスを拒否する方法です。
ご存じの通り対話型AIはWebサイトを自動的にクロールし、情報を収集して学習することで利用者に“最適な回答”を出すように設計されています。
そんな中で自分のサイト内のオリジナルコンテンツを勝手に学習され、利用されることをよく思わないサイト運営者は多いことでしょう...。という事で生成AIのアクセスを禁止する方法を3つご案内します。
robots.txt、.htaccess、functions.phpを使った方法を全部ご紹介します!
この記事の目次
生成AIのクロール・アクセスを拒否する方法
生成AIが急発展した今、AIからもサイトコンテンツを守る必要が出てきました...。
実際ニュースサイト、大手サイトも続々と生成AIをブロックしだしています。
OpenAIが開発したChatGPTや、GoogleのBardやGeminiなどを代表とする「生成AI」は、アフィリエイターやブロガー界隈で人気になってきており、ライバルの情報収集(悪く言えばパクリ)に使われるケースも多いです。その対策でもあります。
ちょっと自分の思う事を書かせてもらうと生成AI自体は悪くないんです。
世の中が便利になりますので...ただそれを“楽”するために使ってほしくない。
当サイトは主にIT関係の記事を書いていますが、全部自分でエラーから動作まで検証しています。その苦労をAIの回答を元に量産されるのは解せないのです。
思う所が多いので前書きが長くなりました。では見ていきましょう・w・
ChatGPTなどの生成AIのクロールやアクセスを禁止する方法は主に以下の3つ。
- robots.txtで生成AIのクロールを制限する
- .htaccessで生成AIのアクセスを禁止する
- functions.phpで生成AIからのアクセスに404を返す
一番よく使われる方法は①のrobots.txtを使う方法ですが、robots.txtに強制力はないので、クローラーによっては無視されます。(大手のクローラーは厳守してくれる)
何が何でもAIのアクセスは拒否したい!という場合は②か③の方法でコンテンツ自体を403(アクセス拒否)や404(Not Found)で非表示にしてやりましょう。
注意
普通は①のrobots.txtでクロール制御するだけで十分みたいです。
②と③の方法については僕のオリジナルなので責任はとれません。
生成AIからのアクセスかどうかの判定にはユーザーエージェント(以下UAと省略している場合があります)が使えます。
ChatGPTのUA例
Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; ChatGPT-User/1.0; +https://openai.com/bot
各AIのユーザーエージェントは調べれば出ますので各自お調べ下さい。
では順番にご紹介していきます。
robots.txtで生成AIのクロールを制限する
まずは定番。サーバー上の「robots.txt」で生成AIのクローラーを制限する方法です。
ご存じの方も多いと思いますが「robots.txt」はクローラー向けのテキストファイルで、ここに設定書いておけば検索エンジンのクローラーを制限することができます。
ポイント
robots.txtに強制力はありません。(現状ほとんどのクローラーはこれに従う)
クロールする・しないはあくまでもクローラーの設定によります。
すべての検索エンジンが robots.txt ルールに対応するとは限らない
サイトに対するクローラーの動作に対して、robots.txt ファイルの指示を強制適用することはできません。指示に従うかどうかはクローラー次第です。Googlebot などの信頼できるウェブ クローラーは robots.txt ファイルの指示に従いますが、他のクローラーも従うとは限りません。
この説明はGoogleの公式ページにもあります。
クロールの制限ではなく、アクセス自体を禁止したいなら後述する「.htaccess」か「functions.php」を使う方法が使えます。
robots.txtの設置場所と編集について
robots.txtは設置場所が決まっており、必ずサーバールートに置く必要があります。
また、自分のサイトにない場合は作成する必要があります。
なので、公開ディレクトリ(public_htmlなど)にあるrobots.txtを編集しましょう。
編集方法は割愛しますが、各サーバーのツールやFTPソフトを使って編集します。
robots.txtでChatGPTのクロールを制限するコードは以下の通りです。
User-agent: ChatGPT-User Disallow: /
コード自体はこれだけです。コードを記述する場所はどこでも大丈夫。
これでユーザーエージェントに「ChatGPT-User」が含まれるクローラーのクロールを制限できます。
ポイント
「robots.txt」内のユーザーエージェントは大文字と小文字で区別されません。
robots.txtに複数のユーザーエージェントを指定する
実際にはChatGPTだけでなく、他の生成AIも制限したいはずです。
この場合robots.txtに複数のユーザーエージェントを指定するには以下のようにすればOKです。以下はユーザーエージェントに「CCBot」「GPTBot」「ChatGPT-User」のどれかが含まれるクローラーを制限する例です。
User-agent: * Disallow: /wp-admin/ Allow: /wp-admin/admin-ajax.php User-agent: CCBot Disallow: / User-agent: GPTBot Disallow: / User-agent: ChatGPT-User Disallow: / Sitemap: https://sologaku.com/sitemap.xml
うちのサイトの場合はこんな感じになります。
先頭の/wp-admin/の部分はWordPress固有の物で初めから出力されます。
robotos.txtの最終行にはサイトマップURLを書くのが定石です。(必須ではない)
.htaccessで生成AIのアクセスを禁止する
続いてサーバー上の「.htaccess」を使って生成AIのアクセスを禁止する方法です。
先ほどの「robots.txt」に強制力はありませんが、この方法を使えば該当するユーザーエージェントでアクセスされた時に、アクセス自体をブロックすることができます。
「.htaccess」は複数階層に設定可能ですが、今回の目的はサーバー全体の設定になるので、公開ディレクトリ内の「.htaccess」を編集しましょう。
.htaccessで該当UAのアクセスを禁止するコード
.htaccessでChatGPTのアクセスを禁止するコードは以下の通りです。
SetEnvifNoCase User-Agent "ChatGPT-User" deny_ua order allow,deny allow from all deny from env=deny_ua
「.htaccess」は最終行に1行空行が必要なのでご注意を。
記述する場所はどこでも良いですが、分かり易いのはファイルの先頭だと思います。
これでユーザーエージェントに「ChatGPT-User」が含まれるクローラーのアクセスに403エラー(閲覧禁止)が返ります。つまりアクセス禁止です。
ポイント
上記のコードはユーザーエージェントの大文字と小文字が区別されません。
なんらかの理由で区別したいなら「SetEnvifNoCase」の部分を「SetEnvIf」に変更すればOKです。(robots.txtの方は区別されないので合わせてます。)
SetEnvifNoCaseに複数のユーザーエージェントを指定する方法
「.htaccess」を使う場合もやはり複数のユーザーエージェントを指定するはずです。
そちらの例も挙げておきます。以下はユーザーエージェントに「CCBot」「GPTBot」「ChatGPT-User」のどれかが含まれるアクセスを禁止する例です。
#SetEnvifNoCaseを複数書く例 SetEnvifNoCase User-Agent "CCBot" deny_ua SetEnvifNoCase User-Agent "GPTBot" deny_ua SetEnvifNoCase User-Agent "ChatGPT-User" deny_ua order allow,deny allow from all deny from env=deny_ua
こんな感じにSetEnvifNoCaseを複数書けばOK。または、
#「|」を使って複数のUAを指定する例 SetEnvifNoCase User-Agent "CCBot|GPTBot|ChatGPT-User" deny_ua order allow,deny allow from all deny from env=deny_ua
という感じに|
を使うこともできました。
実行速度まではよく分かりません、好きな方でOKだと思います。
動作確認
一応動作確認もしときました。
.htaccessに上記のコードの追記後、UAを生成AI(ChatGPT)に偽装してアクセスした様子が以下です。
無事に「403 Forbidden」が表示されているのでOKですね・w・
自分の目で動作チェックしたいと思う方は以下の記事(↓)も参考にどうそ。
-
- 【UA偽装】ユーザーエージェントの偽装(変更)はChromeでやればアドオン不要!
続きを見る
functions.phpで生成AIのアクセスに404を返す
最後にWordPressを使っている方向けの内容です。
functions.phpで生成AIを拒否できれば便利!...という事でコードを作ってみました。
指定したUAに該当するときにサイトの404ページを返す仕様にしました。といってもis_mobile関数を少し変更しただけですが...。
使いたい人は、子テーマのfunctions.phpに以下のコードを追記して下さい。
これで生成AIからのアクセスには404(Not Found)ページが表示できます。
// 生成AIなら404ページを返す(※UA大文字小文字区別なし) function reject_generative_ai() { $match = 0; $target = $_SERVER['HTTP_USER_AGENT']; $ua = array( 'CCBot', 'GPTBot', 'ChatGPT-User' ); $pattern = '{' . implode( '|', $ua ) . '}i'; // 大文字小文字を区別したい時は以下のコード // $pattern = '{' . implode( '|', $ua ) . '}'; $match = preg_match( $pattern, $target ); if ( $match === 1 ){ global $wp_query; $wp_query->set_404(); status_header(404); } } add_action( 'template_redirect', 'reject_generative_ai' );
WordPressはphpを使っているので、ユーザーエージェントを確認するだけで比較的簡単に生成AIか否かを判定できます。コード内のコメントにも書いてますが、こちらもrobots.txtに合わせてUAの大文字と小文字は区別しないようにしています。
何か理由があって文字の大小を区別したい時はコメントアウトを入れ替えて下さい。
複数のユーザーエージェントを指定する方法
コードに書いていますが、複数のUAを指定するときは以下のような感じです。
$ua = array( 'UA1', 'UA2', 'UA3'//←ここに「,」は要らないので注意 );
ただし最後のUAを指定した後に,(カンマ)は不要です。
誤って入れてしまうとエラーが出ると思うのでご注意ください。
動作確認
functions.phpの方も動作確認。
先ほどと同じくユーザーエージェントをChatGPTに偽装して確認します。
当サイトの404 Not Foundページが出たので大丈夫そうです。
対象はあくまでUAが固定された生成AIなので、403でなく404で問題ないでしょう。
生成AIのUAは他サイトのrobots.txtも参考に
他のサイトはどんなユーザーエージェントをブロックしているのか?についてですが、これは各サイトのrobots.txtを確認させてもらえばすぐに分かります。robots.txtの設置場所は決まっているので、
サイトURL/robots.txt
を開けば簡単に見ることができます。例えば、日本経済新聞のポータルサイトは以下のようになっていました。
ニュースサイトなどは、ほとんどのサイトが生成AIのクローラーを制限しています。
特にコンテンツが収益化されているサイトはAIが敵なので参考になるでしょう。
しかしまぁ~次々新しいAIが出てくるのでその都度UAを拒否するのは面倒ですねぇ。
生成AIに対するnocrawl的なタグが出れば良いのだけど...どうせそれも無視されるか。
まとめ
ChatGPTに代表される生成AIのクローラーの制限とアクセスを禁止する方法でした。
robotx.txtはクロールの制限ですが.htaccessやfunctions.phpを使えばアクセス自体を禁止することもできそうです。どこまでやるかはサイト運営者次第。
ちなみに当サイトは色々やったのに結局robots.txtでのクロール制限に留めました。
意図しない所で404や403が出てしまうリスクが少なからずあるので...。
robots.txtを無視するAIクローラーが増えてきたら遠慮なく403を返しますがね・w・