前言
生成式 ai 的發展和逐漸成熟,給人們帶來了便利的同時也給內容創作者帶來了負面影響。它降低了資料原始出處的訪問價值,減少了網站的利益(流量、收益和創作積極性)。如果你跟我一樣,想在自己的網站屏蔽 ai 的抓取,那麼這篇文章就是為你準備的。
這是一篇新手向教程。過程十分簡單。
屏蔽原因
雖然我在前言中有所提及,但並沒有特別深刻的剖析所謂的負面影響。因為本文的重點是屏蔽方法,而不是屏蔽原因。
你可以參考此文了解我的更多看法。
配置 robots.txt
具備最基本 seo 常識的站長應該都知道 robots.txt 是什麼,它是一個用來控制搜尋引擎爬蟲抓取範圍的文件。我們可以在 robots.txt 屏蔽某些頁面/某些爬蟲,或僅允許某些爬蟲。
舉個最典型的例子:
user-agent:*disallow:/admin/。
上述 robots.txt 規定了任何爬蟲都不允許訪問 /admin/ 路徑的頁面。這個聲明非常常見,因為將網站後台索引到搜尋引擎中是毫無意義的,還會招來不必要的風險。
當我們要屏蔽特定的爬蟲時,就需要將 * 改為該爬蟲的 user-agent 字符串。如果要屏蔽多個,那麼就寫上多個 user-agent 欄位,再接一個 disallow 欄位即可。
user-agent:gptbotuser-agent:claude-webuser-agent:claudebotdisallow:/。
以上 robots.txt 屏蔽了 chatgpt 和 claude 這兩個目前最著名的 ai 產品的抓取。
擴充列表
在了解原理後,我們通過網友們整理好的 ai.robots.txt 倉庫,進一步擴充 ai 爬蟲的 ua 規則。
robots.txt 的可靠性
配置好 robots.txt 能代表相安無事嗎?此文件真的能有效拒絕它們嗎?
答案是否定的,因為 ai 的爬蟲並不像搜尋引擎爬蟲那樣成熟。它們可能會忽略 robots.txt 的後續更新,甚至在規則的解析和執行中發生錯誤。搜尋引擎往往不用我們擔心,因為從控制台能看到爬蟲的行為,或自行測試搜索結果。但 ai 爬蟲的行為就是黑盒,你什麼也無法確定。所以我們要進一步的使用 nginx 屏蔽它們。
配置 nginx
如果你跟我一樣並不信任 ai 爬蟲的行為,那麼就有必要在訪問控制層面去屏蔽它們。nginx 是絕大多數網站都會使用的反向代理工具,在 nginx 層面可以輕鬆做到針對 user-agent 的屏蔽。
我們添加以下配置片段:
set $is_bot 0;# 定義變量表示此次訪問是否為 ai bot,默認為 0(否)if ($http_user_agent ~* (gptbot|claude-web|claudebot)) { # 如果請求的 user-agent 和 ai bot 的規則匹配,那麼設置 `is_bot` 為 1(是) set $is_bot 1;}if ($is_bot = 1) { # 如果是 ai bot,返回 403 return 403;}
nginx 中的 $http_user_agent 是一個內置變量,表示當前請求的 user-agent 字符串。~* 是一個正則匹配操作符(忽略大小寫)。我們用正則來判斷請求是否是 ai bot,如果是就返回 403 頁面。
進一步的,按照擴充列表章節中的開源倉庫補充正則,就能輕易的從訪問控制層面屏蔽這些 ai 爬蟲。現在無論這些爬蟲是否遵循 robots.txt 規則,我們都能有效的拒絕它們。
現實情況是,往往這個列表太長了。所以單純的 if 和正則並不推薦,我們應該將其轉換為 map 塊,如下:
map $http_user_agent $user_agent_from_ai { default 0;# 默認值為 0 ~*gptbot 1; ~*claude-web 1; ~*claudebot 1; ~*kangaroo\sbot 1; # 添加更多...}
注意以上的 kangaroo\sbot,它實際上對應 kangaroo bot。但我們不能包含空格,因為它會被解析為新的參數。使用正則表達式中的 \s 來表示一個空格。
最後用 if 判斷 $user_agent_from_ai 的值:
if ($user_agent_from_ai = 1) { # 如果是 ai bot,返回 403 return 403;}
足夠了嗎
答案仍然是否定的。儘管在以上方法中,我們貌似在「約定」層面和「訪問」層面都拒絕了它們,但這基於我們對 ai 公司/爬蟲一定程度上的信任。
起碼我們認為它們不會偽裝而是使用固定的 user-agent。所以這樣做只能防君子,不防小人。假設爬蟲簡單的偽裝一下自己,訪問控制就失效了。不過,我仍然認為行業巨頭在這方面是值得信任的,但小團隊的產品就不一定了。
要屏蔽經過偽裝的 ai 爬蟲其實是很困難的,但也不是沒有辦法。如果對大量的 nginx 日誌/請求日誌進行複雜的特徵/行為分析,我認為能一定程度上識別出爬蟲。甚至收集到它們的 ip 地址,針對 ip 進行更徹底的屏蔽。但我們往往沒有那麼龐大的數據量來做這樣的分析,若是 cloudflare 這樣的大型 cdn 服務商,那就有條件做到。恰好我了解到 cloudflare 已經研發了相應的功能,並且是免費使用的。
使用 cloudflare
進入 cloudflare 的「安全性」 ->「自動程序」頁面,勾選「阻止 ai 爬蟲程序和爬網程序」功能即可。
此功能可以一定程度屏蔽具有偽裝性的爬蟲,也包括老實使用自己的 user-agent 的爬蟲。如果使用過 cloudflare 的防火牆等抵禦攻擊相關的功能,應該會知道它們有對客戶端 ip 進行評分,以及可靠的指紋識別、大模型行為識別等技術。所以我認為 cloudflare 還是可以做好這部分的。
那麼使用這個功能,會對 seo 造成影響嗎?畢竟搜尋引擎的爬蟲也可能具有明顯的特徵。好問題,cloudflare 自然也考慮到了。它們維護了一個已驗證機器人列表,其中包含幾乎已知的主流搜尋引擎爬蟲,並允許它們的抓取。
對抗 ai
以上配置中我們對 ai 爬蟲響應 403,但它不是唯一可取的響應方式。如果你認為有些爬蟲過於困擾,反覆變化毫無規則。那麼就成全它讓它抓取吧,先收集其 ip 並然後使用 miragend 來污染它。
結束語
這就是屏蔽 ai 爬蟲的方法了。不過請注意,此文的方法仍然比較基礎,適合個人。如果有大型網際網路平台/社區需要這方面的支持,可以聯繫我,我提供收費的技術支持。當然,如果有效果更好的適合新手的方法,我也會毫不猶豫的分享出來。畢竟我是一個堅定的生成式 ai 無授權抓取內容行為的反對者。