SEO & AI Engine Optimization Framework · May 2026

Local SEO: Google Business Profile, NAP consistency, service-area pages

A comprehensive installation and audit reference for local search optimization — the discipline of ranking for location-specific queries, appearing in the Google Local Pack and Maps results, managing…

Google Business Profile, Local Pack Ranking, NAP Consistency, Citations, Reviews, and Programmatic Local Pages

A comprehensive installation and audit reference for local search optimization — the discipline of ranking for location-specific queries, appearing in the Google Local Pack and Maps results, managing the citation ecosystem, building review-driven trust signals, and structuring programmatic local pages that genuinely serve location-specific user intent rather than functioning as doorway pages. This document is dual-purpose: installation manual and audit document.

Cross-stack implementation note: the code samples in this framework are written in plain HTML for clarity. For React, Vue, Svelte, Next.js, Nuxt, SvelteKit, Astro, Hugo, 11ty, Remix, WordPress, Shopify, and Webflow equivalents of every pattern below, see framework-cross-stack-implementation.md. For pure client-rendered SPAs (no SSR/SSG) see framework-react.md. For Tailwind-specific concerns (purge, dynamic classes, dark-mode CLS, focus accessibility) see framework-tailwind.md.


1. Document Purpose & How to Use This Document

1.1 What This Document Is

This is the canonical reference for local SEO across every meaningful surface: Google Business Profile (GBP) optimization, the Local Pack (also called the Map Pack or 3-Pack), Google Maps, location-specific organic rankings, the broader citation ecosystem (Bing Places, Apple Business Connect, industry directories, local directories), review acquisition and management, and programmatic local landing pages.

Local SEO operates by signals partially distinct from organic SEO. While organic search ranks pages based on E-E-A-T, content quality, backlinks, and entity authority, the Local Pack ranks businesses as entities based on three factors Google publicly documents: relevance, distance, and prominence. Each factor is built from specific signals — and the signals must be installed, maintained, and monitored across multiple platforms simultaneously.

For agencies serving local clients, local SEO is foundational. A web development project for a service-area business that ignores Local SEO leaves substantial revenue on the table. A site for a multi-location business without proper local infrastructure underperforms regardless of how good the website itself is. A site with 4,715 programmatic city pages risks doorway page penalties without proper structural patterns ensuring genuine per-location value.

This framework specifies how to set up GBP correctly, how to optimize it for the relevance/distance/prominence factors, how to build and maintain citation consistency at scale, how to acquire reviews ethically and in compliance with FTC guidelines, how to structure programmatic local pages that don't violate spam policies, and how to audit existing local SEO infrastructure.

1.2 Three Operating Modes

Mode A — Install Mode: Building local SEO infrastructure from scratch or for a new client engagement. Follow Sections 2 → 14.

Mode B — Audit Mode: Evaluating existing local SEO across all surfaces. Skip to Section 11.

Mode C — Hybrid Mode: Audit then install for failing items.

1.3 How Claude Code CLI Should Consume This Document

  1. Read Section 2 — collect client variables, especially business model (storefront vs SAB vs hybrid)
  2. Read Section 3 — understand local SEO mechanics and the relevance/distance/prominence framework
  3. Apply Section 4 — Google Business Profile complete setup
  4. Apply Section 5 — citation infrastructure
  5. Apply Section 6 — review system
  6. Apply Section 7 — local schema and on-site signals
  7. Apply Section 8 — programmatic local pages if applicable
  8. Validate — Section 11
  9. Generate report — Section 14

1.4 Conflict Resolution Rules

Conflict Rule
Existing GBP with errors Audit; correct. Do not delete and recreate — loses review history and ranking signals.
Multiple GBP listings for same business Identify primary; merge duplicates via Google's merge process.
Existing inconsistent NAP across citations Correct in priority order: GBP first, top citations second, long-tail citations third.
Existing thin programmatic pages Either substantially enrich with location-specific content or noindex/remove.
Service area business currently displaying address publicly Hide address per GBP guidelines for SABs.
Storefront business currently hiding address Display address per GBP guidelines for storefront businesses.
Existing review acquisition violating FTC or Google guidelines Stop the practice immediately. Audit existing reviews for compliance.

1.5 Required Tools


2. Client Variables Intake

# ============================================
# LOCAL SEO FRAMEWORK CLIENT VARIABLES
# ============================================

# --- Business Identity (REQUIRED) ---
business_name: ""                    # Canonical legal/operating name
business_dba_names: []               # Doing-business-as variations
business_industry: ""
business_primary_category: ""        # GBP primary category (must match exactly)
business_secondary_categories: []    # GBP secondary categories (up to 9)

# --- Business Model Classification (REQUIRED) ---
business_model_type: ""              # "storefront", "service_area", "hybrid"
                                     # storefront: customers come to the location
                                     # service_area: business goes to customers (no customer-facing address)
                                     # hybrid: both apply
                                     # Critical: incorrect classification violates GBP guidelines

# --- Storefront Address (REQUIRED if storefront/hybrid) ---
storefront_address_line1: ""
storefront_address_line2: ""
storefront_city: ""
storefront_state: ""
storefront_zip: ""
storefront_country: ""
storefront_lat: 0.0
storefront_long: 0.0

# --- Service Area (REQUIRED if SAB/hybrid) ---
service_area_cities: []              # Specific cities served
service_area_zip_codes: []
service_area_radius_miles: 0
service_area_states: []
service_area_method: ""              # "specific_locations" or "radius_from_address"

# --- Multi-Location (REQUIRED if applicable) ---
is_multi_location: false
location_count: 0
locations: []                        # Array of full location objects
                                     # Each location needs all GBP-required fields

# --- Contact Information (REQUIRED — must be consistent everywhere) ---
primary_phone: ""                    # Local number preferred over toll-free
secondary_phones: []
business_email: ""
business_website: ""

# --- Hours of Operation (REQUIRED) ---
regular_hours: {}                    # Per day: open/close or "closed"
special_hours: []                    # Holidays and exceptions
hours_format: ""                     # "24_hour" or "12_hour" — pick one and use consistently

# --- Business Attributes (REQUIRED) ---
year_established: ""
business_description: ""             # 750 character max for GBP
business_short_description: ""       # 250 character version for citations with limits
products_offered: []
services_offered: []
service_areas_served: []             # Geographic descriptions

# --- GBP Status (REQUIRED) ---
has_gbp_account: false
gbp_verified: false
gbp_verification_method: ""          # "postcard", "phone", "email", "video", "instant"
gbp_listing_complete_percentage: 0
has_owner_access: false
gbp_management_access: []            # Email addresses with access

# --- Citation Status (REQUIRED) ---
total_citations_currently: 0
top_tier_citations_complete: 0       # Out of ~15 critical citations (see Section 5.2)
nap_consistency_score: 0             # Percentage of citations with consistent NAP
known_inconsistent_citations: []
citation_acquisition_in_progress: false

# --- Review Status (REQUIRED) ---
gbp_review_count: 0
gbp_review_average_rating: 0.0
review_response_rate: 0              # Percentage of reviews responded to
recent_review_velocity: 0            # Reviews per month average
review_platforms_with_presence: []   # Google, Yelp, Facebook, BBB, industry-specific
fake_review_concern: false
review_gating_practiced: false       # Critical FTC violation if true

# --- On-Site Local Signals (REQUIRED) ---
has_local_business_schema: false
schema_includes_address: false
schema_includes_geocoordinates: false
schema_includes_areaServed: false
has_dedicated_locations_page: false  # Critical for multi-location
has_dedicated_per_location_pages: false
has_embedded_google_map: false
nap_visible_in_footer: false
nap_format_consistent_sitewide: false

# --- Programmatic Local Pages (REQUIRED if applicable) ---
has_programmatic_local_pages: false
programmatic_page_count: 0
programmatic_pages_have_unique_content: false  # Honest answer
average_unique_words_per_programmatic_page: 0
programmatic_pages_have_local_specifics: false  # Local team, local examples, local pricing, etc.

# --- Local Content (RECOMMENDED) ---
publishes_local_content: false
local_blog_posts_count: 0
participates_in_local_events: false
local_partnerships_documented: false
local_press_mentions: 0

# --- Tracking Infrastructure (REQUIRED) ---
has_local_rank_tracking: false       # Local Falcon or equivalent
local_rank_tracker: ""
tracked_local_keywords: []
geo_grid_tracking_enabled: false     # Proximity-based tracking
gbp_insights_monitored: false
ga4_configured_for_local_tracking: false

3. What Local SEO Is

Local SEO is the practice of optimizing for queries with local intent — queries where the searcher is looking for a business, service, or information specific to a geographic location. Local intent is signaled in queries through:

Explicit modifiers — "near me," city names, neighborhood names, ZIP codes, "in [location]" Implicit local intent — Google identifies queries where users typically want local results even without explicit local modifiers (e.g., "plumber" almost always carries local intent; "history of plumbing" doesn't) Searcher location — Even queries without explicit local language return local results when Google detects the searcher is in a specific location

Local search results appear in three primary surfaces:

1. The Local Pack (3-Pack) — Three businesses displayed at the top of organic results with map, rating, hours, and "Directions" / "Website" / "Call" actions. The Local Pack appears for the vast majority of local-intent queries.

2. Google Maps results — When users search directly in Google Maps or click "More places" from a Local Pack, they see expanded results sorted by relevance, distance, and prominence with map visualization.

3. Localized organic results — Standard blue-link organic results below the Local Pack, ranked partly by location-specific signals.

The Local Pack and Maps share a ranking system distinct from organic search. Google publicly documents three factors:

Relevance — How well the business matches the searcher's query. Driven by GBP category selection, business name, business description, services list, products list, posts, attributes, photos, and on-site signals when the website is linked.

Distance — How close the business is to the searcher's current location or specified search location. Distance matters more for "near me" queries and less for queries with broader intent. Distance is the only ranking factor businesses cannot directly improve — you can't move your business location for SEO. (Some businesses run "rented address" schemes attempting to manipulate this, which violates GBP guidelines and is detected/penalized.)

Prominence — How well-known and trusted the business is. Driven by review count, review quality, review velocity, citation count, citation consistency, backlinks, mentions, and entity authority signals overlapping with Knowledge Graph (see framework-knowledgegraph.md). Prominence is the most controllable factor and where most local SEO work happens.

The 2024-2026 evolution of local search has been significant:

AI Overviews integration with local results — When users ask AI Overviews local questions, results often draw from GBP data, citations, and review platforms. The frameworks for AI citation (framework-aicitations.md) interact with local SEO directly.

GBP feature expansion — Google Posts, Q&A, products, services, attributes, messaging, booking integration have all expanded as GBP signals.

Review velocity weighting increased — Sites with consistent fresh review acquisition outperform sites with high but stale review counts.

Programmatic page enforcement strengthened — The March 2024 spam policy expansion (see framework-spampolicies.md) addresses doorway pages and scaled content abuse, both of which apply to thin programmatic local pages.

Local pack volatility increased — Local rankings shift more frequently as Google's local algorithm updates more often than organic core updates.

This framework specifies how to build local SEO infrastructure that performs across all surfaces (Local Pack, Maps, organic, AI engines) and resists penalty risk in 2026.


4. Google Business Profile Complete Setup

GBP is the foundation. Without proper GBP, no other local SEO work matters.

4.1 Account Creation and Claim

4.1.1 If business has no existing GBP:

  1. Go to business.google.com
  2. Sign in with the Google account that should own the business (use a business email, not personal)
  3. Click "Add your business to Google"
  4. Enter exact business name (must match what you'll use on website and citations)
  5. Select primary category from Google's list (search carefully — picking wrong category at this stage is hard to fully undo)
  6. Choose business model:
    • Storefront: "Yes, I have a location customers can visit"
    • Service area business: "No, my business doesn't have a location customers can visit"
    • Hybrid: Storefront with service area added later
  7. For storefront: enter exact address; mark on map precisely
  8. For SAB: enter business address (private, not shown publicly) plus service areas
  9. Add phone number (local number preferred over toll-free)
  10. Add website URL

4.1.2 If business has existing GBP claimed by someone else:

  1. Search for the business on Google Maps
  2. Click "Claim this business"
  3. Verify ownership through Google's process
  4. If current owner doesn't respond within 7 days, ownership transfers
  5. If they refuse legitimately (former employee, incorrect claim), escalate via Google Business support

4.1.3 If business has existing GBP not claimed:

  1. Search for the business
  2. Click "Claim this business"
  3. Verify through Google's chosen method (postcard, phone, email, video — varies by category and risk)
  4. Complete verification (postcard takes 5-14 days; video takes hours; phone/email instant)

4.2 Verification

Verification methods Google offers (varies by business type and category):

After verification:

Without verification, GBP listings have severely limited functionality and don't appear in local results.

4.3 Profile Completeness

Google explicitly states "Complete your profile" as a relevance signal. Every available field should be filled.

4.3.1 Required fields:

4.3.2 Profile completeness scoring:

GBP doesn't expose a public completeness score, but track internally:

gbp_completeness_audit:
  business_name: filled
  primary_category: selected
  secondary_categories_count: 5     # Out of 9 max
  address_or_service_area: configured
  phone: filled
  website: filled
  hours: filled
  special_hours: filled
  description: filled
  opening_date: filled
  logo: uploaded
  cover_photo: uploaded
  interior_photos_count: 12
  exterior_photos_count: 8
  team_photos_count: 5
  product_photos_count: 0           # If applicable
  services_listed: 14
  services_have_descriptions: true
  products_listed: 0                # If applicable
  attributes_completed: 18
  qa_seeded_count: 8                # Owner-posted Q&As
  posts_in_last_30_days: 4
  total_completeness_estimate: 92   # Percentage

Aim for 95%+ completeness. The 5% gap typically comes from optional fields that don't apply or features unavailable in the business category.

4.4 Business Name — Critical Compliance

The single most-violated GBP guideline: keyword-stuffing the business name.

Acceptable name format: Exact business name as it appears on signage, legal documents, marketing materials, and the website.

Examples (acceptable):

Violation patterns (frequently seen, frequently penalized):

Why violation matters:

If business has historically used keyword-stuffed name: Update the business name in GBP to compliant version. Update website, social profiles, all citations to match. Brand may take time to adapt but compliance is non-negotiable.

Legitimate exceptions:

When in doubt: does the business actually display this name on its physical signage, business cards, and contracts? If yes, acceptable. If no, violation.

4.5 Categories — Primary and Secondary

Categories drive the relevance factor heavily. Wrong primary category means wrong queries trigger your listing.

Primary category selection process:

  1. Search Google's category list for terms matching the business
  2. Identify all categories that could apply
  3. Choose the most specific category that accurately describes the business
  4. The primary category should be the single most descriptive of what the business primarily does

Examples:

Secondary categories: Add up to 9 additional categories that genuinely apply. Don't add categories where the business has minimal capability — Google may show you for those queries and disappoint searchers.

Category research approach:

  1. Search competitors in your area on Google Maps
  2. Click each competitor's listing
  3. Note their primary category (visible in the listing)
  4. Cross-reference with what your business actually offers
  5. Select primary based on what matches and is most descriptive

Category change implications: Changing primary category mid-stream can affect rankings significantly. Consider carefully before changing. Changes that align category to actual business focus typically help; changes that broaden category to capture more queries typically backfire (relevance dilution).

4.6 Service Area Configuration (for SABs and Hybrid)

Service area businesses (SABs) — businesses that serve customers at the customer's location rather than the business's — have specific GBP requirements.

Storefront vs SAB distinction:

For pure SABs:

For storefront businesses:

For hybrid businesses:

Service area best practices:

Example for ThatComputerDude in Cassville, MO:

service_areas:
  - "Cassville, MO"
  - "Monett, MO"
  - "Aurora, MO"
  - "Mt. Vernon, MO"
  - "Eagle Rock, MO"
  - "Shell Knob, MO"
  - "Washburn, MO"
  - "Exeter, MO"
  - "Purdy, MO"
  - "Stella, MO"
  # And so on for actually-served areas

4.7 Hours of Operation

Hours signal whether the business is currently open — a major factor for "near me" queries.

Best practices:

Special hours — Add explicit special hours for:

Failure to set special hours during holidays causes the listing to show as "open" when actually closed, generating user complaints and rating impact.

4.8 Business Description

The 750-character business description is one of the few editorial sections of GBP. Use it well.

Structure:

[Sentence 1: What the business is and primary service.]
[Sentence 2: Years of experience or unique value proposition.]
[Sentence 3: Service area or specific specializations.]
[Sentence 4: Differentiation from competitors.]
[Sentence 5: Call to action or next step.]

Best practices:

Example for ThatDeveloperGuy:

ThatDeveloperGuy is a Service-Disabled Veteran-Owned web development and search engine optimization firm founded in 2020. Based in Cassville, Missouri, we serve small businesses across the United States with custom website development, multi-tier engine optimization, hosting and maintenance, and computer repair. Founded by Joseph Anady (BA Computer Engineering, MA Cybersecurity), our SDVOSB certification makes us eligible for federal contracting set-aside programs. We currently host 130+ production client sites on our self-managed Linux infrastructure. Contact us at 505-512-3662 or joseph.w.anady@icloud.com to discuss your project.

That's 670 characters with substantive information. Most businesses produce far weaker descriptions.

4.9 Photos

Photos drive engagement, click-through rate, and (likely) ranking. Listings with comprehensive photos outperform listings without.

Required photo types:

Photo best practices:

Photo upload cadence: Add 2-5 new photos monthly. Active listings outperform stagnant listings.

Photo geo-tagging: Photos taken with smartphone GPS contain location metadata. Some local SEO practitioners suggest this helps. Whether it directly affects ranking is debated but it can't hurt.

4.10 Attributes

GBP attributes are category-specific properties businesses can claim:

Implementation:

For ThatDeveloperGuy specifically: Veteran-owned attribute is critical given SDVOSB status — claim it.

4.11 Services and Products

GBP allows listing specific services and products with descriptions.

Services structure:

service:
  name: "Custom Website Development"
  category: "Web Development"
  price: ""                          # Optional; varies by service
  description: "Full-service custom website development for small businesses including design, development, content, hosting setup, and search optimization. Fixed-price packages from $597. SDVOSB-certified."

Add every service the business offers as a discrete service entry. Each service has its own description (300 character limit) — write it specifically.

Products structure (for retail):

product:
  name: "Product name"
  category: "Product category"
  price: ""
  description: ""
  photo: ""

Products help retail businesses appear for product-specific queries.

4.12 Posts

Google Posts are short updates that appear within the GBP listing — like a mini-blog feed inside the listing.

Post types:

Post structure:

Posting cadence: Weekly minimum, twice-weekly ideal. Stale posts signal stale listings.

Post content ideas:

Post benefits:

4.13 Q&A Seeding

The Q&A section of GBP allows users to ask questions publicly. Owners (and other users) can answer.

Owner Q&A strategy:

  1. Identify common customer questions (from sales calls, contact form submissions, FAQ research)
  2. Post questions yourself (allowed and encouraged)
  3. Answer them with helpful, complete responses
  4. Monitor for new user-submitted questions
  5. Respond to user questions within 24 hours

Example Q&A for ThatDeveloperGuy:

Q: Do you offer hosting services?
A: Yes, we provide self-managed Linux hosting on our infrastructure currently supporting 130+ client sites. Hosting is included with our website packages and available standalone. Contact us at 505-512-3662 for current pricing.

Q: Are you SDVOSB certified?
A: Yes, ThatDeveloperGuy is a Service-Disabled Veteran-Owned Small Business. Our SDVOSB certification makes us eligible for federal contracting set-aside programs and qualifying for SDVOSB-preferred procurement.

Q: What does a custom website cost?
A: Our website packages start at $597 for foundation builds and scale to $2,997+ for full-featured sites with booking integration, custom features, and comprehensive content. We provide fixed-price quotes after understanding your project scope.

Q: Where are you located?
A: We're based in Cassville, Missouri (463 State Highway 76). We work with clients across the United States remotely, with most communication via phone, video, and email.

Seed 8-15 owner Q&As covering the most common questions. This helps:

4.14 Messaging

GBP messaging allows customers to text the business directly through the listing.

Implementation:

Considerations:

4.15 Booking Integration

For service businesses, GBP integrates with various booking systems (Square Appointments, Vagaro, Squire, etc.). When integrated, customers can book directly from the GBP listing.

Implementation:


5. Citation Infrastructure

Citations are mentions of the business's NAP (Name, Address, Phone) on other websites. Citation count, quality, and consistency are major prominence signals.

5.1 NAP Consistency Foundation

Before building citations, establish canonical NAP that will be used everywhere:

canonical_nap:
  business_name: "ThatDeveloperGuy"
  address_line_1: "463 State Highway 76"
  address_line_2: ""
  city: "Cassville"
  state: "MO"
  state_full: "Missouri"
  zip: "65625"
  country: "United States"
  phone: "(505) 512-3662"
  phone_alternate_format_1: "505-512-3662"
  phone_alternate_format_2: "5055123662"  # Don't use, but document for cleaning
  website: "https://thatdeveloperguy.com"

Critical consistency rules:

  1. Business name: Exact same spelling, capitalization, punctuation everywhere
  2. Address: Same format everywhere — "St" vs "Street", "Hwy" vs "Highway" (pick one)
  3. Phone: Same format everywhere — "(505) 512-3662" everywhere or "505-512-3662" everywhere (pick one)
  4. Website: Same protocol and www handling — https:// always, https://www. never if canonical is non-www

Inconsistency damage: Each variation (e.g., "ThatDeveloperGuy" vs "That Developer Guy") signals possible duplicate businesses to Google, weakening prominence consolidation.

5.2 Top-Tier Citations (Critical)

These are the foundational citations every local business needs. Listed in priority order:

1. Google Business Profile — Already covered in Section 4 2. Bing Places for Businessbingplaces.com — Bing's GBP equivalent. Also feeds Microsoft Copilot. 3. Apple Business Connectbusinessconnect.apple.com — Apple Maps and Spotlight 4. Yelpbiz.yelp.com — Major review platform with local visibility 5. Facebook Business Pagefacebook.com/business/pages — Social citation 6. Better Business Bureaubbb.org — Trust signal 7. Yellow Pagesyellowpages.com — Traditional directory still active 8. Foursquare for Businessbusiness.foursquare.com — Feeds many other directories 9. LinkedIn Company Pagelinkedin.com/help/linkedin/answer/710 — Professional citation 10. Mantamanta.com — Small business directory 11. MerchantCirclemerchantcircle.com 12. Hotfroghotfrog.com 13. CitySquarescitysquares.com 14. Brownbookbrownbook.net 15. Tupalotupalo.com

For each, claim the listing, fully optimize with consistent NAP, complete description, photos where supported, and category selection.

5.3 Industry-Specific Citations

Beyond top-tier, every industry has trusted directories Google weights heavily.

For attorneys:

For doctors:

For restaurants:

For contractors:

For accountants:

For SDVOSB-specific (ThatDeveloperGuy):

For computer repair:

Identify the 5-15 industry-specific directories most relevant to your business and ensure presence on each.

5.4 Local Citations

City-specific and regional directories matter for local prominence:

For ThatDeveloperGuy in Cassville, MO:

5.5 Citation Audit Process

For existing businesses with citation history:

5.5.1 Discovery:

5.5.2 Audit:

For each citation, verify:

5.5.3 Cleanup:

For each inconsistent citation:

For duplicate listings:

5.5.4 Aggregator approach (faster but expensive):

Services like Yext, Moz Local, or BrightLocal push to multiple directories simultaneously through APIs. Pros:

Cons:

Decision framework:

5.6 Data Aggregator Submissions

Several platforms are foundational data aggregators that feed many other directories:

Submitting accurate data to these aggregators propagates to dozens of downstream directories. Many aggregator submissions are paid services or only accessible through citation management platforms.

5.7 Citation Maintenance

Citation building is not one-time:

Monthly:

Quarterly:

Annually:

5.8 Common Citation Mistakes


6. Review System

Reviews are arguably the strongest prominence signal and a major direct conversion factor.

6.1 Review Acquisition Strategy

Foundation principles:

6.1.1 The legitimate ask:

Acceptable: "If you've had a positive experience, would you mind sharing it on Google?"

Acceptable: "We'd appreciate honest feedback about your experience on our Google review page."

Not acceptable (FTC and Google guideline violations):

The FTC has been actively enforcing fake review and incentivized review violations through 2024-2026. Penalties include large fines and consent decrees. Don't.

6.1.2 Review request mechanisms:

Email-based:

SMS-based (with consent):

In-person:

Receipt/invoice integration:

Tools that automate review acquisition:

6.1.3 Review request timing:

6.2 Review Gating — Critical FTC Issue

Review gating is the practice of pre-screening customers before deciding who to ask for public reviews. Common patterns:

Why it's a violation:

FTC enforcement (October 2024 rule):

The FTC's "Trade Regulation Rule on the Use of Consumer Reviews and Testimonials" (effective October 2024) specifically prohibits:

Penalties include civil penalties up to $51,744 per violation (per review).

Compliance posture:

6.3 Review Response Strategy

Responding to reviews — both positive and negative — is a ranking signal and customer service obligation.

Response rate targets:

6.3.1 Positive review response template:

Thank you, {{first_name}}! We really appreciate you taking the time to share your experience with {{specific_service_or_aspect}}. {{Personalized note about what they mentioned}}. We look forward to working with you again.

— {{your_name}}, {{business_name}}

Example for ThatDeveloperGuy:

Thank you, Eugene! Really appreciate you sharing your experience working with us on the AllRideLimo website. The booking integration was a fun challenge, and we're glad it's working well for your customers. Let us know whenever you're ready to expand to additional features.

— Joseph, ThatDeveloperGuy

6.3.2 Negative review response template:

{{Name}}, we appreciate you sharing this feedback and we're sorry your experience didn't meet expectations. {{Acknowledge specific concern raised}}. {{Specific action taken or offered}}. We'd like to make this right — please reach out directly at {{contact_method}} so we can address this further.

— {{your_name}}, {{business_name}}

Negative review response principles:

When to legitimately challenge reviews:

If a review is genuinely fake (customer never did business with you), the right response is:

  1. Document evidence
  2. Flag the review through Google's review reporting mechanism
  3. Wait for Google's investigation
  4. Don't respond publicly until resolved (or respond carefully without accusations)

If review violates Google's guidelines (profanity, spam, conflict of interest, off-topic), flag through reporting mechanism.

6.4 Review Velocity Management

Review velocity — the rate at which reviews accumulate — is a prominence signal.

Healthy velocity patterns:

Suspicious velocity patterns (Google detects):

Implication: Build review velocity gradually and consistently. Don't try to "catch up" all at once after neglecting reviews.

6.5 Multi-Platform Review Strategy

Different platforms matter for different audiences:

Strategy:

6.6 Review Schema

Mark up reviews on your website with appropriate schema:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "@id": "https://{{domain}}/#localbusiness",
  "name": "{{business_name}}",
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "{{average_rating}}",
    "reviewCount": "{{total_review_count}}",
    "bestRating": "5",
    "worstRating": "1"
  },
  "review": [
    {
      "@type": "Review",
      "author": {"@type": "Person", "name": "{{reviewer_name}}"},
      "datePublished": "{{review_date_iso}}",
      "reviewBody": "{{review_text}}",
      "reviewRating": {
        "@type": "Rating",
        "ratingValue": "{{rating}}",
        "bestRating": "5",
        "worstRating": "1"
      }
    }
  ]
}
</script>

Critical compliance: Review schema markup must reflect actual reviews from genuine customers. Fabricated review schema is a manual action trigger.


7. On-Site Local Signals

Beyond GBP and citations, the website itself sends local signals.

7.1 LocalBusiness Schema

The foundation of on-site local signals:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "@id": "https://{{domain}}/#localbusiness",
  "name": "{{business_name}}",
  "alternateName": "{{dba_or_alternate_names}}",
  "description": "{{full_business_description}}",
  "url": "{{primary_domain_url}}",
  "telephone": "{{primary_phone}}",
  "email": "{{primary_email}}",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "{{address_line_1}}",
    "addressLocality": "{{city}}",
    "addressRegion": "{{state_abbreviation}}",
    "postalCode": "{{zip}}",
    "addressCountry": "{{country_code}}"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": "{{latitude}}",
    "longitude": "{{longitude}}"
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "09:00",
      "closes": "17:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": "Saturday",
      "opens": "10:00",
      "closes": "14:00"
    }
  ],
  "areaServed": [
    {"@type": "City", "name": "Cassville", "@id": "https://www.wikidata.org/wiki/Q1098921"},
    {"@type": "City", "name": "Monett"},
    {"@type": "City", "name": "Aurora"}
  ],
  "priceRange": "$$",
  "image": [
    "{{logo_url}}",
    "{{cover_photo_url}}"
  ],
  "logo": "{{logo_url}}",
  "sameAs": [
    "{{gbp_url}}",
    "{{facebook_url}}",
    "{{x_url}}",
    "{{linkedin_url}}",
    "{{wikidata_url}}"
  ],
  "founder": {"@id": "https://{{domain}}/about/{{founder_slug}}/#person"},
  "foundingDate": "{{year_founded}}",
  "founder": {
    "@type": "Person",
    "name": "{{founder_name}}"
  }
}
</script>

Use the most specific subtype of LocalBusiness available:

Schema.org's full hierarchy of LocalBusiness subtypes provides hundreds of specific types. Use the most specific that applies.

7.2 SAB-Specific Schema Considerations

For service area businesses without public addresses, omit the address property's streetAddress (or use a private address) but include areaServed:

{
  "@type": "LocalBusiness",
  "name": "{{business_name}}",
  "areaServed": [
    {"@type": "City", "name": "Cassville"},
    {"@type": "City", "name": "Monett"}
  ],
  "address": {
    "@type": "PostalAddress",
    "addressLocality": "{{primary_city}}",
    "addressRegion": "{{state}}",
    "addressCountry": "{{country}}"
  }
}

7.3 Multi-Location Schema

For businesses with multiple locations, each location gets its own schema entry, ideally on its own dedicated page:

<!-- On location-specific page like /locations/cassville/ -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "@id": "https://{{domain}}/locations/cassville/#localbusiness",
  "name": "{{business_name}} — Cassville",
  "branchOf": {"@id": "https://{{domain}}/#organization"},
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "{{cassville_address}}",
    "addressLocality": "Cassville",
    "addressRegion": "MO",
    "postalCode": "65625",
    "addressCountry": "US"
  },
  "telephone": "{{cassville_phone}}",
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 36.6770,
    "longitude": -93.8730
  }
}
</script>

7.4 NAP in Footer

Display NAP consistently in the website footer on every page:

<footer class="site-footer">
  <div class="business-info">
    <p class="business-name">{{Business Name}}</p>
    <p class="business-address">
      <span class="street">{{Street Address}}</span><br>
      <span class="city">{{City}}</span>,
      <span class="state">{{State}}</span>
      <span class="zip">{{Zip}}</span>
    </p>
    <p class="business-phone">
      <a href="tel:{{phone_link_format}}">{{Phone}}</a>
    </p>
    <p class="business-hours">
      Open {{Days}}, {{Hours}}
    </p>
  </div>
</footer>

Use HTML5 semantic markup. The footer NAP appears on every page reinforcing local signals throughout the site.

7.5 Embedded Google Map

Embed an actual Google Map showing business location:

<iframe 
  src="https://www.google.com/maps/embed?pb=!1m18!{{embed_code}}"
  width="600" 
  height="450" 
  style="border:0;" 
  allowfullscreen="" 
  loading="lazy" 
  referrerpolicy="no-referrer-when-downgrade"
  title="Map showing location of {{business_name}}">
</iframe>

The embedded map:

7.6 Locations Page (Multi-Location)

For multi-location businesses, build a dedicated /locations/ page listing all locations:

<main class="locations-page">
  <h1>{{Business Name}} Locations</h1>
  
  <p>{{Business name}} serves customers from {{N}} locations across {{regions}}. Find the location nearest you below.</p>
  
  <ul class="location-list">
    <li>
      <h2><a href="/locations/cassville/">Cassville, MO</a></h2>
      <address>
        463 State Highway 76, Cassville, MO 65625
      </address>
      <p>Phone: <a href="tel:5055123662">(505) 512-3662</a></p>
      <p>Hours: Mon-Fri 9-5, Sat 10-2</p>
      <p><a href="/locations/cassville/">View location details →</a></p>
    </li>
    {{ADDITIONAL_LOCATIONS}}
  </ul>
</main>

Each location links to a dedicated location page (Section 7.7).

7.7 Per-Location Pages

Dedicated pages per location for multi-location businesses. Each location page should have:

Critical: Each location page must have substantive unique content. Templated pages with just location swap are doorway pages (see Section 8 and framework-spampolicies.md).

7.8 Local Content Strategy

Beyond pages about the business itself, publish content demonstrating local engagement:

Frequency: Quarterly minimum, monthly ideal for active local SEO.

Quality bar: Same as any content — must add genuine value, not just keyword-target a city.


8. Programmatic Local Pages

Programmatic local pages — pages generated systematically for many city/service combinations — are powerful when done right and dangerous when done wrong.

8.1 The Risk

ThatDeveloperGuy currently has 4,715 programmatic city pages across AR, CO, FL, KS, MO, and OK. This is exactly the territory where:

The line between legitimate and doorway is substantive unique value per page. Templated content with only city name swapped is doorway. Content with genuine location-specific value is legitimate.

8.2 What "Substantive Unique Value Per Page" Means

For a service in a specific city (e.g., "Web Development in Cassville, MO"), the page should include:

Required for legitimacy:

What turns a page from legitimate to doorway:

8.3 Programmatic Page Template Structure

<main class="local-service-page">
  <header>
    <h1>{{SERVICE}} in {{CITY}}, {{STATE}}</h1>
    <p class="page-purpose">
      {{BUSINESS_NAME}} provides {{SERVICE}} for businesses in {{CITY}} and surrounding areas.
    </p>
  </header>
  
  <section class="local-context">
    <h2>{{SERVICE}} Specifically for {{CITY}}</h2>
    <p>{{200_400_WORD_LOCAL_SPECIFIC_DESCRIPTION}}</p>
    <p>{{LOCAL_INDUSTRY_LANDSCAPE_OR_NEEDS}}</p>
    <p>{{HOW_THIS_SERVICE_FITS_LOCAL_MARKET}}</p>
  </section>
  
  <section class="our-experience-here">
    <h2>Our Experience in {{CITY}}</h2>
    {{IF_WE_HAVE_LOCAL_CLIENTS}}
    <p>{{SPECIFIC_LOCAL_PROJECT_HISTORY}}</p>
    {{ELSE}}
    <p>{{HONEST_STATEMENT_OF_SERVICE_AREA_AND_FAMILIARITY}}</p>
    {{/IF}}
  </section>
  
  <section class="local-pricing">
    <h2>Pricing for {{CITY}} Businesses</h2>
    <p>{{HONEST_PRICING_FOR_THIS_MARKET}}</p>
  </section>
  
  <section class="local-resources">
    <h2>{{CITY}} Business Resources</h2>
    <ul>
      <li><a href="{{chamber_url}}">{{CITY}} Chamber of Commerce</a></li>
      <li><a href="{{city_business_dev}}">{{CITY}} Economic Development</a></li>
      {{OTHER_LEGITIMATE_LOCAL_RESOURCES}}
    </ul>
  </section>
  
  <section class="contact-cta">
    <h2>Get Started</h2>
    <p>{{CTA_TEXT}}</p>
    <p>Contact: {{contact_info}}</p>
  </section>
  
  <!-- Schema -->
  <script type="application/ld+json">
  {
    "@context": "https://schema.org",
    "@type": "LocalBusiness",
    "@id": "https://{{domain}}/services/{{service-slug}}/{{city-slug}}/#localbusiness",
    "name": "{{BUSINESS_NAME}} — {{CITY}}",
    "description": "{{SERVICE}} for businesses in {{CITY}}, {{STATE}}",
    "areaServed": {
      "@type": "City",
      "name": "{{CITY}}",
      "addressRegion": "{{STATE_ABBREVIATION}}"
    },
    "branchOf": {"@id": "https://{{domain}}/#organization"}
  }
  </script>
</main>

8.4 Audit Methodology for Existing Programmatic Pages

For each programmatic page in the current 4,715:

page_audit:
  url: ""
  service_targeted: ""
  city_targeted: ""
  
  unique_word_count: 0           # Words specific to this page (not template)
  total_word_count: 0
  uniqueness_ratio: 0.0          # Should be >0.40 minimum, ideally >0.60
  
  has_local_specific_content: false  # Real local context
  has_local_industry_context: false
  has_local_landmarks_or_geography: false
  has_local_pricing: false
  has_local_examples_or_case_studies: false
  has_local_resources: false      # Chamber, etc.
  
  has_localbusiness_schema_with_areaServed: false
  has_branchOf_relationship: false
  
  classification: ""             # "legitimate", "marginal", "doorway"
  action_required: ""            # "keep_as_is", "enrich", "consolidate", "noindex", "remove"

Classification thresholds:

8.5 Sustainable Programmatic Page Strategy

For 4,715 pages, manual creation is impractical. Sustainable approach:

Option A — Reduce footprint dramatically:

Option B — Genuine programmatic enrichment:

Option C — Hybrid:

My recommendation for the 4,715-page situation: Audit critically. The volume that doesn't have substantive unique value is dragging the site overall. Concentrating quality on the cities that genuinely matter improves Local Pack performance more than spreading thin across thousands.

8.6 Programmatic Page Risks Currently Active

In 2026, programmatic page risk is at all-time high:

The 4,715 pages represent significant penalty risk if classified as doorway pages by Google's systems. The audit work isn't optional — it's risk management.


9. Local Link Building

Local backlinks contribute to prominence beyond what citations provide.

9.1 Local Link Sources

Local press:

Local organizations:

Local partnerships:

Local sponsorships:

Local resource pages:

9.2 Local Link Acquisition Patterns

Editorial coverage:

Resource creation:

Partnership building:

9.3 What to Avoid

Link scheme risks (per framework-spampolicies.md):

Local links earned through genuine activity work; manufactured local links don't.


10. Tracking Local Performance

10.1 Google Business Profile Insights

GBP provides detailed analytics:

Track monthly:

10.2 Local Rank Tracking

Standard rank tracking is insufficient for local. Local rankings vary by searcher location even within a single city. Use proximity-based rank tracking:

Tools:

Setup:

Why this matters:

10.3 Citation Health Monitoring

Track citation status over time:

10.4 Review Velocity Tracking

10.5 Local Conversion Tracking in GA4

Configure GA4 to track local-specific conversions:

Local conversions often happen off-site (call, drive to store) — instrument what you can measure.


11. Audit Mode

11.1 Comprehensive Local SEO Audit

# Category Criterion Pass/Fail
GBP
L1 GBP Verified GBP listing
L2 GBP Profile completeness 95%+
L3 GBP Compliant business name (no keyword stuffing)
L4 GBP Correct primary category
L5 GBP Up to 9 secondary categories utilized
L6 GBP Address/service area correctly configured for business model
L7 GBP Hours accurate including special hours
L8 GBP Quality business description 600+ characters
L9 GBP 20+ photos uploaded
L10 GBP All applicable attributes claimed
L11 GBP Services listed with descriptions
L12 GBP Posts published weekly
L13 GBP Q&A seeded with 8+ owner Q&As
Citations
L14 Citations 15 top-tier citations claimed
L15 Citations Industry-specific citations claimed
L16 Citations NAP consistency 95%+ across citations
L17 Citations No duplicate listings (or in resolution)
Reviews
L18 Reviews Active review acquisition system
L19 Reviews Compliant acquisition (no gating, no incentivizing)
L20 Reviews Response rate 100% on negative, 50%+ on positive
L21 Reviews Healthy review velocity ongoing
L22 Reviews Multi-platform review presence
On-Site
L23 On-Site LocalBusiness schema with all required properties
L24 On-Site NAP consistent in footer on every page
L25 On-Site Embedded Google Map
L26 On-Site Per-location pages for multi-location
L27 On-Site Local content published periodically
Programmatic (if applicable)
L28 Programmatic Per-page substantive unique value
L29 Programmatic Doorway risk audit completed
L30 Programmatic Page reduction or enrichment plan in progress
Tracking
L31 Tracking GBP Insights monitored monthly
L32 Tracking Geo-grid local rank tracking active
L33 Tracking Local conversion tracking in GA4

Score: 33. World-class local SEO: 30+/33 with zero "Critical" failures.


12. Common Mistakes & Anti-Patterns

12.1 Keyword-Stuffed Business Name

Anti-pattern: "Smith Plumbing - Best 24/7 Emergency Service in Tampa"

Why it fails: Direct GBP guideline violation. Removable by Google. Reportable by competitors.

Fix: Compliant name matching real signage. Service descriptors in description, not name.

12.2 Wrong Primary Category

Anti-pattern: A general dentist with primary category "Cosmetic Dentist" because "cosmetic" sounds higher-value.

Why it fails: You don't appear for "dentist" queries you should win. Relevance dilution.

Fix: Most descriptive accurate primary category.

12.3 Hidden Storefront Address

Anti-pattern: A retail store hiding its address because "we want to look like we have multiple locations."

Why it fails: Storefront businesses must display address. Hiding violates GBP guidelines.

Fix: Display address. Configure correctly per business model.

12.4 SAB Showing Address Publicly

Anti-pattern: A mobile dog grooming service with street address shown publicly because they don't realize SABs hide addresses.

Why it fails: Address showing for SAB violates guidelines. May trigger suspension.

Fix: Hide address per SAB guidelines. Configure service area instead.

12.5 Inconsistent NAP

Anti-pattern: 50 citations with 8 variations of business name and 5 variations of phone number format.

Why it fails: Google can't fully consolidate prominence signals. Each variation is a partial signal.

Fix: Citation audit and cleanup. Canonical NAP enforced everywhere.

12.6 Review Gating

Anti-pattern: Filtering customers through satisfaction survey before review request.

Why it fails: Google guideline violation. FTC rule violation. Penalties up to $51,744 per review.

Fix: All customers asked on same terms. Accept negative reviews publicly.

12.7 Buying Reviews

Anti-pattern: Paying for reviews. Incentivizing reviews with discounts or rewards.

Why it fails: FTC violation. Google guideline violation. Penalties severe.

Fix: Earn reviews through service quality and appropriate asking.

12.8 No Review Responses

Anti-pattern: 50 reviews, zero responses.

Why it fails: Engagement signal. Customers see lack of response. Negative reviews compound without response.

Fix: Response strategy. 100% on negative, 50%+ on positive.

12.9 Thin Programmatic Pages

Anti-pattern: 4,000+ city pages with templated content and city name swapped.

Why it fails: Doorway page risk. Spam policy violation potential. December 2024 core update specifically targeted this.

Fix: Substantive unique value per page or noindex/remove.

12.10 Duplicate GBP Listings

Anti-pattern: Multiple GBP listings for same business — historical creation by different employees, claim attempts on existing listings, etc.

Why it fails: Splits prominence signals. Confuses Google.

Fix: Identify primary listing. Mark duplicates for merge through Google.

12.11 Stale Listings

Anti-pattern: GBP set up once and never updated. No posts in years. Hours never updated.

Why it fails: Stale signals. Active listings outperform stale ones for ranking.

Fix: Monthly maintenance cadence. Posts weekly. Photos monthly.

12.12 Ignoring Bing Places and Apple Business Connect

Anti-pattern: Optimizing only for Google.

Why it fails: Bing drives Microsoft Copilot. Apple Business Connect drives Apple Maps and Spotlight. Both have user bases. Both contribute to prominence signals across platforms.

Fix: Claim and optimize Bing Places and Apple Business Connect.


13. Cross-Reference to the 14-Tier Framework

Local SEO implementation maps to:

Tier 5 (Local Domination) of the 14-tier framework is essentially this framework's tactical implementation. The strategic principles in this document drive the tactical work in Tier 5.


14. Maintenance Schedule

14.1 Daily

14.2 Weekly

14.3 Monthly

14.4 Quarterly

14.5 Annually

14.6 Event-Driven


15. Implementation/Audit Report Templates

15.1 Local SEO Implementation Report Template

# Local SEO Framework Implementation Report

**Business**: {{BUSINESS_NAME}}
**Implementation Date**: {{TODAY}}
**Business Model**: {{STOREFRONT/SAB/HYBRID}}

## GBP Status
- Verification: {{STATUS}}
- Profile completeness: {{PERCENTAGE}}%
- Primary category: {{CATEGORY}}
- Secondary categories: {{COUNT}}
- Photos uploaded: {{COUNT}}
- Posts in last 30 days: {{COUNT}}

## Citation Status
- Top-tier citations completed: {{X}}/15
- Industry-specific citations: {{COUNT}}
- NAP consistency: {{PERCENTAGE}}%
- Duplicate listings resolved: {{COUNT}}

## Review System Status
- Acquisition system: {{IN_PLACE/PARTIAL/NONE}}
- Compliance verified: {{YES/NO}}
- Current review count: {{COUNT}}
- Average rating: {{RATING}}
- Response rate (negative): {{PERCENTAGE}}%
- Response rate (positive): {{PERCENTAGE}}%

## On-Site Local Signals
- LocalBusiness schema: {{INSTALLED}}
- Per-location pages: {{COUNT}}
- NAP in footer: {{INSTALLED}}
- Embedded map: {{INSTALLED}}

## Programmatic Pages (if applicable)
- Pages audited: {{COUNT}}
- Legitimate: {{COUNT}}
- Marginal (enrichment plan): {{COUNT}}
- Doorway (removed/noindexed): {{COUNT}}

## Tracking Infrastructure
- GBP Insights monitoring: {{ACTIVE}}
- Local rank tracker: {{TOOL}}
- Geo-grid tracking: {{ACTIVE}}
- Local conversion tracking: {{ACTIVE}}

## Sign-Off
Implementation complete: {{DATE}}
Implementer: {{NAME}}

15.2 Local SEO Audit Report Template

# Local SEO Audit Report

**Business**: {{BUSINESS_NAME}}
**Audit Date**: {{TODAY}}

## Executive Summary
{{ONE_PARAGRAPH_ASSESSMENT}}

## Audit Score
{{X}}/33

## GBP Findings
{{DETAILED_FINDINGS}}

## Citation Findings
{{DETAILED_FINDINGS}}

## Review Findings
{{DETAILED_FINDINGS}}

## On-Site Findings
{{DETAILED_FINDINGS}}

## Programmatic Findings (if applicable)
- Pages classified as legitimate: {{COUNT}}
- Pages requiring enrichment: {{COUNT}}
- Pages classified as doorway risk: {{COUNT}}
- Recommended action: {{RECOMMENDATION}}

## Critical Failures
{{LIST_WITH_REMEDIATION}}

## Competitor Comparison
{{HOW_COMPETITORS_RANK_AND_WHY}}

## Recommended Remediation Order
{{PRIORITIZED_LIST}}

## Estimated Remediation Effort
{{HOURS_OR_TIMELINE}}

## Sign-Off

End of Framework Document

Document version: 1.0 Last updated: 2026-04-29 Maintained by: ThatDeveloperGuy

Local SEO is operationally distinct from organic SEO. The signals are different (relevance, distance, prominence vs E-E-A-T and content quality). The platforms are different (GBP, Bing Places, Apple Business Connect, citation directories vs Google search index). The tracking is different (geo-grid proximity tracking vs standard rank tracking). The strategy is different (local-specific content, citations, reviews vs links and entity authority).

For agencies serving local clients, local SEO is foundational. The vast majority of local search is non-discretionary — businesses serving local audiences must rank in the Local Pack and Maps to capture meaningful share of search demand. Sites without local SEO infrastructure leave revenue on the table even when their organic SEO is excellent.

The 4,715-page programmatic situation specifically warrants careful handling. Audit critically. Concentrate quality. Don't carry doorway page risk into 2026 algorithm enforcement.

Companion documents:

Want this framework implemented on your site?

ThatDevPro ships these frameworks as productized services. SDVOSB-certified veteran owned. Cassville, Missouri.

See Engine Optimization service ›