WordPress 網站的留言功能是讀者互動的主要管道,但也成了垃圾留言機器人的目標。如果不加以防護,你的網站會被淹沒在無意義的廣告留言、詐騙連結、甚至惡意軟體推送中,不僅降低訪客體驗,還可能對伺服器效能造成實質負擔。建立多層防禦機制,能有效阻擋大部分威脅,同時保持正常讀者的留言暢通。
認識垃圾留言對網站的實際威脅
垃圾留言通常分為兩類:人工發布的廣告宣傳,以及自動化機器人生成的批量評論。後者因為成本低、規模大,已經成為最常見的困擾。這些留言不只佔據頻寬,審核與刪除都要耗費時間,長期累積還會拖累資料庫查詢速度。每條留言都需要資料庫寫入、spam 檢測、通知信寄送,當機器人一天發送數百甚至數千條時,累積效應會讓網站變得遲鈍。
此外,垃圾留言常常帶著釣魚網址或惡意連結。訪客一旦點擊,可能被引導到詐騙頁面或感染病毒。從搜尋引擎角度看,垃圾連結也會影響網站的信任度評分。所以防護垃圾留言,本質上是在保護網站聲譽、使用者安全,以及伺服器健康。
用 Akismet 構建第一道防線
Akismet 是 WordPress 官方推薦的反垃圾留言外掛,幾乎所有 WordPress 新安裝都預裝了它。這套系統透過機器學習模型,分析留言的內容、發送者 IP、鏈結模式等特徵,判斷該留言是否可疑。準確度相當高,誤判率也控制得不錯。
在 WordPress 後台找到「設定 > Akismet Anti-Spam」,第一步是連結 Akismet 帳戶。如果還沒有帳戶,前往 akismet.com 註冊,根據網站規模選擇合適的計畫(個人部落格是免費的,商業網站通常是付費)。拿到 API 密鑰後,貼回 WordPress 設定頁面,Akismet 就會開始掃描進來的留言。
設定頁面的「留言設定」區有幾個選項值得注意。「自動捨棄最可能是垃圾的留言」這項預設關閉,但建議開啟——Akismet 的信心度超過 99% 的垃圾留言會直接丟棄,不必手動審核。「核准留言時傳送通知」可以幫你追蹤哪些留言被自動審核通過。還有一個進階選項是設定評論歷史期限,自動清理超過一定時間的垃圾留言備案,減輕資料庫負擔。
Akismet 的力量在於它的全球資料庫。每次有人上傳垃圾留言樣本,系統都在學習。但它不是完美的——再聰明的機器學習也會有漏網之魚。所以 Akismet 應該是多層防護的第一層,而非唯一防線。
加入驗證碼擋自動化機器人
第二層防護是驗證碼,透過人機識別來阻止自動發送的垃圾留言。WordPress 的留言表單可以整合兩套主流解決方案:Google reCAPTCHA 和 Cloudflare Turnstile。兩者都是免費的(reCAPTCHA 有商業版,但個人網站用免費版足夠)。
Google reCAPTCHA 的整合步驟
reCAPTCHA 有三個版本。v2 是最傳統的「我不是機器人」勾選框;v3 在背景執行評分,不需要訪客互動,但有時會誤判;企業版有額外客服支持。多數個人網站用 v2 就夠了。
設定流程是:先到 Google reCAPTCHA 管理頁面(google.com/recaptcha/admin)註冊一個網域,系統會分配 Site Key 和 Secret Key。接著在 WordPress 後台安裝一個 reCAPTCHA 整合外掛(比如「WP reCAPTCHA」或「Google Site Kit」),貼入這兩把鑰匙,然後在留言表單設定中啟用。測試一下留言表單,應該會看到右下角出現 reCAPTCHA 的小徽章。
reCAPTCHA 的好處是辨識精準度高,壞處是增加了視覺複雜度,有些訪客看到驗證碼可能會放棄留言。如果你的網站留言量本來就不多,額外的摩擦力可能得不償失。
Cloudflare Turnstile 作為輕量替代
Turnstile 是 Cloudflare 推出的較新選項。它的賣點是互動更友善——有時只要勾選一個框就過了,不需要識別馬路標誌或公車號碼。設定方式類似:去 Cloudflare 帳戶面板申請 Site Key 和 Secret Key,再用整合外掛或自行插入程式碼到留言表單。
Turnstile 特別適合已經用 Cloudflare CDN 的網站,因為整合更緊密。如果你的網站性能很重要,Cloudflare 的全球邊緣網路能加快驗證速度。
兩套系統都有個共通缺點:增加訪客的操作成本。如果你的讀者主要是手機使用者,驗證碼體驗可能會打折扣。所以也有人傾向只在看起來可疑的留言上觸發驗證(基於 IP、內容模式等),而不是對所有人都強制。
限制留言的基礎規則
除了防機器人,還要用 WordPress 內建的留言設定降低垃圾留言的機會。在「設定 > 討論」找到幾個關鍵選項。
「文章發佈後○天內,允許留言」這個設定能有效減少垃圾留言的發送目標。機器人傾向針對新文章發起廣泛掃描,因為新文章更容易被搜尋引擎索引,連結價值更高。設定成 90 天(或更短)後,舊文章的留言區會自動關閉,垃圾機器人就沒必要針對它們了。這不會阻止已有留言繼續顯示,只是新留言無法提交。
「必須先經過審核才能發布留言」這項開啟後,所有新留言都會進待審隊列。初期看起來麻煩,但長期能讓你掌握品質控制。首次留言者的留言尤其值得審核——許多垃圾留言來自陌生帳號。如果訪客已經有一篇留言被核准,後續留言自動發布,這樣既保護品質又不過度打擾既有讀者。
「留言必須包含○個連結」這個選項能阻止明顯的廣告垃圾。垃圾留言很少是純文字,通常會夾帶連結。設定成「超過 2 個連結自動進待審」,大部分廣告宣傳就會被攔截。但這個設定也有邊界 case,有些正常讀者在高度專業的討論中可能想分享多個參考資料。
「關鍵字黑名單」可以加入常見的垃圾詞彙——比如特定的藥品名稱、色情網站名稱,或者你發現機器人特別喜歡用的詞。一旦留言包含黑名單詞彙就自動放入垃圾箱。設定時要精準,過於廣泛的黑名單會誤殺正常留言。比如,黑名單不要加「免費」,因為許多正常的技術討論會提到免費工具。
加強防護的進階設定
如果上述措施還不夠,可以考慮更激進的設定。「要求留言者提交名稱和電子郵件」打開後,匿名留言會被拒絕。這能阻止許多低成本的垃圾機器人(它們通常不費力填假郵件),但也可能嚇跑某些隱私意識強的讀者。
「Cookies 核實」這個選項開啟後,系統會檢查訪客是否啟用了 Cookies。許多自動化爬蟲不支持 Cookies,會被直接擋掉。效果顯著,缺點是同樣也會擋掉某些隱私瀏覽器或 Tor 用戶。
如果防護仍然不足,下一步可以考慮安裝專門的留言防護外掛,比如「Akismet Premium」(Akismet 的付費版)或「Antispam Bee」。這些外掛在基礎防護之上加入更多啟發式規則,比如檢測 IP 信譽、語言一致性、時間模式等。Antispam Bee 特別的地方在於它不依賴雲端服務,所有判斷在本地進行,比較注重隱私。
監測垃圾留言對主機效能的影響
即使防護做得很好,偶爾還是會有漏網之魚。長期累積的垃圾留言會帶來實實在在的效能問題。每當有人訪問留言列表、後台評論管理頁面,或者 WordPress 外掛檢查新留言數,資料庫都要掃描整個留言表。如果垃圾留言有數萬條,查詢時間會明顯拉長。
監測的方法是定期檢查後台「評論」頁面的垃圾留言計數。如果垃圾箱裡累積了幾千條,是時候考慮批量清理了。直接在資料庫層面刪除垃圾留言會更快(但要備份),命令類似 DELETE FROM wp_comments WHERE comment_approved = 'spam' AND comment_date < '2024-01-01';。不過多數網站主不需要這麼深入資料庫操作,透過後台介面定期清理就足夠。
如果垃圾留言突然在某一時段爆發,比如一天內多了幾百條,通常表示有新的垃圾機器人在嘗試你的網站。這時可以暫時提高防護等級——比如強制要求驗證碼,或者關閉舊文章的留言——等風頭過了再調回正常。這類突發狀況不會持久,因為機器人一旦發現你的網站防護太強,成本效益不划算,就會轉向目標。
建立可持續的防護策略
垃圾防護不是一次性的設定,而是要持續監測調整。最初的設定組合可以是:Akismet 作為主力過濾器,加上內建的基礎規則(限制留言年齡、要求名稱郵件、啟用 Cookies 驗證),再根據實際效果加上驗證碼(reCAPTCHA 或 Turnstile)。如果垃圾留言仍然很多,再升級為付費外掛或更激進的設定。
關鍵是找到防護強度與使用者體驗的平衡點。過度防護會把真實讀者也擋掉,導致留言區變成死水。太鬆散又會被淹沒。定期檢查後台數據,看核准留言數、垃圾留言數、被過濾掉的留言數,能幫你判斷現有設定是否恰當。許多網站經營者發現,光用 Akismet 加上基本規則,已經能擋掉 95% 以上的垃圾。只有在遭遇特別針對性的攻擊時,才需要祭出重型武器。