LOCAL-IMPACT Auditor — Proprietary Scoring Framework
You are executing the LOCAL-IMPACT scoring framework — a 60-item assessment of local business presence, visibility, and competitiveness. This is the primary scoring framework for local SEO health.
Framework: LOCAL-IMPACT (Local Optimization, Consistency, Authority & Listing — Impact Performance Assessment & Competitive Tracking) Items: 60 | Scale: 0–3 per item | Max Raw: 180 | Normalized: 0–100 | Version: 2025.1
Prerequisites
Before scoring, confirm you have:
- Business name, website URL, target location
- Google Business Profile URL (or search
business name + locationon Google Maps) - At least 3 competitor GBP URLs for comparison
- Access to or output from prior audit phases in
{AUDIT_DIR}/
If missing, collect before proceeding. Read {AUDIT_DIR}/intake-data.md for all context.
Framework Reference
Load the complete rubric from references/local-impact-benchmark.md.
Scoring Dimensions
| Code | Dimension | Items | Max | Key Tools |
|---|---|---|---|---|
| L | Listing Quality | 10 | 30 | Google Maps, GBP dashboard, BrightLocal |
| O | Online Reviews | 10 | 30 | BrightLocal, Podium, ReviewTrackers |
| C | Citation Consistency | 10 | 30 | BrightLocal, Whitespark, Yext |
| A | Authority Signals | 10 | 30 | Ahrefs, Majestic, Moz Link Explorer |
| L2 | Local Content | 5 | 15 | Screaming Frog, GSC, site_crawler.py |
| I | Integrated Visibility | 5 | 15 | Apple Maps, Bing Places, Otterly.ai |
| P | Performance | 5 | 15 | PageSpeed Insights, GTmetrix, Lighthouse |
| T | Tracking | 5 | 15 | GA4, GSC, CallRail, Hotjar |
Step 1: Research Phase — Dimension-by-Dimension Evidence Gathering
Dimension L — Listing Quality (GBP Completeness)
Primary tool: Google Business Profile dashboard or Google Maps listing 2025 GBP Completeness Checklist:
- Business name (exact legal name, no keyword stuffing) — GSC brand signal
- Primary category + all relevant secondary categories (2025: up to 10)
- Description — 750 character max, keyword-rich first 250 chars
- Service areas (if service-area business) vs. storefront address
- Hours of operation including special/holiday hours
- Phone number (local area code preferred over 1-800)
- Website URL (tracking parameter:
?utm_source=google&utm_medium=organic&utm_campaign=gbp) - Products/Services with prices, descriptions (every service listed)
- Photos: minimum 10 exterior + 10 interior + 5 team + 5 work examples (2025 benchmark: 50+ total)
- GBP Posts: minimum 1 active post per week (offers, updates, events)
- Q&A section: minimum 5 seeded Q&As with keyword-rich answers
- Attributes: all applicable attributes checked (women-owned, veteran-owned, accessibility, etc.)
- Messaging enabled (if applicable to business type)
- Menu/Service menu (for restaurants/salons/etc.)
Benchmark thresholds:
- 100% complete: all 13 elements present → Score 3
- 8–12 elements: → Score 2
- 4–7 elements: → Score 1
- <4 elements: → Score 0
Dimension O — Online Reviews
Primary tools: BrightLocal Review Dashboard, Google Maps, Podium, ReviewTrackers 2025 Review Benchmarks (Local Pack Competitiveness):
| Metric | Score 3 (Excellent) | Score 2 (Good) | Score 1 (Weak) | Score 0 (Absent) |
|---|---|---|---|---|
| Google rating | ≥4.5 stars | 4.0–4.4 stars | 3.5–3.9 stars | <3.5 stars |
| Google review count | ≥50 reviews | 25–49 reviews | 10–24 reviews | <10 reviews |
| Review velocity | ≥4 new/month | 2–3 new/month | 1 new/month | <1 per month |
| Response rate | ≥90% responded | 70–89% | 50–69% | <50% |
| Response time | <24 hours | 24–72 hours | 3–7 days | >7 days |
| Review platforms | 4+ platforms | 3 platforms | 2 platforms | 1 platform only |
Multi-platform check: Google, Yelp, Facebook, TripAdvisor, BBB, Houzz, Healthgrades, Avvo (per industry) AI visibility angle: Google AI Overviews pulls review ratings — businesses with <4.0 stars are rarely featured
Dimension C — Citation Consistency
Primary tools: BrightLocal Citation Audit, Whitespark Citation Finder, Yext Knowledge Network NAP Consistency Check:
- Name: Exact match across all directories (no abbreviations, no "LLC" variations)
- Address: Street number, street name, suite formatting consistent (Ste vs Suite vs #)
- Phone: Same format (+1-XXX-XXX-XXXX vs (XXX) XXX-XXXX — pick one)
Tier 1 Citations (must be present): Data Axle (formerly Infogroup), Neustar/Localeze, Acxiom, Foursquare — these feed hundreds of downstream directories
Tier 2 Citations (local pack important): Google Business Profile, Yelp, Facebook, BBB, Apple Maps, Bing Places, Foursquare, Yellow Pages, MapQuest
Inconsistency threshold: >3 NAP inconsistencies across top 50 citations → Score 0–1
Dimension A — Authority Signals
Primary tools: Ahrefs Site Explorer, Majestic (Trust Flow / Citation Flow), Moz Domain Authority Local Authority Benchmarks:
| Signal | Score 3 | Score 2 | Score 1 | Score 0 |
|---|---|---|---|---|
| Domain Rating (Ahrefs DR) | >30 | 15–30 | 5–14 | <5 |
| Local referring domains | >25 local RDs | 10–25 | 3–9 | <3 |
| Chamber of Commerce link | Present | — | — | Absent |
| BBB accreditation | Accredited | Listed | — | Not listed |
| .edu / .gov links | Any present | — | — | None |
| Industry association links | 3+ | 1–2 | — | None |
Local link types to check: Chamber of Commerce, local newspaper mentions, city/county business directories, industry associations, local sponsorships
Dimension L2 — Local Content Quality
Primary tools: Screaming Frog, {DATA_DIR}/crawl/ (site_crawler.py output), GSC Content Thresholds:
- Service pages: ≥800 words, unique content per service, service-area keywords integrated
- Location pages (multi-location): ≥600 words, unique to each location (not templated)
- Blog/local content: Regular publishing (min 2×/month), community-relevant topics
- Schema: LocalBusiness + Service + FAQPage + Review schema on key pages
- Internal linking: Service pages linked from homepage + location pages
Dimension I — Integrated Visibility
Tools: Apple Maps Connect, Bing Places for Business, Otterly.ai (AI mention tracking) 2025 Visibility Checklist:
- Apple Maps claimed and verified (Siri voice search source)
- Bing Places verified (powers Copilot local results)
- Google Maps embed on contact/location page
- Voice search readiness: FAQ content with conversational phrasing
- AI Overview presence: Test "near me" queries in Google — does business appear?
- ChatGPT / Perplexity citation: Search business name in AI assistants
- Social media profiles: Facebook, Instagram linked + active (within 30 days)
Dimension P — Performance
Primary tools: Google PageSpeed Insights (pagespeed.web.dev), GTmetrix, Chrome DevTools Lighthouse 2025 Core Web Vitals Thresholds:
| Metric | Score 3 | Score 2 | Score 1 | Score 0 |
|---|---|---|---|---|
| LCP (Largest Contentful Paint) | <1.8s | 1.8–2.5s | 2.5–4.0s | >4.0s |
| INP (Interaction to Next Paint) | <100ms | 100–200ms | 200–500ms | >500ms |
| CLS (Cumulative Layout Shift) | <0.05 | 0.05–0.10 | 0.10–0.25 | >0.25 |
| Mobile PageSpeed score | >90 | 70–90 | 50–69 | <50 |
| TTFB (Time to First Byte) | <400ms | 400–800ms | 800–1800ms | >1800ms |
Note: INP replaced FID as a Core Web Vital in March 2024.
Dimension T — Tracking Setup
Primary tools: GA4, Google Search Console, CallRail/WhatConverts (call tracking) Tracking Checklist:
- GA4 installed + configured (goals, conversions set up)
- GSC verified + sitemap submitted + no coverage errors
- Call tracking active (CallRail, WhatConverts, or similar)
- GBP Insights reviewed monthly (calls, directions, website clicks)
- Conversion tracking: form submissions, calls, bookings tracked as GA4 events
- UTM parameters on GBP website link
Step 2: Score Each Item (0–3 Scale)
For each of the 60 items in references/local-impact-benchmark.md, assign:
| Score | Label | Meaning |
|---|---|---|
| 0 | Absent | Not implemented at all |
| 1 | Weak | Partially implemented, significant gaps |
| 2 | Good | Implemented correctly, minor improvements possible |
| 3 | Excellent | Fully optimised, best-in-class implementation |
Record evidence for every score — no unsupported scores.
Step 3: Veto Check (2025 Updated)
Apply BEFORE calculating final score. Highest applicable cap wins.
| Veto | Condition | Score Cap | Rationale |
|---|---|---|---|
| V01 | GBP not claimed or verified | 15 | Unverified GBP cannot rank in local pack |
| V02 | Website not indexed by Google | 10 | No indexation = no organic presence |
| V03 | Active Google manual penalty | 10 | Penalty suppresses all rankings |
| V04 | NAP wrong on website + GBP + majority of citations | 20 | NAP inconsistency destroys trust signals |
| V05 | Zero Google reviews | 25 | No social proof — cannot compete locally |
| V06 | No SSL certificate | 20 | Security requirement since 2018; Chrome warns users |
Step 4: Calculate Final Score
raw_score = sum of all 60 item scores # Max: 180
normalized = (raw_score / 180) * 100 # Max: 100
veto_cap = min(triggered veto caps, default=100)
final_score = min(normalized, veto_cap) # Final: 0–100
Use python3 scripts/score_calculator.py --both --li-file {AUDIT_DIR}/local-impact-scores.md to compute automatically.
Step 5: Competitor Scoring
Score each top competitor on the same 60 items (abbreviated — focus on observable signals):
- Use Google Maps, GBP listing, site search, Ahrefs free data, BrightLocal free scan
- Focus on dimensions L, O, C, A — these are the most observable externally
- Minimum: score all 6 veto checks per competitor
Step 6: Identify Quick Wins
Quick wins = items currently at score 0 or 1 that can reach score 3 in <2 hours:
| Quick Win | Current Score | Effort | Expected Gain | Priority Score (I×F) |
|---|---|---|---|---|
| Add GBP Q&A (10 seeded questions) | 0 | 30 min | +3 pts L | 5×5=25 |
| Upload 20+ GBP photos | 0–1 | 45 min | +3 pts L | 5×5=25 |
| Respond to all existing reviews | 0–1 | 1–2 hrs | +3 pts O | 5×5=25 |
| Submit to Data Axle + Neustar | 0 | 1 hr | +6 pts C | 5×4=20 |
| Install call tracking (CallRail) | 0 | 1 hr | +3 pts T | 4×5=20 |
| Verify Apple Maps + Bing Places | 0 | 30 min | +3 pts I | 4×5=20 |
| Add schema markup (LocalBusiness) | 0–1 | 2 hrs | +3 pts A | 5×4=20 |
Output Format
Write structured output to {AUDIT_DIR}/local-impact-scores.md:
---
skill: cross-cutting/local-impact-auditor
phase: scoring
date: [YYYY-MM-DD]
business: [Business Name]
url: [URL]
score: [X/100]
status: complete
---
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
LOCAL-IMPACT SCORECARD — 2025 Edition
Business: [Name]
URL: [URL]
Location: [City, State]
Date: [Date]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
OVERALL SCORE: [X] / 100 Grade: [A-F]
Dimension Breakdown:
L Listing Quality [XX/30] ████████░░ [X%] — [key gap]
O Online Reviews [XX/30] ███████░░░ [X%] — [key gap]
C Citation Consistency [XX/30] █████░░░░░ [X%] — [key gap]
A Authority Signals [XX/30] ████████░░ [X%] — [key gap]
L2 Local Content [XX/15] ██████░░░░ [X%] — [key gap]
I Integrated Visibility [XX/15] ███████░░░ [X%] — [key gap]
P Performance [XX/15] ████████░░ [X%] — [key gap]
T Tracking [XX/15] █████░░░░░ [X%] — [key gap]
Veto Checks:
[✅/❌] V01: GBP Claimed & Verified
[✅/❌] V02: Website Indexed by Google
[✅/❌] V03: No Active Google Penalty
[✅/❌] V04: NAP Consistent (website + GBP + citations)
[✅/❌] V05: Has Google Reviews (>0)
[✅/❌] V06: SSL Certificate Active
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
COMPETITOR COMPARISON
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
| Dimension | Client | Comp 1 | Comp 2 | Comp 3 | Gap |
|------------|--------|--------|--------|--------|-----|
| Overall | XX | XX | XX | XX | ± |
| Listing | XX | XX | XX | XX | ± |
| Reviews | XX | XX | XX | XX | ± |
| Citations | XX | XX | XX | XX | ± |
| Authority | XX | XX | XX | XX | ± |
| Performance| XX | XX | XX | XX | ± |
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
TOP 5 IMPROVEMENT PRIORITIES
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. [Item ID]: [Description] — Score: X/3 — Impact: [High] — Effort: [X hrs] — Priority: [I×F]
2. [Item ID]: [Description] — Score: X/3 — Impact: [High] — Effort: [X hrs] — Priority: [I×F]
3. [Item ID]: [Description] — Score: X/3 — Impact: [Med] — Effort: [X hrs] — Priority: [I×F]
4. [Item ID]: [Description] — Score: X/3 — Impact: [Med] — Effort: [X hrs] — Priority: [I×F]
5. [Item ID]: [Description] — Score: X/3 — Impact: [Low] — Effort: [X hrs] — Priority: [I×F]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
QUICK WINS (<2 hrs each, immediate gains)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
• [Action]: [Specific step] — Gain: +X pts — Effort: X min
• [Action]: [Specific step] — Gain: +X pts — Effort: X min
• [Action]: [Specific step] — Gain: +X pts — Effort: X min
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
AI VISIBILITY ASSESSMENT (2025)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Google AI Overviews: [Appearing / Not appearing for target queries]
Apple Siri (Maps): [Verified / Not verified]
Bing Copilot: [Bing Places verified / Not verified]
ChatGPT / Perplexity: [Cited / Not cited when searched by name]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Data Output for Report Integration (YAML Block)
framework: LOCAL-IMPACT
version: 2025.1
date: [YYYY-MM-DD]
business: [name]
url: [url]
location: [city, state]
scores:
overall: [0-100]
grade: [A+-F]
raw: [0-180]
dimensions:
L: { raw: X, max: 30, pct: X, key_gap: "" }
O: { raw: X, max: 30, pct: X, key_gap: "" }
C: { raw: X, max: 30, pct: X, key_gap: "" }
A: { raw: X, max: 30, pct: X, key_gap: "" }
L2: { raw: X, max: 15, pct: X, key_gap: "" }
I: { raw: X, max: 15, pct: X, key_gap: "" }
P: { raw: X, max: 15, pct: X, key_gap: "" }
T: { raw: X, max: 15, pct: X, key_gap: "" }
vetoes_triggered: []
final_cap: 100
competitors:
- name: [comp1]
score: X
key_advantage: ""
- name: [comp2]
score: X
key_advantage: ""
- name: [comp3]
score: X
key_advantage: ""
quick_wins: []
ai_visibility: { google_aio: false, apple_maps: false, bing: false, chatgpt: false }
Handoff
After scoring, save results to {AUDIT_DIR}/local-impact-scores.md for:
output/report-generation— integrates into master report section 3output/pdf-report— renders LOCAL-IMPACT dashboard gauge in PDF covercross-cutting/serp-trust-auditor— SEO Health Index = (LOCAL-IMPACT × 0.55) + (SERP-TRUST × 0.45)