关于 seo-local
seo-local 是用于本地商家页面的条件式 SEO 审计技能,检查结构化地点数据与页面可见信息,并可依据用户确认的数据拟定 Schema 修复内容。
主要功能
- 01检查 LocalBusiness JSON-LD
- 02核对可见 NAP 信息一致性
- 03检查坐标与营业时间
- 04检查服务区域标记
- 05提供 Google Business Profile 对齐建议
适用场景
- 01审计店面页面的 Schema
- 02查找电话或地址不一致
- 03核对结构化营业时间与页面显示
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ hainrixz/ claude-seo-ai --skill seo-local安装后在 Claude Code 中输入/seo-local确认已加载。
详细介绍
seo-local (M19)
本地页面的成败取决于地点数据是否一致且机器可读。条件模块:仅在页面被归类为本地商家页面(店面、服务区域、多地点、联系/地点页面)时运行。参考:references/schema-tier1.md(LocalBusiness 行)。
输入
使用调度信封中指定的 PageSnapshot:从 <run_dir>/pages/<slug>.json 读取 parsed(jsonld[]、text_sample、用于地图的 iframes),并从信封中读取 vertical;对 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),且仅针对本地商家页面:
- LocalBusiness 架构:包含必需属性的
LocalBusiness(或正确的子类型,例如Restaurant、Dentist)JSON-LD 区块——name、address(PostalAddress)、telephone。 - NAP 一致性:页面上可见的名称 / 地址 / 电话应在各处(页眉、页脚、联系区块)保持一致,并与架构中的值一致——不得存在格式差异或过时号码。
- 地理坐标:应包含
geo(含latitude/longitude的GeoCoordinates),且与所述地址相符。 - 营业时间:应包含
openingHoursSpecification,并采用结构化格式(dayOfWeek、opens、closes),且与可见营业时间一致。 - 服务区域:对于服务区域型商家,应声明
areaServed,而非仅声明店面用的PostalAddress,或在其基础上同时声明。 - GBP 对齐(仅供参考):NAP、类别和营业时间应与 Google Business Profile 一致——该工具无法读取 GBP,因此此项仅供参考。
修复
- AUTO:根据用户确认的 NAP、营业时间、地理坐标和服务区域,生成完整且有效的
LocalBusinessJSON-LD 区块,并使用稳定的@id。该区块是用于fix的差异。 - NAP / 营业时间不一致:PROPOSED — 显示不匹配之处,并提供草拟的修正内容,供用户逐项接受(工具无法判断哪个值才是标准值)。
- GBP 对齐:ADVISORY — 工具绝不写入此项。
绝不捏造地址、电话、坐标或营业时间——应询问用户,或留下明确标记的
TODO占位符,供用户在注入前填写。
验证
- 离线:
node "${CLAUDE_PLUGIN_ROOT}/scripts/validate-jsonld.mjs" --snapshot <pages/<slug>.json>(或--url <u>)(schema_validator)——检查 JSON 有效性及必需的 LocalBusiness 属性;dom_assert确认可见的 NAP 与架构一致。 - Tier 1:使用 Google Rich Results Test / schema.org validator 确认是否符合富媒体搜索结果资格。当数据层(或 GBP)不可用时,状态为
needs_api——绝不可错误地标记为pass。
发现
按 schema/finding.schema.json 输出发现项。对于非本地页面,这些发现项为 not_applicable(严重性 0);对于本地页面,严重性为 4,维度为 both。严重性策略:5 专用于网站/模板层面会造成灾难性后果、导致失去资格的事实;4 重大 · 3 中等 · 2 次要 · 1 轻微 · 0 信息性 — 只有处于启用类别、状态为 fail 且严重性为 5、置信度为 established 的发现项才能限制评分(references/scoring-model.md)。示例:
M19.localbusiness.missing— 本地页面缺少 LocalBusiness schema(状态fail,严重性 4,fixable: auto,维度both,置信度established)。evidence.observed引用页面上可见的地址/电话,且不存在匹配的ld+json;verification.reproduce运行上述验证器。M19.nap.inconsistent— 页脚电话与 schema 中的telephone不一致(状态warn,严重性 4,fixable: proposed,维度both,置信度directional)。evidence.observed引用两处文本;通过dom_assert验证。M19.hours.missing— 页面上显示了营业时间,但没有openingHoursSpecification(状态warn,严重性 4,fixable: auto,维度both,置信度established)。 每个发现项:evidence.observed引用页面内容;expected_impact按区间标注并带有置信度标签(不得只给出百分比)。
诚信原则
- 一致的 NAP 和结构化地点数据是影响本地地图包/地图以及 AI 地点问答的 既定 信号;此处不承诺页面本身会带来 接近度/排名提升 — 本地地图包的主要影响因素(接近度、GBP 信号、评论)不在页面 DOM 内,相关建议仅供参考。
- 如果没有准确且经过验证的 GBP,仅添加
geo/openingHoursSpecification不会提升本地排名;绝不要将其说成有保证的成效。 - 不得根据地址通过未经验证的地理编码臆造坐标并将其作为事实呈现 — 对未经确认的值标记为
TODO。