seo-drift

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" 時使用。

1.2萬星標
1799分支
更新於 2026/7/20
SKILL.md
唯讀
名稱
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 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

擷取頁面的當前狀態並進行儲存。

執行步驟:

  1. 驗證 URL(透過 google_auth.validate_url() 防止 SSRF 攻擊)
  2. 透過 scripts/fetch_page.py 抓取頁面內容
  3. 透過 scripts/parse_html.py 解析 HTML
  4. 選擇性地透過 scripts/pagespeed_check.py 抓取 CWV(可使用 --skip-cwv 跳過)
  5. 計算 HTML Body 與 Schema 內容的 SHA-256 雜湊值
  6. 將快照儲存至 SQLite

執行方式:

claude-seo run drift_baseline.py <url>
claude-seo run drift_baseline.py <url> --skip-cwv

輸出格式: 包含 Baseline ID、時間戳記、URL 及所擷取元素摘要的 JSON。


Command: compare

抓取當前頁面狀態,並與最新的基準值進行比對(Diff)。

執行步驟:

  1. 驗證 URL
  2. 從 SQLite 載入最新的基準值(或指定的 --baseline-id
  3. 抓取並解析當前頁面狀態
  4. 執行全部 17 條比對規則
  5. 依嚴重性對比對結果進行分類
  6. 儲存比對結果
  7. 輸出 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      # 是在什麼時候改變的?