DEV Community

Isaias Perez
Isaias Perez

Posted on

Building a Local SEO Lead-Gen Site with Next.js 14: Lessons from 10+ City Landing Pages

Programmatic local SEO sites — the kind with a near-identical landing page for every city or service area — look simple until you actually build one. I recently built one for a baby-gear rental business covering 10+ Florida cities (Orlando, Miami, Tampa, and beach towns like Naples and Sarasota), and here's what actually mattered technically.

1. Near-duplicate content will tank you if you don't differentiate

Ten city pages selling the same strollers and cribs are, by default, ten near-identical pages. Search engines treat that as duplicate content and will often pick one canonical version and ignore the rest. The fix isn't cosmetic keyword swapping — it's real differentiation: distinct local details (delivery to specific hotels/resorts, city-specific FAQs, local landmarks), unique intro copy per page, and city-specific structured data.

2. LocalBusiness / Service schema per page, not just sitewide

A single sitewide Organization schema doesn't help individual city pages rank for local intent. Each city page needs its own Service or LocalBusiness structured data block with the correct areaServed value. This is straightforward with Next.js by generating the JSON-LD dynamically per route from a small city-data config rather than hardcoding it.

3. Dynamic routing with static generation, not client-side fetch

With Next.js 14's app router, city pages generated via generateStaticParams and ISR (incremental static regeneration) load fast and stay crawlable, which matters a lot for local SEO since crawlers still struggle more with client-rendered content than server-rendered HTML. Rendering city/product data client-side after the initial load defeats a lot of the SEO purpose of having separate pages at all.

4. Core Web Vitals suffer fast on image-heavy catalogs

Gear rental listings are inherently image-heavy (strollers, cribs, car seats, all with product photos). Next.js's Image component with proper sizing and priority hints on above-the-fold images made the biggest measurable difference to LCP, more than any other single change.

5. Track referral/affiliate clicks as first-class GA4 events

When a page's job is to hand visitors off to a booking or affiliate partner, pageviews alone tell you almost nothing about what's working. Firing a distinct GA4 event on every outbound partner click (with the source city page as a parameter) is what actually lets you see which city pages and which gear categories convert, instead of guessing from pageview counts.

A live example

Florida Baby Gear is the site these lessons came from — it's a lead-generation site that earns referral fees through its local baby-gear rental partners, so I want to be upfront about that affiliate relationship here. Technically, it's a good real-world example of the patterns above: city-based landing pages, structured data, and conversion tracking all working together instead of being bolted on after launch.

Disclosure: This article was drafted with AI assistance (Claude) and reviewed/edited by me before publishing.

Top comments (0)