Programmatic template
A single [city]/[district]/[type] route fed by JSON data files; all pages prerendered at build time.
Signage & Advertising · Case Study
1,068+ programmatic SEO pages across city × district × signage-type combinations — a local SEO engine that answers every long-tail location query.

Results
The Brief
78% of local signage searches use a "[city] [district] signage" pattern. A single homepage can't capture 81 cities × 970 districts × 12 signage types.
The Approach
I prioritized 4 of the 6 methodology pillars (Technical, Schema, Entity, Distribution): Next.js dynamic route + static prerender, per-page LocalBusiness schema, chunked sitemaps, and multi-search-engine notification via IndexNow.
See the full process → 47-Point AI-Ready SEO Audit methodology.
Tech Stack
The Build
First call: prerender all 1,068+ pages at build time. I chose static generation over ISR because local queries are low-frequency but long-tail — server-side cost wasn't beating CDN cache hit.
We didn't ship a single XML sitemap. The 50,000 URL ceiling isn't a problem yet, but I set up a sitemap-index pattern for the future — per-city chunked sitemap files, master index on top.
Instead of inlining LocalBusiness schema on every page, I used a shared template fed by city/district data files. That saved 1,068 pages × 5 min manual work = 90 hours.
For AEO, every page's H1 directly answers "signage production in X district"; the 50-word paragraph below it is tuned for the featured snippet.
Steps Applied
A single [city]/[district]/[type] route fed by JSON data files; all pages prerendered at build time.
Each page emits a LocalBusiness schema with its own areaServed, geo (latitude/longitude), and service scope.
Per-city chunked sitemap-index structure; ~250 URLs per city file — Google's crawl budget stays balanced.
A postbuild hook pushes every new URL through the IndexNow API to Bing, Yandex, Naver, Seznam; first-pass indexing within hours.
Honest Reflection
Looking back, the first version of every district page reused identical template wording — only the city/district name changed. Google flagged it as thin content and didn't index ~30% of pages in the first 60 days. The second version added at least 2 district-specific facts per page (local market density, shipping window, popular type). I should have done this on day one.
Screenshots


Same 47-point methodology, $499 fixed price, 5-7 business days. Book the audit.