Programmatic SEO
Done well, one template covers thousands of real searches. Done badly, it is a mass of thin pages that damages the whole domain.
Qualify before building
All four must hold:
- A real query pattern with verified volume across many instances — not one popular term and a long tail of zeroes.
- Data you actually have, at quality, for most instances. Missing data produces empty pages, and empty pages are the failure mode.
- Genuine per-page value. If two pages differ only by a swapped noun, they are duplicates however they are generated.
- A reason to be better than what ranks now. Usually completeness, freshness, or data nobody else has.
Fail any one and the answer is fewer, better pages.
Building
- Design the best single page first, by hand, and confirm it is genuinely useful. Then find what in it is variable. Templating before you know the good page scales a mediocre one.
- Vary the substance, not just the strings. Each page needs data, comparisons, or context specific to it.
- Set a minimum data threshold. Below it, the page does not get generated. This single rule prevents most programmatic disasters.
- Internal linking is not optional — thousands of orphaned pages will not be crawled. Build hub pages and cross-links into the template.
- Roll out in batches. Publish a few hundred, wait for indexation and performance, then continue. A full launch that goes wrong is hard to unwind.
Maintaining
Stale programmatic pages rot faster than editorial ones because there are so many. Set a refresh cadence tied to the data source, and prune: pages with no impressions after two quarters should be consolidated or removed. Volume is not the goal.
Sources
references/sources.md in this skill lists the outside authorities that settle the questions
here — what each one is authoritative for, and what you may do with it. Check them before
answering on anything they cover, and cite what you used. Most are free to read and not free
to reproduce; the use note on each is binding.
Never
- Generate pages for instances with no data.
- Spin text to create the appearance of uniqueness.
- Launch without a plan for removing what does not work.

