Open source
contentgate 在頁面上線前擋下十二種常見錯誤:五道檢查內容本身,七道檢查頁面能不能被搜尋引擎和 AI 讀懂。每一道都是在某件事已經上線、付出代價之後才寫的,現在用 MIT 授權開源。
沒被證明失敗過的守門,只是裝飾。
每一道檢查都附負面測試,也就是它一定要擋下來的輸入。測試會在給出任何結論之前先跑一次,如果測試沒過,程式直接退出而且不對你的內容發表意見。一個沒辦法證明自己還抓得到已知錯誤的檢查器,沒有資格告訴你網站沒問題。
這不是理論。我們寫過的守門包括:一個把關鍵字讀進頁尾共用區塊、因此每頁都放行的;一個被放在「重新產生它要檢查的檔案」那一步之後才跑的;還有一個退出碼被 shell 吃掉、所以一邊印「擋下部署」一邊讓部署繼續跑的。三個看起來都很正常。三個都是靠「故意叫它失敗」抓出來的。
文章把題目寫完了,卻始終沒出現真正有人在搜的那個詞。比對一律逐字,不做空白正規化,因為有空格跟沒空格是兩個不同的字串,搜尋量也不同。
譯稿在結構上已經不是同一份文件:表格少一列、價格數字被改掉、站內連結掉了語系前綴,讀者一點就被丟回原文站。
一篇排得上、也有人讀的指南,卻把人送不到任何地方,因為全文唯一的商業連結長在每頁都有的共用 CTA 裡。所以這道檢查只看正文,不看共用區塊。
金融、博弈、醫療類文案把結果講成事實會被拒登。難的不是抓到那個詞,是不要對「我們不做保證獲利宣稱」這種免責句誤判。
每次建置把今天的日期蓋在每一個網址上,是每天說一次的謊。正解是內容雜湊狀態機:內容真的變了,日期才動。
檢查伺服器實際送出的 HTML,不是原始碼。要給搜尋引擎找、也要讓 AI 讀得懂的頁面才需要跑。字數門檻 1200、重複比例 15% 是我們自己定的規則,不是任何搜尋引擎公布的數字,都可以調。
| 檢查 | 什麼情況會擋 |
|---|---|
| visible_text | 關掉 JavaScript 後,正文讀得到的字少於設定值(預設 1200) |
| structured_data | 結構化資料解析失敗、缺了要求的類型,或沒有 dateModified |
| outbound_links | 外連沒標 nofollow、sponsored、ugc,而且不在引用白名單裡 |
| images | 圖片缺 alt 或缺 width |
| favicon | 首頁沒宣告網站小圖示,或只有 Google 不支援的格式 |
| stock_phrases | 正文出現你列在清單裡的空話(預設是一組繁中慣用語) |
| duplicate_sentences | 兩頁一字不差的句子超過設定比例(預設 15%) |
兩份實作。Python CLI 卡在部署前面,退出碼就是契約;MCP server 讓 AI 在寫稿當下就檢查,而不是等頁面已經上線。
兩邊共用同一個測試檔,而且被要求對每一個案例給出完全一樣的判定。CI 會逐案比對,只要有一項不一致就是其中一邊走鐘了,直接擋下。
MIT 授權,Python 端零相依套件,只用標準函式庫。
git clone https://github.com/adsandcode/contentgate
cd contentgate
python -m contentgate init # 產生設定檔
python -m contentgate check # 跑檢查退出碼就是契約:0 全過、1 你的內容沒過、2 守門自己的負面測試沒過(所以它不對你的內容發表意見)。接在部署前面,接住退出碼就會擋下部署。
同一套檢查也做成了 MCP server,讓 AI 在寫稿當下就查,而不是等頁面上線之後:
npx mcp-server-contentgate八個工具:關鍵字覆蓋、翻譯結構、商業內鏈、績效宣稱、sitemap 日期、內容雜湊、頁面體檢(audit_page)、兩頁重複比對(compare_pages)。每個都是純函式,內容進去、判定出來,不碰檔案、不連網路、不寫任何東西。啟動時會先跑自己的負面測試,沒過就拒絕啟動。
這些檢查背後的問題,我們都寫成過文章:
sitemap lastmod 天天說謊怎麼修 關鍵字自食:35 個字散在 6 頁的real case 新站零收錄先查 canonical 你的網站可能正在燒掉抓取預算
為什麼要關掉 JavaScript 看字數?
Google 會先執行 JavaScript 再收錄,但很多 AI 爬蟲不會。Vercel 在 2024 年 12 月的量測發現,GPTBot、ClaudeBot、PerplexityBot 只抓 HTML 就停了,用程式寫進頁面的文章,它們看到的只剩導覽列和頁尾。
外連一定要加 nofollow 嗎?
不用。Google 的說明是付費與聯盟連結用 sponsored、使用者發表的內容用 ugc、其他不想背書的才用 nofollow,一般的編輯引用不必加。程式分不出引用和置入,所以全部列出來,你確定是引用的網站放進白名單就好。
網站小圖示用 SVG 可以嗎?
只有 SVG 不行。Google 搜尋列出的小圖示格式是 BMP、GIF、ICO、PNG、JPEG、PPM、TIFF,沒有 SVG,至少要再放一個 ICO 或 PNG。
要付費嗎?
不用。MIT 授權開源,Python 端只用標準函式庫,MCP server 用 npx 就能執行。