DEV Community

Joseph Anady
Joseph Anady

Posted on • Originally published at thatdevpro.com

Local SEO

Originally published at thatdevpro.com. This framework reference is part of the 14-tier Engine Optimization stack from ThatDevPro, an SDVOSB-certified veteran-owned web + AI engineering studio. You are reading the dev.to mirror; the source-of-truth canonical version with embedded validation tools lives at the link above.

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

  • Google Business Profile Managerbusiness.google.com — primary GBP management
  • Google Maps — for verification and visual auditing
  • Whitespark — citation auditing and acquisition
  • BrightLocal — local SEO platform with citation, rank, and review tracking
  • Moz Local — citation management at scale
  • Yext — enterprise citation management with API distribution
  • Local Falcon / GeoGrid / Local Viking — proximity-based rank tracking (heatmap visualizations of local rankings)
  • PlacesScout — GBP audit and competitor analysis
  • GMB Everywhere / Pleper — GBP analytics
  • Bing Placesbingplaces.com — Bing's equivalent of GBP
  • Apple Business Connectbusinessconnect.apple.com — Apple Maps and Spotlight
  • Industry-specific directory access — varies by industry

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
Enter fullscreen mode Exit fullscreen mode

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):

  • Postcard — Most common; takes 5-14 days; Google mails physical postcard with code
  • Phone — Available for some categories; instant code via voice or SMS
  • Email — Available for some businesses with verifiable business email matching domain
  • Video — Live video verification of business location and identity (relatively new)
  • Instant — For businesses already verified through Google Search Console

After verification:

  • Listing status changes to "Verified"
  • Full feature access unlocked
  • Listing appears in search and Maps results
  • Owner can respond to reviews, post updates, etc.

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:

  • Business name — Exact match to website and citations (no keyword stuffing — see Section 4.4 violation list)
  • Category — primary — Most specific category that accurately describes the business (Section 4.4)
  • Category — secondary — Up to 9 additional accurate categories
  • Address — Exact, formatted per Google's geocoding (Section 4.5)
  • Service area — For SABs, list specific cities/regions served (Section 4.6)
  • Phone — Local area code preferred for relevance; toll-free acceptable as secondary
  • Website — Use the canonical URL (with or without www, with proper protocol)
  • Hours — Regular weekly hours (Section 4.7)
  • Special hours — Holidays, exceptions, seasonal changes
  • Business description — 750 characters max, well-crafted (Section 4.8)
  • Opening date — Year business opened
  • Photos — Logo, cover, interior, exterior, team, products (Section 4.9)
  • Services — Specific services offered with descriptions
  • Products — If applicable
  • Attributes — Available attributes vary by category (Section 4.10)
  • Q&A — Owner-posted questions and answers preempting common customer questions

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
Enter fullscreen mode Exit fullscreen mode

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):

  • "Smith & Associates Law"
  • "Mountain View Plumbing"
  • "Cassville Auto Repair"

Violation patterns (frequently seen, frequently penalized):

  • "Smith & Associates Law - Best Lawyers in Mountain View"
  • "Mountain View Plumbing | 24/7 Emergency Service Available"
  • "Cassville Auto Repair: Brakes, Engine, Transmission, Oil Change"

Why violation matters:

  • Google's GBP guidelines explicitly prohibit it
  • Competitors can report violations through "Suggest an edit"
  • Google removes violating modifiers automatically (sometimes silently)
  • Suspicious patterns can trigger broader account review or suspension

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:

  • Descriptive identifiers that are part of the actual business name (e.g., "ABC Roofing & Siding" if siding is genuinely in the legal name)
  • Geographic descriptors that are part of the legal name (e.g., "First Bank of Tennessee")
  • Formal business types (e.g., "Smith Law LLC", "Jones Medical PA")

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:

  • A bakery that primarily sells wedding cakes → Primary: "Wedding bakery" (more specific than "Bakery")
  • A general dentist who also does cosmetic work → Primary: "Dentist" (most descriptive); Secondary: "Cosmetic dentist"
  • A plumbing company that also does HVAC → Primary: "Plumber"; Secondary: "HVAC contractor"

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:

  • Storefront: Customers come to your location (restaurant, retail store, dental office, salon)
  • SAB: You go to customers (plumber, electrician, mobile dog grooming, residential cleaner)
  • Hybrid: Both apply (e.g., a plumbing company with a storefront for parts that also does service calls)

For pure SABs:

  • Hide your address publicly (mandatory per GBP guidelines)
  • Use "Specific cities/regions" or "Radius around an address" to define service area
  • List specific cities/towns/regions served (more accurate than radius)
  • Don't claim service in cities where you don't actually serve regularly
  • Service area covers where you'll travel to customers, not where you'd advertise

For storefront businesses:

  • Display address publicly
  • Don't add service area unless you legitimately offer service-at-customer-location

For hybrid businesses:

  • Display address (for storefront customers)
  • Add service area for the service portion
  • Be honest about which categories apply to which model

Service area best practices:

  • List the specific cities served, not just county or state
  • Include the city your address is in
  • Include 5-15 surrounding cities you actually serve
  • Don't list cities 2 hours away you've served once
  • Update as service area expands or contracts

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
Enter fullscreen mode Exit fullscreen mode

4.7 Hours of Operation

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

Best practices:

  • Set regular hours accurately
  • Update for any temporary changes (vacation, holidays, weather closures)
  • Add special hours for every observed holiday
  • "24 hours" only if literally 24 hours
  • "By appointment only" via attribute, not in business name
  • Closed days should show "Closed" not be empty

Special hours — Add explicit special hours for:

  • Federal holidays observed (or not observed)
  • Religious holidays observed
  • Local events affecting hours
  • Annual closures (vacation, maintenance)
  • Seasonal changes if applicable

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.]
Enter fullscreen mode Exit fullscreen mode

Best practices:

  • Lead with what the business does
  • Include primary service keywords naturally
  • Mention service area
  • Include the year established or experience
  • Avoid keyword stuffing
  • Avoid promotional offers (Google removes them)
  • Avoid links (description doesn't support them)
  • Make it human-readable, not just SEO-optimized

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.
Enter fullscreen mode Exit fullscreen mode

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:

  • Logo — Square format, 250x250 minimum, transparent background preferred
  • Cover photo — Landscape format, 1080x608 ideal, represents the business
  • Profile photo — Optional but recommended
  • Exterior photos — Multiple angles of the building/storefront
  • Interior photos — What customers see when they enter
  • Team photos — People build trust
  • Product photos — If applicable
  • Service photos — In-action photos of services being performed
  • Common areas — Lobby, waiting rooms, parking
  • At-work photos — For SABs especially, show services in action

Photo best practices:

  • High resolution but reasonable file size (200KB-2MB optimal)
  • Real photos, not stock
  • Recent photos (update annually)
  • Diverse angles
  • Good lighting
  • People (with permission)
  • Consistent visual quality

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:

  • Wheelchair accessible
  • Wi-Fi available
  • Family-friendly
  • Veteran-owned
  • LGBTQ+ owned
  • Women-owned
  • Black-owned
  • Online appointments available
  • Online estimates available
  • Identifies as women-owned
  • Free Wi-Fi
  • Outdoor seating
  • Parking available
  • Specific service options (curbside pickup, in-store pickup, delivery, dine-in)

Implementation:

  • Add every attribute that genuinely applies
  • Ownership/identity attributes (veteran-owned, LGBTQ+ owned, etc.) are publicly visible — only claim if true and you want public recognition
  • Service attributes affect which queries trigger your listing
  • Update as attributes change (new accessibility additions, new service options)

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."
Enter fullscreen mode Exit fullscreen mode

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: ""
Enter fullscreen mode Exit fullscreen mode

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:

  • What's new — General update or news
  • Event — Specific dated event
  • Offer — Promotional offer with start/end dates
  • Product — Featured product

Post structure:

  • Photo or video
  • 1500 character text
  • Optional CTA button (Learn more, Sign up, Buy, etc.)
  • Optional link

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

Post content ideas:

  • Recent project completions
  • New service offerings
  • Upcoming availability
  • Educational content related to your services
  • Recent client testimonials (with permission)
  • Community involvement
  • Seasonal content
  • Holiday hours reminders

Post benefits:

  • Engagement signal (active listing ranks better)
  • Direct visibility of business activity
  • Click-through to website
  • Featured posts can appear prominently in search results

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.
Enter fullscreen mode Exit fullscreen mode

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

  • Answer customer questions before they have to ask
  • Surface relevant information in search results
  • Demonstrate active listing management
  • Provide additional content for relevance signals

4.14 Messaging

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

Implementation:

  • Enable messaging in GBP settings
  • Set response expectation (target: respond within 24 hours)
  • Configure auto-reply if needed
  • Monitor message inbox daily

Considerations:

  • Messages create a customer service obligation
  • Slow response damages listing performance
  • Alternative: don't enable if you can't respond promptly

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:

  • If business uses supported booking system, integrate
  • Test the booking flow from a customer perspective
  • Ensure availability stays accurate
  • Monitor for booking system disconnections

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"
Enter fullscreen mode Exit fullscreen mode

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:

  • Avvo, Justia, FindLaw, Martindale-Hubbell, Lawyers.com, state bar directories

For doctors:

  • Healthgrades, Vitals, RateMDs, WebMD Doctors, Zocdoc, state medical board

For restaurants:

  • TripAdvisor, OpenTable, Zomato, Restaurant.com

For contractors:

  • HomeAdvisor, Angi, Houzz, Thumbtack, Porch, BuildZoom

For accountants:

  • AICPA, state CPA society, Yelp, Accounting.com

For SDVOSB-specific (ThatDeveloperGuy):

  • SAM.gov (System for Award Management) — federal contracting registration
  • SBA.gov — Small Business Administration profile
  • National Veteran-Owned Business Association (NaVOBA) directory
  • VetBiz.gov verification

For computer repair:

  • Yelp, Angi, Thumbtack, Best Pick Reports

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:

  • Local Chamber of Commerce — pay membership, get listing
  • Local newspaper directories — many newspapers maintain business directories
  • Local business associations
  • Local government business registries
  • Community-specific directories — varies by city
  • Regional business publications

For ThatDeveloperGuy in Cassville, MO:

  • Cassville Chamber of Commerce
  • Barry County Chamber
  • Missouri SDVOSB directory
  • Local civic association directories
  • Cassville Democrat (local newspaper) business directory

5.5 Citation Audit Process

For existing businesses with citation history:

5.5.1 Discovery:

  • Use Whitespark, BrightLocal, or Moz Local to find existing citations
  • Manual search: "{{business_name}}" "{{phone}}" in Google
  • Manual search: "{{business_name}}" "{{address}}" in Google
  • Document every citation found

5.5.2 Audit:

For each citation, verify:

  • Business name exact match
  • Address exact match
  • Phone exact match
  • Website exact match
  • Category accurate
  • Photos present where supported

5.5.3 Cleanup:

For each inconsistent citation:

  • Claim the listing if not claimed
  • Update to canonical NAP
  • Document update date
  • Verify update propagated

For duplicate listings:

  • Report duplicates through platform's reporting mechanism
  • Request consolidation where possible
  • Track resolution

5.5.4 Aggregator approach (faster but expensive):

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

  • Faster for many citations
  • Automatic propagation of updates
  • Single dashboard

Cons:

  • Subscription cost
  • Some directories may not accept aggregator updates
  • May not catch all needed directories

Decision framework:

  • Single business with 50+ existing citations: aggregator probably worth it
  • New business needing fresh citations: manual building first 15-20, then aggregator for breadth
  • Multi-location business: aggregator strongly recommended

5.6 Data Aggregator Submissions

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

  • Data Axle (formerly Infogroup)
  • Localeze / Neustar
  • Foursquare
  • Factual

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:

  • Check 5-10 citations for unauthorized changes
  • Verify any new directory additions

Quarterly:

  • Comprehensive citation audit
  • NAP consistency check across full citation profile
  • Update photos and descriptions on platforms supporting them
  • Address any new duplicates

Annually:

  • Full citation profile review
  • Add new directories that have emerged
  • Remove or correct outdated listings
  • Strategic decision: which directories matter for current business model?

5.8 Common Citation Mistakes

  • Inconsistent name across citations — "ABC Roofing" vs "ABC Roofing LLC" vs "ABC Roofing Co"
  • Inconsistent phone format — variations across directories
  • Inconsistent address abbreviations — "St" vs "Street", "Ave" vs "Avenue"
  • www vs non-www — pick one and use everywhere
  • Old phone or address persisting in unclaimed citations
  • Wrong category on industry directories
  • Auto-generated descriptions instead of curated ones
  • Missing photos on platforms supporting them

6. Review System

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

6.1 Review Acquisition Strategy

Foundation principles:

  • Ask everyone (with discrimination by experience) — but you need a system
  • Time the ask appropriately — at peak satisfaction
  • Make the path easy — direct link to review platform
  • Don't gate or manipulate — FTC violation territory
  • Don't pay for reviews — FTC violation territory
  • Don't review-swap with competitors — FTC violation territory

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):

  • "Leave us a 5-star review and we'll give you 10% off your next service"
  • "Only customers who give 5-star reviews qualify for our loyalty program"
  • "Filter through our happy customer survey first; we'll send the link to those satisfied"
  • "We'll waive the service fee for a positive review"

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:

  • Send 1-3 days after service completion
  • Include direct link to Google review page (find via your GBP)
  • Personalize with customer name and service performed
  • Don't use mass-blast generic templates

SMS-based (with consent):

  • Same timing as email
  • Direct link to review
  • Brief, warm message

In-person:

  • Hand customer a card with QR code linking to review page
  • Verbal request at peak satisfaction moment
  • Train staff on appropriate framing

Receipt/invoice integration:

  • Print direct review link or QR code on receipts
  • Include in digital invoices
  • Reference at completion

Tools that automate review acquisition:

  • BirdEye, Podium, NiceJob, GatherUp, Reputation.com
  • These integrate with point of sale or CRM, send post-service review requests automatically
  • Pricing varies $50-$500/month

6.1.3 Review request timing:

  • B2B services: 1-2 weeks after project completion
  • Restaurants: Day of or day after dining
  • Repair services: 1-3 days after work completed
  • Healthcare: 1-2 days after appointment
  • Retail: 3-7 days after purchase (gives time to use product)
  • Professional services: After major milestone (case resolution, return signed, etc.)

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:

  • "Rate your experience 1-5 stars" → only customers selecting 4-5 are then asked for Google review; lower ratings directed to private feedback
  • Survey before review request that filters happy customers from unhappy ones
  • "How would you rate us?" → branching based on response

Why it's a violation:

  • Google's review guidelines explicitly prohibit it
  • FTC's October 2024 final rule on fake reviews makes it explicitly illegal
  • Customers and competitors increasingly aware and reporting it
  • Review platforms detect patterns of artificially elevated ratings

FTC enforcement (October 2024 rule):

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

  • Buying or incentivizing reviews
  • Deceptively presenting fake reviews as genuine
  • Suppressing or hiding negative reviews
  • Insider reviews without disclosure
  • Review hijacking
  • Deceptive review websites

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

Compliance posture:

  • All customers asked for reviews on the same terms
  • Lower-rated reviews accepted publicly
  • Address negative reviews professionally
  • Don't use any "filter then route" mechanism

6.3 Review Response Strategy

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

Response rate targets:

  • 100% of negative reviews (1-3 stars)
  • 100% of detailed positive reviews
  • 50%+ of brief positive reviews
  • Within 24 hours for negative
  • Within 7 days for positive

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}}
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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}}
Enter fullscreen mode Exit fullscreen mode

Negative review response principles:

  • Acknowledge the customer's experience without being defensive
  • Don't argue facts in public response (even if you disagree)
  • Take specific accountability for what's reasonable
  • Offer to resolve offline
  • Don't apologize for things that didn't happen
  • Don't expose customer details
  • Don't accuse customer of lying or being unreasonable
  • Maintain professional tone regardless of provocation

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:

  • Consistent monthly review acquisition matching business volume
  • Mix of review platforms (not all on one)
  • Variety in review length and content
  • Reviews from genuinely different customers

Suspicious velocity patterns (Google detects):

  • 0 reviews for 6 months, then 50 reviews in 2 weeks
  • All reviews on same day
  • All reviews from accounts with no history
  • All reviews very short and similar in tone
  • Reviews from accounts in geographic locations inconsistent with business location

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:

  • Google Business Profile: Primary platform; affects local pack ranking
  • Yelp: Restaurant and service-heavy; some industries weight heavily
  • Facebook: Social discovery; recommendations carry weight
  • BBB: Trust-conscious customers
  • Industry-specific (Healthgrades, Avvo, Houzz, etc.): Industry-specific authority

Strategy:

  • Build Google reviews as primary focus
  • Develop secondary platform reviews based on customer base
  • Don't ignore industry-specific platforms — they often appear in Google search results for branded queries
  • Maintain consistent rating across platforms (large gaps signal manipulation on one platform)

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>
Enter fullscreen mode Exit fullscreen mode

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>
Enter fullscreen mode Exit fullscreen mode

Use the most specific subtype of LocalBusiness available:

  • LegalService for law firms
  • MedicalBusiness (or specific subtypes) for healthcare
  • Restaurant for restaurants
  • Plumber for plumbing
  • WebDesign for web development

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}}"
  }
}
Enter fullscreen mode Exit fullscreen mode

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>
Enter fullscreen mode Exit fullscreen mode

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>
Enter fullscreen mode Exit fullscreen mode

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>
Enter fullscreen mode Exit fullscreen mode

The embedded map:

  • Verifies for users that the business has a real location
  • Provides direct directions functionality
  • Is a known local SEO signal (debated impact but standard practice)

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>
Enter fullscreen mode Exit fullscreen mode

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:

  • Address
  • Phone (location-specific if different)
  • Hours
  • Embedded Google Map
  • Photos of that specific location
  • Team members at that location
  • Services offered at that location (may differ across locations)
  • Reviews specific to that location
  • Local content (community involvement, location-specific news)
  • Local schema with branchOf relationship

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:

  • Local news commentary — Industry topics with local angle
  • Community involvement — Sponsorships, charitable work, local events
  • Local case studies — Projects with local clients (with permission)
  • Local partnerships — Other businesses you work with
  • Area guides — If genuinely useful to your audience
  • Local industry analysis — How national trends affect your local market

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:

  • Done well, generates substantial local search traffic across many queries
  • Done poorly, triggers doorway page penalty (see framework-spampolicies.md Section 4.2)

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:

  • Real local information about the city or service area
  • Specific local context (population, business landscape, industry mix)
  • Mentions of local landmarks, neighborhoods, regions
  • Local team or contact information
  • Reviews or testimonials from this location's customers (when applicable)
  • Local pricing if it differs by market
  • Local case studies or project examples (with permission)
  • Service area map showing this specific city

What turns a page from legitimate to doorway:

  • Just template with city name substituted
  • Identical content with minimal city-specific elements
  • City-specific elements that are merely lists of nearby cities (still derivative)
  • No genuine reason this page is on this site versus a competitor's

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>
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

Classification thresholds:

  • Legitimate: 60%+ uniqueness, 5+ local-specific elements, substantive local context — keep
  • Marginal: 30-60% uniqueness, 2-4 local elements — enrich substantially
  • Doorway: <30% uniqueness, minimal local content — noindex or remove

8.5 Sustainable Programmatic Page Strategy

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

Option A — Reduce footprint dramatically:

  • Identify top 50-100 cities with genuine business activity in your service area
  • Build substantive pages for these
  • Noindex the remaining 4,500+
  • Quality concentration over quantity

Option B — Genuine programmatic enrichment:

  • Source location-specific data per city (population, business count, industry mix, demographic data from US Census)
  • Write per-city local context paragraphs (could be AI-assisted with substantial editing)
  • Add per-city resources (Chamber URL, local government, etc.)
  • Per-city pricing variations if applicable
  • Per-city case studies as they're acquired

Option C — Hybrid:

  • Top 100 cities: substantive content, premium local treatment
  • Next 500 cities: enriched programmatic with location data and resources
  • Remaining 4,000+: noindex or remove

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:

  • March 2024 spam policy expansion
  • May 2024 spam update enforcement
  • December 2024 core update specifically targeted thin programmatic content
  • Continued enforcement through 2026

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 newspapers
  • Regional business publications
  • Industry trade publications with local coverage
  • Local TV station websites

Local organizations:

  • Chamber of Commerce
  • Business Improvement District
  • Industry associations local chapters
  • Civic groups

Local partnerships:

  • Suppliers and vendors
  • Complementary businesses (mutual referrals)
  • Local non-profits you support

Local sponsorships:

  • Sports teams
  • Events
  • School programs
  • Community initiatives

Local resource pages:

  • "Best of [City]" listicles (when genuinely qualified)
  • Local resource directories
  • Tourist information sites

9.2 Local Link Acquisition Patterns

Editorial coverage:

  • Press releases about genuine business news
  • Local journalist relationships
  • Newsworthy events (anniversaries, expansions, awards)

Resource creation:

  • Genuinely useful local resources (industry guide for the area, local research)
  • Local events you host or sponsor
  • Local data analysis worth citing

Partnership building:

  • Mutual referrals with complementary businesses (without quid-pro-quo links — see spam policies)
  • Joint events and content
  • Co-marketing with consent

9.3 What to Avoid

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

  • Buying local links
  • Excessive link exchanges
  • Forum signature links
  • Comment links on other local sites
  • "Local SEO services" promising backlinks at scale

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:

  • Profile views (total)
  • Search vs Maps views
  • Direct (branded) searches
  • Discovery searches (non-branded)
  • Branded searches breakdown
  • Photo views relative to similar businesses
  • Customer actions (calls, direction requests, website clicks, messages)

Track monthly:

  • Total views trend
  • Direct vs discovery search ratio (discovery growth = better organic prominence)
  • Action conversion rate (actions / views)
  • Photo engagement vs competitors

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:

  • Local Falcon — most popular; visualizes rankings as heatmap across geographic grid
  • Local Viking — similar functionality
  • BrightLocal Local Search Grid
  • Whitespark Rank Tracker

Setup:

  • Select keywords to track
  • Define geographic grid (e.g., 7×7 grid covering primary service area)
  • Tool fakes searcher location at each grid point
  • Reports rank at each location
  • Heatmap visualization shows where rankings are strong vs weak

Why this matters:

  • A keyword may rank #1 right at your business location and #10 just 5 miles away
  • Distance is one of three local ranking factors
  • Geographic ranking variance is normal but actionable
  • Identifies geographic gaps in prominence

10.3 Citation Health Monitoring

Track citation status over time:

  • Total citation count
  • NAP consistency percentage
  • New citations acquired
  • Citations corrected
  • Duplicate listings discovered/resolved

10.4 Review Velocity Tracking

  • New reviews per month
  • Average rating trend
  • Response rate
  • Sentiment patterns
  • Platform distribution (Google vs Yelp vs Facebook etc.)

10.5 Local Conversion Tracking in GA4

Configure GA4 to track local-specific conversions:

  • Phone calls (via call tracking integration)
  • Form submissions with location field
  • Appointment bookings
  • Driving direction requests
  • Maps app launches
  • Address copies

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 1 EEA — E-E-A-T entity work overlaps with local entity establishment
  • Tier 2 LIO — Local Information Optimization
  • Tier 5 GBO — GBP Optimization (entire tier)
  • Tier 5 LCO — Local Content Optimization
  • Tier 5 LCT — Local Citation
  • Tier 5 LRM — Local Reputation Management
  • Tier 5 NAP — NAP Consistency
  • Tier 5 LMK — Local Markup
  • Tier 5 LPP — Local Per-Page (programmatic)
  • Tier 8 GA4 — Local conversion tracking
  • Tier 9 LRT — Local Rank Tracking

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

  • Monitor GBP messages if enabled
  • Respond to new reviews (target: same day for negative)

14.2 Weekly

  • Publish 1-2 GBP posts
  • Add 2-3 new photos
  • Check for new reviews
  • Monitor GBP for unauthorized edits

14.3 Monthly

  • Comprehensive GBP performance review (insights)
  • Review citation health (sample 20 top citations)
  • Local rank check (geo-grid)
  • Local content publication (at least 1 piece)
  • Competitor GBP audit (1-2 key competitors)

14.4 Quarterly

  • Full local SEO audit (Section 11)
  • Full citation audit
  • Programmatic page audit (if applicable)
  • Review acquisition system performance review
  • Update business attributes if changes
  • Refresh photos comprehensively

14.5 Annually

  • Comprehensive Local SEO strategy review
  • Update business description if business has evolved
  • Review all secondary categories — still accurate?
  • Strategic competitor analysis
  • Refresh all photos with current ones
  • Comprehensive industry directory review (any new ones?)

14.6 Event-Driven

  • Address change → update GBP within 24 hours; cascade to all citations within 7 days
  • New phone → same cascade
  • New service offering → add to GBP services
  • New attribute (e.g., new accessibility feature) → add to GBP
  • Holiday hours → set special hours 2+ weeks ahead
  • Major business change (rebrand, ownership change) → comprehensive update

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}}
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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:

  • framework-eeat.md — Foundational E-E-A-T (entity work overlaps)
  • framework-knowledgegraph.md — Knowledge Graph (local entity authority)
  • framework-spampolicies.md — Spam Policies (doorway pages, programmatic risk)
  • framework-hcs.md — Helpful Content System (programmatic page quality)
  • framework-aicitations.md — AI Citations (local AI Overview implications)

From the ThatDevPro Engine Optimization framework library. Studio: ThatDevPro (SDVOSB veteran-owned web + AI engineering). Sister property: ThatDeveloperGuy. Source: https://www.thatdevpro.com/insights/framework-localseo/.

Top comments (0)