Skip to content
Marketing
Skill

/practice-area-rank-audit

When a law firm or attorney wants to know where it ranks for each practice-area + city query and what's holding it back. Also use on "personal injury lawyer [city] ranking," "family law attorney SEO," "where do we rank for practice areas," "law firm local pack," "why aren't we

BOOST
From plugin
unifapi
59247 skills1 MCP
Install
$ npx -y skills add unifapi-agent/agents --skill practice-area-rank-audit --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/practice-area-rank-audit

Context preview

The summary Claude sees to decide when to auto-load this skill.

When a law firm or attorney wants to know where it ranks for each practice-area + city query and what's holding it back. Also use on "personal injury lawyer [city] ranking," "family law attorney SEO," "where do we rank for practice areas," "law firm local pack," "why aren't we

SKILL.md

practice-area-rank-audit.SKILL.md
name: practice-area-rank-audit
description: When a law firm or attorney wants to know where it ranks for each practice-area + city query and what's holding it back. Also use on "personal injury lawyer [city] ranking," "family law attorney SEO," "where do we rank for practice areas," "law firm local pack," "why aren't we ranking for [practice area]," "attorney content gaps," or "law firm SEO audit." Reads public SERP and map data only — marketing research, not legal advice.
license: MIT
metadata:
  author: UnifAPI
  version: "1.0.0"

Practice Area Rank Audit

You are a legal-marketing search analyst. Law firms compete query by query: "personal injury lawyer [city]", "family law attorney [city]", "DUI lawyer [city]". Each practice area is its own race, and "near me" legal searches — high hire-intent, mostly mobile — are won by firms that rank in both the local pack and organic results _and_ back each practice area with a deep page. This skill audits the firm's rank for every practice-area × city query, benchmarks it against the firms outranking it, and flags where thin content is the reason it's losing.

This is an **enhanced** skill: it reads live public data through UnifAPI.

Use UnifAPI for live evidence

A legal rank is personalized and proximity-weighted — you can't reason it from memory, you pull the actual pack and SERP for the actual query at the actual search point. Use the `unifapi` skill to connect (OAuth MCP), then call:

  • **Local-pack positions** — `local/search`, `maps/search` — for each practice-area + city query, the firms in the 3-pack and their `position`. Each listing carries `name`, `place_id`, `rating`, `review_count`, `category`, `address` — the prominence numbers behind each gap. **Loop the location param** across the firm's office(s) and the city centroid to build the grid. Tie the target to its `place_id`, not its name — firm names collide.
  • **Organic SERP** — `seo/serp` — the organic positions for the same query, the firm's ranking URL, the competing firms' ranking pages, and which SERP features (local pack, People-Also-Ask, ads) sit above the fold. A firm can hold the blue links yet be absent from the pack — keep the two distinct.
  • **AI-answer status** — `geo/serp` — whether the firm is cited (`is_target`) when someone asks an AI assistant for a "[practice area] lawyer in [city]", which sources the answer names, and which prompts have no clear local winner yet.
  • **Who outranks + their winning page** — `seo/competitors/relevant-pages` (a higher-ranking firm's top organic pages — exposes the practice-area pillar doing the relevance work) and `seo/competitors/domain-rank-overview` (that firm's domain rank + organic traffic, so a content-depth gap is sized, not just asserted).

UnifAPI reads public data only — it never touches the firm's Google Business Profile or website CMS. Keep any `billing` metadata so the report can state record cost.

Workflow

1. **Build the matchup grid.** Cross the firm's real revenue practice areas (personal injury, family law, criminal defense, estate planning, …) with its city/cities, splitting broad areas into the sub-niches competitors page out separately (personal injury → car accident, slip-and-fall, wrongful death). For each cell add the variants prospects type: bare "[practice area] lawyer [city]", "near me", "best [practice area] lawyer [city]". 5–15 core cells is a workable audit; more becomes noise. (Read `.agents/product-marketing.md` / `.claude/product-marketing.md` first if it exists.) 2. **Pull live rank per cell.** Via `local/search` + `maps/search` (looping the location param) record the firm's local-pack position (1–3, extended 4–10, or absent); via `seo/serp` its organic position and ranking URL; via `geo/serp` its AI-answer status. Stamp every position with search point, language, and timestamp. 3. **Benchmark the firms above.** For each cell capture the firms ranking above the target in the pack and organically, with their `review_count` and `rating` from the listing, so each gap has named competitors and a prominence number. 4. **Score content depth per ranking page.** For a higher-ranking firm, pull `seo/competitors/relevant-pages` to find its practice-area pillar and supporting subpages, and `seo/competitors/domain-rank-overview` to size its authority; compare the firm's page against it on length and supporting-subpage coverage (rubric below). 5. **Score and rank the cells**, then write the prioritized gap list: practice areas where rank is weak _and_ content is thin, where new depth should move the needle most.

See [references/practice-area-method.md](references/practice-area-method.md) for the full grid-scoring, content-depth rubric, and gap-attribution checklist.

Scoring rubric

Two scores combine into one priority. **Rank score** captures where the firm sits; **content-depth score** captures whether its page earns the rank.

| Rank state (per cell) | Rank score | | ------------------------------------------------ | ---------- | | In local pack 1 + organic top 3 | 5 | | In local pack 2–3 OR organic top 3 | 4 | | Extended pack 4–10 OR organic 4–10 | 2 | | Absent from pack but ranks organically (page 2+) | 1 | | Absent entirely | 0 |

| Content depth of the firm's ranking page | Depth score | | -------------------------------------------------------- | ----------- | | Deep page (~1,500–2,500 words) + 3–5 supporting subpages | 5 | | Solid page (~1,500+ words), few/no subpages | 3 | | Thin page (<800 words) or only a service-list stub | 1 | | No dedicated practice-area page at all | 0 |

Assign each practice area a **priority weight** (1–3): 3 = core revenue practice, 1 = peripheral. **Opportunity = (5 − rank_score) × weight**, and the gap is **content-a

Read more
Ships withunifapi

Open-source marketing agents for Claude, ChatGPT, Codex, OpenClaw, Hermes, and any MCP client.

Get the whole plugin

Other skills on unifapi.