Most programmatic SEO advice says generate at scale. Our data says the opposite.
Last year our agency made a bet that sounds insane: write every single local landing page by hand. 19 services, 8 Malaysian cities, 154 pages. No templates with a city name swapped in. Every page written from that city's own market.
Here is what we learned, with the numbers to back it.
The city-swap trap
The standard playbook for local landing pages is one template, many cities. Write "Web design in {city} helps your business grow", loop over a list, ship 200 pages in an afternoon.
Google got good at spotting this. Their March 2024 scaled-content policies target exactly this pattern, and in our own audits the signature is easy to find: run any two sibling pages through a diff with the city names normalised out, and template sites show 90 percent identical copy.
We built an automated check for this in our own pipeline. It normalises every place name to a token, then flags any sentence that appears on two pages. The first run on our own hand-written pages still found 79 leaked strings. Even humans template themselves when they write 154 pages. We rewrote every one.
The lesson: if your dupe checker compares literal strings, a city swap makes two "different" strings and you will pass your own tests while failing Google's.
What made pages actually different
The pages that earn impressions fastest were the ones anchored in something true about that city:
- Johor Bahru pages talk about cross-border Singapore customers, because that is who JB businesses serve.
- Ipoh pages talk about being early in an uncontested market, because search there is thin.
- Kuala Lumpur pages talk about committee buyers comparing three agencies, because that is how KL procurement works.
None of that can be generated by swapping a city name. It has to come from knowing the market, and Google's results increasingly reflect that difference.
The boring layers still decide the outcome
Three unglamorous things moved more than any copy cleverness:
- One honest FAQ per page about where we are actually based. We are in Penang. The KL page says so. Faking a local office is the fastest way to lose a map listing.
- Answer passages. Every page carries a 25 to 35 word answer to its own title question, marked up so answer engines can lift it with attribution. AI search reads these even when Google ignores them.
- Internal links that mirror real relationships. Every city page links its service pillar and its real sibling pages. No orphans. Crawlers found all 154 pages within two hops of the homepage.
What we would tell anyone doing this
Write fewer pages, better. Ten pages with real local knowledge beat a hundred templates. Build a city-normalising duplicate check before you write page two, not after page 154. And put your checks in a gate that runs before every deploy, because quality erodes silently otherwise.
We wrote up our full page standards and the check scripts for our own team at Seed Light, the web design agency I run in Penang. If you want to see the pages this produced, the work is at seed-light.com.
Gregory Yeoh is the founder of Seed Light, a web design and digital marketing agency in Penang, Malaysia, building websites and running SEO for over 100 brands since 2017.
Top comments (0)