Locations Manager
Complete guide to managing business locations with full CRUD operations, import/export, and AI optimization
Overview
The Locations Manager is the primary interface for managing all your business locations. It provides a comprehensive dashboard with statistics, action toolbar, and a grid/list view of all locations. Each location can have complete business information, geo-coordinates, opening hours, and AI-generated content.
Quick Stats Dashboard
Adding a New Location
Click the "Add New Location" button in the toolbar or the floating action button (FAB) to open the location modal. The modal provides a comprehensive form with all location fields.
| Field | Type | Required | Description |
|---|---|---|---|
| Business Name | Text | Yes | Name of the location/business |
| Business Type | Select | No | Schema.org type (defaults to LocalBusiness) |
| Street Address | Text | No | Physical street address |
| City | Text | No | City name |
| State/Region | Text | No | State or province |
| Postal Code | Text | No | ZIP or postal code |
| Country | Select | No | Country code (defaults to US) |
| Phone | Tel | No | Business phone number |
| No | Business email | ||
| Website | URL | No | Location-specific website |
| Latitude | Number | No | GPS latitude (step: 0.000001) |
| Longitude | Number | No | GPS longitude (step: 0.000001) |
| Primary Location | Toggle | No | Mark as main location |
prorank_add_location with:- Nonce verification using
check_ajax_referer() - Permission check with
current_user_can('manage_options') - Data sanitization for all fields
Editing Locations
Click the "Edit" button on any location card to open the edit modal with pre-filled data. The same form is used as for adding, but with existing values loaded.
// JavaScript implementation in local-seo.js
showLocationModal: function(locationId) {
var location = locationId ?
this.locations.find(l => l.id === locationId) : {};
var isEdit = !!locationId;
// Create modal with pre-filled values
// AJAX endpoint: prorank_update_location
}Changes are saved to the same WordPress option (prorank_local_seo_locations) and the schema output is automatically updated.
Deleting Locations
Click the "Delete" button on any location card. A confirmation dialog will appear before deletion.
- The locations database
- Schema.org output
- KML sitemap (if enabled)
The delete operation calls prorank_delete_location with proper security checks.
Import/Export Functionality
Import Locations
Click "Import" to bulk upload locations from a CSV or JSON file. The import supports:
- CSV format with headers matching field names
- JSON array of location objects
- Automatic duplicate detection
- Validation of required fields
"name","street_address","city","state_region","postal_code","country","phone"
"Downtown Store","123 Main St","New York","NY","10001","US","+1-555-0100"
"Uptown Branch","456 Park Ave","New York","NY","10021","US","+1-555-0200"Export Locations
Click "Export" to download all locations as a JSON file. The export includes:
- All location data including coordinates
- Opening hours configuration
- AI-generated content
- Optimization scores
Endpoint: prorank_export_locations returns JSON data for download.
AI Optimization Features
The Locations Manager includes AI-powered features to optimize your location data:
AI Description Generation
Click "AI Optimize" to generate SEO-friendly descriptions for all locations. The AI:
- Creates unique descriptions for each location
- Includes local keywords and landmarks
- Optimizes for voice search queries
- Maintains consistent brand voice
Endpoint: prorank_generate_ai_description
Location Scoring
Each location receives an optimization score (0-100%) based on:
- Completeness of information
- Presence of geo-coordinates
- Opening hours configuration
- Description quality and length
- Schema markup validity
Endpoint: prorank_get_location_score
Bulk Operations
The toolbar provides several bulk operation buttons:
Validate All
Runs validation on all locations to check for missing data, invalid coordinates, or schema errors. Results are displayed in a report.
Generate Schema
Creates LocalBusiness schema markup for all locations and outputs it to the page head via wp_head hook.
View Options
Toggle between Grid and List views using the view switcher buttons:
Grid View (Default)
Displays locations as cards with key information visible. Best for visual scanning and quick actions. Shows primary badge, address, phone, and optimization score.
List View
Table format with sortable columns. Better for comparing data across locations. Implemented via JavaScript in LocationManager.renderLocationsList()
Use the search box to filter locations by name, address, or phone number. Search is performed client-side for instant results.
Technical Implementation
Data Storage
Locations are stored in WordPress options table:
// Option name: prorank_local_seo_locations
// Format: Serialized array of location objects
get_option('prorank_local_seo_locations', []);JavaScript Object
The LocationManager object in local-seo.js handles all client-side operations:
var LocationManager = {
locations: [],
init: function() { /* Initialize */ },
loadLocations: function() { /* AJAX load */ },
renderLocationsList: function() { /* Display */ },
showLocationModal: function(id) { /* Add/Edit */ },
saveLocation: function() { /* AJAX save */ },
deleteLocation: function(id) { /* AJAX delete */ }
};Security Implementation
- All AJAX calls include nonce:
wp_create_nonce('prorank_local_seo') - Server-side verification:
check_ajax_referer('prorank_local_seo', 'nonce') - Capability check:
current_user_can('manage_options') - Input sanitization with WordPress functions
- Output escaping:
esc_html(),esc_attr()
Best Practices
✅ Do
- • Keep NAP data consistent
- • Add geo-coordinates for all locations
- • Set accurate opening hours
- • Mark one primary location
- • Use AI optimization for descriptions
❌ Don't
- • Use fake or placeholder data
- • Duplicate location names
- • Skip validation checks
- • Forget to export backups
- • Ignore optimization scores