seo-drift

seo-drift

热门

SEO漂移监控:捕获SEO关键元素的基线,检测变化,并随时间追踪回归。SEO的Git:对页面SEO进行基线、差异和变更追踪。当用户提到“SEO漂移”、“基线”、“追踪变化”、“是否出问题”、“SEO回归”、“比较SEO”、“前后对比”、“监控SEO变化”或“部署检查”时使用。

1.2万Star
1799Fork
更新于 2026/7/20
SKILL.md
readonly只读
name
seo-drift
description

SEO漂移监控:捕获SEO关键元素的基线,检测变化,并随时间追踪回归。SEO的Git:对页面SEO进行基线、差异和变更追踪。当用户提到“SEO漂移”、“基线”、“追踪变化”、“是否出问题”、“SEO回归”、“比较SEO”、“前后对比”、“监控SEO变化”或“部署检查”时使用。

SEO漂移监控(2026年4月)

SEO的Git。捕获基线,检测回归,随时间追踪变化。


命令

命令 用途
/seo drift baseline <url> 捕获当前SEO状态作为“已知良好”的快照
/seo drift compare <url> 将当前页面状态与存储的基线进行比较
/seo drift history <url> 显示变更历史和过去的比较结果

捕获内容

每个基线记录以下SEO关键元素:

元素 字段 来源
标题标签 title parse_html.py
元描述 meta_description parse_html.py
规范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
核心网页指标 cwv(字典) pagespeed_check.py
HTTP状态码 status_code fetch_page.py
HTML内容哈希 html_hash(SHA-256) 计算所得
架构内容哈希 schema_hash(SHA-256) 计算所得

比较工作原理

比较引擎应用3个严重级别的17条规则。加载references/comparison-rules.md获取完整规则集,包括阈值、建议操作和跨技能参考。

严重级别

级别 含义 响应时间
严重 破坏SEO的变更,可能导致流量损失 立即
警告 潜在影响,需要调查 1周内
信息 仅用于知晓,可能是故意的 方便时审查

存储

所有数据本地存储在SQLite中:

~/.cache/claude-seo/drift/baselines.db

  • baselines:捕获的快照,包含所有SEO元素
  • comparisons:差异结果,包含触发的规则和严重级别

URL规范化确保一致匹配:小写协议/主机,去除默认端口(80/443),排序查询参数,移除UTM参数,去除尾部斜杠。


命令: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正文和架构内容进行哈希(SHA-256)
  6. 将快照存储到SQLite

执行:

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

输出: JSON,包含基线ID、时间戳、URL和捕获元素的摘要。


命令:compare

获取当前页面状态并与最近的基线进行差异比较。

步骤:

  1. 验证URL
  2. 从SQLite加载最近的基线(或指定--baseline-id
  3. 获取并解析当前页面状态
  4. 运行所有17条比较规则
  5. 按严重级别分类发现
  6. 存储比较结果
  7. 输出JSON差异报告

执行:

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

命令:history

显示某个URL的所有基线和比较结果。

执行:

claude-seo run drift_history.py <url>
claude-seo run drift_history.py <url> --limit 10

输出: JSON数组,包含基线(最新的在前),带有时间戳和比较摘要。


跨技能集成

当检测到漂移时,推荐相应的专业技能:

发现 推荐
架构被移除或修改 运行/seo schema <url>进行完整验证
CWV回归 运行/seo technical <url>进行性能审计
标题或元描述更改 运行/seo page <url>进行内容分析
规范URL更改或移除 运行/seo technical <url>进行可索引性检查
添加了noindex 运行/seo technical <url>进行可爬性审计
H1/标题结构更改 运行/seo content <url>进行E-E-A-T审查
OG标签被移除 运行/seo page <url>进行社交分享分析
状态码变为错误 运行/seo technical <url>进行全面诊断

错误处理

场景 操作
URL不可达 报告来自fetch_page.py的错误。不要猜测状态。建议用户验证URL。
URL没有基线 告知用户并建议先运行baseline
SSRF被阻止(私有IP) 报告validate_url()拒绝。绝不绕过。
SQLite数据库缺失 首次使用时自动创建。无错误。
CWV获取失败(无API密钥) 将CWV字段存储为null。比较时跳过CWV规则。
页面返回4xx/5xx 仍然作为基线捕获(状态码是跟踪字段)。
存在多个基线 使用最近的,除非指定了--baseline-id

安全

  • 所有URL获取都通过scripts/fetch_page.py进行,该脚本强制执行SSRF防护(阻止私有IP、回环地址、保留范围、GCP元数据端点)
  • 不使用curl,不进行子进程HTTP调用——仅使用项目验证过的获取管道
  • 所有SQLite查询使用参数化占位符(?),绝不使用字符串插值
  • 始终验证TLS——管道中任何地方都没有verify=False

典型工作流

部署前/后检查

/seo drift baseline https://example.com     # 部署前
# ... 部署进行中 ...
/seo drift compare https://example.com      # 部署后

持续监控

/seo drift baseline https://example.com     # 初始捕获
# ... 数周后 ...
/seo drift compare https://example.com      # 检查漂移
/seo drift history https://example.com      # 查看所有变更

调查流量下降

/seo drift compare https://example.com      # 什么变了?
/seo drift history https://example.com      # 何时变的?