
seo-drift
熱門SEO 漂移與變動監測:擷取關鍵 SEO 元素的基準值(Baseline),即時偵測變更並長期追蹤 SEO 效能衰退。如同 SEO 界的 Git:建立基準、比對差異(Diff),並完整追蹤頁面 SEO 的所有改動。當使用者提及 "SEO drift"、"baseline"、"track changes"、"did anything break"、"SEO regression"、"compare SEO"、"before and after"、"monitor SEO changes" 或 "deployment check" 時使用。
SEO 漂移與變動監測:擷取關鍵 SEO 元素的基準值(Baseline),即時偵測變更並長期追蹤 SEO 效能衰退。如同 SEO 界的 Git:建立基準、比對差異(Diff),並完整追蹤頁面 SEO 的所有改動。當使用者提及 "SEO drift"、"baseline"、"track changes"、"did anything break"、"SEO regression"、"compare SEO"、"before and after"、"monitor SEO changes" 或 "deployment check" 時使用。
SEO Drift Monitor (April 2026)
SEO 專用的 Git 版本控制。擷取基準值、偵測效能衰退,長期追蹤所有變更。
Commands
| 指令 | 用途 |
|---|---|
/seo drift baseline <url> |
擷取當前 SEO 狀態作為「已知良好(Known good)」的快照 |
/seo drift compare <url> |
將當前頁面狀態與已儲存的基準值進行比對 |
/seo drift history <url> |
顯示變更歷史紀錄與過往的比對結果 |
What It Captures
每次建立基準值時,都會記錄以下關鍵 SEO 元素:
| 元素 | 欄位 | 來源 |
|---|---|---|
| Title 標籤 | title |
parse_html.py |
| Meta description | meta_description |
parse_html.py |
| Canonical URL | canonical |
parse_html.py |
| Robots 指令 | meta_robots |
parse_html.py |
| H1 標題 | h1 (陣列) |
parse_html.py |
| H2 標題 | h2 (陣列) |
parse_html.py |
| H3 標題 | h3 (陣列) |
parse_html.py |
| JSON-LD 結構化資料 | schema (陣列) |
parse_html.py |
| Open Graph 標籤 | open_graph (字典) |
parse_html.py |
| Core Web Vitals | cwv (字典) |
pagespeed_check.py |
| HTTP 狀態碼 | status_code |
fetch_page.py |
| HTML 內容雜湊值 | html_hash (SHA-256) |
計算得出 |
| Schema 內容雜湊值 | schema_hash (SHA-256) |
計算得出 |
How Comparison Works
比對引擎共套用 3 種嚴重性等級、總計 17 條規則。詳細的規則內容、門檻值(Threshold)、建議採取的行動以及跨 Skill 參考引用,請參閱 references/comparison-rules.md。
嚴重性等級(Severity Levels)
| 等級 | 含意 | 建議應對時間 |
|---|---|---|
| CRITICAL | 破壞性的 SEO 變更,極可能導致流量損失 | 立即處理 |
| WARNING | 潛在影響,需要進一步調查 | 1 週內處理 |
| INFO | 僅供知悉,可能為有意的變更 | 方便時再檢視 |
Storage
所有資料皆透過 SQLite 儲存在本機:
~/.cache/claude-seo/drift/baselines.db
資料表(Tables)
- baselines:包含所有 SEO 元素的快照紀錄
- comparisons:Diff 比對結果,包含所觸發的規則與嚴重性
URL 正規化(Normalization)機制可確保精準比對:通訊協定/主機名轉小寫、去除預設埠號(80/443)、排序 Query 參數、移除 UTM 追蹤參數、去除末尾斜線。
Command: baseline
擷取頁面的當前狀態並進行儲存。
執行步驟:
- 驗證 URL(透過
google_auth.validate_url()防止 SSRF 攻擊) - 透過
scripts/fetch_page.py抓取頁面內容 - 透過
scripts/parse_html.py解析 HTML - 選擇性地透過
scripts/pagespeed_check.py抓取 CWV(可使用--skip-cwv跳過) - 計算 HTML Body 與 Schema 內容的 SHA-256 雜湊值
- 將快照儲存至 SQLite
執行方式:
claude-seo run drift_baseline.py <url>
claude-seo run drift_baseline.py <url> --skip-cwv
輸出格式: 包含 Baseline ID、時間戳記、URL 及所擷取元素摘要的 JSON。
Command: compare
抓取當前頁面狀態,並與最新的基準值進行比對(Diff)。
執行步驟:
- 驗證 URL
- 從 SQLite 載入最新的基準值(或指定的
--baseline-id) - 抓取並解析當前頁面狀態
- 執行全部 17 條比對規則
- 依嚴重性對比對結果進行分類
- 儲存比對結果
- 輸出 JSON 格式的 Diff 報告
執行方式:
claude-seo run drift_compare.py <url>
claude-seo run drift_compare.py <url> --baseline-id 5
claude-seo run drift_compare.py <url> --skip-cwv
輸出格式: 包含所有被觸發的規則、新舊數值、嚴重性等級與建議行動的 JSON。
比對完成後,可選擇生成 HTML 報告:
claude-seo run drift_report.py <comparison_json_file> --output drift-report.html
Command: history
顯示特定 URL 的所有基準值與歷史比對紀錄。
執行方式:
claude-seo run drift_history.py <url>
claude-seo run drift_history.py <url> --limit 10
輸出格式: 依時間倒序排列(最新優先)的 Baseline JSON 陣列,包含時間戳記與比對摘要。
Cross-Skill Integration
當偵測到變動時,建議搭配使用相應的專業 Skill:
| 偵測結果 | 建議採取的行動 |
|---|---|
| Schema 被移除或修改 | 執行 /seo schema <url> 進行完整驗證 |
| CWV 效能退化 | 執行 /seo technical <url> 進行效能審查 |
| Title 或 Meta description 發生變更 | 執行 /seo page <url> 進行內容分析 |
| Canonical 變更或被移除 | 執行 /seo technical <url> 進行可索引性檢查 |
| 新增了 Noindex 標籤 | 執行 /seo technical <url> 進行可爬取性審查 |
| H1 / 標題結構發生變更 | 執行 /seo content <url> 進行 E-E-A-T 檢視 |
| OG 標籤被移除 | 執行 /seo page <url> 進行社群分享分析 |
| 狀態碼變更為錯誤碼 (4xx/5xx) | 執行 /seo technical <url> 進行完整診斷 |
Error Handling
| 情境 | 處理方式 |
|---|---|
| 無法連線至 URL | 回報 fetch_page.py 的錯誤訊息。請勿自行臆測狀態。建議使用者確認 URL 是否正確。 |
| 該 URL 尚無基準值 | 通知使用者,並建議先執行 baseline 指令。 |
| 被 SSRF 防護阻擋(私有 IP) | 回報 validate_url() 的拒絕訊息。切勿繞過防護。 |
| SQLite 資料庫不存在 | 首次使用時自動建立,不回報錯誤。 |
| CWV 擷取失敗(缺乏 API key) | CWV 相關欄位填入 null。比對時跳過 CWV 規則。 |
| 頁面傳回 4xx/5xx 錯誤碼 | 仍照常建立基準值(狀態碼本身即為追蹤欄位之一)。 |
| 存在多個基準值 | 預設使用最新的基準值,除非指定 --baseline-id。 |
Security
- 所有 URL 抓取作業 皆必須通過
scripts/fetch_page.py,該指令碼會強制執行 SSRF 防護機制(阻擋私有 IP、Loopback、保留位址區段、GCP metadata 端點) - 禁止使用 curl 或 subprocess 進行 HTTP 呼叫 —— 僅能使用專案內建且經過驗證的抓取管道
- 所有 SQLite 查詢 皆使用參數化佔位符(
?),絕不使用字串插值拼接 - 始終驗證 TLS 憑證 —— 整個流程中絕不使用
verify=False
Typical Workflows
部署前/部署後檢查(Pre/Post Deployment Check)
/seo drift baseline https://example.com # 部署前
# ... 進行部署 ...
/seo drift compare https://example.com # 部署後
日常持續監測(Ongoing Monitoring)
/seo drift baseline https://example.com # 首次擷取
# ... 數週後 ...
/seo drift compare https://example.com # 檢查是否有變動
/seo drift history https://example.com # 檢視所有歷史變更
流量下滑排查(Investigating a Traffic Drop)
/seo drift compare https://example.com # 究竟改了什麼?
/seo drift history https://example.com # 是在什麼時候改變的?





