Programmatic SEO is a bet: that you can generate thousands of pages from a template and have Google treat them as genuinely useful rather than thin duplicates. We run a long-distance moving cost site with 27,854 route pages, one for every major city pair, and getting them indexed without tripping duplicate-content filters was the whole game. Here is what worked.
The duplicate-content problem
Every route page answers the same question: how much does it cost to move from City A to City B? The template is identical. The risk is obvious: Google sees 27,854 pages with the same structure and similar text, decides they are duplicates, and indexes a fraction of them. Early on, that is exactly what happened. Thousands of pages sat in "Crawled, currently not indexed" limbo.
The fix was making every page substantively different, not cosmetically different. Swapping city names in the same paragraph is not differentiation. Real data is.
Layer 1: Census migration data
The foundation of each page is real US Census migration data for that specific route: how many people moved between these two cities, in which direction, and how that compares to national averages. This data is unique per route by definition. A page about moving from Austin to Denver carries different numbers than Denver to Austin, because migration flows are directional.
This gave every page a genuinely unique data section that no template trick could fake, and it is also the most useful part of the page for a real user planning a move.
Layer 2: cost tables with real ranges
Each page includes a cost breakdown table with ranges specific to that route's distance: studio, 1-bedroom, 2-bedroom, 3-bedroom, 4-bedroom estimates. The numbers are computed from the route distance and current fuel and labor benchmarks, so a 300-mile route and a 2,000-mile route show meaningfully different tables.
We also include the factors that move the price for that specific route: seasonal demand patterns, metro-area access issues, typical moving-day complications for those cities.
Layer 3: FAQs with local answers
Every page has an FAQ section, and we resisted the urge to use one shared FAQ. Questions like "How long does the drive take?" and "What is the best month to move?" get answers computed from the actual route: drive time from distance, seasonal advice from the destination's climate. Same questions, different answers, because the underlying facts differ.
Technical scaffolding
Content differentiation is necessary but not sufficient. The technical setup matters too:
- Sitemaps split by region. One giant sitemap is fragile. We split into regional sitemaps so a fetch failure on one does not poison the rest, and so we can see indexation per region in Search Console.
- Canonical tags pointing at the canonical route URL, since the same route is reachable with and without trailing slashes and with city names in either order.
- Internal linking from state hub pages down to route pages, giving every route page a crawl path within three clicks of the homepage.
- Structured data with FAQ schema on each page, which also earns rich results on the pages that do rank.
The results
Indexation climbed steadily once the differentiated content shipped. The pages that indexed fastest were the ones with the most distinctive data, high-volume migration corridors where the Census numbers told an interesting story. That confirmed the thesis: Google was not punishing the template, it was waiting for proof that each page deserved to exist.
Lessons
- Data beats copy. Unique real data per page is worth more than any amount of rewritten boilerplate.
- Directional asymmetry is free differentiation. Any dataset with A-to-B and B-to-A variants doubles your uniqueness for free.
- Watch Search Console per segment. Aggregate indexation numbers hide everything. Segment by sitemap and fix the worst segments first.
- Programmatic pages still need editorial judgment. We manually review the top-traffic routes and improve them like any editorial page. The template gets you scale; editing gets you rankings.
This is all live at myfastmovers.com, where you can see the route pages in the wild. If you are doing programmatic SEO, I am curious: what is your differentiation layer?
Top comments (0)