Verified against ChatGPT · 2026-08-13
Design a programmatic SEO page template that won't get flagged as thin or duplicate content at scale
Builds the actual template structure, dynamic-field logic, and required-unique-content rules for a programmatic SEO page set — sized to a real data source you have — with explicit guardrails against the thin-content trap that kills most programmatic SEO attempts.
The prompt
Ready to copy — highlighted parts are example details you can swap.
Design a programmatic SEO page template for the data set below, built specifically to avoid the thin/duplicate-content trap that gets most programmatic page sets deindexed or filtered. DATA SOURCE (what varies per page) A database of 1,200 US cities with population, median rent, and average commute time. EXAMPLE QUERY PATTERN THIS TARGETS "cost of living in [city]" and "average rent in [city]" HOW MANY PAGES THIS WOULD GENERATE 1,200 city pages WHAT WE CAN GENUINELY SAY DIFFERENTLY PER PAGE Population, median rent, average commute time, and a locally-sourced note on whether rent is rising or falling year over year, per city. STEP 1 — TEMPLATE STRUCTURE Design the page template as sections, marking each section as either dynamic (pulled directly from the data source and different per page) or static (identical boilerplate across every page). Be honest about the ratio: if the majority of visible content on the page is static boilerplate around a small dynamic data table, that page is a strong thin-content risk regardless of how many pages you generate, and say so explicitly rather than presenting the template as safe by default. STEP 2 — UNIQUENESS FLOOR Given the unique data points I listed, determine whether there's enough genuinely distinct information per page to justify a standalone indexable URL, or whether the actual unique content per page is closer to a single data point that would be better served by a filterable single page than thousands of near-duplicate ones. Name the minimum uniqueness bar you'd want before treating each page as worth indexing separately — for example, a page differing from its siblings only by a swapped city name in an otherwise identical paragraph does not meet that bar. STEP 3 — TEMPLATE COPY Write the actual static section copy (the parts that don't change per page), designed to still read naturally when the dynamic fields are swapped in — check it against at least two different plausible data values from your data source description to confirm it doesn't read awkwardly or generically for either. STEP 4 — GUARDRAILS Recommend a canonicalization or noindex threshold: at what point (too few unique data points, too small a difference between neighboring pages) should a page in this set be noindexed or merged rather than published, and how would you flag those programmatically rather than relying on manual review of thousands of pages. OUTPUT FORMAT 1. Section-by-section template with dynamic/static labels and thin-content risk assessment. 2. Uniqueness floor recommendation. 3. Sample static copy with two data-value substitutions shown side by side. 4. Noindex/canonicalization guardrail rule.
Customize
Optional — swap in your own details for the highlighted parts above.
Why this works
Programmatic SEO's most common real-world failure is generating thousands of pages that pass a superficial "they're all different" check because a name or number is swapped, while the actual reading experience across pages is close to identical boilerplate — this prompt forces an honest static-versus-dynamic ratio assessment per section specifically because GPT-5.1, asked simply to "design a programmatic template," will produce a plausible-looking structure without flagging that ratio problem unless required to state it explicitly, and that ratio is the single strongest predictor of whether a search engine treats a page set as genuinely useful or as scaled thin content. Requiring a stated uniqueness floor — a minimum bar for what counts as genuinely distinct content, not just a swapped value — matters because programmatic SEO's core trade-off is between page count and per-page substance, and an unconstrained design tends to maximize page count since more pages sounds like more opportunity, without weighing that a smaller set of genuinely differentiated pages usually outperforms a much larger set of near-duplicates that risk collective devaluation. Checking the static template copy against at least two different plausible data substitutions is what catches a template that reads naturally for the example given but breaks down or sounds generic for a different value in the same field — a template validated against only one example can hide awkward phrasing that only shows up at certain values (a population of 40 million reading oddly in a sentence built around "a mid-sized city of around 200,000"). The explicit noindex/canonicalization guardrail step matters because manual review doesn't scale to thousands of generated pages, so the actual production-safe version of programmatic SEO requires a programmatic rule for which pages don't meet the bar — without that rule stated up front, a team ships all pages by default and only discovers the thin ones after a ranking or indexing problem appears in aggregate.
What you get back
Section: "Cost of Living Overview" — dynamic (population, rent, commute figures pulled per city) — low thin-content risk if the surrounding analysis paragraph genuinely references the specific numbers. Section: "Why People Move Here" — currently designed as static boilerplate with only the city name swapped — high thin-content risk, recommend cutting this section or making it genuinely dynamic using the year-over-year rent trend data instead.
Verified against
ChatGPT GPT-5.1 · 2026-08-13
Changelog
- 2026-08-13 — Initial publish, verified against ChatGPT GPT-5.1.
Building this for real?
This is a free starting point. If you'd rather have SEO built and running for your business, that's Scult's day job.
EXPLORE SEO
