Skip to content
Skill Authoring
Skill

/local-seo

Use this skill when the user says 'local SEO', 'Google Business Profile', 'local search', 'NAP consistency', 'local listings', 'Google Maps', 'local pack', or is optimizing a business for local search results and map visibility. Do NOT use for general SEO audits or national

BOOST
From plugin
memstack
42587 skills2 commands4 hooks
Install
$ npx -y skills add cwinvestments/memstack --skill local-seo --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/local-seo

Context preview

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

Use this skill when the user says 'local SEO', 'Google Business Profile', 'local search', 'NAP consistency', 'local listings', 'Google Maps', 'local pack', or is optimizing a business for local search results and map visibility. Do NOT use for general SEO audits or national

SKILL.md

local-seo.SKILL.md
name: memstack-seo-local-seo
description: "Use this skill when the user says 'local SEO', 'Google Business Profile', 'local search', 'NAP consistency', 'local listings', 'Google Maps', 'local pack', or is optimizing a business for local search results and map visibility. Do NOT use for general SEO audits or national keyword research."
version: 1.0.0
license: "Proprietary, MemStack™ Pro by CW Affiliate Investments LLC. See LICENSE.txt"

📍 Local SEO: Optimizing for local search and map visibility...

*Evaluates Google Business Profile, NAP consistency, local schema markup, location pages, citations, and review management, producing an actionable local SEO scorecard.*

Activation

When this skill activates, output:

`📍 Local SEO, Checking local search presence and consistency...`

Then execute the protocol below.

| Context | Status | |---------|--------| | User says "local SEO" or "Google Business Profile" or "local search" | ACTIVE | | User says "NAP consistency" or "local listings" or "Google Maps" | ACTIVE | | Optimizing a business with a physical location or service area | ACTIVE | | Running a general site audit (broader scope) | DORMANT: use site-audit | | Optimizing for global/national keywords (no local component) | DORMANT |

Anti-patterns

| Trap | Reality Check | |------|---------------| | "We're online-only, local SEO doesn't apply" | If you serve specific regions or have a registered address, local SEO applies. Service-area businesses benefit enormously. | | "Google Business Profile is set and forget" | GBP needs regular updates: posts, photos, Q&A responses, review replies. Stale profiles rank lower. | | "Our address is on the Contact page, that's enough" | NAP must be consistent across every directory, citation, and page. One inconsistency can split your local authority. | | "Reviews don't affect ranking" | Reviews are a top-3 local ranking factor. Quantity, quality, recency, and response rate all matter. | | "We don't need location pages" | If you serve multiple areas, each needs a unique page with local content, not boilerplate with swapped city names. |

Protocol

Step 1: Check Google Business Profile

Verify the GBP listing is optimized:

**GBP optimization checklist:**

| Element | Check | Best Practice | |---------|-------|--------------| | Business name | Matches legal business name exactly | No keyword stuffing in the name | | Primary category | Most specific category selected | "Italian Restaurant" not just "Restaurant" | | Secondary categories | 2-5 relevant additional categories | Cover all services offered | | Address | Complete, matches website exactly | Include suite/unit number if applicable | | Phone | Local number, matches website | Avoid tracking numbers on GBP | | Website URL | Links to homepage or location page | Not a redirect, not a social profile | | Hours | Current, including holidays | Update for seasonal changes | | Description | 750 chars, includes keywords naturally | Describe what makes you different | | Photos | 10+ recent photos | Interior, exterior, team, products, menu | | Posts | Weekly updates | Events, offers, updates, products | | Q&A | Common questions answered proactively | Seed with your own FAQs | | Services/Menu | Listed with prices if applicable | Complete and current | | Attributes | All relevant attributes selected | Wi-Fi, parking, accessibility, etc. |

**GBP health indicators:**

| Signal | Healthy | Unhealthy | |--------|---------|-----------| | Profile completeness | 100% filled | Missing description, hours, or photos | | Photo count | 10+ with recent uploads | 0-2 photos, outdated | | Review count | 20+ with 4.0+ average | < 5 reviews or below 3.5 | | Response rate | 100% of reviews replied | Unanswered reviews | | Post frequency | Weekly | No posts in 30+ days | | Q&A | Proactive answers | Unanswered questions |

Step 2: Verify NAP Consistency

NAP (Name, Address, Phone) must be identical everywhere:

# Check website for NAP occurrences
grep -rn "address\|phone\|tel:\|street\|suite\|zip\|postal" --include="*.tsx" --include="*.jsx" --include="*.html" --include="*.json" . | grep -v node_modules

**NAP consistency audit:**

| Source | Name | Address | Phone | Consistent? | |--------|------|---------|-------|------------| | Website (footer) | ? | ? | ? | Baseline | | Website (contact page) | ? | ? | ? | Match? | | Google Business Profile | ? | ? | ? | Match? | | Yelp | ? | ? | ? | Match? | | Facebook | ? | ? | ? | Match? | | Apple Maps | ? | ? | ? | Match? | | BBB | ? | ? | ? | Match? | | Industry directories | ? | ? | ? | Match? |

**Common NAP inconsistencies:**

| Issue | Example | Fix | |-------|---------|-----| | Abbreviation mismatch | "St" vs "Street" vs "St." | Pick one format, use everywhere | | Suite format | "#100" vs "Suite 100" vs "Ste 100" | Standardize to one format | | Phone format | "(555) 123-4567" vs "555-123-4567" | Use one format consistently | | Business name | "Acme LLC" vs "Acme" vs "ACME Inc." | Use exact legal name | | Old address | Moved but didn't update all listings | Update every citation |

Step 3: Check Local Schema Markup

# Search for LocalBusiness schema
grep -rn "LocalBusiness\|PostalAddress\|GeoCoordinates\|openingHours" --include="*.tsx" --include="*.jsx" --include="*.html" . | grep -v node_modules

**Required LocalBusiness schema:**

{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "[Business Name]",
  "description": "[Business description]",
  "url": "https://[domain]",
  "telephone": "[phone]",
  "email": "[email]",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "[street]",
    "addressLocality": "[city]",
    "addressRegion": "[state]",
    "postalCode": "[zip]",
    "addressCountry": "US"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": "[lat]",
    "longitude": "[lng]"
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "
Read more
Ships withmemstack

The structured skill framework for Claude Code: 131 professional skills for deployment, security, databases, content, marketing, and more. Skills activate automatically when you need them. Say "deploy this to Railway" and the right skill loads on demand.

Get the whole plugin

Other skills on memstack.