From local-seo-skills
Researches keywords for local businesses, finds local search opportunities, builds keyword maps for location pages, and analyzes local search intent.
npx claudepluginhub garrettjsmith/localseoskillsThis skill uses the workspace's default tool permissions.
> **Default data tool:** LocalSEOData (`localseodata-tool`). Use `keyword_opportunities` for business-specific keyword ideas, `keyword_suggestions` for seed keyword expansion, `search_volume` for volume data, `keyword_trends` for seasonality, `keywords_for_site` for current rankings. For advanced gap analysis, use Semrush.
Creates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
Default data tool: LocalSEOData (
localseodata-tool). Usekeyword_opportunitiesfor business-specific keyword ideas,keyword_suggestionsfor seed keyword expansion,search_volumefor volume data,keyword_trendsfor seasonality,keywords_for_sitefor current rankings. For advanced gap analysis, use Semrush.
You are an expert in keyword research for local businesses. Your goal is to build comprehensive keyword strategies that capture local search demand across services, locations, and intent types — driving both map pack and organic local rankings.
Local keyword research isn't just "regular keyword research + city names." It has unique dynamics:
The primary services the business offers, without location modifiers.
Examples:
plumberemergency plumbingdrain cleaningwater heater repairsewer line replacementThese carry implicit local intent — Google shows local results without a city name.
Service + specific location.
Formats:
[service] [city] — plumber buffalo[service] in [city] — plumber in buffalo[service] [city] [state] — plumber buffalo ny[service] [neighborhood] — plumber elmwood village[service] [county] — plumber erie county[service] [zip] — plumber 14075 (less common but real)Location-less queries with explicit local intent.
plumber near meemergency plumber near mebest plumber near me24 hour plumber near meImportant: "Near me" queries are determined by the searcher's device location, not by your content. You can't "optimize for near me" with on-page content — you optimize by having strong GBP presence, reviews, and proximity.
What the customer is experiencing, not what the business calls its service.
pipe burst (they don't search "pipe repair")furnace not turning on (not "furnace repair")tooth pain (not "endodontics")water in basement (not "basement waterproofing")These often have high urgency and conversion rates.
Modifiers that signal specific intent.
Urgency: emergency, 24 hour, same day, immediate Cost: cheap, affordable, cost, pricing, free estimate Quality: best, top rated, licensed, certified, experienced Comparison: vs, alternative, reviews, near [competitor]
Long-tail queries from People Also Ask and autocomplete.
how much does a plumber cost in buffalodo I need a permit for a water heater in nyhow long does drain cleaning takeGood for content/FAQ but rarely drive direct conversions.
Many businesses offer proprietary or branded services that patients/customers search by name.
Healthcare examples: Discseel, Intracept, CoolSculpting, Invisalign, LASIK, Botox Home services examples: Rinnai (tankless water heaters), Mitsubishi (mini-splits), Generac (generators) Legal examples: specific legal programs or certifications by name
Why these matter:
Searchers filtering by whether they can use/afford the service.
Healthcare: "[service] that accepts Medicaid," "[service] that takes Blue Cross," "workers comp pain management," "[specialty] accepting new patients" Legal: "free consultation personal injury," "contingency fee lawyer," "pro bono attorney" Home services: "licensed plumber," "insured roofing contractor," "financing available HVAC" General: "[service] that takes [payment method]"
These keywords have very high conversion intent — the searcher has already decided they need the service, they're checking if they can access it.
Businesses near national borders or in multilingual markets have a keyword category most competitors miss entirely.
Examples:
Check: Does the business serve customers who search in another language? If yes, those keywords deserve their own category and potentially their own landing pages.
Before touching any tool, gather:
Ask the business: "When someone calls you, what do they say they need?" That language is your keyword seed.
For each seed keyword, pull:
Tool options:
When you search for the client's primary keywords, the SERP results contain competitor intelligence:
This step is often skipped but it's free and produces the highest-quality keyword additions because it's based on actual search behavior, not tool estimates.
For local businesses, the keyword universe is a matrix:
Services × Locations × Modifiers = Keyword Universe
Example:
10 services × 25 cities × 3 modifiers = 750 keyword combinations
Don't create a page for every combination. Use the matrix to:
Every keyword gets an intent tag:
| Intent | Example | Content Type |
|---|---|---|
| Emergency/urgent | "emergency plumber now" | GBP, dedicated emergency page |
| Transactional | "plumber buffalo ny" | Service + city landing page |
| Commercial investigation | "best plumber buffalo reviews" | Review/comparison content |
| Informational | "how to unclog drain" | Blog/FAQ content |
| Navigational | "[business name]" | Homepage, GBP |
Priority order for local businesses: Emergency > Transactional > Commercial > Informational
Each keyword (or keyword cluster) maps to a specific page:
| Keyword Cluster | Target Page | Page Type |
|---|---|---|
| plumber buffalo ny, plumber in buffalo, buffalo plumber | /plumber-buffalo-ny/ | Service + city |
| emergency plumber, 24 hour plumber, pipe burst | /emergency-plumbing/ | Service (urgent) |
| drain cleaning [cities] | /drain-cleaning/ | Service page |
| how much does plumbing cost | /blog/plumbing-cost-guide/ | Blog/FAQ |
Rules:
Know this going in: Keyword tools significantly undercount local search volume.
What to do about it:
| Market Size | Service Keyword Volume | Geo-Modified Volume |
|---|---|---|
| Major metro (NYC, LA) | 5,000-50,000/mo | 500-5,000/mo |
| Mid-size city (Buffalo, Tampa) | 1,000-10,000/mo | 100-1,000/mo |
| Small city / suburb | 100-1,000/mo | 10-100/mo |
| Rural / small town | 10-100/mo | 0-10/mo |
Not all keywords produce the same SERP. Check what actually appears:
| SERP Feature | What It Means |
|---|---|
| Local pack (3-pack) | Implicit local intent — GBP optimization critical |
| LSAs at top | Pay-per-lead opportunity, high commercial intent |
| Ads in map pack | Local search ads opportunity |
| AI Overview | Content needs to be AI-parseable |
| People Also Ask | FAQ content opportunity |
| Organic only (no local pack) | Informational intent, blog/guide content |
Run SERP checks for your top 20 keywords to understand what you're competing for. A keyword that triggers a local pack requires different optimization than one that shows only organic results.
Sometimes the best opportunities are keywords with decent volume but weak competition:
For businesses with multiple locations, the research scales differently:
The final deliverable is a keyword map document:
| Keyword | Volume | KD | Intent | Target Page | Status | Priority |
|---|---|---|---|---|---|---|
| plumber buffalo ny | 720 | 35 | Transactional | /plumber-buffalo-ny/ | Exists | High |
| emergency plumber | 480 | 42 | Emergency | /emergency-plumbing/ | Needs creation | High |
| drain cleaning buffalo | 210 | 28 | Transactional | /drain-cleaning-buffalo/ | Exists | Medium |
| how much does plumber cost | 590 | 22 | Informational | /blog/plumbing-costs/ | Needs creation | Medium |
| water heater repair near me | 880 | 38 | Transactional | /water-heater-repair/ | Needs update | High |
Status options: Exists (optimized), Exists (needs update), Needs creation, Low priority
| What You Found | Next Action | Skill |
|---|---|---|
| Keywords identified, need pages for them | Create location and service pages targeting the keyword map | local-landing-pages |
| Found keyword gaps vs. competitors | Deep-dive competitive analysis on those gaps | local-competitor-analysis |
| Keywords have high CPC, worth running ads | Build PPC campaigns targeting high-value keywords | local-ppc-ads |
| Keywords trigger LSA results | Ensure LSA profile is set up for those service categories | lsa-ads |
| Keywords trigger AI Overviews | Optimize content for AI citation | ai-local-search |
| Need to know current rankings for these keywords | Run geogrid scans per keyword | geogrid-analysis |
| Keywords done, need full audit context | Feed keyword map into the audit framework | local-seo-audit |
Default next step: Keyword research without page creation is wasted effort. Map keywords → pages → publish → scan rankings.
This skill requires data from external tools. See docs/tool-routing to pick based on what's connected.