关于 seo-agent-readiness
用于 SEO 审查的 Skill,检查影响 Agent 访问网站的静态特征,如控件名称、表单标签和 iframe 内容。面向网站审查人员,提供方向性发现,不声称会影响排名。
主要功能
- 01检查交互控件语义
- 02查找无名称的按钮和链接
- 03审查表单控件标签
- 04标记脚本链接和 iframe 内容
- 05报告 WebMCP 状态与静态检查限制
适用场景
- 01审查网站对 Agent 的可访问性
- 02查找缺少名称或标签的控件
- 03检查置于 iframe 中的页面内容
- 04区分静态发现与浏览器检查
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ hainrixz/ claude-seo-ai --skill seo-agent-readiness安装后在 Claude Code 中输入/seo-agent-readiness确认已加载。
详细介绍
seo-agent-readiness(M22 — Agent 就绪度)
Google 的 Optimizing your website for generative AI features 指南指向“面向 Agent 的网站最佳实践”(web.dev Build agent-friendly websites):Agent 通过页面的无障碍树操作页面,因此,未命名、非语义化或仅由脚本控制的控件对它们来说不可见。本模块会检查其中可静态检查的部分,并指出其余部分。替代文本属于 M9,锚文本质量属于 M10,渲染属于 M4——引用这些模块,绝不要重复输出其内容。
输入
根据调度信封中指定的 PageSnapshot 操作:从 <run_dir>/pages/<slug>.json 读取 parsed(anchors[]、forms、iframes、scripts[]、landmarks);当 render.used 不为 none 时,优先使用 parsed_rendered;对 pages/<slug>.html(或 .rendered.html)执行 Grep,将问题元素作为原文证据。audit.mjs 已输出的确定性发现列在 <run_dir>/findings.deterministic.json 中——不要重复输出这些 ID;仅添加由模型判断的发现。如果直接使用 URL/路径调用且不存在快照,请先运行 node "${CLAUDE_PLUGIN_ROOT}/scripts/snapshot.mjs" <target> --out "${CLAUDE_PLUGIN_DATA}/runs",并使用打印出的快照路径。
审计
- 语义化控件——在
div/span上实现交互行为(使用onclick、role="button"、tabindex+ 处理程序),而不是使用<button>/<a href>;计入控件总数。 - 已命名的按钮——没有文本内容、
aria-label、aria-labelledby、title或value的<button>、role="button"、input[type=button|submit]。 - 已命名的链接——可访问名称为空的
<a href>(仅图标、内部包含没有 alt 的图片)。通用与描述性锚文本的区分归 M10 处理。 - 带标签的表单控件——缺少
<label for>、外层<label>、aria-label或aria-labelledby的input/select/textarea(仅有占位符不算)。 href="javascript:"(以及带处理程序的href="#")——只能通过脚本实现的导航。- iframe 中的主要内容——主要文章/产品内容位于
<iframe>中;Agent 和爬虫只能看到外层页面。 - WebMCP——在内联/链接脚本中检查
navigator.modelContext:如存在则作为信息性内容报告。这是 W3C 社区组草案(2026-04-23),目前处于 Chrome origin trial 阶段——绝不要将其作为建议。 - 无法静态检查——
cursor: pointer、目标尺寸(web.dev 建议 > 8px²)、透明覆盖层 / 屏幕外点击拦截器。请明确列为not_checkable_static;Tier 1 通过 Lighthouse 的“Agentic browsing”类别(M150+)涵盖这些内容。
修复
- PROPOSED(
fixable: proposed):将div[onclick]替换为<button type="button">,为未命名控件添加aria-label/可见文本,为表单控件添加<label for>,将href="javascript:"替换为真实 URL 或<button>——按项提供差异,因为这些修改会涉及模板和事件绑定。 - ADVISORY(
fixable: advisory):将主要内容移出 iframe、修改框架组件、处理覆盖层/目标尺寸问题、采用 WebMCP。 - 绝不臆造周边内容无法佐证的标签或链接文本——请保留清晰标注的
TODO占位符,或提出询问。
验证
node "${CLAUDE_PLUGIN_ROOT}/scripts/agent-readiness.mjs" --snapshot <pages/<slug>.json>——列出每项检查的计数及问题元素(方法为dom_assert)。- Tier 1,需用户同意(请先询问——此操作会下载并启动浏览器):
npx lighthouse <url> --output=json --output-path <run_dir>/lighthouse.json,并读取 agentic-browsing 类别(类别 ID 需根据已安装的 Lighthouse 版本核实)。仅在用户同意且 Chrome 可用时运行;否则M22.lighthouse.agentic_browsing保持needs_api。 - 当页面由客户端渲染但未渲染时(
render.needed && render.used === "none"),控件检查只针对外层页面运行:说明此限制;若外层页面为空,则保留needs_api。
发现
符合 schema/finding.schema.json;轴为 ai;每个 ID 的置信度均为 directional;严重程度 ≤3。严重程度政策:5 仅用于网站/模板级别的灾难性、会导致失去资格的事实;4 重大 · 3 中等 · 2 轻微 · 1 表面 · 0 信息性——且只有活动类别中 established 的严重程度为 5 的 fail 才能封顶评分(references/scoring-model.md)。M22 中没有任何内容是 established,因此这里没有任何内容会封顶评分。evidence.observed 原样引用元素(选择器 + 外层标签),verification.reproduce 是上面的命令,expected_impact 按等级区间表示(不得只给出百分比)。
M22.controls.non_semantic_interactive— div/span 点击处理程序充当控件(warn 3;当这类控件占多数或用于触发主要操作时为 fail 3;fixable: proposed)。M22.controls.button_without_name(warn 2,fixable: proposed) ·M22.links.empty_name(warn 2,fixable: proposed) ·M22.links.href_javascript(warn 2,fixable: proposed)。M22.forms.unlabeled_controls(warn 3,fixable: proposed) ·M22.content.iframe_primary(warn 2,fixable: advisory)。M22.lighthouse.agentic_browsing(严重程度 3;除非已运行需经同意的测试,否则为needs_api;测试完成后根据评分给出 pass/warn/fail)。M22.static.not_checkable(not_applicable,严重程度 0——列出光标/目标尺寸/遮罩项和 Tier 1 路径) ·M22.semantics.ok(pass 3——控件、名称和标签均无问题)。M22.webmcp.present(pass,严重程度 0,信息性——仅报告是否存在)。
诚信
- Agent 就绪度仅为 方向性判断:Google 推荐适合 Agent 使用的做法;没有供应商记录过排名或引用效果。绝不标为
established,绝不使用严重程度 4–5,也绝不封顶评分。 - 这些主要是可访问性基础(名称 / 角色 / 值),只是有了新的使用者;应将修复描述为同时消除辅助技术和 Agent 的使用障碍,而不是“AI SEO”。
- Lighthouse 的 Agentic 类别属于实验室工具;绿色评分不能证明 Agent 已在页面上完成任务。WebMCP 是起源试验阶段的草案——报告其是否存在,不提出建议。