mcpField
S
seo-audit

seo-audit

github.com/seo-skills营销与增长6551.2k 次安装2 周前更新
代码仓库

关于 seo-audit

seo-audit 是供 AI Agent 使用的 SEO 审计技能,通过 SEOmator CLI 检查网站的技术、内容、性能与安全问题,并提供分级问题和修复建议。

主要功能

  1. 01涵盖多类别网站审计
  2. 02输出健康评分与等级
  3. 03按严重程度列出问题
  4. 04提供受影响 URL 和修复建议
  5. 05支持多种报告格式
  6. 06比较不同审计结果

适用场景

  1. 01检查网站 SEO 与技术状况
  2. 02查找失效链接和重定向链
  3. 03验证结构化数据与国际化设置
  4. 04比较部署前后的审计结果

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/seo-skills/seo-audit-skill --skill seo-audit

安装后在 Claude Code 中输入/seo-audit确认已加载。

附带文件README.mdreferences/rules.md

详细介绍

SEO 审计技能

使用 SEOmator CLI 审计网站的 SEO、技术、内容、性能、安全性、JavaScript 渲染和 AI 就绪度。

SEOmator 通过根据 373 条规则(涵盖 20 个类别)分析网站结构和内容,提供全面的网站审计。

它会列出问题的严重级别、受影响的 URL,以及可执行的修复建议。

链接

此技能的功能

此技能可让 AI Agent 根据 373 条规则(涵盖 20 个类别)审计网站,包括:

  • 核心 SEO(24 条规则):规范 URL、索引指令、标题唯一性、规范冲突/循环
  • 性能(28 条规则):LCP、CLS、FCP、TTFB、INP、压缩、缓存、缩小、HTTP/2
  • 链接(27 条规则):损坏的链接、重定向链、锚文本、localhost/片段链接,以及通过网站图谱(--crawl)检查点击深度和入站内部链接
  • 图片(14 条规则):替代文本、尺寸、延迟加载、现代格式、替代文本长度、背景图片
  • 安全性(26 条规则):HTTPS、HSTS、CSP、外部链接安全性、泄露的机密、SSL 过期时间/协议、Cookie 标志和生命周期
  • 技术 SEO(18 条规则):robots.txt、sitemap.xml、URL 结构、404 页面、软 404、错误代码
  • 可抓取性(38 条规则):站点地图冲突、可索引性信号、规范链、分页问题、站点地图 lastmod 质量
  • 结构化数据(19 条规则):Schema.org 标记、Article、Organization、FAQ、Product、Breadcrumb
  • JavaScript 渲染(16 条规则):渲染后的 DOM 检查、原始与渲染结果不一致、SSR 检测、控制台错误、资源请求失败
  • 无障碍性(36 条规则):ARIA 标签、颜色对比度、表单标签、地标、触控目标
  • 内容(27 条规则):字数、可读性、关键词密度、重复内容检测、像素宽度
  • 社交(9 条规则):Open Graph 标签、Twitter 卡片、分享按钮、个人资料链接
  • E-E-A-T(16 条规则):作者署名、引文、信任信号、关于/联系页面、YMYL 检测
  • URL 结构(14 条规则):关键词 slug、停用词、大写字母、下划线、会话 ID、跟踪参数
  • 重定向(11 条规则):重定向循环、类型(301/302)、meta refresh、JavaScript 重定向、损坏的重定向
  • 移动设备(12 条规则):字体大小、水平滚动、插页式广告、视口,以及通过 --mobile 检查移动优先一致性(内容、标题、规范 URL、结构化数据、链接)
  • 国际化(13 条规则):lang 属性、hreflang 验证(返回链接、冲突、不匹配)
  • HTML 验证(11 条规则):Doctype、字符集、head 结构、lorem ipsum、多重标题/描述
  • AI/GEO 就绪度(13 条规则):语义化 HTML、AI 机器人访问、llms.txt、Schema 漂移
  • 法律合规(1 条规则):Cookie 同意

审计会抓取网站,根据审计规则分析每个页面,并返回一份综合报告,其中包括:

  • 总体健康评分(0–100)和字母等级(A–F)
  • 各类别的通过/警告/失败数量明细
  • 按规则分组并列出受影响 URL 的具体问题
  • 可执行的修复建议

适用场景

在以下情况下使用此技能:

  • 分析网站的 SEO 健康状况
  • 调试技术 SEO 问题
  • 检查失效链接和重定向链
  • 验证元标签、规范 URL 和结构化数据
  • 审核安全标头、SSL 和 HTTPS
  • 检查无障碍合规性
  • 分析 JavaScript 渲染和 SSR 兼容性
  • 评估 AI/GEO 就绪情况(语义 HTML、llms.txt、机器人访问)
  • 检测页面之间的重复内容
  • 验证 hreflang 和国际化设置
  • 检查 HTML 文档结构和有效性
  • 以多种格式生成网站审核报告
  • 对比更改前后的网站健康状况

前置条件

此技能需要安装 SEOmator CLI。

安装
npm install -g @seomator/seo-audit
验证安装

检查是否已安装 seomator,以及系统是否已就绪:

seomator self doctor

此命令会检查:

  • Node.js 版本(需要 20.3 或更高版本)
  • npm 是否可用
  • Core Web Vitals 和 JS 渲染所需的 Chrome/Chromium
  • 对 ~/.seomator 的写入权限
  • 本地配置文件是否存在

设置

运行 seomator init 会在当前目录中创建 seomator.toml 配置文件。

seomator init                    # Interactive setup
seomator init -y                 # Use defaults
seomator init --preset blog      # Blog-optimized config
seomator init --preset ecommerce # E-commerce config
seomator init --preset ci        # Minimal CI config

如果目录中没有 seomator.toml,请在运行审核前使用 seomator init -y 创建该文件。 直接运行 seomator init 会提出问题;如果没有终端,它会以状态码 0 退出,但不会写入文件。

用法

AI Agent 最佳实践

始终应优先使用 --format llm——它会生成专为 AI Agent 设计、经过令牌优化的 XML 输出(比 JSON 小 50-70%)。

进行审核时:

  1. 优先审核线上网站,而非本地开发服务器,以获取准确的性能和渲染数据

  2. 使用 --no-cwv 加快审核速度,但请了解其代价:它会跳过 浏览器渲染,因此 Core Web Vitals、JavaScript 渲染规则、 js-console-errors、js-failed-requests 和所有 mobile-parity-* 规则 会报告为未测量,而非通过或失败

  3. 根据问题选择标志。 未指定正确标志时,需要多个页面或 多次渲染的规则会显示为未测量:

    检查内容运行时使用
    点击深度、入站内部链接--crawl(构建网站图谱)
    移动优先索引一致性--mobile(在手机视口下进行第二次渲染)
    JS 错误、子资源加载失败、Core Web Vitals默认设置(省略 --no-cwv)
    部署改动内容分别在部署前后运行,然后执行 seomator compare <domain>
  4. 将修复范围拆分为并发任务,以便实施多项修复

  5. 实施修复后运行类型检查和格式化(tsc、eslint、prettier 等)

网站发现

如果用户未提供要审核的网站:

  1. 检查本地开发服务器配置(package.json 脚本、.env 文件)
  2. 查找 Vercel/Netlify 项目链接
  3. 检查环境变量中的部署 URL
  4. 询问用户要审核哪个 URL

如果本地网站和线上网站都可用,建议审核线上网站以获取准确结果。

基本工作流
# Quick single-page audit with LLM output
seomator audit https://example.com --format llm --no-cwv

# Multi-page crawl (up to 50 pages)
seomator audit https://example.com --crawl -m 50 --format llm --no-cwv

# Full audit with Core Web Vitals + JS rendering analysis
seomator audit https://example.com --crawl -m 20 --format llm
高级选项

仅审核特定类别:

seomator audit https://example.com -c core,security,js --format llm --no-cwv

保存 HTML 报告以供分享:

seomator audit https://example.com --format html -o report.html

使用详细输出进行调试:

seomator audit https://example.com --format llm -v

退出代码

Agent 必须能够区分“审计失败”和“网站评分较低”。 audit 和 compare 使用以下代码(其他命令,例如 config 和 self doctor,在自身出错时退出代码为 1):

代码含义
0成功
1命令运行成功,但结果低于阈值——audit/analyze 的评分低于 70,或 compare --fail-on-regression 发现回归
2命令失败:URL 无法访问、HTTP 错误、缺少爬取结果、--config 路径无效
130按下 Ctrl-C 取消

非零退出代码并不一定代表失败。 1 表示工具运行成功,并在告知你网站的相关情况。只有 2 表示工具无法完成任务。在 --format json 下,2 还会在 stdout 上输出结构化错误,其中包含稳定的 code 字段(仅在有提示时才会出现 hint):

{ "error": true, "code": "http-error", "message": "...", "hint": "...", "timestamp": "..." }

在 --format llm 下,同一错误会以 XML 格式输出: <seo-audit ok="false"><error code="http-error"><message>…</message><hint>…</hint></error></seo-audit>。

解析器拒绝的命令行(例如未知标志、无效 URL 或选项值)会以 1 退出,在 stderr 上输出原因,且 stdout 为空。若 1 对应的 stdout 为空,请将其视为用法错误,而不是低分。

code 的值可以是 dns、unreachable(没有任何响应:连接被拒绝、重置或无路由)、tls(证书被拒绝)、timeout、http-error、non-html、playwright-missing、no-pages、config、aborted 或 unknown。

命令参考

Audit 命令选项
选项别名说明默认值
--format <fmt>-f输出格式:console、json、html、markdown、llmconsole
--max-pages <n>-m最多爬取的页面数10
--crawl启用多页面爬取false
--categories <list>-c要审计的类别,以逗号分隔全部
--no-cwv跳过 Core Web Vitals 和 JS 渲染false
--mobile渲染移动端视口并执行移动优先的奇偶校验(单页)false
--verbose-v显示进度false
--output <path>-o输出文件路径
--config <path>配置文件路径
--no-save不将此次审计存储在 ~/.seomator 中
--staging审计预发布网站:豁免 noindex 和 robots.txt 上限,并忽略 robots.txt 继续爬取;会列出豁免的上限false

默认情况下会存储审计结果,因此 compare 和 report 始终有历史记录可用。

仪表板

seomator serve 会基于已存储的审计结果运行本地 Web 仪表板(历史记录、 逐条规则的详情、比较和导出)。如需脚本化访问,请从 ~/.seomator/serve.json 读取令牌,并将其作为 X-SEOmator-Token 发送;GET /api 会列出所有路由。请参阅 docs/WEB-DASHBOARD.md。

Compare 命令选项

seomator compare <domain> 会比较同一网站的两次已存储审计结果。除非使用 --no-save 运行,否则每次审计都会存储。

选项说明默认值
--against <auditId>与指定的审计结果比较,而不是与上一次运行比较最新的前一次
--trend显示该域名的评分历史,而不是两次运行之间的差异false
--json / -j机器可读的差异false
--fail-on-regression当评分下降或任意规则的状态变差时,以 1 退出。若两次审计的测量方式不同(Core Web Vitals、评分模型、规则筛选条件、预发布环境),则会标记为不可直接比较,且绝不会导致失败false

规则按 ID 比较,因此,某条规则变差而另一条规则得到修复时,会分别报告,不会在计数中相互抵消。

其他命令
seomator init              # Create config file
seomator self doctor       # Check system setup
seomator config --list     # Show all config values
seomator report --list     # List past reports
seomator compare <domain>  # Diff the two most recent saved audits
seomator db stats          # Show database statistics

输出格式

格式标志适用场景
console--format console人类可读的终端输出(默认)
json--format jsonCI/CD、程序化处理
html--format html独立报告、分享
markdown--format markdown文档、GitHub
llm--format llmAI Agent(推荐)

--format llm 输出为紧凑的 XML 格式,经过优化以提高令牌效率:

  • 比 JSON 输出小 50-70%
  • 按严重程度排序问题(严重问题优先)
  • 为每个问题提供修复建议
  • 输出到 stdout 的内容简洁,便于通过管道传递给 AI 工具

示例

示例 1:使用 LLM 输出快速审计
# User asks: "Check example.com for SEO issues"
seomator audit https://example.com --format llm --no-cwv
示例 2:对大型网站进行深度爬取
# User asks: "Do a thorough audit with up to 100 pages"
seomator audit https://example.com --crawl -m 100 --format llm --no-cwv
示例 3:更改后重新审计
# User asks: "Re-audit the site, ignore cached results"
# Every run fetches every page fresh — there is no cache to bypass.
seomator audit https://example.com --format llm --no-cwv
示例 4:生成可分享的报告
# User asks: "Create an HTML report I can share"
seomator audit https://example.com --crawl -m 20 --format html -o seo-report.html
示例 5:重点检查特定领域
# User asks: "Just check my JavaScript rendering and redirects"
seomator audit https://example.com -c js,redirect --format llm
示例 6:这次部署是否让任何方面变差了?
# A baseline before the change (stored automatically)
seomator audit https://example.com

# ... deploy ...

seomator audit https://example.com
seomator compare example.com --json

compare 会报告具体哪些规则的状态发生了变化,这比单独看分数差值更有用:分数可能保持不变,但某个方面出了问题,同时另一个方面得到了修复。使用 --fail-on-regression 可将此检查设为 CI 门禁。

示例 7:诊断渲染为空的页面
# js-console-errors and js-failed-requests need a real browser render,
# so do NOT pass --no-cwv here.
seomator audit https://example.com -c js --format llm

未捕获的异常会中止抛出异常的脚本,因此该脚本原本要写入的内容、结构化数据或 canonical 标签都不会出现在渲染爬虫看到的页面中。静态 HTML 分析无法发现脚本返回 404:标签确实存在且格式正确,只有实际获取时才会发现没有任何内容返回。

评估结果

分数范围
分数等级含义
90-100A优秀 - 只需进行少量优化
80-89B良好 - 处理警告
70-79C需要改进 - 必须优先修复
50-69D较差 - 存在多个严重问题
0-49F危急 - 需要解决重大问题
优先级顺序(按类别权重)

按以下顺序修复问题,以取得最大成效:

  1. 核心(11%)- Meta 标签、canonical、H1、索引
  2. 性能(10%)- Core Web Vitals + 优化
  3. 链接(8%)- 内部链接结构
  4. 图片(8%)- 性能 + 无障碍
  5. 安全(8%)- 信任信号、SSL
  6. 技术 SEO(7%)- 爬取基础
  7. 无障碍(7%)- WCAG 合规
  8. 可爬取性(5%)- 可索引性、分页
  9. 结构化数据(5%)- 富媒体摘要
  10. JavaScript 渲染(5%)- 渲染后的 DOM、SSR
  11. 内容(5%)- 文本质量 + 重复内容
  12. 社交(3%)- 社交分享
  13. E-E-A-T(3%)- 信任、专业知识
  14. URL 结构(3%)- URL 规范性
  15. 重定向(3%)- 重定向链
  16. 移动端(2%)- 视口、字体
  17. 国际化(2%)- Hreflang
  18. HTML 验证(2%)- 文档结构
  19. AI/GEO 就绪度(2%)- 语义 HTML、AI 机器人
  20. 法律合规(1%)- Cookie 同意
按严重程度修复
  1. 失败(status: "fail") - 必须立即修复
  2. 警告(status: "warn") - 应尽快修复
  3. 通过(status: "pass") - 无需采取措施
评分方式

类别得分是该类别各规则结果的加权平均值:pass 为 100,warn 为 50,fail 为 0;每条规则按其声明的权重计分,因此像 security-https 这样的高权重规则对类别得分的影响远大于次要规则。总分是各类别得分按上述权重计算的加权平均值。

页面级条件可能会限制总分上限。 平均分无法表达“其他方面都不重要”这种情况,因此只要满足以下任一条件,总分就会维持在相应上限或以下,无论类别平均分是多少。一次爬取只会检查前两项,且从起始页读取:

条件上限
Google 的 noindex(robots meta 标签或 X-Robots-Tag)20
robots.txt 禁止 Googlebot 抓取该页面20
没有 <title> 且主要内容少于 20 个词30
主要内容少于 20 个词49
没有 <title>69

JSON 结果会包含 scoreCap: { uncappedScore, caps: [{ id, ceiling, reason }] },而 --format llm 会输出一个 <score-cap> 元素。**先解决分数上限问题:**只要上限仍然生效,其他修复都不会提高分数。

使用 --staging 审核预发布网站。 此选项会豁免 noindex 和 robots.txt 上限(内容上限仍然生效),且爬取时会忽略 robots.txt,即使网站设置了 Disallow: /,也会继续抓取首页以外的页面。豁免的项目会列在 waivedCaps 中,并显示在 --format llm 输出的 <waived-caps> 元素中:这些项目必须在正式上线时做出更改。不要将预发布审核结果与正式环境审核结果直接比较;compare 会标记这类差异。

未测量的检查权重为 0,不影响评分。 如果无法获取某项检查所需的输入,系统会报告该项,以便明确显示这一缺口,但不会因此加分或扣分——没有测量,就无法评分。因此:

  • cwv-inp 始终报告为未测量。INP 需要真实用户交互,而自动化爬取不会执行此类交互。要获取真实 INP,请使用实测数据(CrUX 或 RUM)。
  • 使用 --no-cwv 会将核心 Web 指标规则和大多数 JavaScript 渲染规则报告为未测量,而非通过或失败。使用 --no-cwv 审核的网站不能与未使用该选项的网站直接比较,因为参与评分的规则集合不同。
  • links-depth 和 links-orphan-pages 需要全站链接图,只有在爬取模式下才会生成。使用 --crawl 测量这些规则;单页审核会将其报告为未测量,因为无法仅凭单个页面得知点击距离和入站链接。
  • mobile-parity-* 规则需要在移动设备视口下进行第二次渲染。使用 --mobile(且不要使用 --no-cwv)来测量这些规则。
  • 用于将页面与网站其他页面进行比较的检查(core-title-unique、content-duplicate-description、content-duplicate-exact、content-duplicate-near、crawl-sitemap-orphan-urls)在单页审核中会报告为未测量。如果页面没有标题或 meta description,仍会导致 core-title-unique 或 content-duplicate-description 失败:这是缺少字段,而非唯一性问题。使用 --crawl 测量这些规则。
  • 没有可供评分内容的检查会报告为未测量,而非通过:页面没有 JSON-LD 时,JSON-LD 验证器会这样处理(schema-present 会报告缺少 JSON-LD);页面没有作者时,eeat-author-expertise 会这样处理;所有颜色都来自样式表时,a11y-color-contrast 会这样处理。

v3.1.0 中的评分发生了变化。 早期版本给失败规则的权重比通过规则低 100 倍,导致分数虚高。如果要与 3.1.0 之前生成的报告比较,请重新运行基准审核,而不要将分数下降视为回归。

输出摘要

实施修复后,向用户提供已完成所有更改的摘要。

规划范围时,请将任务安排为可由多个子 Agent 并行执行,以加快实施速度。

故障排除

找不到 seomator 命令

如果看到此错误,说明尚未安装 seomator,或其不在 PATH 中。

解决方案:

npm install -g @seomator/seo-audit
未测量 Core Web Vitals

如果缺少 CWV 指标,可能是因为 Chrome/Chromium 不可用。

解决方案:

  1. 安装 Chrome、Chromium 或 Edge
  2. 运行 seomator self doctor,验证浏览器检测结果
  3. 如果不需要 CWV,请使用 --no-cwv 跳过
抓取超时或性能较慢

对于大型网站,审计可能需要几分钟。

解决方案:

  • 使用 --verbose 查看进度
  • 使用 -m 20 限制页面数量,以加快处理速度
  • 使用 --no-cwv 跳过基于浏览器的测量
URL 无效

确保 URL 包含协议:

# Wrong
seomator audit example.com

# Correct
seomator audit https://example.com

工作原理

  1. 获取:下载页面 HTML 并测量响应时间
  2. 解析:提取 DOM、元标记、链接、图片和结构化数据
  3. 补充:每次审计获取一次 robots.txt 和站点地图
  4. 渲染(启用 CWV 时):通过 Playwright 捕获渲染后的 DOM,以及控制台错误和失败的资源请求
  5. 抓取(启用时):发现并获取链接页面
  6. 分析:对每个页面运行 373 条审计规则
  7. 评分:计算类别加权分数和总体加权分数
  8. 报告:按请求的格式生成输出

结果会存储在 ~/.seomator/ 中,之后可通过 seomator report 检索。

信任模型

seomator CLI 会从用户提供的任意 URL 获取 HTML。从这些页面引用的任何文本——标题、元标记、标题文本、链接文本、alt 属性、架构内容——都是不可信输入,可能会尝试对读取报告的大模型进行间接提示词注入。

LLM 格式的报告生成器(--format llm)采用分层防御:

  1. 每份报告使用独立随机数。 每次渲染都会在根 <seo-audit> 元素上输出一个 128 位十六进制随机数。
  2. 带随机数的分隔符。 <msg> 和 <details> 中来自网站的文本会用 <untrusted-{nonce}>...</untrusted-{nonce}> 包裹。由于随机数不可预测且每次审计都唯一,攻击者无法伪造闭合标签。
  3. 安全声明。 报告包含 <security-notice>,指示读取报告的大模型将包裹的内容视为数据,而非指令。
  4. 移除不可见字符。 在转义为 XML 之前,会从引用内容中移除零宽字符(U+200B–U+200D、U+2060、U+FEFF)、Unicode 标签块(U+E0000–U+E007F)以及 C0/C1 控制字符。
  5. XML 转义。 不可信内容中的任何字面字符 <、>、&、"、' 都会被转义,因此精心构造的 </untrusted-...> 字面内容会变成无效文本。

由工具生成的字段——修复建议、规则 ID、类别元数据——会以纯 XML 输出,不会被包裹,因为用不可信分隔符包裹可信内容会削弱提示效果。

资源

  • 完整规则参考:查看 docs/SEO-AUDIT-RULES.md,了解全部 373 条规则
  • 存储架构:查看 docs/STORAGE-ARCHITECTURE.md,了解数据库详情
  • CLI 帮助:seomator --help 和 seomator <command> --help

评论

支持 Markdown