Local SEO Complete Guide
Master local search optimization to dominate Google Maps, local pack rankings, and location-based queries. Complete guide covering ranking factors, strategy frameworks, and implementation for multi-location businesses.
Local SEO Complete Guide
Local SEO optimizes your online presence to attract customers from geographically-related searches. With 46% of all Google searches having local intent and 76% of people who search for something nearby visiting a business within a day, local SEO represents one of the highest-ROI digital marketing channels for businesses serving specific geographic areas.
Understanding Local Search
How Local Search Works
Local Search Ecosystem:
═══════════════════════════════════════════════════════════════════════════
USER SEARCH QUERY
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ GOOGLE SEARCH ALGORITHM │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Relevance │ │ Distance │ │ Prominence │ │
│ │ │ │ │ │ │ │
│ │ • Keywords │ │ • Searcher │ │ • Reviews │ │
│ │ • Categories│ │ location │ │ • Citations │ │
│ │ • Content │ │ • Business │ │ • Links │ │
│ │ • Services │ │ location │ │ • Authority │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ └──────────────────┼──────────────────┘ │
│ ▼ │
└─────────────────────────────────────────────────────────────────────────┘
│
┌──────────────────┼──────────────────┐
▼ ▼ ▼
┌────────────┐ ┌────────────┐ ┌────────────┐
│LOCAL PACK │ │ ORGANIC │ │GOOGLE MAPS │
│ (3 results)│ │ RESULTS │ │ RESULTS │
│ │ │ │ │ │
│ Map + List │ │ 10 blue │ │ Full map │
│ Quick info │ │ links │ │ Detailed │
└────────────┘ └────────────┘ └────────────┘
LOCAL SEARCH TYPES:
───────────────────────────────────────────────────────────────────────────
Type Example Local Pack?
───────────────────────────────────────────────────────────────────────────
Explicit Local "plumber philadelphia" Yes
Near Me "plumber near me" Yes
Implicit Local "plumber" (mobile) Yes
Service Area "emergency plumber" Sometimes
Non-Local "how to fix a leaky faucet" No
───────────────────────────────────────────────────────────────────────────Local Intent Signals
Google determines local intent through multiple signals:
| Signal | Weight | Examples | |--------|--------|----------| | Explicit Location | High | "dentist in seattle", "seattle dentist" | | Near Me Modifier | High | "restaurants near me", "gas station nearby" | | Implicit Local | Medium | "pizza delivery", "emergency vet" | | Business Category | Medium | Searches for inherently local services | | User Location | High | GPS location, IP address, search history | | Device Type | Medium | Mobile searches more likely local |
The Local Pack (Map Pack)
The local pack appears for searches with local intent, displaying three business listings with a map:
Local Pack Anatomy:
═══════════════════════════════════════════════════════════════════════════
┌─────────────────────────────────────────────────────────────────────────┐
│ [Map with 3 pins] │
│ │
│ ● A ● B │
│ ● C │
│ │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ A. Joe's Plumbing ★★★★★ (127) │
│ Plumber · 2.4 mi │
│ Open · Closes 6PM │
│ "Best plumber in town" [Call] [Directions] [Website] │
│ │
│ B. ABC Plumbing Services ★★★★☆ (89) │
│ Plumber · 3.1 mi │
│ Open · Closes 5PM │
│ "Fast and reliable" [Call] [Directions] [Website] │
│ │
│ C. Quick Fix Plumbing ★★★★★ (203) │
│ Plumber · 4.2 mi │
│ Open · Closes 8PM │
│ "24/7 emergency service" [Call] [Directions] [Website] │
│ │
│ [More places] │
└─────────────────────────────────────────────────────────────────────────┘
LOCAL PACK CLICK DISTRIBUTION:
──────────────────────────────
Position 1: ~44% of clicks
Position 2: ~29% of clicks
Position 3: ~21% of clicks
More places: ~6% of clicksLocal SEO Ranking Factors
Primary Ranking Factors
Google's local algorithm weighs three primary factors:
Local Ranking Factor Hierarchy:
═══════════════════════════════════════════════════════════════════════════
1. RELEVANCE (35%)
─────────────────────────────────────────────────────────────────────────
How well your business matches what the searcher is looking for
Signals:
├── Primary GBP category alignment
├── Secondary category coverage
├── Business description keywords
├── Services/products listed
├── Website content relevance
├── Q&A content
└── Post content relevance
2. DISTANCE (25%)
─────────────────────────────────────────────────────────────────────────
Physical distance between searcher and business location
Signals:
├── Business address location
├── Service area settings
├── Searcher's device location
├── Search query location terms
└── Address in Google's index
3. PROMINENCE (40%)
─────────────────────────────────────────────────────────────────────────
How well-known and trusted the business is
Signals:
├── Review quantity (15%)
│ └── Total reviews across platforms
├── Review quality (10%)
│ └── Average star rating, sentiment
├── Citation consistency (5%)
│ └── NAP accuracy across web
├── Link signals (5%)
│ └── Quality local backlinks
├── Behavioral signals (3%)
│ └── CTR, dwell time, directions
└── Offline prominence (2%)
└── Known brands, press coverageDetailed Ranking Factor Analysis
// Local SEO Ranking Factor Assessment
interface LocalRankingFactors {
relevance: RelevanceFactors;
distance: DistanceFactors;
prominence: ProminenceFactors;
}
interface RelevanceFactors {
// Google Business Profile
primaryCategory: {
alignment: number; // 0-100 match score
specificity: 'broad' | 'specific' | 'exact';
};
secondaryCategories: string[];
businessDescription: {
keywordDensity: number;
completeness: number;
};
servicesListed: number;
productsListed: number;
// Website
titleTagOptimization: number;
h1Optimization: number;
contentRelevance: number;
localSchemaMarkup: boolean;
servicePageCount: number;
locationPageCount: number;
}
interface DistanceFactors {
physicalAddress: {
verified: boolean;
centroid: boolean; // Central to service area
};
serviceAreaRadius: number; // miles
serviceAreaCount: number; // zip codes/cities
addressVisibility: 'displayed' | 'hidden';
}
interface ProminenceFactors {
reviews: {
google: { count: number; rating: number; velocity: number };
yelp: { count: number; rating: number };
facebook: { count: number; rating: number };
industrySpecific: { count: number; rating: number };
};
citations: {
totalCount: number;
consistency: number; // percentage NAP match
quality: 'high' | 'medium' | 'low';
};
backlinks: {
localLinks: number;
domainAuthority: number;
localDomains: number;
};
brand: {
searchVolume: number;
pressmentions: number;
socialFollowing: number;
};
}
// Calculate local ranking score
function calculateLocalScore(factors: LocalRankingFactors): number {
const relevanceScore = calculateRelevanceScore(factors.relevance);
const distanceScore = calculateDistanceScore(factors.distance);
const prominenceScore = calculateProminenceScore(factors.prominence);
// Weighted average
return (
relevanceScore * 0.35 +
distanceScore * 0.25 +
prominenceScore * 0.40
);
}Local SEO Strategy Framework
Strategic Planning Process
Local SEO Implementation Roadmap:
═══════════════════════════════════════════════════════════════════════════
PHASE 1: FOUNDATION (Week 1-2)
────────────────────────────────────────────────────────────────────────
□ Claim/verify Google Business Profile
□ Complete all GBP fields (100% completion)
□ Set accurate primary category
□ Add all relevant secondary categories
□ Upload high-quality photos (20+ minimum)
□ Write optimized business description
□ Add all services with descriptions
□ Set accurate hours (including special hours)
PHASE 2: CITATIONS (Week 2-4)
────────────────────────────────────────────────────────────────────────
□ Audit existing citations for NAP consistency
□ Fix any inconsistencies found
□ Submit to top 4 data aggregators
□ Claim/optimize Tier 1 directories
□ Submit to Tier 2 directories
□ Build industry-specific citations
□ Create citation tracking spreadsheet
PHASE 3: ON-SITE OPTIMIZATION (Week 3-5)
────────────────────────────────────────────────────────────────────────
□ Implement LocalBusiness schema markup
□ Optimize title tags with location
□ Create/optimize location pages
□ Add NAP to website footer
□ Embed Google Map on contact page
□ Create service area pages
□ Optimize meta descriptions
PHASE 4: CONTENT & REVIEWS (Week 4-8)
────────────────────────────────────────────────────────────────────────
□ Implement review generation system
□ Create review response process
□ Develop local content calendar
□ Publish location-specific blog posts
□ Create neighborhood guides
□ Build local resource pages
□ Start GBP posting schedule
PHASE 5: LINK BUILDING (Week 6-12)
────────────────────────────────────────────────────────────────────────
□ Identify local link opportunities
□ Join Chamber of Commerce
□ Pursue local sponsorships
□ Guest post on local blogs
□ Create linkable local content
□ Build relationships with local media
□ Monitor competitor backlinks
PHASE 6: ONGOING OPTIMIZATION (Monthly)
────────────────────────────────────────────────────────────────────────
□ Monitor and respond to reviews
□ Post to GBP weekly
□ Update photos seasonally
□ Track rankings and traffic
□ Analyze competitor movements
□ Adjust strategy based on data
□ Build new citations and linksCompetitive Analysis Framework
// Local Competitor Analysis
interface LocalCompetitor {
businessName: string;
gbpUrl: string;
website: string;
rankings: KeywordRanking[];
metrics: CompetitorMetrics;
}
interface CompetitorMetrics {
gbp: {
reviewCount: number;
averageRating: number;
photoCount: number;
postFrequency: string;
categories: string[];
attributes: string[];
};
website: {
domainAuthority: number;
pageCount: number;
localPages: number;
blogPosts: number;
};
citations: {
estimatedCount: number;
napConsistency: number;
};
backlinks: {
referringDomains: number;
localDomains: number;
govEduLinks: number;
};
}
// Competitive gap analysis
function analyzeCompetitiveGap(
yourBusiness: LocalCompetitor,
competitors: LocalCompetitor[]
): GapAnalysis {
const gaps: CompetitiveGap[] = [];
// Review gap
const avgCompetitorReviews = average(
competitors.map(c => c.metrics.gbp.reviewCount)
);
if (yourBusiness.metrics.gbp.reviewCount < avgCompetitorReviews) {
gaps.push({
factor: 'Reviews',
yourValue: yourBusiness.metrics.gbp.reviewCount,
competitorAvg: avgCompetitorReviews,
gap: avgCompetitorReviews - yourBusiness.metrics.gbp.reviewCount,
priority: 'HIGH',
recommendation: `Generate ${Math.ceil(
(avgCompetitorReviews - yourBusiness.metrics.gbp.reviewCount) / 4
)} reviews per month to reach parity in ~4 months`,
});
}
// Domain authority gap
const avgDA = average(
competitors.map(c => c.metrics.website.domainAuthority)
);
if (yourBusiness.metrics.website.domainAuthority < avgDA - 5) {
gaps.push({
factor: 'Domain Authority',
yourValue: yourBusiness.metrics.website.domainAuthority,
competitorAvg: avgDA,
gap: avgDA - yourBusiness.metrics.website.domainAuthority,
priority: 'MEDIUM',
recommendation: 'Focus on local link building to improve DA',
});
}
// Local content gap
const avgLocalPages = average(
competitors.map(c => c.metrics.website.localPages)
);
if (yourBusiness.metrics.website.localPages < avgLocalPages) {
gaps.push({
factor: 'Local Pages',
yourValue: yourBusiness.metrics.website.localPages,
competitorAvg: avgLocalPages,
gap: avgLocalPages - yourBusiness.metrics.website.localPages,
priority: 'MEDIUM',
recommendation: 'Create service area and neighborhood pages',
});
}
return {
gaps: gaps.sort((a, b) => priorityOrder[a.priority] - priorityOrder[b.priority]),
overallPosition: calculateOverallPosition(yourBusiness, competitors),
actionPlan: generateActionPlan(gaps),
};
}Multi-Location Local SEO
Multi-Location Architecture
Multi-Location Website Structure:
═══════════════════════════════════════════════════════════════════════════
homepage.com
│
┌──────────────────┼──────────────────┐
│ │ │
▼ ▼ ▼
/locations/ /services/ /about/
│ │
├── /new-york/ ├── /plumbing/
│ ├── index │ ├── index
│ ├── /plumbing│ └── [city-pages]
│ └── /hvac │
│ └── /hvac/
├── /los-angeles/ ├── index
│ ├── index └── [city-pages]
│ ├── /plumbing
│ └── /hvac
│
└── /chicago/
├── index
├── /plumbing
└── /hvac
URL STRUCTURE OPTIONS:
────────────────────────────────────────────────────────────────────────
1. Subdirectory (Recommended for most):
example.com/locations/new-york/
✓ Consolidates domain authority
✓ Easier to manage
✓ Better for <50 locations
2. Subdomain (For large enterprises):
newyork.example.com
✓ More autonomy per location
✗ Splits domain authority
✓ Better for 50+ locations with unique content
3. Separate Domains (Rarely recommended):
examplenewyork.com
✗ Hardest to manage
✗ No authority sharing
✓ Only for acquisitions/franchisesLocation Page Best Practices
// Location Page Content Requirements
interface LocationPageContent {
// Required elements
required: {
uniqueH1: string; // "[Service] in [City], [State]"
businessNAP: {
name: string;
address: string;
phone: string; // Local number preferred
};
localizedContent: {
minimumWords: 1000;
uniquePercentage: 80; // % unique vs template
localReferences: string[]; // Landmarks, neighborhoods
};
schema: LocalBusinessSchema;
mapEmbed: boolean;
localPhotos: number; // Minimum 5
};
// Highly recommended
recommended: {
localTestimonials: Testimonial[];
areaServedList: string[]; // Nearby cities/neighborhoods
localFAQs: FAQ[];
teamMembers: TeamMember[]; // Staff at this location
localCaseStudies: CaseStudy[];
directionsFromLandmarks: Direction[];
};
// Avoid
avoid: [
'Duplicate content across locations',
'Thin content (<500 words)',
'Fake addresses (virtual offices)',
'Doorway pages (no unique value)',
'Keyword stuffing city names',
'Hidden text or links',
];
}
// Generate unique location page content
function generateLocationContent(
location: BusinessLocation,
services: Service[],
template: ContentTemplate
): LocationPageContent {
const localElements = {
// Research local landmarks, neighborhoods
landmarks: getLocalLandmarks(location.city),
neighborhoods: getNeighborhoods(location.city),
localEvents: getLocalEvents(location.city),
demographics: getCityDemographics(location.city),
};
// Create unique content sections
const sections = {
intro: generateLocalIntro(location, localElements),
whyChooseUs: generateLocalBenefits(location, localElements),
serviceAreas: generateServiceAreaContent(location),
localExpertise: generateLocalExpertise(location, localElements),
faqs: generateLocalFAQs(location, services),
cta: generateLocalCTA(location),
};
return {
...sections,
uniquenessScore: calculateUniqueness(sections, template),
wordCount: countWords(sections),
};
}GBP Management for Multiple Locations
Multi-Location GBP Management:
═══════════════════════════════════════════════════════════════════════════
MANAGEMENT APPROACHES:
────────────────────────────────────────────────────────────────────────
2-10 Locations:
├── Manual management feasible
├── Individual GBP dashboard access
├── Spreadsheet tracking
└── Monthly review cadence
10-50 Locations:
├── Consider GBP bulk management
├── API integration for updates
├── Dedicated local SEO resource
└── Weekly monitoring
50+ Locations:
├── Enterprise GBP tools required
├── Full API automation
├── Local SEO team or agency
└── Daily monitoring systems
BULK VERIFICATION REQUIREMENTS:
────────────────────────────────────────────────────────────────────────
• 10+ locations owned by same organization
• Apply through Google's Business Profile Help
• Provide documentation:
- Business registration
- Proof of location addresses
- Authorization letter
• Review takes 1-2 weeks
• Maintain spreadsheet with:
- Store code, Business name, Address
- Phone, Website, Categories
- Hours, Description, Photos
CONSISTENCY CHECKLIST:
────────────────────────────────────────────────────────────────────────
□ Same business name format across all locations
□ Standardized category selection
□ Consistent hours format
□ Uniform attribute selection
□ Brand-aligned photos
□ Standardized description template (with local customization)
□ Same review response protocol
□ Coordinated posting scheduleLocal SEO Metrics & Tracking
Key Performance Indicators
Local SEO KPI Dashboard:
═══════════════════════════════════════════════════════════════════════════
VISIBILITY METRICS
────────────────────────────────────────────────────────────────────────
Metric Target Tracking Frequency
────────────────────────────────────────────────────────────────────────
Local Pack Rankings Top 3 for Weekly
(Primary keywords) target keywords
Map Pack Visibility Positions 1-3 Weekly
Organic Local Rankings Page 1 Weekly
GBP Impressions +10% MoM Monthly
GBP Profile Views +10% MoM Monthly
ENGAGEMENT METRICS
────────────────────────────────────────────────────────────────────────
Metric Target Tracking Frequency
────────────────────────────────────────────────────────────────────────
Direction Requests +15% MoM Monthly
Click-to-Call +15% MoM Monthly
Website Clicks (from GBP) +10% MoM Monthly
GBP Post Engagement >2% engagement Weekly
Review Velocity 4+ reviews/month Monthly
CONVERSION METRICS
────────────────────────────────────────────────────────────────────────
Metric Target Tracking Frequency
────────────────────────────────────────────────────────────────────────
Phone Calls (tracked) +20% QoQ Monthly
Form Submissions +15% QoQ Monthly
Online Bookings +15% QoQ Monthly
Walk-in Traffic Track trend Monthly
Revenue from Local Calculate ROI QuarterlyTracking Implementation
// Local SEO Tracking Configuration
interface LocalSEOTracking {
rankings: RankingTracker;
gbpInsights: GBPInsights;
websiteAnalytics: WebsiteAnalytics;
callTracking: CallTracking;
reviewTracking: ReviewTracking;
}
// pxlpeak Local SEO Integration
import { pxlpeak } from '@/lib/analytics';
// Configure local SEO tracking
await pxlpeak.localSEO.configure({
locations: [
{
id: 'loc_001',
name: 'Downtown Location',
gbpId: 'accounts/123/locations/456',
address: '123 Main St, New York, NY 10001',
phone: '+1-212-555-0100',
trackingNumber: '+1-212-555-0101', // Call tracking
},
// ... more locations
],
tracking: {
// Rank tracking
rankings: {
enabled: true,
keywords: [
{ keyword: 'plumber new york', location: 'New York, NY' },
{ keyword: 'emergency plumber manhattan', location: 'New York, NY' },
{ keyword: 'plumber near me', location: '10001' },
],
frequency: 'weekly',
searchEngines: ['google', 'google_maps'],
},
// GBP integration
gbpInsights: {
enabled: true,
metrics: [
'views_maps', 'views_search',
'actions_website', 'actions_phone', 'actions_direction',
'photos_views', 'posts_views',
],
frequency: 'daily',
},
// Call tracking
callTracking: {
enabled: true,
provider: 'callrail', // or 'calltracking_metrics'
trackingNumbers: {
gbp: '+1-212-555-0101',
website: '+1-212-555-0102',
ads: '+1-212-555-0103',
},
recordCalls: true,
transcribe: true,
},
// Review monitoring
reviews: {
enabled: true,
platforms: ['google', 'yelp', 'facebook'],
alerts: {
newReview: true,
negativeReview: true, // < 3 stars
reviewThreshold: 4.0, // Alert if avg drops below
},
},
},
reporting: {
frequency: 'weekly',
recipients: ['marketing@company.com'],
includeCompetitors: true,
competitorGBPIds: ['comp1_gbp_id', 'comp2_gbp_id'],
},
});
// Generate local SEO report
const localReport = await pxlpeak.localSEO.generateReport({
dateRange: 'last30days',
locations: ['loc_001'],
sections: [
'ranking_summary',
'gbp_performance',
'review_analysis',
'call_analytics',
'competitive_comparison',
'recommendations',
],
});Local Search Algorithm Updates
Recent Algorithm Changes
Local Search Algorithm History:
═══════════════════════════════════════════════════════════════════════════
2024-2026 MAJOR UPDATES:
────────────────────────────────────────────────────────────────────────
November 2025: "Local Experience Update"
├── Impact: Greater weight on user experience signals
├── Changes:
│ ├── GBP engagement metrics more important
│ ├── Review recency weighted higher
│ └── Website Core Web Vitals affect local rankings
└── Action: Optimize GBP engagement, focus on recent reviews
August 2025: "Vicinity Update 2.0"
├── Impact: Further emphasis on proximity
├── Changes:
│ ├── Searcher-to-business distance more important
│ ├── Service area businesses affected
│ └── SAB radius limits tightened
└── Action: Consider physical location strategy
March 2025: "Review Diversity Update"
├── Impact: Multi-platform reviews matter more
├── Changes:
│ ├── Reviews across platforms aggregated
│ ├── Single-platform dependency penalized
│ └── Industry-specific platforms weighted
└── Action: Diversify review generation efforts
September 2024: "Local AI Integration"
├── Impact: AI-generated responses in local results
├── Changes:
│ ├── AI summaries for local businesses
│ ├── Q&A featured more prominently
│ └── Attribute accuracy critical
└── Action: Optimize GBP Q&A, ensure attribute accuracy
FUTURE TRENDS TO WATCH:
────────────────────────────────────────────────────────────────────────
• Voice search optimization becoming critical
• AI-powered local recommendations
• Visual search for local discovery
• Augmented reality local experiences
• Zero-click local answersCommon Local SEO Mistakes
Local SEO Mistake Prevention:
═══════════════════════════════════════════════════════════════════════════
CRITICAL MISTAKES (Can cause penalties):
────────────────────────────────────────────────────────────────────────
✗ Using fake addresses (virtual offices, PO boxes)
→ Only use addresses where you can receive customers or mail
✗ Keyword stuffing business name
→ Use your exact legal business name only
✗ Creating multiple GBP listings for same location
→ One listing per location, merge duplicates
✗ Using tracking phone numbers as primary GBP number
→ Use real business number, track via website
✗ Fake reviews (purchased or from employees)
→ Focus on legitimate review generation
MAJOR MISTAKES (Significantly hurt rankings):
────────────────────────────────────────────────────────────────────────
✗ Inconsistent NAP across citations
→ Audit and standardize all listings
✗ Wrong primary category selection
→ Research competitors, match searcher intent
✗ Ignoring negative reviews
→ Respond to all reviews within 48 hours
✗ Duplicate location page content
→ Create unique content for each location
✗ Missing local schema markup
→ Implement LocalBusiness schema
COMMON OVERSIGHTS (Missed opportunities):
────────────────────────────────────────────────────────────────────────
✗ Not posting to GBP regularly
→ Post 1-2x per week minimum
✗ Low-quality GBP photos
→ Professional photos, update seasonally
✗ Ignoring GBP Q&A
→ Pre-seed with common questions
✗ Not tracking local rankings
→ Implement rank tracking by location
✗ Neglecting local link building
→ Pursue Chamber, sponsors, local PRpxlpeak Local SEO Integration
Unified Local Tracking
// Complete local SEO monitoring with pxlpeak
import { pxlpeak } from '@/lib/analytics';
// Initialize local SEO monitoring
const localMonitoring = await pxlpeak.localSEO.init({
// Multi-location support
locations: businessLocations.map(loc => ({
id: loc.id,
name: loc.name,
gbpAccountId: loc.gbpAccountId,
website: loc.landingPageUrl,
competitors: loc.topCompetitors,
})),
// Comprehensive tracking
modules: {
rankings: {
keywords: targetKeywords,
trackLocalPack: true,
trackOrganicLocal: true,
trackGoogleMaps: true,
competitors: true,
},
gbpPerformance: {
insights: true,
posts: true,
reviews: true,
photos: true,
qanda: true,
},
citations: {
monitoring: true,
napConsistency: true,
newOpportunities: true,
},
reviews: {
aggregation: ['google', 'yelp', 'facebook', 'industry'],
sentiment: true,
alerts: true,
responseTracking: true,
},
conversions: {
calls: true,
forms: true,
directions: true,
bookings: true,
},
},
// Automated reporting
reporting: {
schedule: 'weekly',
recipients: ['team@company.com'],
format: 'pdf',
sections: [
'executive_summary',
'ranking_changes',
'gbp_performance',
'review_summary',
'conversion_metrics',
'competitive_analysis',
'recommendations',
],
},
// Alerts
alerts: {
rankingDrop: { threshold: 5, notify: ['seo@company.com'] },
negativeReview: { threshold: 3, notify: ['support@company.com'] },
napInconsistency: { notify: ['seo@company.com'] },
competitorMovement: { threshold: 3, notify: ['marketing@company.com'] },
},
});
// Dashboard data retrieval
const dashboardData = await pxlpeak.localSEO.getDashboard({
location: 'all', // or specific location ID
dateRange: 'last30days',
compareWith: 'previousPeriod',
});
// Example dashboard structure
interface LocalSEODashboard {
summary: {
avgLocalPackPosition: number;
positionChange: number;
totalReviews: number;
newReviewsThisPeriod: number;
avgRating: number;
gbpImpressions: number;
gbpActions: number;
estimatedCalls: number;
estimatedRevenue: number;
};
rankings: {
keyword: string;
localPackPosition: number;
organicPosition: number;
change: number;
url: string;
}[];
reviews: {
platform: string;
count: number;
avgRating: number;
sentiment: 'positive' | 'neutral' | 'negative';
recentReviews: Review[];
}[];
competitors: {
name: string;
avgPosition: number;
reviewCount: number;
rating: number;
trend: 'up' | 'stable' | 'down';
}[];
recommendations: {
priority: 'high' | 'medium' | 'low';
category: string;
recommendation: string;
expectedImpact: string;
}[];
}Local SEO Checklist
Quick Reference Checklist
Complete Local SEO Checklist:
═══════════════════════════════════════════════════════════════════════════
GOOGLE BUSINESS PROFILE
□ Claimed and verified
□ 100% profile completion
□ Accurate primary category
□ All relevant secondary categories
□ Optimized business description (750 chars)
□ All services listed with descriptions
□ Products added (if applicable)
□ 20+ high-quality photos
□ Virtual tour (if applicable)
□ Business hours accurate
□ Special hours set
□ Q&A pre-seeded
□ Posts published weekly
□ All attributes set
□ Messaging enabled
□ Booking button (if applicable)
CITATIONS
□ NAP consistency audit complete
□ Top 4 aggregators submitted
□ Tier 1 directories claimed
□ Tier 2 directories claimed
□ Industry directories claimed
□ Citation monitoring active
WEBSITE
□ LocalBusiness schema implemented
□ NAP in footer (consistent)
□ Contact page optimized
□ Google Map embedded
□ Location pages created
□ Service area pages created
□ Local content published
□ Mobile-friendly
□ Fast loading (<3s)
REVIEWS
□ Review generation system active
□ Review response process defined
□ Responding within 48 hours
□ Negative review protocol
□ Review monitoring active
□ Multi-platform reviews pursued
LINKS
□ Chamber of Commerce
□ Local business associations
□ Local sponsorships
□ Local press/PR
□ Partner links
□ Local blog posts
TRACKING
□ Rank tracking implemented
□ GBP Insights monitored
□ Call tracking active
□ Form tracking active
□ Review alerts configured
□ Monthly reporting scheduledRelated Documentation
- Google Business Profile - Complete GBP optimization
- Local Citations - Citation building strategy
- Review Management - Review generation and response
- Local Content - Location page optimization
- Local Link Building - Local backlink strategies
- Technical SEO - Website optimization fundamentals