Programmatic pages
Programmatic pages covers 8 of the SEO for Solos checklist's implementation checks. Generating hundreds or thousands of pages without producing doorway pages. The gate matters more than the template.
0 of 8
Saved in this browser
8 checks shown.
Programmatic pages
Generating hundreds or thousands of pages without producing doorway pages. The gate matters more than the template.
Every programmatic route is gated against an authoritative entity list5/M
Why it matters
An ungated dynamic route generates a page for any slug anyone types, including slugs an attacker generates. That is how a site accidentally publishes ten thousand thin pages.
How to verify
curl -s -o /dev/null -w '%{http_code}\n' https://example.com/glossary/not-a-real-termThen confirm 404, not 200.
Apply the strip-the-entity-name test before publishing a tier5/S
Why it matters
Remove the entity name from the page. If nothing unique remains, the tier is doorway pages and shipping it risks the whole domain, not just the tier.
How to verify
Take three pages from the tier, delete every occurrence of the entity name, and diff them. If the diff is empty, do not publish.
Each page carries numbers computed from its own entity5/L
Why it matters
Numbers are the cheapest form of genuine uniqueness and the hardest to fake at scale. A page with six entity-specific figures cannot be a template with the name swapped.
How to verify
Pick five random pages in the tier and confirm at least four numeric values differ across all five.
FAQs are computed per entity, not templated with a name substitution4/L
Why it matters
A per-entity FAQ answer that contains a real figure is quotable by an answer engine. The same sentence with only the name changed is recognisably generated.
How to verify
Compare the FAQ answers on two pages in the tier. If they differ only in the entity name, they are not computed.
Missing data renders an honest label, never a fabricated value3/M
Why it matters
A template that prints 0 or an em dash when data is missing is asserting something false. Labelling the gap is both accurate and, unexpectedly, a trust signal.
How to verify
Find an entity with incomplete source data and confirm the page says so in words rather than rendering a zero.
Each page links up to its hub, sideways to siblings, and across to related content4/M
Why it matters
A flat tier of 1,689 pages linked only from a paginated index gets crawled once. Sibling links turn it into a connected graph a crawler can traverse.
How to verify
On any tier page, count internal links to the same tier and confirm at least six, plus one to the hub.
Generated data is committed as typed source, with a stamped update time3/M
Why it matters
Querying a database at build time makes the build non-reproducible and couples deploys to database availability. Committed snapshots make a data change a reviewable diff.
How to verify
Confirm the generated module exports a `*_UPDATED_AT` constant and that the file is in version control.
Every programmatic URL is prerendered, not rendered on demand3/M
Why it matters
A tier rendered on request depends on the database being up for the sales funnel to work, and pays a cold-start cost on the first crawl of every page.
How to verify
Check the build output and confirm the tier routes are listed as static, then confirm a request to a tier page returns a cache hit.