Three million pages is a tooling problem, not a content problem.
Gate one: data integrity
Before a template even renders, the input row has to pass a schema check. Required fields present. No placeholder strings. No values that look suspiciously default. If a row fails, the page does not generate. It does not generate as a draft either.
Gate two: uniqueness
Every page gets hashed and compared against its neighbours. If two pages are more than ninety percent similar, neither goes live until a human resolves it. The cost of building this once is far less than the cost of a sitewide quality issue six months later.
Gate three: demand signal
We do not publish a page unless there is at least a small, real signal that someone is looking for it. Not estimated volume. Real signal from search console, internal search, or paid data. Pages without demand are kept in a holding sitemap and reviewed quarterly.