How this site's programmatic SEO JSON factory works
The marketing site at nextbento.dev does not hand-write a unique React tree for every "NextBento vs X" URL. It loads JSON, renders one layout, and maps each slug to a primary keyword. That is the programmatic SEO factory this site actually ships.
The product kit documents extra templates (hub, tool, howto, location) for buyers who have those query patterns. This origin does not generate city pages. Local intent for a SaaS boilerplate is close to zero.
The moving parts
- Data.
content/pseo/*.jsonholds comparisons, integrations, glossary terms, and personas. Each record has a slug, title, description, primary keyword, sections, FAQs, and dates. - Routes.
/compare/[slug],/integrations/[slug],/glossary/[slug],/for/[slug]plus a hub page for each folder. - Layout. One page component per type. Same header, footer, FAQ block, and JSON-LD shape. The copy in JSON is the unique part.
- Guardrails.
pnpm validate:pseochecks required blocks and freshness. Stale competitor prices are a trust problem, not a design problem. - Index.
app/sitemap.tslists the URLs. IndexNow pings Bing-family engines after updates.
You can read the kit-oriented version in Programmatic SEO docs. The short definition stays on what is programmatic SEO. This post is the how for this site.
What JSON pages own (and what they must not)
Keyword ownership is a map, not a vibe:
/compareand/compare/*own "NextBento vs …" and the "which Next.js SaaS boilerplate" listicle intent./for/*owns audience queries (indie hackers, Cursor-assisted founders)./glossary/*owns "what is …" definitions. Keep them short./docs/*-setupowns implementation for people who already bought or are installing./blog/*owns opinion, narrative, and one-off explainers. A blog post may link to a compare URL. It should not republish the matrix.
If two URLs chase the same query, Google picks one and the other wastes crawl. We already see /compare indexed for that family. We will not also publish /blog/best-nextjs-saas-boilerplate-2026.
When a factory page is the wrong tool
Use JSON when you can name a distinct intent per slug: vs ShipFast, vs MakerKit, Stripe integration, "what is llms.txt."
Use a blog post when the topic is a story or a build log: why blank-repo prompting burns evenings, how AGENTS.md should be written, how the factory itself works. Those do not templatize cleanly. They also should not pretend to be vendor docs. Ranking for "resend api key" is a loss. Official Resend docs will win, and the impressions will not convert.
What we are not doing
No location spam. No weekly mill until these URLs show Search Console impressions of their own. No second comparison hub on /blog.
If you want the kit so you can run a similar factory on your product, start at pricing and look at live examples on compare.