增强 · 实时数据本地 SEO Agent

Local Pack Audit

查看企业在目标搜索词的本地包和地图结果中的排名,并与排在前面的商家对比——单个或多个门店均可。

Agent 原生

在 Claude、ChatGPT 自定义 MCP 应用、OpenClaw、Hermes、Codex、Claude Code、Cursor、VS Code 或其他支持 MCP 的客户端中运行它。无需专门的 GUI 流程,也无需单独的 LLM API 密钥。

由实时公开数据支撑

每一步都建立在 UnifAPI 返回的实时公开数据记录之上,因此输出会引用真正在排名、在发布或正在被讨论的内容——而不是一份泛泛的最佳实践清单。

可组合且开源

Skills 相互交叉引用,并存放在一个公开的、MIT 风格的仓库中。在 GitHub 上阅读完整的 SKILL.md、fork 它,或原样在你的 Agent 中运行它。

运行提示词

把它粘贴进 Codex 或 Claude Code

这段提示词有意可自由编辑。替换其中的用户名、市场、预算与活动目标,然后让 Agent 在需要实时公开数据时调用 UnifAPI MCP。

Audit local-pack rank for "coffee shop" near downtown Austin, TX: show where my business sits in the map results, who ranks above it, and their rating, review count, and category.
这个 skill 如何运作

由 SKILL.md 渲染出的完整 skill

你是一名本地搜索分析师。本地包(local pack)——「附近」搜索顶部的那个三家商户地图块——是大多数本地点击的去处。这个 skill 为某商户的目标查询拉取实时的本地包 / 地图结果,并精确报告它相对于排在它之上的商户排在哪里:针对单个位置,或同一批查询跨多个位置。

这是一个 enhanced skill:它通过 UnifAPI 读取实时公开数据。

用 UnifAPI 获取实时证据

本地排名是个性化且按邻近度加权的——你无法凭记忆推理,你必须在实际的搜索点上为实际的查询拉取实际的包。用 unifapi skill 连接(OAuth MCP),然后调用:

  • 本地包位置 — local/search、maps/search — 对每个 查询 × 位置,得到占据本地包的商户及其 position。循环 location 参数 以构建网格:从每个城市 / 分店 / 邻近点重跑同一个查询。每条结果都带有 name、place_id、rating、review_count、category、address、phone、website、hours——刻画排在目标之上者所需的一切。把目标绑定到它的 place_id,而非名称。
  • 混合本地 SERP — seo/serp — 谁在同一查询上排名 自然 本地结果。一个商户可以占住自然蓝链却从包中缺席(这是资格/类别差距,而非不可见)——把两者分开。它也确认地图端点返回的包是否与实时 SERP 块匹配。
  • 竞品本地落地页 — seo/competitors/relevant-pages — 对一个排名超过目标的对手,它的头部自然页面会揭示在其包位背后做相关性工作的本地落地页(城市/服务页)。

UnifAPI 只读公开数据——它绝不触碰商户的 Google Business Profile。保留任何 billing 元数据,以便输出能陈述记录成本。

工作流

  1. 定义查询和位置——必需。 取商户的优先查询(例如 "emergency plumber Austin"、"24 hour plumber")和要检查的位置——一家门店,或多门店经营者的每个城市/分店。如果查询缺失,就询问;不要猜测关键词集。(如果存在,先读 .agents/product-marketing.md / .claude/product-marketing.md。)
  2. 设定邻近度基线。 包会按到搜索者的距离重新排名,所以你从哪个精确点搜索会改变结果。对每个位置向 local/search / maps/search 传入一个精确的 location:至少是城市质心;对门店则优先用地址处的坐标。在每个位置上记下搜索点、language 和 device——在 8 公里外测得的排名与在门口测得的不是同一个发现。
  3. 拉取实时包——对每个 查询 × 位置 配对,经由 local/search + maps/search,循环 location 参数。记录排在 1–3 名的是谁(外加可用时的扩展 "More places" 结果)以及目标的 position——或它的缺席。为包中的每个商户捕获 place_id、name、rating、review_count、category。用 seo/serp 交叉核对自然块。
  4. 为每个单元打分,使用下面的评分表,让网格按机会排序,而非按字母。
  5. 把每个差距归因于邻近度、知名度或相关性(见下)。对于相关性/知名度差距,拉取胜出者的 seo/competitors/relevant-pages 以查看它排名的本地页面。
  6. 找出模式。 商户在哪里排名好,在哪里跌出包,以及(对多门店)哪些分店在同一查询上落后于其他分店?把可由邻近度解释的差距与知名度/相关性差距分开。

单元评分表

为每个 查询 × 位置 单元打分,让网格按机会排序:

Cell stateScoreMeaning
Target in position 15Defend
Target in position 2–34Hold / push to 1
Target in extended "More places" (4–10)2Within striking distance
Target absent but ranks organically1Pack-eligibility gap, not invisibility
Target absent entirely0Investigate category/proximity/relevance

机会 = (5 − score) × 查询优先级权重。 按机会降序排列单元;那份列表的顶部就是工作能撬动指针的地方。

解读三个排名因素

当目标表现不佳时,把差距归因于 Google 三个本地因素之一,这样操作者就知道该修什么:

  • 邻近度(Proximity) — 排名是否随着搜索点靠近地址而改善,胜出者是否只是更近?那么这个单元就受邻近度约束;一家单门店无法超过更近的对手,但服务区或类别广度可以拓宽半径。
  • 知名度(Prominence) — 排在目标之上的商户是否带有明显更高的 review_count / rating?知名度差距是最可行动的:评论速度和引用。
  • 相关性(Relevance) — 胜出者的主 category 或 name 是否更精确地匹配查询,或它的 seo/competitors/relevant-pages 是否显示一个专属本地落地页?相关性差距指向类别/列表/内容修复(交给 listing-accuracy-audit)。

完整方法、边缘情况以及多门店模式判读,都在 references/methodology.md 中。

输出:排名网格 + 发现

# Local Pack Audit — <business> — <date>

Search params: location(s) <…> · language <…> · device <…>

## Rank grid (one row per query × location)

| Query             | Location (search point)       | Target position | Cell score | Above target (name · rating · reviews · category) | Likely factor |
| ----------------- | ----------------------------- | --------------- | ---------- | ------------------------------------------------- | ------------- |
| emergency plumber | Austin TX (downtown centroid) | 2               | 4          | Joe's Plumbing · 4.8 · 412 · Plumber              | Prominence    |
| 24 hour plumber   | Austin TX (centroid)          | not in pack     | 0          | A1 Drain · 4.6 · 290 · Emergency plumber service  | Relevance     |

## Findings

- Top opportunities, ranked by opportunity score (highest-impact cells first).
- Multi-location: a location × query matrix flagging which branches are missing from or buried in the pack on the same query.
- Each competitor above the target annotated with rating, review count, category, and the factor that explains the gap.
- Record cost consumed (or best estimate if billing metadata is unavailable).

推演示例

简报:一家 2 门店的 HVAC 公司,查询 "ac repair" 和 "furnace repair",位置 Austin + Round Rock。

  • "ac repair" × Austin → 目标位置 2(得分 4);胜出者 Cool Air 有 4.9 / 680 条评论 vs. 目标 4.7 / 210 → 知名度差距,评论速度。
  • "ac repair" × Round Rock → 目标位置 1(得分 5)→ 防守。
  • "furnace repair" × Austin → 目标缺席(得分 0),但在 seo/serp 上自然排第 4(得分 1,而非 0);胜出者都把 "Furnace repair service" 作为主 category,且它们的 seo/competitors/relevant-pages 显示一个专属的炉具页面 → 相关性差距,交给 listing-accuracy-audit。

结论:Austin 炉具单元是单个机会最高的修复项(类别 + 落地页),Austin AC 是评论量打法,Round Rock 健康。读取:8 次 local/maps + 4 次 SERP + 2 次 relevant-pages。

护栏

  • 只读(「眼睛,而非双手」)。 仅公开数据。它报告排名;它绝不编辑 Google Business Profile、发帖或提交任何东西。操作者自己的团队做任何列表或内容变更。
  • 已确认 vs 推断。 报告每个位置被测得时的精确搜索点、语言、设备和时间戳。把从包上读到的位置标为已确认,把邻近度/知名度/相关性归因标为推断;如果数据不支持某个归因,就把单元标为 "unattributed"(未归因),而非瞎猜。
  • 带日期的快照,可重跑。 排名是个性化且时间敏感的——把每次拉取当成一个快照,而非保证;保留 查询 × 位置 监视清单,以便网格能为趋势而重跑。
  • 包成员资格 ≠ 自然排名。 一个商户可以自然排名却从包中缺席(类别/资格),或反之——把这两个度量分开。

References

  • references/methodology.md — full grid method, proximity sampling, the three-factor attribution checklist, and multi-location pattern reading.

相关 Skills

  • listing-accuracy-audit(Local SEO):检查商户自己的列表细节是否正确完整——通常是相关性差距背后的修复。
  • local-competitor-scan(Local SEO):刻画赢得这些本地包位的竞品。
  • unifapi:共享的数据 skill——连接 MCP 并发现上面的操作。

源码:GitHub 上的 local-pack-audit/SKILL.md——可在那里提交 PR 来改进它。

公开数据工具

这个 skill 调用的实时 API

这个 skill 提到的每个操作都属于这些 UnifAPI 平台之一——它们对于产品代码、调试与自定义 Agent 流程仍然可见、可调用。

  • 排名网格:查询 × 地点,附目标商户的 local pack 位次
  • 排在目标之前的商户,含评分、评论数、类目
  • 对多门店场景:商户在结果包中缺失或被压在何处
  • 每个位次都引用到实时的 local pack 结果
相关 skills

本地 SEO Agent 中的更多 skills

在同一个 Agent 中把它们串联起来,从一个决策成果走向下一个——每个都有各自的运行提示词、工作流与预期输出。

商户信息准确性

读取某家商户的公开地图/本地商户信息,标记出信息不一致、不完整或错误之处。

打开 商户信息准确性

本地竞品扫描

梳理在 local pack(本地结果包)中排在你前面的竞品,并用具体数字呈现它们拥有而你缺少的东西。

打开 本地竞品扫描
查看 本地 SEO Agent 中的每一个 skill