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输出:
- 将每个字段的
status→pass/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个步骤”)→ 具体明确,强力点击信号。
- 结尾的“以及更多。”→ 至多是次要风格说明,绝不为警告或失败。
推荐工作流
按顺序执行以下步骤:
-
确认范围 —— 确认这是基础审计;注明任何缺失数据
-
推断主要关键词 —— 使用
fetch-page.py抓取页面,然后确定主要关键词:- 如果用户明确提供了关键词 → 直接使用
- 否则 → 阅读页面H1、标题和第一段,然后推断出最可能的目标关键词短语(搜索者会输入什么来找到此页面?)
- 在运行检查前明确说明推断的关键词:
“推断的主要关键词:开源Claude替代方案”
-
运行
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完全匹配。不匹配 → 警告。
-
E-E-A-T基础设施检查 —— 对于每个信任页面,检查两个层面:
- **层面1 — 存在:**抓取URL,检查HTTP状态(200 = 存在,404/跳转 = 缺失)
- **层面2 — 可触及:**抓取首页HTML,检查页脚或导航中是否包含指向此页面的链接
页面 必需 关于我们 是 联系我们 是 隐私政策 是 服务条款 是 媒体/合作伙伴 否 —— 仅当存在时包含 状态规则:
- 页面缺失(非200)→ 失败
- 页面存在但未在页脚/导航中链接 → 警告
- 页面存在并在页脚/导航中链接 → 通过
- 可选页面缺失 → 跳过,不包含行
-
运行
check-page.py --keyword "<推断关键词>"—— 解析JSON输出来检查H1、标题、 元描述、canonical和URL路径 -
国际化/hreflang检查 —— 仅当页面包含hreflang标签或
<html lang>表明多语言时运行:- 完全跳过(不适用) 如果没有找到hreflang标签且网站看起来是单语
- 如果存在hreflang标签,检查:
- 相互对称性:每个引用的URL必须反过来链接所有其他变体——任何断链 = 失败
- 语言代码:必须为有效BCP 47(例如
zh-CN而非zh,en-US而非en-us)——错误代码 = 警告 - x-default:对于语言选择器或回退页面应存在——缺失 = 警告
- html[lang]属性:必须与页面的主要hreflang匹配——不匹配 = 警告
- URL结构:推荐模式——默认语言(通常为
en)位于根路径,无前缀, 其他语言位于子路径下(/zh/、/es/)。/page(en) +/zh/page+/es/page→ 通过/en/page+/zh/page→ 警告(en前缀冗余,浪费抓取深度)- 仅当模式明显不一致或en不必要地带有前缀时才标记
-
运行
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 + Organization name, url, logo 博客/文章 Article 或 BlogPosting headline, datePublished, author, image 产品 Product name, image, offers (price, priceCurrency) FAQ FAQPage mainEntity[].name, acceptedAnswer.text 操作指南 HowTo name, step[].text 本地商家 LocalBusiness name, address, telephone 通用落地页 — 不适用 — 跳过,无广泛支持的类型 - 通过: 存在正确的@type,所有必填字段有效,无冲突
- 警告: 存在@type但缺少推荐字段
- 失败: 完全缺失期望的@type
- 不适用: 通用落地页 — 不要扣分
-
总结发现 —— 每一项发现必须遵循证据/影响/修复格式
-
优先行动 —— 列出最高影响的3项修复
-
渲染报告 —— 保存至
reports/<hostname>-<slug>-audit.html,然后询问用户是否打开 -
升级提示 —— 如果发现超出基础范围的问题,建议使用
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


