Two live URLs share one unique paragraph
The H1 changes. The proof does not. Crawl is busy. Users bounce. We run the gate. One URL stays or both close until the data differs.
Programmatic SEO
Programmatic SEO from senior consultants who turn search demand into rankings, traffic and revenue for your business. We start with a free audit and a 90-day plan built around your goals.
Our process
We compare two generated pages side by side. If they read the same once names are swapped, the template fails.
We set a uniqueness test that decides whether each page is indexed and included in the sitemap.
We decide in advance what happens when data goes stale: noindex, redirect or delete.
Position
Teams often buy volume when they needed a rule. A spreadsheet of places, connectors, or SKUs becomes thousands of URLs with one paragraph and a swapped noun. Search intent has to show in the HTML a crawler fetches for that row. A template that only changes the city in the title is not a document. This page owns the factory that can refuse a row.
The object is generation with quality: a source of rows you will stand behind, a template that can fail, an index or noindex decision that follows the gate, and prune when the data dies. WordPress can be the pipe. Headless can be the pipe. The CMS child still owns permalinks and leftover archives. Factory rules stay here.
We will not sell URL-count packages. We will not index two fills that a reader cannot tell apart. If the real job is a shop permit list, open ecommerce SEO. If the real job is a presence page for one market, open local SEO. If you are moving hosts with a map, open migration SEO.
Compare packages if a published retainer already fits. Use WordPress SEO when a related service is the real job. If this page is still a guess, start with a free AI + SEO audit.
When this fits
If you needed leftover WordPress archives, one city presence page, a shop permit list, or a cutover map, start there instead.
The H1 changes. The proof does not. Crawl is busy. Users bounce. We run the gate. One URL stays or both close until the data differs.
Someone scraped queries and called it a dataset. You cannot defend the row to sales or legal.
The SKU left. The office closed. The connector retired. The URL stayed. Prune is the job. Keeping zombies for long-tail hope is how a factory becomes a clone farm.
Thin fills stay indexable. Unique fills stay noindex. Technical SEO can set the header. The rule that says which row may speak is this H1.
Process
Four factory jobs in this order. We do not start prune by guessing which city to keep. The point is a site that only publishes rows a reader can tell apart.
Outcome A dated source list and a sample of rows you will defend.
Outcome A template note: which blocks must come from the row, which may be shared.
Outcome A gate rule engineering and SEO can both apply.
Outcome A prune rule with owners and a recheck after the next data drop.
Deliverables
You leave with a source note, a template fail test, a gate, and a prune rule. You do not leave with a city farm, a WordPress archive pass, or a ranking date.
Where the data lives, who may add a row, and what a fake row looks like. Dated. Last quarter's CSV is not this source.
Two example fills that must not both index. Engineering can run the same compare after a design change.
Uniqueness, utility, and the index or noindex outcome. Volume is not a line on this sheet.
Zombies are named.
Which generated paths may enter the sitemap. Robots that fight the gate are defects, not a separate essay.
Benefits
The gate keeps one URL or none. Crawl returns to pages a person would read.
Local presence work stays on local SEO when the page is a real office.
Prune is scheduled. The sitemap matches the table you still sell.
Two fills compared. If they match, the build fails. That is cheaper than a later cleanup.
Methodology
This works when someone owns the table and someone can refuse a fill. If both are missing, we are touring a landing-page generator. We are not running a factory.
We start with two live URLs that look alike, the table they came from, and the person who can unpublish. If any of those is missing, we name it first.
We fetch published HTML. We do not trust the CMS preview. Can a reader tell these two pages apart? Is the row real?
You may rename the roles below. You may not leave the dataset implied. An implied keyword list is how a city farm ships overnight.
First working session
The first hour is a pair of generated URLs that share a body. It is not a tour of landing-page tools.
We pick two live paths from the same template. We read them without the tokens. If the leftover prose is the same, that pair is the job. If the real question is leftover WordPress archives, that is WordPress SEO. If the real question is one city you actually serve, that is local SEO. If the real question is which products may exist, that is ecommerce SEO. If the site is mid-move, that is migration SEO.
Then we fetch published HTML, robots, and the sitemap sample. We compare that to the table. Extra indexable rows are usually the job. A design file that looks unique in Figma is not evidence.
We leave with a first gate or a stop. A stop names what is missing: the table, an unpublish owner, or a stack that is actually a shop catalog with no generation. Both are outcomes. A keyword-dump shopping list is not.
AI search
Unique honest HTML can help later extraction. This page cannot sell AI Overviews, a chat mention, or LLM visibility as a score.
People ask whether more generated URLs will land the brand in Google AI Overviews (AIO). If the factory shipped near copies, generative search has too many twins to lift, or nothing honest to quote. That is ours to prune. A program across search UIs is AI SEO.
AI search needs a page it can fetch. A row that only renders in the app after login does not help. Nobody can guarantee a spot in AI Overviews, but clear pages improve your chances.
We check product and place names in the published HTML. That is entity optimization as a factory input.
LLM visibility needs a sentence a model can quote, then measurement on LLM SEO. Unique fills can make a row look real. They do not sample answers. Semantic keywords belong in a kept row only when the data still differs. Stuffing synonyms across twins is not a module.
Schema
JSON-LD helps a machine read a row the page already states. This work stops identical graphs on near copies. Schema supports the work; it is not the whole job.
If two URLs inject the same Product or Place block after a token swap, extractors see twins. We name that. We do not add types to hide it.
We refuse question blocks that exist only to host more terms. A real question can live on a parent hub. Stuffing is not a gate.
Markup will not force generative search to cite the row. Good markup makes you eligible; it cannot buy a mention.
Who we work with
Someone has to refuse the next fill. We work with that person. We do not replace them with a second landing-page retainer.
Maintains the source. Kills dead rows. Holds the line when a campaign wants a URL for every synonym.
Ships the fail test and the sitemap consequence. Rechecks after a template change.
Can keep going once the gate is named. If they try to run this as leftover archives, two jobs collide. Archives belong on WordPress SEO.
FAQ
WordPress SEO owns CMS objects: posts, pages, leftover archives, attachments, and the plugin that stores titles. This page owns a data-to-URL factory: a dataset, a template, a uniqueness gate, an index or noindex rule, and prune. A custom post type can carry the rows. The factory rules stay here even when the pipe is WordPress. Permalink taste without a dataset is not this job.
Local SEO owns a real presence document for a place you serve: NAP, service area, and a page that could only be that market. This factory refuses a template that only swaps a city name into the same paragraph. If you do not operate there, the row does not earn a URL. A Maps listing is never minted from a keyword dump.
Ecommerce SEO owns the shop permit list: which product, collection, and facet URLs may exist as commerce. This page owns the generation contract when many URLs come from rows. Facets that explode still need a catalog rule on ecommerce SEO. The uniqueness gate and prune still live here so leftover clones do not index as if they were products.
Two URLs fail the gate when a reader cannot tell them apart after the template fills. A city token, a SKU code, or a synonym in the H1 is not enough if the body, proof, and job are the same. We keep the stronger row or we merge. Volume is not a reason to index both.
No. Honest unique HTML can help later extraction. Minting thousands of near copies does not buy a place in Google AI Overviews (AIO), a generative-search mention, or an LLM visibility score. If the kept URLs already tell the truth and models still invent a location you do not serve, that measurement sits on an AI search audit and on LLM SEO.
Rows that earn a URL
Send the live template, the source of rows, and a sample of two URLs that look alike.