Programmatic SEO for local service pages works right up until it doesn't, and nobody publishes the line. The honest threshold is this: a "[service] in [city]" page is legitimate when someone in that city gets information from it they could not get from your main service page, and it is a doorway when the only difference is the city name. Everything else, page counts, word counts, templating ratios, is downstream of that one test.
Key Takeaways
- The test that matters: could a local buyer get materially different, useful information from this page than from your generic service page? If no, don't publish it.
- Aim for at least 40-50% unique visible body content per city page, and make the unique portion the part buyers actually care about.
- Page volume risk is not a fixed number. It's a ratio: how many of your indexed pages are templated versus substantive. Above roughly 60-70% templated, site-quality signals tend to suffer.
- Genuine differentiators: local pricing, local case studies, named local team, local regulations, local service constraints, local delivery timelines.
- Heavily templated pages appear to be poorly cited by LLMs. pSEO may win clicks while losing AI visibility, a real and under-discussed tradeoff.
- India variant: Tier-2 and Tier-3 city pages need genuinely local proof, transliterated name variants need careful handling, and Hinglish "near me" phrasing is real search behaviour.
- This is the agency owner's own SEO problem too. If you sell SEO services across twenty cities, you are the case study.
The template is not the problem. What the template has nothing local to fill with is the problem.
What Google Actually Says, and What It Means
Google's spam policies define doorway pages as pages created to rank for similar search queries that lead users to intermediate pages that are less useful than the final destination. The classic example given is exactly ours: multiple pages targeting different cities that all funnel to the same generic destination.
Note the wording carefully. The offence isn't scale. It isn't templating. It's creating pages that exist to catch queries rather than to serve users, where the user would have been better served landing somewhere else.
That's a intent-and-utility test, not a technical one. Which is why "how many words do I need" is the wrong question, and why nobody publishes a threshold, Google can't give you one without handing spammers a target.
So here's mine, from practice rather than policy.
The Concrete Test
Before publishing any city page, answer these five questions in writing:
- What can a buyer in this city learn here that isn't on the main service page? If you can't name three things, stop.
- Would I send a prospect from this city this URL in an email? If you'd send them the main page instead, the city page is redundant.
- Does anything on this page change when I actually serve a client in this city? If the page is static forever, it's furniture, not content.
- Can I name a human, a price, or a case that is specific to this city? At least one of the three. Zero means don't publish.
- If a competitor copied this page and changed the city name, would it be equally true for them? If yes, it's a template with a variable, not a page.
Pages that pass all five are legitimate. Pages that pass three or four are borderline and should be improved before publishing. Pages that pass one or two are doorway pages and will eventually be treated as such.
The Decision Table
| Page attribute | Legitimate | Borderline | Spam |
|---|---|---|---|
| Unique body content | 50%+ genuinely local | 25-40%, mostly reworded | Under 15%, city name swapped |
| Local pricing | Actual local rates or ranges | "Contact for pricing" | Identical price block on every page |
| Team | Named local staff or partner | "Our team serves this area" | No mention |
| Case studies | 1+ real local client | Generic case with city inserted | None |
| Local knowledge | Regulations, permits, seasonality, logistics specific to that city | Generic mention of the city | Wikipedia paragraph about the city |
| Contact detail | Local number or verified address | Central number, honest about it | Fake local address |
| Testimonials | Real, from that city | Real, from anywhere, unlabelled | Fabricated |
| Images | Actual local work or team | Stock, but relevant | Same stock image on 200 pages |
| Internal links | Contextual, to related local and service pages | Standard nav only | Only to the conversion page |
| Page count vs company size | Proportionate to real service capacity | Somewhat aspirational | 400 cities, 6 staff |
| Maintenance | Updated when local facts change | Updated annually | Never touched after generation |
| Indexation behaviour | Indexed, ranking, earning clicks | Indexed, no clicks | Crawled, not indexed |
That last row is diagnostic, not causal. If Google crawls your city pages and declines to index them, you have already been given the answer. Stop generating and start improving.
Minimum Unique Content Ratio
The Working Number
50% of visible body content unique per page is a comfortable target. 40% is workable. Below 25%, you are relying on the template carrying weight it cannot carry.
Measure honestly: strip nav, footer, sidebar and boilerplate CTAs. Compare the remaining body text across two city pages. If a diff tool shows 85% overlap, that's your real number, whatever your CMS reports.
Where the Unique Content Should Sit
Not at the bottom. Search engines and users both weight the top of the page, and a page with 800 words of shared copy followed by three local sentences reads exactly as what it is.
Structure it the other way: local hook and local specifics in the first two screens, shared methodology and service description below.
How Many Pages Before You Risk Site Quality
There's no absolute page count. What matters is the ratio of templated to substantive pages on your domain, and whether the templated set earns engagement.
The Ratio Heuristic
If templated city pages make up more than 60-70% of your indexed URLs and they collectively earn a small fraction of your organic clicks, you have a site-quality liability. The signal Google reads isn't "this site has many pages", it's "most of this site's pages don't satisfy anyone."
Practical Guardrails
- Launch in batches of 10-20, not 200. Measure indexation and engagement before the next batch.
- Set a kill criterion in advance. "Any page with zero clicks after 90 days gets improved or removed." Then actually enforce it.
- Keep a healthy body of non-templated content, genuine articles, case studies, guides, so the templated set is a minority of the site.
- Watch the indexed-vs-submitted gap in Search Console. A widening gap is the earliest warning you get.
"Crawled, currently not indexed" on a city page cluster is Google telling you the answer before you ask.
What Genuinely Differentiates One City Page From Another
This is the substance of the whole exercise. Five categories actually work.
1. Local Pricing
The strongest differentiator and the one most companies avoid. Service pricing genuinely varies by city: labour costs, travel, competitive density, buyer price tolerance. Publishing an honest range for that city is useful, unique, and difficult for a competitor to copy credibly.
If you can't publish exact prices, publish honest ranges with what drives variation locally.
2. Local Case Studies
One real client from that city, named or anonymised with specifics, is worth more than 500 words of generic copy. This is why the page count should track your actual service footprint. You can only write this for cities where you've genuinely worked.
3. Named Local Team or Partner
"Rahul handles our Coimbatore accounts" is specific and verifiable. "Our expert team" is not. If you use local partners or freelancers, say so honestly, it's still specific.
4. Local Regulations, Constraints and Seasonality
Enormously underused. Municipal permit requirements, state-level compliance differences, monsoon timing affecting service delivery, local market seasonality, traffic and access constraints affecting turnaround. This is genuinely useful information and only someone who actually operates there knows it.
5. Local Service Constraints
Delivery timelines, coverage boundaries within the metro area, which pin codes you serve, what you don't do there. Buyers ask these questions and generic pages never answer them.
What Doesn't Work
A paragraph about the city's history, population and economy. Every doorway page has one. It's the clearest tell there is, and it helps no buyer.
The LLM Citation Problem
Here's the part that changes the calculus, and it's barely discussed.
Templated pages seem to get read and discarded. The distinctive page gets cited.
The Observation
From tracking which URLs get cited in AI answers for local service queries, heavily templated pages appear to be poorly represented. Distinctive pages: real case studies, opinionated guides, pages with specific numbers and named people, get cited far more often than city-variant landing pages, even when the city pages rank well in classic organic results.
I want to be careful here: this is a pattern I observe, not something any platform documents. But the mechanism is intuitive. If a model encounters two hundred near-identical pages, none of them contains distinctive information worth surfacing, and the redundancy itself is a signal that none is authoritative.
What It Means Strategically
pSEO may win clicks while losing AI visibility. That's a genuine tradeoff, and how much it matters depends on where your category's discovery is heading.
For services where buyers still search and click, emergency services, immediate local needs, city pages remain valuable. For considered purchases where buyers increasingly ask an assistant "who should I hire for X in Y", B2B services, professional services, education, the templated approach is losing ground to distinctive, citable content.
The Hybrid That Actually Works
Fewer city pages, each genuinely substantive, plus a body of distinctive non-templated content that AI systems can cite. Twenty excellent city pages beat two hundred thin ones on both surfaces. That is not a compromise position, it's just the correct one.
The India Variant
Tier-2 and Tier-3 City Pages
The temptation is obvious: search volume is less competitive, and generating pages for 300 Indian cities is trivially easy. The problem is equally obvious: you don't operate in 300 Indian cities, so you have nothing local to say about 290 of them.
The honest approach: build pages for cities where you have at least one of a client, a team member, a partner, or specific operational knowledge. For everything else, a single "cities we serve" page listing coverage is sufficient and safe.
Tier-2 city pages can genuinely outperform metro pages when they're real, because competition is thin and the buyer is grateful to find someone who clearly knows their city.
Transliterated City Names
Bengaluru and Bangalore. Vadodara and Baroda. Thiruvananthapuram and Trivandrum. Prayagraj and Allahabad. Puducherry and Pondicherry.
Do not create separate pages for each variant. That's duplicate content with extra steps. One page, canonical URL using the more commonly searched form, both variants used naturally in the body copy and title where it reads naturally. Check actual search volume rather than assuming the official name wins, it frequently doesn't.
Hinglish and "Near Me" Behaviour
Indian search behaviour genuinely includes mixed-language queries: "ghar ke paas plumber", "best CA near me Andheri", "sasta gym near me". This is real volume, particularly on voice search.
You cannot keyword-stuff your way into these, and forcing Hinglish into formal service copy reads badly. What works: an FAQ section on the city page using natural question phrasing as buyers would actually type or say it, plus genuinely conversational answers. That's both more useful and better matched to how these queries resolve.
GST and Compliance Angles
For B2B services, state-level GST registration and compliance differences give you genuinely unique per-state content. Most competitors don't bother. It's specific, useful, and impossible to fake.
This Is the Agency's Own Problem
Worth stating directly, because it's usually the elephant in the room: if you sell SEO or marketing services, you almost certainly have or want "[SEO services] in [city]" pages. Every agency does.
I've had to apply this test to my own site. The conclusion was uncomfortable: I could write a genuinely useful page for the cities where I've actually worked with clients, and I had nothing honest to say about the rest. So those pages don't exist.
That's a smaller page count and a slower ramp. It's also the only version that survives contact with both Google's quality systems and an AI assistant deciding whom to recommend. Agencies that generate 200 city pages while advising clients not to are running a strategy they don't believe in, and buyers notice.
Implementation Sequence
Step 1: Inventory what's real. List cities where you have a client, a team member, a partner or genuine operational knowledge. That list is your maximum page count.
Step 2: Build the content spine per city. For each: local pricing range, one case, one named person or partner, one local operational fact. Four fields. If you can't fill three, the city drops off the list.
Step 3: Design the template so unique content leads. Local block first, shared block below.
Step 4: Launch 10-15 pages. Wait 60-90 days. Check indexation, impressions, clicks, engagement.
Step 5, Improve or cull before expanding. Any page not indexed or not earning clicks gets fixed or removed. Only then build the next batch.
Step 6: Build the citable layer. Two or three genuinely distinctive pieces of content per quarter, real case studies with numbers, opinionated guides, original observations. This is what earns AI citations that city pages won't.
Both Search Engine Land and Search Engine Journal track how Google's treatment of scaled content evolves, and it does evolve, the direction of travel has consistently been toward penalising volume without substance.
Frequently Asked Questions
Are programmatic city pages against Google's guidelines?
Not inherently. Scaled page generation is fine when each page serves a genuine user need. It becomes a doorway violation when pages exist to catch queries and offer nothing a user couldn't get from a single generic page.
How much unique content does each city page need?
Target 50% of visible body content unique to that city, with 40% as a workable floor. More importantly, the unique portion must be the part a buyer cares about, local pricing, local team, local cases, not a paragraph about the city's population.
How many city pages is too many?
There's no absolute number. The risk signal is the ratio: if templated pages are the large majority of your indexed URLs and earn a small minority of your clicks, that's a site-quality problem. Practically, don't build pages for cities where you have nothing local to say.
Should I create separate pages for Bangalore and Bengaluru?
No. One page, canonical on whichever form has higher search volume, with both names used naturally in the copy. Separate pages for name variants are duplicate content.
Do templated pages get cited by AI systems?
Observably, much less than distinctive content does. This isn't documented by any platform, but the pattern is consistent and the mechanism makes sense, redundant near-identical pages contain nothing worth surfacing. Plan for city pages to win clicks and distinctive content to win citations.
What if I genuinely serve 200 cities?
Then serve them, but page count should still track what you can say substantively. Publish full pages for cities with real depth and use a single well-structured coverage page for the rest. Serving a city and having unique content about it are different things.
Can I use AI to generate the unique content for each city?
To draft and structure, yes. To invent local facts, no: that produces confident fabrication about pricing, regulations and cases, which is both a quality risk and a legal one. Feed it real local inputs and let it write; don't let it source.
Is "crawled, currently not indexed" a penalty?
Not a penalty, but it's a clear verdict. Google has looked at the page and decided it doesn't add enough to justify indexing. Treat it as free diagnostic feedback and fix the pages rather than resubmitting them.
Should I target Tier-2 cities before metros?
Often yes. Competition is thinner and a genuinely local page can dominate quickly. The constraint is the same as everywhere else: only where you have real local substance to offer.
How do I handle Hinglish "near me" queries?
Through a natural-language FAQ block on the city page using the phrasing buyers actually use, answered conversationally. Don't force mixed-language keywords into formal service copy, it reads badly and matches poorly.
How long before city pages start ranking?
Typically 3-6 months for a well-built page in a moderately competitive local market, faster in Tier-2 and Tier-3 cities. If a page shows nothing at 90 days, that's usually a content-quality signal rather than a patience problem.
If you're weighing a programmatic local build and want an honest read on whether your content spine can actually support it, that's a worthwhile hour. I write about organic growth for Indian brands and startups at younusfardeen.com, including the parts where the answer is "build fewer pages."