Back to blog

SEO tags are not a comparison-page factory

Wlad K.·Published ·Last updated

Open a Next.js SaaS kit README. Count the word SEO. Then search Google for your product vs X. Those are not the same job.

Google's own title-link guidance says each page needs distinct <title> text. Titling every URL "Cheap products for sale" is their example of what fails. Most kits ship one generateMetadata helper, an Open Graph image, maybe a blog. That is a caption. It is not ranking for a named competitor.

This is not a definition of programmatic SEO. That lives on what is programmatic SEO. This is the argument I had to settle while building nextbento.dev: if comparison queries are how you get customers, metadata is the wrong buy.

What “SEO-ready” usually means

In practice, a typical kit gives you:

  • generateMetadata on the homepage and blog
  • A sitemap of whatever routes already exist
  • Schema for Article on posts
  • A markdown blog you still have to write

Hygiene. Google will index the site. It will not invent twenty distinct “X vs Y” intents for a product that does not exist yet.

Google's March 2024 spam policies name scaled content abuse: many pages generated to manipulate rankings, not to help users, whether a human or a model wrote them. A kit that sells landing sections and a Discord still looks like the metadata screenshot. You get tags. You build the generator.

What actually works is shipping the generator. NextBento's JSON covers compare, integration, and glossary pages, plus sitemaps. Live examples sit on compare.

Why a vs page is a different job

A comparison URL answers a searcher who is already shopping. One page. One primary keyword. Unique copy. Dated prices. FAQs that match the question.

If two URLs chase the same phrase, Google picks one. The other wastes crawl. I learned that the hard way while filling this origin: /compare owns the table, /alternatives/shipfast owns the ShipFast shortlist, and a blog that copies either of those is a third URL fighting the first two. The map is keyword ownership. It is a product decision, not a plugin.

Thin clones fail for a dumber reason. Twenty routes with the same H2s and a swapped brand name are one page with find-and-replace. Google's people-first questions ask whether the content shows first-hand expertise, the kind that comes from actually using the thing. A clone farm does not.

What the factory actually has to hold

You do not need city pages for a SaaS boilerplate. Local intent here is close to zero. I refused plumber-in-city spam on this origin on purpose.

What I did ship is a slug per distinct intent. On this site that is 20 JSON pages: 7 vs-pages, 4 alternative shortlists, 3 integrations, 4 glossary terms, 2 audience pages. Each record needs a title, a primary keyword, sections, FAQs, and a last-verified date when I cite someone else's price. pnpm validate:pseo fails if dateModified is older than 180 days, or if a page has fewer than 3 FAQs.

The layout can be shared. The copy cannot.

How this origin does that is already written: how the pSEO JSON factory works. The kit documents extra templates (hub, tool, howto, location) for products that have those query patterns.

Prompting the pages is the other trap

You can ask Cursor for “twenty vs pages.” You will get files. You will get invented prices, overlapping titles, and no ownership map.

Aggarwal et al.'s GEO paper (KDD 2024) tested 10,000 queries. Adding citations, quotations, and statistics lifted visibility up to about 40% in their setup. Keyword stuffing, the classic SEO reflex, did not help. A one-shot scaffold does the opposite of that paper: it mass-produces uncited guesses.

Keep the agent. Stop spending the usage bill on a generator the kit already has. The blow-by-blow is prompting SEO pages from a blank repo.

What to clone

If you are shipping a Next.js SaaS and ranking for comparison queries is part of launch, start from a repo that already has the factory, then fill JSON for your competitors. NextBento is $59 one-time: Next.js 16, Supabase, Stripe, Resend, eight skills, and those templates. Pricing. Setup: quick start. The buyer-facing skill list is in Cursor / Claude skills vs a blank repo.

One more 2026 wrinkle: Google stopped showing FAQ rich results on 7 May 2026. Shipping FAQ schema as a screenshot of “SEO-ready” is even emptier than it was. Visible FAQs still help people, and models still parse Q&A. The SERP dropdown is gone.

If comparison pages are not how you get customers, you still get auth and billing. If organizations, i18n, or MongoDB are hard day-one requirements, this is not that kit.