用途:seo-local(M19)是条件模块,只在页面被判定为本地商家(门店、服务区域、多地点、联系/位置页)时运行,用于审计并生成本地 SEO 信号。
主要能力:检查 LocalBusiness(或正确子类型,如 Restaurant、Dentist)JSON-LD 是否含 name、address(PostalAddress)、telephone 等必需属性;核对页面可见名称/地址/电话与 schema 值是否一致(NAP 一致性);检查 geo(GeoCoordinates 经纬度)是否存在且与地址合理匹配;检查 openingHoursSpecification 是否结构化(dayOfWeek、opens、closes)并与可见营业时间一致;服务区域商家应声明 areaServed;GBP 对齐仅作建议,工具无法读取 Google Business Profile。
使用方式:基于 dispatch envelope 指定的 PageSnapshot,读取 <run_dir>/pages/<slug>.json(jsonld[]、text_sample、地图 iframe)与 vertical,用 Grep 在 pages/<slug>.html 中找原文证据,站点产物在 <run_dir>/site/{robots.json,sitemaps.json,discovery.json}。audit.mjs 已产出的确定性发现列于 <run_dir>/findings.deterministic.json,不要重复输出,只补充模型判断的发现。若直接传入 URL/路径且无快照,先运行 node "${CLAUDE_PLUGIN_ROOT}/scripts/snapshot.mjs" <target> --out "${CLAUDE_PLUGIN_DATA}/runs",使用打印出的快照路径。
修复:AUTO 可根据用户确认的 NAP、营业时间、地理坐标和服务区域生成完整有效的 LocalBusiness JSON-LD 块(含稳定 @id),作为 diff 供修复;NAP/营业时间漂移为 PROPOSED,需逐项确认;GBP 对齐为 ADVISORY,工具不写入。禁止编造地址、电话、坐标或营业时间,缺失时询问用户或留 TODO 占位。
验证:离线运行 node "${CLAUDE_PLUGIN_ROOT}/scripts/validate-jsonld.mjs" --snapshot <pages/<slug>.json>(或 --url <u>)校验 JSON 有效性与必需属性,dom_assert 确认可见 NAP 与 schema 一致;Tier 1 用 Google Rich Results Test / schema.org 验证富结果资格,数据层或 GBP 不可用时状态为 needs_api,不得误判通过。
发现:按 schema/finding.schema.json 输出。非本地页面为 not_applicable(severity 0);本地页面 severity 4,axis both。示例:M19.localbusiness.missing(fail,severity 4,fixable auto)、M19.nap.inconsistent(warn,severity 4,fixable proposed)、M19.hours.missing(warn,severity 4,fixable auto)。每条发现需引用页面证据,expected_impact 分档并标注置信度。
限制:一致的 NAP 与结构化地点数据是本地包/地图和 AI 地点回答的既有信号,但不承诺页面内邻近度或排名提升;主导本地包的因素(邻近度、GBP 信号、评价)在 DOM 之外,仅作建议。添加 geo/openingHoursSpecification 本身不会提升排名,除非有准确已验证的 GBP。不得用未验证的地理编码从地址编造坐标并当作事实,未确认值标记 TODO。