Ranks a local service business in the Google map pack and local organic results by working the three local ranking factors - relevance, distance, and prominence - through service-page structure, honest city pages, citation consistency, and review velocity. Use when an owner asks "how do I rank in the map pack", "why does my competitor outrank me locally", "do I need a page for every service", or "should I make pages for every city near me". Do NOT use for hands-on Google Business Profile sett...
Scanned 9/6/2026
Install to Claude Code
npx -y skills add SkillMedev/skills --skill local-seo-playbook --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Local Seo Playbook?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/skillmedev-local-seo-playbook)More formats (shields.io, HTML) on the badges page.
---
name: local-seo-playbook
description: Ranks a local service business in the Google map pack and local organic results by working the three local ranking factors - relevance, distance, and prominence - through service-page structure, honest city pages, citation consistency, and review velocity. Use when an owner asks "how do I rank in the map pack", "why does my competitor outrank me locally", "do I need a page for every service", or "should I make pages for every city near me". Do NOT use for hands-on Google Business Profile settings - use google-business-profile-optimizer instead. Do NOT use for general non-local website SEO - use seo-optimizer instead.
---
# Local SEO Playbook
Local ranking is not general SEO with a city name bolted on: Google ranks the
map pack on three factors - relevance, distance, and prominence - and only
two of them can be moved. The costly mistake this skill prevents is spending
months on tactics that move none of the three (blogging into the void,
doorway city pages) while the top competitor compounds reviews and citations.
Before starting, run local-unit-economics: for Summit Plumbing (4 techs, $450
average ticket, $75,000 a month, roughly $119 CAC on paid leads), every
organic customer displaces a paid one, which is the budget case for the hours
this playbook takes.
## The three factors and what actually moves each
- Relevance - how well the business matches the search. Moved by: the GBP
primary category and services (owned by google-business-profile-optimizer),
and the website's service and location pages built below.
- Distance - how far the business is from the searcher. Not movable by
optimization; it is why rankings differ across town and why chasing rank in
a distant suburb has a hard ceiling. Spend nothing trying to beat it.
- Prominence - how well-known the business is. Moved by: review count,
rating, and velocity (owned by review-engine), citation consistency, and
links from real local sources.
Every tactic below maps to relevance or prominence. If a proposed tactic maps
to neither, cut it.
## Operating procedure
### Step 1: Fix the GBP foundation first
The profile is the strongest relevance and prominence surface. Complete the
full checklist in google-business-profile-optimizer before touching the
website - a wrong primary category caps everything below.
### Step 2: Baseline the rankings honestly
Record where the business ranks for its five money queries ("water heater
repair [city]", "emergency plumber [city]") from an incognito search set to
the target city - never from the owner's logged-in phone at the shop, where
distance flatters the result. Note who holds the three map-pack spots and
their review counts. This baseline is what every later change is judged
against, at 90-day intervals; local movement is slow and re-checking weekly
just produces noise.
### Step 3: Build one service page per service
One page per distinct service, not one "Services" page listing everything.
Summit builds: drain cleaning, water heater repair and replacement, sewer
line repair, leak detection, emergency plumbing. Each page needs: the
service and city in the title tag and H1, 500+ words a customer would
actually read (what happens on the visit, honest from-pricing, how long it
takes), photos from real jobs, two or three reviews mentioning that service,
and a click-to-call button above the fold. A page per service ranks because
relevance is judged per query, and "water heater repair" deserves a better
answer than one paragraph on a catch-all page.
### Step 4: Add city pages only where the rule permits
The city-page rule: build a page for a nearby city only if it contains
substantial content unique to that city - jobs completed there with photos,
reviews from residents there, genuinely local detail. Ten template pages with
the city name swapped are doorway pages; Google demotes them and they convert
nobody. Summit serves six suburbs but has real job history in three, so it
builds three city pages and adds the rest only as job photos accumulate.
### Step 5: Make citations consistent
Citations are mentions of Name, Address, Phone on directories (the majors:
Yelp, Facebook, Apple Maps, Bing Places, BBB, plus the trade's own - Angi,
HomeAdvisor for trades; Healthgrades, Zocdoc for clinics). The value is
consistency, not volume: every listing character-identical to the GBP NAP.
An old listing with a previous phone number is a live leak - fix existing
wrong citations before adding new ones. Twenty accurate citations beat two
hundred sloppy ones; past the majors and the trade directories, returns
diminish fast.
### Step 6: Keep review velocity at target
Review velocity is a direct prominence input: a profile adding 12 reviews a
month (Summit's target from review-engine, set against a competitor adding
10) outsignals a bigger but stale profile. This playbook does not run the
review system - review-engine does - but rankings will not hold without it,
so treat its velocity target as a dependency of this one.
### Step 7: Earn a handful of real local links
Five links from real local sources - the neighborhood association, a
sponsored little-league page, the complementary trades exchanged through
local-referral-engine partnerships, a local news mention - beat five hundred
directory spam links. One or two per quarter is a fine pace.
### Step 8: Re-measure at 90 days and diagnose
Re-run the Step 2 baseline. If velocity has been at target for 90 days and
citations are clean but the map pack has not moved, the gap is usually
relevance (category or service pages) or distance (the searcher cluster is
simply closer to competitors - a ceiling, not a failure).
## Inputs to elicit
Collect: the five money queries (default: top three services plus "emergency
[trade]" and the trade name alone, each with the city), current website
pages, the cities genuinely served and where job history exists, and the list
of existing directory listings. If the owner does not know their rankings,
gather the baseline together rather than accepting a recalled guess - and
label any unverified competitor numbers as estimates.
## Concrete thresholds
- Service pages: one per distinct service, 500+ words of genuinely useful
content; below that it is a stub that will not rank.
- City pages: only with unique local proof (real jobs, real local reviews);
zero template-swap pages.
- Citations: character-identical NAP on the majors plus trade directories;
fix wrong ones before adding new ones.
- Review velocity: at or above the review-engine target (Summit: 12 a
month) - cited from that skill, never re-derived here.
- Measurement: judge changes at 90-day intervals; local movement inside two
weeks is usually noise.
## Worked artifact: Summit Plumbing site structure
```
summitplumbing.com/
/ Home: metro + top 3 services + reviews
/drain-cleaning/ "Drain Cleaning in [Metro] - from $189"
/water-heater-repair/ "Water Heater Repair & Replacement in [Metro]"
/sewer-line-repair/
/leak-detection/
/emergency-plumbing/ 24/7 framing, click-to-call above the fold
/oak-hill-plumber/ City page: 11 jobs photographed in Oak Hill,
4 reviews from Oak Hill residents
/ridgefield-plumber/ City page: real Ridgefield job history
/brookside-plumber/ City page: real Brookside job history
(Fairview, Lakemont, Cedar Falls: no pages yet - no unique proof yet)
```
Bad contrast: a single /services/ page plus six pages titled "Plumber in
[City X]" generated from one template. Thinner relevance on every service
query, plus doorway-page risk on the city set.
## Deliverable
A prioritized 90-day plan: the ranking baseline table (five queries, current
position, map-pack holders and their review counts), the service-page and
city-page build list with titles, the citation fix list, the velocity
dependency stated with its target, and the 90-day re-measure date.
## Do NOT
- Do not build template city pages for every suburb - doorway pages get
demoted and convert nobody.
- Do not stuff city names into every sentence; one clear title, H1, and
natural mentions are enough. Copy that reads like a robot converts like one.
- Do not buy citation-blast packages that create hundreds of junk listings;
inconsistent NAP at scale is negative prominence.
- Do not judge changes weekly; local rankings move slowly and reacting to
noise causes thrash.
- Do not blog about national topics for a local business; a "10 plumbing
trends" post moves neither relevance nor prominence for map-pack queries.
## Quality bar
- Every recommended tactic names which factor it moves (relevance or
prominence); anything mapped to neither is cut.
- The baseline is from a location-honest search, dated, with the money
queries listed.
- Every city page in the plan cites its unique local proof.
- The plan states the review-velocity dependency with the identical number
from review-engine.
## Escalation and routing
Route hands-on profile settings to google-business-profile-optimizer, review
generation and velocity to review-engine, partnership link sources to
local-referral-engine, and general non-local website SEO (technical audits,
national keywords) to seo-optimizer. If organic calls rise, re-run
local-unit-economics to decide which paid channel to cut first.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!