When A-TEX Roofing needed dozens of city pages, the temptation was obvious: write one template, swap the city name, ship 35 pages by Friday. Google would have eaten that for breakfast — and so would any prospect who clicked two of them in a row.
Instead, I built a page system with locally-relevant content for each market. Here is how it works.
The Google Sheet is the source of truth
One row per city. Columns for: target queries, primary services, service-area context (neighbourhoods, landmarks), unique hero copy, unique H2 set, internal-link plan, status. The sheet is the spec; Elementor is just the implementation.
The duplicate-content guardrail
Before publishing, I run the new pages through Screaming Frog with the duplicate-content checker on. Anything flagged as >70% similar gets sent back for unique-copy rewrite. No exceptions.
Result: 35 pages, zero duplicate-content flags, brand voice consistent across every market.
