关于 seo-meta-onpage
用于 Claude 的 SEO 技能,依据页面快照检查标题、描述、视口、字符集、语言和 robots 指令等 head 元数据。它提出或执行有限修复,并将不确定文案和有意的索引设置留待人工审核。
主要功能
- 01审查标题和描述标签
- 02检查视口、字符集与语言
- 03检查 robots 元数据
- 04提出元数据草稿
- 05执行选定的基础修复
- 06依据快照验证标签
适用场景
- 01查找缺失或长度不合适的标题
- 02检查响应式视口和页面语言
- 03检查爬取页面间的重复元数据
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ hainrixz/ claude-seo-ai --skill seo-meta-onpage安装后在 Claude Code 中输入/seo-meta-onpage确认已加载。
详细介绍
seo-meta-onpage (M7)
Head 部分的卫生检查成本低、结果确定,而且是每个爬虫读取的第一项内容。参考 references/schema-tier1.md,了解与 head 并列的结构化数据层(由 M5 负责)。
输入
根据调度信封中指定的 PageSnapshot 开展工作:从 <run_dir>/pages/<slug>.json 读取 parsed(title、metas[]、robots_meta[]、canonicals[]、word_count)以及 headers(content-language、x-robots-tag);在 pages/<slug>.html 中使用 Grep 查找原文证据;站点产物位于 <run_dir>/site/{robots.json,sitemaps.json,discovery.json}。audit.mjs 已输出的确定性发现列于 <run_dir>/findings.deterministic.json — 不要重复输出这些 ID;只添加经模型判断的发现。如果直接通过 URL/路径调用且快照不存在,请先运行 node "${CLAUDE_PLUGIN_ROOT}/scripts/snapshot.mjs" <target> --out "${CLAUDE_PLUGIN_DATA}/runs",并使用打印出的快照路径。
审计
基于 PageSnapshot 开展工作(当 render.used 不为 none 时使用 parsed_rendered,否则使用 parsed):
- 标题 — 必须恰好有一个
<title>。长度依据scripts/lib/bands.mjs中的共享区间判定(唯一来源;parse-html.mjs、页面检查和此技能都会读取它):30-60 个字符为 pass,推荐 50-60 个字符。在 50-60 个字符内,判定为recommended;在 30-60 个字符内但不在该范围,判定为pass;少于 30 个字符为short,超过 60 个字符为long— 两者都是warn,绝不判为fail。只有标题缺失或为空,或不同 URL 之间标题重复时,才判为 fail。不得全部使用大写;不得只是关键词列表。 - Meta description — 必须存在,长度依据相同的共享区间判定:70-160 个字符为 pass,推荐 150-160 个字符。超出 pass 区间时判为
warn,绝不判为fail— Google 会自由改写描述。不得在全站重复;应描述当前页面,而不是套话。 - Viewport — 必须存在
<meta name="viewport" content="width=device-width, initial-scale=1">(缺失时判为 fail — 移动端渲染和索引依赖此项)。 - 字符集 — 必须存在
<meta charset="utf-8">,且位于<head>的前 1024 字节内。 - 语言 — 必须存在
<html lang="…">,且其值为有效的 BCP-47 标签。 - Robots meta — 检查
<meta name="robots">是否合理:如果页面本应参与排名,却意外设置了noindex/nofollow,则标记。完整的可索引性/规范网址逻辑(包括 canonical 标签)由 seo-indexability (M2) 负责 — 此处只需注明是否存在<link rel="canonical">,不要对其作出判定。
修复
- AUTO — 添加缺失的
viewport、charset(utf-8)和<html lang>(根据Content-Language标头或页面文本推断;如有歧义则留下 TODO)。这些都是确定性的、增量式且可验证的写入 → 提供差异以供fix。 - PROPOSED — 根据
<h1>、导语段落和主要主题生成/缩短<title>和meta description:限制长度,兼顾关键词但不堆砌;仅当站点使用品牌后缀时才添加。两者都属于草稿,需要逐项接受(文案由人负责)。 - ADVISORY — 绝不自动移除有意设置的
noindex;应将其列出,交由用户决定。 - 绝不捏造标题、描述或
lang— 如果内容过少,无法推导出相应值,则留下明确标记的TODO:占位符,供用户填写。
验证
- 方法
dom_assert:运行node "${CLAUDE_PLUGIN_ROOT}/scripts/parse-html.mjs" --snapshot <pages/<slug>.json>(或使用--url <u>/--file <path>)— 返回title(值/长度/是否正常)、meta_description(值/长度/是否正常)、robots_meta、canonical和head_hygiene(viewport/charset/lang),据此直接对照快照断言各 head 元素是否存在及其长度是否符合要求。 - 标题/描述重复检查需要完整的爬取结果集;只有单个页面可用时,跨 URL 断言应报告为
needs_api,绝不可错误地报告为pass。
检查结果
检查结果符合 schema/finding.schema.json。严重性策略:5 仅用于网站/模板级别、会导致资格丧失的灾难性事实;4 重大 · 3 中等 · 2 轻微 · 1 外观 · 0 信息性——且只有处于启用类别中的 established 严重性为 5 的 fail,才能限制评分(references/scoring-model.md)。页面头部规范检查的严重性永远不会达到 5。示例:
M7.title.missing— 没有<title>(fail,严重性 3,fixable: proposed,轴search,置信度established)。M7.title.length_out_of_band— 标题有 78 个字符,超出 30-60 的通过范围,在搜索结果页中可能会被截断(warn,严重性 3,fixable: proposed,轴search,置信度directional)。请注明长度和据此得出判定的范围。M7.description.length_out_of_band— 描述超出 70-160 的通过范围(warn,严重性 2,fixable: proposed,轴search,置信度directional)。M7.viewport.missing— 没有响应式 viewport(fail,严重性 3,fixable: auto,轴search,置信度established)。M7.title.duplicate_across_urls— 多个抽样 URL 使用了相同的<title>(warn,严重性 3,fixable: proposed,轴search,置信度directional)。每个重复项簇生成一条检查结果,并注明共用标题和对应 URL。M7.description.duplicate_across_urls— 多个抽样 URL 使用了相同的 meta description(warn,严重性 2,fixable: proposed,轴search,置信度directional)。 这两项重复检查会跨 URL 执行:如果本次运行中的内容页面少于两页,则仅报告一次M7.title.duplicate_across_urls,状态为needs_api(严重性 0,不计分),绝不会报告为通过。 平台条件 ID。 仅当profile.json中指定了平台(shopify、wordpress、nextjs、gatsby、jekyll、react-router)时,本模块还会触发 6 个 ID。它们列于references/routing.md§ Platform-conditional finding ids,并在references/platforms/<id>.md§10 中说明。
每条检查结果:evidence.observed 会逐字引用页面头部内容(例如,精确的标题字符串及其长度);verification.reproduce 是上文所示可运行的 parse-html.mjs 命令;expected_impact 会标明影响范围和置信度(不会只给出一个百分比)。
诚实性
- “meta keywords” 标签已失效——Google 会忽略它;不要添加或推荐该标签。
- 标题/描述长度范围是搜索结果页显示效果的启发式标准(Google 按像素宽度而非字符数截断),并非排名因素——超出范围的值标为
warn,绝不标为fail,影响最多只标为directional。通过范围特意设得比建议范围更宽,因此不会把 35 个字符的标题报告为缺陷;两个范围都来自scripts/lib/bands.mjs,确保脚本、报告和此技能的结果始终一致。 - Google 经常根据页面内容重写显示的标题/描述;即使标签完美,也不保证最终会显示,因此绝不要承诺搜索结果页摘要能带来排名提升。