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.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 元数据,以便输出能陈述记录成本。
工作流
- 定义查询和位置——必需。 取商户的优先查询(例如 "emergency plumber Austin"、"24 hour plumber")和要检查的位置——一家门店,或多门店经营者的每个城市/分店。如果查询缺失,就询问;不要猜测关键词集。(如果存在,先读
.agents/product-marketing.md/.claude/product-marketing.md。) - 设定邻近度基线。 包会按到搜索者的距离重新排名,所以你从哪个精确点搜索会改变结果。对每个位置向
local/search/maps/search传入一个精确的location:至少是城市质心;对门店则优先用地址处的坐标。在每个位置上记下搜索点、language和device——在 8 公里外测得的排名与在门口测得的不是同一个发现。 - 拉取实时包——对每个 查询 × 位置 配对,经由
local/search+maps/search,循环 location 参数。记录排在 1–3 名的是谁(外加可用时的扩展 "More places" 结果)以及目标的position——或它的缺席。为包中的每个商户捕获place_id、name、rating、review_count、category。用seo/serp交叉核对自然块。 - 为每个单元打分,使用下面的评分表,让网格按机会排序,而非按字母。
- 把每个差距归因于邻近度、知名度或相关性(见下)。对于相关性/知名度差距,拉取胜出者的
seo/competitors/relevant-pages以查看它排名的本地页面。 - 找出模式。 商户在哪里排名好,在哪里跌出包,以及(对多门店)哪些分店在同一查询上落后于其他分店?把可由邻近度解释的差距与知名度/相关性差距分开。
单元评分表
为每个 查询 × 位置 单元打分,让网格按机会排序:
| Cell state | Score | Meaning |
|---|---|---|
| Target in position 1 | 5 | Defend |
| Target in position 2–3 | 4 | Hold / push to 1 |
| Target in extended "More places" (4–10) | 2 | Within striking distance |
| Target absent but ranks organically | 1 | Pack-eligibility gap, not invisibility |
| Target absent entirely | 0 | Investigate 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 结果
本地 SEO Agent 中的更多 skills
在同一个 Agent 中把它们串联起来,从一个决策成果走向下一个——每个都有各自的运行提示词、工作流与预期输出。