13-phase pipeline for deploying a production local business WordPress site. Each phase has a hard gate — do not proceed if the gate fails.
Inputs Required
| Input | Required | |-------|---------| | Brand name | Yes | | Business type | Yes | | Primary location | Yes | | Domain | Yes | | GMB profile URL | Recommended |
Phase Overview
| Phase | Name | Key Output | |-------|------|-----------| | 1 | Audit and Strategy | Keyword research, competitor benchmark | | 2 | Brand Kit | Unique colors, fonts, imagery DNA | | 3 | Architecture | Theme/builder selection, plugin stack | | 4 | Core Pages | Homepage, 10 service pages, essential pages | | 5 | Location Pages | 1 per location + 5 supporting subpages each | | 6 | Blog Content | 30 posts (20 general + 10 location-specific) | | 7 | Supporting Pages | 4 per service + 4 per location | | 8 | Image Optimization | WebP, geotagged EXIF, unique per brand | | 9 | SEO Implementation | Meta, schema, canonical, robots, sitemap | | 10 | Performance | LCP <2.5s, CLS <0.1, Lighthouse >=90 | | 11 | Form Testing | Submission, validation, rate limiting | | 12 | QA Audit | Cross-brand dedup, schema validation | | 13 | Deployment | GSC submit, GA4, monitoring |
Page Specifications
| Page Type | Word Count | Schema | |-----------|-----------|--------| | Homepage | — | Organization + LocalBusiness | | Service pages | 1,200–1,600 | Service + FAQPage | | Location pages | 500–750 | LocalBusiness + AggregateRating + FAQPage | | Blog (general) | 2,000–2,500 | BlogPosting | | Blog (location) | 1,500–1,800 | BlogPosting | | About | 600–800 | — |
QA Hard Stops
Stop deployment if any of these are true:
- Design colors/fonts match another brand in the portfolio
- LCP > 2.5s or CLS > 0.1 on any page
- Schema errors in Google's Rich Results Test
- Meta title > 66 chars or description outside 155–160 chars
- Form submissions do not deliver email notifications
- Missing canonical tags or incorrect canonical URLs
- < 70% of blog posts link to at least one service page
- Any missing geotagged images or duplicate image hashes across brands
Plugin Stack for WordPress Builds
| Function | Plugin | |---------|--------| | SEO | Rank Math Pro | | Caching | WP Rocket | | Images | Optimole (WebP, lazy load) | | Security | Wordfence | | Backups | WPvivid | | Schema | Rank Math schema module | | Forms | WPForms or Gravity Forms | | Analytics | Site Kit (GA4) |
Image Standards
- Format: WebP only
- EXIF geotag: within 5 miles of GMB address
- Naming:
[location]-[service]-[descriptor]-[date].webp - Alt text: 55–75 chars —
[Service] in [Location] - [Brand] | [descriptor] - Zero reuse across brands (maintain SHA256 hash manifest)