Making the city pages real exposed what they contained. Thirty pages whose written content was one template with the city name swapped, silver rates in {city} change daily, times fifteen. Search engines have a name for that, thin content, near-duplicate pages adding nothing per page, and it is a classic reason rate and directory sites struggle in search and with AdSense review. This post is how the city pages became genuinely individual.
First, the honest diagnosis of why templated copy fails. The numbers on each city page were already unique, live rates per city, but the words were interchangeable, and words are what search engines read to decide whether a page deserves to exist separately. If swapping the city name produces another valid page, the page has no city in it, only a variable. The fix cannot be automated synonym-shuffling, which produces the same emptiness in more costumes. It is writing, each city page got its own body, 800 to 1200 words, built from things true of that city specifically, its actual bazaars and buying culture, Lahore’s historic Sarafa cluster reads differently from Karachi’s wholesale scale, from Multan’s, because the cities differ, plus six FAQs per page targeting distinct real questions rather than one FAQ set cloned fifteen times.
The structure that carries the unique copy stays systematic, a builder assembles each page from shared live components and per-city written blocks:
function srt_build_city_content($metal, $city) {
$h = '<p>' . srt_city_intro($metal, $city) . '</p>'; // unique per city
$h .= '[sarafa_updated city="' . esc_attr($city) . '"]';
$h .= '<h2>' . ucfirst($metal) . ' Rate in ' . esc_html($city) . ' Today</h2>';
$h .= '[' . $metal . '_rate_table city="' . esc_attr($city) . '"]';
$h .= srt_city_market_section($metal, $city); // unique per city
$h .= '<h2>Price Trend</h2>[' . $metal . '_rate_graph city="' . esc_attr($city) . '" days="60"]';
$h .= '<h2>Frequently Asked Questions</h2>' . srt_city_faq($metal, $city); // distinct set
return $h;
}
The pattern to notice is which parts are shared and which are not. The live components, tables, graphs, the updated timestamp, are rightly identical machinery everywhere, freshness is their job. The prose sections and FAQs are keyed per city and written, not generated, uniqueness is their job. Two more rules kept the copy worth indexing, no AI-flavoured filler tone, no emoji-bulleted padding, the target reader is someone about to buy silver in that city, and every section had to survive the question, would this sentence be false in a different city? If yes it stays, if it would be equally true anywhere, it is template wearing a disguise, and it goes.
A few things people ask me about this
How much unique text does a location page need? There is no magic count, the working test is substance, my pages carry 800 to 1200 words that are specifically true of that city plus distinct FAQs. Ten unique sentences padding a template will not read as a real page, because it is not one.
Are identical rate tables across pages a duplicate-content problem? No, data components are expected to be systematic. Duplication becomes a problem in the prose, where sameness signals the page has no independent reason to exist.
Next
With real pages and real content, one invisible layer was still failing silently, the SEO meta on exactly my most important pages. That bug is the next post.
