留言審核區一次跳出兩百多則待審留言,九成都在推銷從沒聽過的減肥藥或博弈網站,真人的留言反而變成海底撈針。這種情況多數經營網站的人都遇過:裝了驗證碼,垃圾留言照樣灌進來;打開人工審核,又耗掉大半天時間逐則看。
問題不在於「有沒有防護」,而在防護擋住的是什麼。驗證碼只能回答一件事,填表單的是不是真人,卻答不出「這段內容是不是垃圾」;等留言灌爆信箱才想起要清,防護早就慢了半拍。WordPress AI防垃圾留言指的是留言外掛把判斷邏輯從比對關鍵字黑名單,升級成即時分析內容與行為,交給機器學習模型做決定,抓的不只是留言裡有沒有黑名單字,還包括這則留言的行為模式像不像機器人在自動灌資料。
先弄懂 AI 實際在比對什麼,再一路拆到內容比對與行為分析兩種做法怎麼設定,以及門檻要怎麼抓才不會誤傷真人留言。

垃圾留言辨識,從比對關鍵字進化到機器學習判讀
早期防堵垃圾留言的做法很直觀,留言裡出現黑名單關鍵字就攔下來,或者乾脆要求填一次驗證碼,留言送出後排隊等站方一則則審。這套邏輯的盲點是只比對固定清單、只檢查是不是真人,都沒有真的去判斷這則留言的內容合不合理;垃圾留言的手法一直在換,關鍵字黑名單永遠慢半拍,真人也常常被驗證碼難倒。近幾年主流的做法改成讓 AI 模型即時分析每一則留言的內容與提交行為,不再只靠一份固定清單,這正是內容比對與行為分析兩種做法共同的底層邏輯。
驗證碼、人工審核留不住真人,也擋不住聰明的機器人
驗證碼看起來像是最直覺的防線,但它從設計上就只能回答一個問題,填表單的是不是人類,答不出這則內容本身是不是垃圾。WordPress 共同創辦人 Matt Mullenweg 早在 2008 年就在英國《衛報》的報導中點出這個侷限,驗證碼的設計只能分辨對方是不是人類,卻判斷不了內容是不是垃圾,真人送出的東西也可能是垃圾,所以他認為像 Akismet 這種以內容為基礎的做法才是長期解方;Akismet 的設計方向,也確實是分析留言內容,而不是只靠驗證碼把關。
驗證碼真正的代價,是它會連真人一起擋下來。國際使用者研究機構 Baymard Institute 針對文字型驗證碼做過測試,找來 1,027 名受測者實際操作,只看拼字錯誤,首次嘗試平均失敗率就有 8.66%;如果把拼字錯誤跟大小寫錯誤合併計算,平均每次驗證碼挑戰有 29.45% 的受測者會失敗。Baymard 另一篇研究也提醒,打錯或看不清驗證碼的訪客,很可能因為挫折而直接離開網站。防線設得越嚴,流失的往往不只是垃圾機器人。
人工審核也有類似的取捨。留言量小的時候逐則看還能應付,一旦留言暴增,人工複核跟不上速度,垃圾留言在被清掉之前早就已經曝光在頁面上,而且這種審核方式沒辦法即時擋下,只能等有人發現才處理。
AI 模型即時比對雲端資料庫並持續從錯誤裡學習
跳過驗證碼與人工複核的侷限,AI 判斷留言真偽主要靠兩種機制。第一種是內容比對,留言送出的當下,系統就把內容送去跟雲端已知的垃圾資料庫比對,用機器學習模型與經驗法則辨識常見的垃圾特徵,像是連到不相關網站的連結、空泛的讚美詞,或者整段離題的內容。以 Akismet 為例,它的部落格說明,只要有人在網站留言或送出表單,它的 AI 程式就會即時分析內容,拿去和龐大的雲端垃圾資料庫比對,並自陳準確率達 99.99%。
第二種機制是持續學習。Akismet 的支援教學頁提到,外掛只有在持續啟用的狀態下才能從站方標記垃圾或非垃圾的回饋中學習,一旦關閉就不會再收集回饋,也不會跟著進步;每一次站方把留言標記為垃圾或非垃圾,都是在教這套模型,同時也提升所有使用者的準確度。Akismet 部落格也提到,它的雲端系統會持續從超過 1 億個網站處理的數十億筆資料點中學習,藉此適應不斷變化的垃圾手法。換句話說,AI 判斷留言不是裝好就一勞永逸,設定完成只是第一步,能不能維持準確度,還要看後續有沒有持續回饋。
做法一,先把 Akismet 內建的 AI 判斷設定到位
懂了 AI 判斷的兩種機制後,先看第一種怎麼實際落地。Akismet 是 WordPress.com 母公司 Automattic 出品、多數 WP 安裝時就已經內建的外掛,也是加入內容比對這層判斷最直接的一條路徑,但外掛清單裡看得到它,不代表它已經在運作。要讓這一層真的發揮作用,有三件事得先到位。
第一是 API 金鑰。沒有金鑰,Akismet 就無法把留言送到雲端比對,整組 AI 判斷等於還沒啟動;個人部落格可以免費使用,網站只要跟營利事業或教育機構有關,Akismet 就視為商業用途,規定要改用付費方案。第二是垃圾留言的去向。啟用後到「設定 → Akismet Anti-Spam」的嚴格度(Strictness)選項,可以在兩種處理方式之間選一種:預設是把判定為垃圾的留言全部送進「垃圾留言」資料夾,站方核准或刪除前都還能複查;改成靜默丟棄最惡劣、最氾濫的垃圾之後,那一類留言會直接刪除、不進佇列,留言量暴增時佇列好管理很多,代價是真的誤判時連複查的機會都沒有。第三是標記回饋。在留言後台把留言標成垃圾或非垃圾,同時也在餵給 Akismet 訓練資料,被誤判進垃圾留言匣的真人留言,複核後點「非垃圾」就能救回來並修正判斷。

做法二,加裝行為分析型外掛做第二層攔截
Akismet 判斷的是「內容」,而另一種路徑判斷的是「提交行為」,包括有沒有真的執行 JavaScript、提交時間是不是像機器人、IP 或信箱是不是已經在其他網站有垃圾紀錄。以 CleanTalk 為例,這是市面上具代表性的行為分析型外掛,原理跟 Akismet 完全不同,也可以跟 Akismet 疊加使用。
CleanTalk 在 wordpress.org 的外掛頁說明,它「不使用傳統 CAPTCHA、reCAPTCHA 或任何要求訪客互動的挑戰,而是用行為分析、隱形的 JavaScript 測試與全球垃圾資料庫,在背景自動偵測垃圾內容」,適用範圍涵蓋留言、聯絡表單、註冊與 WooCommerce 結帳,而且對真實訪客完全無感。同一頁宣稱可攔截高達 99.998% 的垃圾機器人,方案是免費試用後每年 12 美元;CleanTalk 官網則標示已有超過 110 萬個網站採用這套服務。

不靠驗證碼,靠隱形的 JavaScript 行為測試判斷真人
這個做法的核心邏輯很直接,外掛會在表單裡放一段一般瀏覽器會自動執行、但多數垃圾機器人執行不了的 JavaScript,不需要真人多按一次驗證碼,就能分辨出對方是不是機器人。wordpress.org 外掛頁的 FAQ 說明,其中一項機制就是這種 JavaScript 反垃圾測試,99% 的垃圾機器人不支援完整的 JavaScript 功能,外掛放的程式碼一般訪客能正常執行,垃圾機器人卻執行不了。
這跟 Akismet 把內容送去雲端比對,是完全不同的判斷角度。Akismet 看的是留言寫了什麼,CleanTalk 這類行為分析先看的是「送出這則留言的過程」像不像人在操作。CleanTalk 也強調,只有同時未通過多項測試才會真的判定為垃圾,不會單靠一項測試就直接封鎖,藉此把誤判真人的機率壓低。
全球黑名單資料庫比對 IP、信箱與網域的異常活動
行為測試之外,另一項判斷依據是把留言者的 IP、信箱、網域拿去跟雲端累積的全球垃圾活動紀錄比對,抓出已經在別的網站上有垃圾行為紀錄的來源。wordpress.org 外掛頁的 FAQ 提到,這套線上的垃圾活動資料庫累積了超過 200 億筆 IP、信箱、網域與 ASN 的垃圾活動紀錄;如果寄件者的 IP 或信箱出現在資料庫裡,會拿到一筆垃圾評分,但同樣要同時未通過多項測試才會真的被封鎖。
同一頁還說明了另一層防護,叫做 Spam FireWall。訪客一進站,HTTP 請求資料就會先比對近 580 萬筆已知垃圾機器人 IP,一旦命中,這名訪客只會看到一張空白頁,真實訪客則完全不受影響、正常瀏覽。這一層防護在留言表單被打開之前就先擋掉了一批機器人,跟前面兩項判斷依據一起組成整套防護。
提交留言的時間差也是 AI 用來辨識機器人的線索
第三項判斷依據是留言從頁面載入到送出之間的時間間隔,這個特徵比較具體、也容易理解。wordpress.org 外掛頁的 FAQ 說明,垃圾機器人通常在頁面載入後立刻送出資料,因為機器人並不是真的去填寫表單,而是直接對後端送出 POST 資料;真實訪客則會間隔數秒到數分鐘才送出,畢竟看內容、打字、確認留言都需要時間。
這個判斷邏輯很直觀,一則留言如果在頁面打開的瞬間就送達,不太可能是真人一字一句打出來的。把這個時間差跟前面兩項依據放在一起看,就能理解為什麼行為分析型外掛不需要打擾訪客,也能拼湊出這是不是機器人在自動送資料的完整輪廓。
雲端 AI 判讀和行為分析型外掛的分工與相容性
把前面兩種做法放在一起看,很多人會擔心同時開啟會不會互相衝突,或者根本沒必要重複裝。CleanTalk 外掛頁的 FAQ 直接回答過「CleanTalk 能不能取代 Akismet」這個問題。它給的說法是可以當作替代方案,兩者處理的是同一個問題,但 CleanTalk 保護的是網站上所有表單,不只是留言,是更廣義的雲端防護方案;同一頁也提醒,某些情況下同時裝好幾套防垃圾外掛可能互相衝突,所以兩套一起開之後,最好實際送出幾則留言與表單,確認都能正常運作。同一頁也說明,CleanTalk 相容各種快取外掛與 CDN,以 Cloudflare 為例,它不會把 Cloudflare 自己的 IP 範圍 AS13335 拿去比對黑名單,而是改用其他測試方式,這代表即使主機已經架了 CDN 或快取,這套行為分析也不會跟著失效。
內容比對與行為分析,兩種機制各自堵住不同的漏洞
Akismet 的內容比對抓的是「這段文字或連結像不像已知垃圾」,就算是真人手動貼一則廣告連結,只要內容符合垃圾特徵一樣會被抓到;CleanTalk 這類行為分析抓的則是「這個提交過程像不像機器人在自動送資料」,對純自動化灌留言的攻擊特別有效,但沒辦法判斷一則語法正常、由真人送出卻帶著垃圾意圖的留言。兩者角度不同,同時開啟是互補,而不是重複做同一件事。
舉例來說,一則留言如果只有簡短的稱讚加一個不相關的網址,Akismet 的內容比對很容易就能判斷出這是垃圾;但如果同一個機器人改成在頁面載入的瞬間就自動送出這則留言,不管內容寫得多正常,CleanTalk 的行為分析一樣能從送出時間的異常抓到破綻。反過來,如果攻擊者真的雇用真人手動貼留言,提交時間跟真人無異,這時候能攔下來的反而是內容比對這一關。兩種機制擋住的漏洞剛好互補,同時啟用,漏網的機率自然比只裝一種低。

門檻設得太嚴,可能連真人留言都被一併擋下
AI 判斷不是非黑即白的是非題,而是一組機率分數,需要設定門檻才能決定多高的分數算垃圾。Google 的 reCAPTCHA v3 開發文件說明,v3 針對每個請求回傳一個 0.0(很可能是機器人)到 1.0(很可能是真實互動)的分數,不會中斷使用者的操作流程;網站可以自行決定分數門檻,文件建議可以先用不採取任何行動、只記錄分數的方式觀察一段時間,再依管理控制台看到的流量分布決定門檻,並提到預設可以先用 0.5 當門檻。
這套給分數、自己設門檻的邏輯,不是只有 reCAPTCHA 才有,Akismet 要不要靜默丟棄的嚴格度選項、CleanTalk 的黑名單評分,背後同樣是這種取捨。門檻設得越嚴,擋下的垃圾留言確實越多,但誤判真人的機率也跟著提高。前面 Baymard Institute 的資料其實已經點出這個代價有多高,被誤擋的真人很可能因為挫折直接離開網站;不管是驗證碼型還是 AI 內容比對型防護,這個取捨都存在,設定嚴格度之前值得先想清楚自己的網站能承受多少誤判。

持續訓練模型並替 AI 爬蟲留一條白名單通道
設定完 AI 判斷,不代表這件事就結束了。判斷的準確度會隨著站方持續標記回饋而變化,而且還有一件容易被混淆的事,擋垃圾機器人跟擋 AI 爬蟲是兩件不同的事,設定時要分清楚,不要把對網站有益的 AI 爬蟲也一併擋掉。
主動標記留言對錯是教 AI 模型變得更精準的方法
前面提過,Akismet 只有在持續啟用的狀態下才能從回饋中學習,而這個回饋來源就是站方主動標記留言。Akismet 支援教學頁的最佳實務建議是,明顯的垃圾留言要標記,不明顯的垃圾留言也要標記,Akismet 誤判合法留言時要標記為非垃圾修正。這不是一次性設定,而是需要長期維持的習慣,持續這樣做,才能讓判斷能力維持並提升。
這也解釋了為什麼有些網站設定完 Akismet 或 CleanTalk 之後,過了一段時間反而覺得判斷變得更準,不是外掛自己突然變聰明,而是站方持續標記的回饋,讓模型認得這個網站特有的留言型態與慣用語言。反過來說,如果從來不去複核垃圾留言匣、也不糾正誤判,模型拿到的回饋就會停在外掛裝好的那一天,準確度自然跟著停滯。
放行 GPTBot 與 ClaudeBot 等正規 AI 爬蟲,只擋壞的機器人
行為分析型外掛在辨識壞的機器人的同時,也會遇到另一種機器人,供 ChatGPT、Claude、Gemini、Copilot 等 AI 服務讀取內容用的正規爬蟲。這類爬蟲不是來留言灌水,而是在讀取網站內容,讓網站有機會被 AI 服務收錄與引用,跟垃圾機器人的性質完全不同。
CleanTalk 在 wordpress.org 的外掛頁明確列出,預設情況下,知名的正規機器人,包含 AI 爬蟲如 GPTBot(ChatGPT)、ClaudeBot(Claude)、Google-Extended(Gemini)與 Copilot,都會被放行;使用者可以在私有清單中個別選擇要封鎖哪些機器人,封鎖某個機器人就會讓對應的 AI 服務無法存取網站內容。換句話說,加裝行為分析型外掛防垃圾留言,預設不會連帶讓網站在 AI 搜尋引擎裡消失,但如果哪天想個別擋掉某個爬蟲,私有清單也留了這個選項,判斷權還是在站方手上。
垃圾留言防護走到這一步,已經不只是裝一支外掛、勾幾個選項這麼簡單。內容比對跟行為分析各自看的角度不一樣,要不要靜默丟棄、黑名單與分數門檻抓多嚴這些設定值,決定的其實是網站要用多高的代價換多乾淨的留言區;而不管選哪一種做法,設定完成的那一刻都只是起點,持續標記回饋才能讓 AI 判斷跟著網站的實際情況變準。留言區乾淨了,也別忘了留一條路給真正對網站有益的 AI 爬蟲,擋錯機器人跟沒擋到機器人,同樣都會讓網站付出代價。
