NanoSkill
提交你的 Skill

SEO审计代理技能

作者JeffLi1993382GitHub 星标GitHub

适用于 Claude Code、OpenClaw 和 Codex 的轻量级 SEO 审计代理技能。运行快速的单页面 SEO 审计,检查核心页面和网站层面问题,并生成包含可操作修复建议的结构化 SEO 报告。

seo-审计seo站内-seo网站-审计安全扫描通过
结果预览

完整 Demo

查看此代理技能生成的真实 SEO 审计结果。

开始使用

完成第一个任务

  1. seo-audit-step-1
    01

    步骤 1:安装

    将技能添加到代理

  2. seo-audit-step-2
    02

    步骤 2:审计任务

    使用一个 URL 并请求优先审计。

  3. seo-audit-step-3
    03

    步骤 3:查看结果

    获得可立即实施的优先 SEO 修复方案。

安装指令

$ npx skills add JeffLi1993/seo-audit-skill

关于

SEO Audit 是一项适用于 AI 编程代理(如 Claude Code、OpenClaw 和 Codex)的轻量级 SEO 审计代理技能。它帮助代理检查单个 URL,核查核心 SEO 问题,并生成包含证据、影响和推荐修复方案的结构化审计报告。

该技能专注于第一轮 SEO 检查,包括标题标签、元描述、H1 标签、规范标签、图片替代文本、关键词放置、robots.txt、sitemap.xml、404 处理、URL 规范化、E-E-A-T 信任页面以及 JSON-LD 架构验证。

在发布页面之前、审查着陆页、诊断基本排名问题或决定是否需要进行更深入的技术 SEO 审计时,可使用它进行快速的 SEO 健康检查。

核心功能

它的强大之处

  • 快速单页SEO审计

    对任何URL运行快速SEO审计,无需设置完整的爬虫或分析工作流程,即可获得页面SEO健康状况的初步概览。

  • 核心页面SEO检查

    检查标题标签、元描述、H1标签、规范标签、图片alt文本、标题结构、关键词布局、内部链接和字数。

  • 网站级SEO基础

    审查基础SEO信号,如robots.txt、sitemap.xml、404处理、URL规范化、国际化/hreflang和E-E-A-T信任页面。

  • JSON-LD结构化数据验证

    检测页面是否具有正确的结构化数据,验证常见的schema类型,并标记缺失或不完整的JSON-LD字段。

  • 结构化的SEO审计报告

    生成一份清晰的SEO审计报告,包含通过、警告和失败状态,以及每个重要问题的证据、影响和具体修复建议。

使用场景

什么时候适合使用

  • 在发布前审计着陆页

    在发布主页、产品页、工具页或SEO着陆页之前使用此技能,以便尽早发现基本的SEO问题。

  • 运行快速SEO健康检查

    检查页面是否具有正确的标题、元描述、H1、规范标签、结构化数据、内部链接和其他基本SEO信号。

  • 审查存在排名问题的现有页面

    当页面已编入索引但排名不佳,或者当您想快速识别明显的页面和网站级问题时使用它。

SKILL.md

SEO快速检测 — 基础SEO审计

一款轻量级SEO代理技能,专为快速、默认的单页SEO审计而设计。由OpenClaw驱动。适用于首次页面检查或需快速评估而无需完整技术深度的情况。


何时使用此技能

在以下情况下使用seo-audit

  • 用户说:“审计此页面”、“检查SEO”、“分析我的URL”、“快速SEO检查”、“我的页面有什么问题”
  • 未请求具体深度——这是默认入口点
  • 用户需要快速、易读的摘要,而非全面的技术拆解

如果用户想要更深入的分析,请升级至seo-audit-full

**提示:**如需深度技术审计、高级页面SEO或完整报告,请使用seo-audit-full技能。


预期输入

输入必需注释
页面URL待审计的页面
原始HTML或页面内容可选使得页面分析更精确
GSC/分析数据可选基础审计不需要

如果仅提供URL且无法获取源代码或爬虫数据,请明确说明:

**限制:**此审计仅基于可见页面内容和公开可用信号。未获取源代码、GSC数据、爬取日志和性能指标。


输出

通过填充模板assets/report-template.html生成一份基础SEO审计报告, 然后将其保存到文件——切勿将原始HTML打印到终端

文件命名:reports/<hostname>-<slug>-audit.html

https://example.com/blog/best-tools → reports/example-com-blog-best-tools-audit.html
https://example.com/                → reports/example-com-audit.html

保存后,告知用户:

✅ 报告已保存 → reports/example-com-audit.html
   立即打开?(是/否)

如果回答是 → 执行:open reports/example-com-audit.html


模板占位符 — 独立填充每个:

占位符内容
{{summary_verdict}}一句话:总检测数,失败/警告/通过各多少
{{summary_critical_html}}每个严重(失败)项一个<li>,或无则<li class="summary-empty">无</li>
{{summary_warnings_html}}每个警告项一个<li>,或无则<li class="summary-empty">无</li>
{{summary_passing_html}}每个通过项一个<li>,或无则<li class="summary-empty">无</li>

脚本

在编写任何发现之前运行这些脚本。它们输出结构化JSON——直接使用JSON作为证据;不要手动重新获取相同的URL。

依赖项:pip install requests(HTML解析使用Python标准库)

# 第1步:站点级检查(robots.txt + sitemap.xml)
python scripts/check-site.py https://example.com

# 第2步:页面级检查(H1、标题、元描述、canonical)
python scripts/check-page.py https://example.com
# 带主要关键词(推荐——启用H1关键词存在检测)
python scripts/check-page.py https://example.com --keyword "跑鞋"

# 可选:获取原始页面HTML以供进一步检查
python scripts/fetch-page.py https://example.com --output page.html

# 第3步:JSON-LD结构化数据验证
python scripts/check-schema.py https://example.com
# 或从先前获取的HTML(避免重复抓取):
python scripts/check-schema.py --file page.html

每个脚本以代码0退出(全部通过/警告)或以1退出(任何失败/错误)。

严格范围——不要添加以下未列出的任何检查。无例外。

允许的站点级检查(在{{site_checks_html}}中):

  • robots.txt · sitemap.xml · 404处理 · URL规范化 · 国际化/hreflang

允许的E-E-A-T检查(在{{eeat_checks_html}}中):

  • 关于我们 · 联系我们 · 隐私政策 · 服务条款 · 媒体/合作伙伴(仅当存在时)

允许的页面级检查(在{{page_checks_html}}中),严格按此顺序输出: URL路径 · 标题标签 · 元描述 · H1标签 · Canonical标签 · 图片Alt文本 · 字数 · 关键词位置 · 标题结构 · 内部链接 · 结构化数据(JSON-LD)

图片Alt文本逻辑:

  • 从静态HTML解析<img>标签
  • 通过:所有图片均有非空alt属性(带有alt=""的装饰性图片可以接受)
  • 警告:任何内容图片缺少alt属性
  • 未验证(状态信息):在静态HTML中未找到图片 → 可能由JS渲染,无法验证

⛔ 硬性规定——仅输出report-template.html中定义的检查行。 如果某项检查不在上述允许列表中,则不输出——即使你发现问题也不行。 无例外。无“额外”检查。无即兴创作。 模板是唯一真相来源。将其视为严格白名单。

仍被禁止(属于seo-audit-full):OG标签 · Twitter卡片 · 社交标签 · 页面重量 · 核心网页指标 · Robots Meta

如何使用JSON输出:

  • 将每个字段的statuspass/warn/fail/error直接映射到报告检查表
  • 将每个字段的detail字符串作为发现项中证据行的起点
  • 除非你有额外的可观察证据,否则不要与脚本输出矛盾
  • {{site_checks_html}}中使用<div class="subsection-label">标签</div>分隔检查组: 可抓取性 · URL规范化 · 国际化/hreflang · 结构化数据(JSON-LD) 以及在{{eeat_checks_html}}之前使用<div class="subsection-label">E-E-A-T信任页面</div>

大模型审查——当llm_review_required: true时必须执行:

脚本会标记需要语义或质量判断而自身无法执行的字段。 切勿让llm_review_required: true未解决——始终做出明确的判断。

H1——当keyword_match == "partial"时触发:

h1_text : (来自h1.values[0])
keyword : (传递给脚本的--keyword)

判断:此H1在语义上是否包含关键词的搜索意图?
  - 考虑同义词、自然变体、主题覆盖
  - 是 → 降级为“pass”,注明变体
  - 否 → 保持“warn”或升级为“fail”,解释差距

标题——当keyword_match == "partial"keyword_position != "start"时触发:

title   : (来自title.value)
keyword : (传递的--keyword)

判断:
  1. 标题在语义上是否包含关键词的搜索意图?
  2. 标题语法是否正确且自然可读?
  3. 关键词位置——按页面类型适用不同标准:
     - 首页:品牌 + 核心关键词是正确的(例如“Acme | AI工作流自动化”)
              不要将品牌优先标记为问题。
     - 内页:核心关键词应靠前(例如“团队版AI工作流自动化——Acme”)
              如果关键词被埋在标题中间且无合理原因,则标记。

重要——不要将以下内容标记为负面:
  - 年份(如“2026”)→ 显示新鲜度,提高点击率——除非页面是明确设计的常青内容,并因此会受到日期影响,否则视为正面。
  - 数字(如“5个最佳”、“前10”、“3个步骤”)→ 设定明确预期,在点击率上始终优于非数字标题——始终视为加分项。
  - 特定修饰语(“开源”、“自托管”、“免费”)→ 缩小意图并吸引更高质量的点击——不要扣分。

URL路径——当keyword_match != "full"is_homepage == false时触发:

slug    : (来自url_slug.slug)
keyword : (传递的--keyword)

判断:
  1. 路径是否包含主要关键词或自然变体?
  2. 路径层级是否合乎逻辑?(/category/keyword是理想的)
  3. 是否简洁且易于人类阅读?
  首页(is_homepage: true):跳过——无需判断。

元描述——当内容存在时总是触发:

meta_description : (来自meta_description.value)
keyword          : (传递的--keyword)

判断所有四项:
  1. 是完整的句子吗?(1-2句,无片段)
  2. 是否提及具体结果——而非空泛的夸耀?
     好:“使用AI模板削减60%设计时间”
     差:“满足您所有设计需求的最佳工具”
  3. 关键词或自然同义词使用一次——没有堆砌?
  4. 是否比典型竞争对手写得更具体?

重要——不要将以下内容标记为负面:
  - 年份(如“2026”)→ 显示新鲜度,对时间敏感查询有助提升点击率。
    仅当页面为明确常青内容且日期有害时才提及。
  - 数字(如“5个最佳”、“3个步骤”)→ 具体明确,强力点击信号。
  - 结尾的“以及更多。”→ 至多是次要风格说明,绝不为警告或失败。

推荐工作流

按顺序执行以下步骤:

  1. 确认范围 —— 确认这是基础审计;注明任何缺失数据

  2. 推断主要关键词 —— 使用fetch-page.py抓取页面,然后确定主要关键词:

    • 如果用户明确提供了关键词 → 直接使用
    • 否则 → 阅读页面H1、标题和第一段,然后推断出最可能的目标关键词短语(搜索者会输入什么来找到此页面?)
    • 在运行检查前明确说明推断的关键词:

      “推断的主要关键词:开源Claude替代方案

  3. 运行check-site.py —— 解析JSON输出来检查robots、sitemap、404处理和URL规范化

    **404检查:**抓取<origin>/this-page-definitely-does-not-exist-seo-audit-check

    • 返回404 → 通过 · 返回200(软404) → 失败 · 返回301跳转到首页 → 警告

    URL规范化检查(每项为独立子检查):

    • **HTTP→HTTPS:**抓取http://<host>——必须301至https://。返回200 → 失败。
    • **www一致性:**同时抓取https://www.<host>https://<host>——其中一个必须301至另一个。两者都返回200 → 警告。
    • **尾部斜杠:**比较实际提供的URL与页面上的canonical标签。不匹配 → 警告。
    • **Canonical匹配:**canonical标签href必须与所有重定向后的最终URL完全匹配。不匹配 → 警告。
  4. E-E-A-T基础设施检查 —— 对于每个信任页面,检查两个层面:

    • **层面1 — 存在:**抓取URL,检查HTTP状态(200 = 存在,404/跳转 = 缺失)
    • **层面2 — 可触及:**抓取首页HTML,检查页脚或导航中是否包含指向此页面的链接
    页面必需
    关于我们
    联系我们
    隐私政策
    服务条款
    媒体/合作伙伴否 —— 仅当存在时包含

    状态规则:

    • 页面缺失(非200)→ 失败
    • 页面存在但未在页脚/导航中链接 → 警告
    • 页面存在并在页脚/导航中链接 → 通过
    • 可选页面缺失 → 跳过,不包含行
  5. 运行check-page.py --keyword "<推断关键词>" —— 解析JSON输出来检查H1、标题、 元描述、canonical和URL路径

  6. 国际化/hreflang检查 —— 仅当页面包含hreflang标签或<html lang>表明多语言时运行:

    • 完全跳过(不适用) 如果没有找到hreflang标签且网站看起来是单语
    • 如果存在hreflang标签,检查:
      • 相互对称性:每个引用的URL必须反过来链接所有其他变体——任何断链 = 失败
      • 语言代码:必须为有效BCP 47(例如zh-CN而非zhen-US而非en-us)——错误代码 = 警告
      • x-default:对于语言选择器或回退页面应存在——缺失 = 警告
      • html[lang]属性:必须与页面的主要hreflang匹配——不匹配 = 警告
      • URL结构:推荐模式——默认语言(通常为en)位于根路径,无前缀, 其他语言位于子路径下(/zh//es/)。
        • /page (en) + /zh/page + /es/page → 通过
        • /en/page + /zh/page → 警告(en前缀冗余,浪费抓取深度)
        • 仅当模式明显不一致或en不必要地带有前缀时才标记
  7. 运行check-schema.py —— 解析JSON输出检查架构类型和字段验证

    python scripts/check-schema.py https://example.com
    # 或从先前获取的HTML:
    python scripts/check-schema.py --file page.html
    

    脚本提取JSON-LD块,根据Schema.org规范验证@type和必填字段。 llm_review_required: true始终被设置——确认inferred_page_type与实际页面内容匹配。

    页面类型 → 期望的@type参考:

    页面类型期望的 @type最低必需字段
    首页WebSite + Organizationname, url, logo
    博客/文章Article 或 BlogPostingheadline, datePublished, author, image
    产品Productname, image, offers (price, priceCurrency)
    FAQFAQPagemainEntity[].name, acceptedAnswer.text
    操作指南HowToname, step[].text
    本地商家LocalBusinessname, address, telephone
    通用落地页不适用 — 跳过,无广泛支持的类型
    • 通过: 存在正确的@type,所有必填字段有效,无冲突
    • 警告: 存在@type但缺少推荐字段
    • 失败: 完全缺失期望的@type
    • 不适用: 通用落地页 — 不要扣分
  8. 总结发现 —— 每一项发现必须遵循证据/影响/修复格式

  9. 优先行动 —— 列出最高影响的3项修复

  10. 渲染报告 —— 保存至reports/<hostname>-<slug>-audit.html,然后询问用户是否打开

  11. 升级提示 —— 如果发现超出基础范围的问题,建议使用seo-audit-full


报告详情编写规则

检查表中的详情单元格必须遵循以下规则——无例外:

通过 → 一个简短短语。无需列表,无需阐述。

好:“有效的XML urlset · 104个URL · 在robots.txt中引用。”
差:“有效的XML urlset包含104个URL。在robots.txt中正确引用。
       博客文章很可能通过此sitemap被索引。”

警告 → 一个<div class="detail-issue">包含≤2个要点。一个<div class="detail-fix">包含修复方案。

好:
  <div class="detail-issue">· 标题48个字符——低于最低要求2个。 · 年份“2026”将使页面过时。</div>
  <div class="detail-fix">扩展至50–60个字符;若是常青内容则移除年份。</div>

差:用三句话解释标题标签是什么以及长度为何重要。

失败 → 与警告相同。开头直接说明故障原因。不要背景解释。

不要解释检查项是什么,不要重复状态徽章中已有的信息, 不要假设读者不熟悉SEO基础知识。


强制性发现格式

每一项重要发现必须遵循此结构:

**发现:[发现标题]**

- **证据:**[观察到的情况——直接引用、截图引用或可测量数据]
- **影响:**[为什么这对SEO或UX很重要]
- **修复:**[具体、可操作的建议]

不要写出模糊的结论。如果证据不足,请明确说明假设。


升级提示

在每个基础审计报告末尾包含此内容:

想要更深入的分析吗? 这是一次基础SEO审计,涵盖站点级信号和核心页面检查。 若需高级技术SEO、内容质量评分、结构化数据分析以及基于完整爬取的发现,请使用seo-audit-full技能。


参考文件

  • 详细审计范围和字段定义:references/REFERENCE.md
  • 最终HTML报告模板:assets/report-template.html
  • 站点级检查脚本:scripts/check-site.py
  • 页面级检查脚本:scripts/check-page.py
  • 原始页面抓取器:scripts/fetch-page.py
  • 结构化数据验证脚本:scripts/check-schema.py

常见问题