You can build fifty websites in a weekend if every site is the same template with the city name swapped. You can also get all fifty de-indexed in the same week. Google’s duplicate content detection does not care that the businesses are real and the work is real. It cares that the pages look identical.

This is the trap most “programmatic SEO” content does not warn you about. Build a tokenized template, run it through a CSV of cities, deploy fifty sites, watch your traffic curve go up for two months, then watch it collapse when Google finishes its assessment. The fix is not to abandon templates. Templates are how solo operators scale. The fix is to know exactly which fields have to vary per deployment, which fields can vary, and which fields should not. Get the categories right and the template survives. Get them wrong and you are building a doorway page operation that Google will eventually flag.

I have been productizing my service business sites into a tokenized template system. The core file is a config.json with maybe sixty fields. Some are obviously variable per client, like business name and phone number. Some are obviously consistent across deployments, like the underlying HTML structure. The interesting category is the middle. The fields where the wrong default produces a duplicate content footprint and the right default produces a unique page.

The fields that must vary per deployment

These are the fields where Google’s duplicate detection bites if you do not vary them. Not “should vary” in a stylistic sense. Must vary in a Google-flags-the-cluster sense.

Hero copy. The headline and subhead on the homepage cannot be identical across deployments in the same vertical. If you have ten lice clinic sites all leading with “Lice Gone, Today, Guaranteed,” Google sees ten pages with identical primary content within the same niche. The headline can share a structural pattern, but the actual words have to differ in ways that reflect the specific business. One clinic might lead with the founders’ story. Another might lead with the guarantee. Another might lead with location convenience. Same vertical, different angles, different words.

Testimonials. Real client testimonials are obviously unique per business. The trap is when a template ships with placeholder testimonials that the client never replaces. I have seen sites go live with the original template’s testimonial copy still in place because the client did not gather their own quotes in time. Google sees this immediately. If the same five testimonials appear on multiple sites in your portfolio, every site loses trust at once.

Location-specific facts. The single most underused signal for local SEO is genuine local information. The street the clinic is on, the parking situation, the major intersection nearby, what is on the same block. This information is impossible to fake at scale, which is exactly why it is valuable. If you have a section called “Finding Us” and it actually describes the building from the curb, Google can tell that section was written by someone who has been there. If it just says “we are conveniently located in [city],” Google can tell that too.

Schema markup. The structured data has to match the actual business. Different addresses, different phone numbers, different hours, different geographic coordinates. This sounds obvious. The non-obvious part is that the schema fields most likely to fail are the ones that auto-populate from a template. If your template defaults the priceRange to “$$” and you deploy it to a clinic that charges premium rates, the schema is wrong. If your template defaults the openingHours to a generic Monday through Friday and the actual clinic is open Saturdays, the schema is wrong. Wrong schema is worse than no schema. Google penalizes sites that publish structured data that contradicts the visible content.

The fields that can vary, but do not have to

These are the fields where varying helps differentiation slightly but uniformity does not trigger duplicate content penalties.

Color accents. If every site in your portfolio uses the same primary brand color because that is your template’s default and the clients have not weighed in, that is fine. Color is a visual signal not a content signal. Google does not care that your medspa template and your dental template share an accent color. Visitors might care, which is a different problem, but it is a brand problem not an SEO problem.

Hero image. The hero image can be a stock photo of the same general subject across sites in a vertical, as long as it is not the literal same file URL on every deployment. Compress and rename it per site, change the dimensions slightly, and you have visual differentiation without any real cost. The reason this works is that Google’s duplicate detection is primarily textual. Images get fingerprinted but the threshold is much higher than for copy.

Layout structure. Two sites with identical section ordering and identical component patterns are fine as long as the content inside those components varies. A dentist site and a chiropractor site can both follow the pattern hero / services / about / testimonials / location / contact. That pattern is not duplicate content. The pattern is convention. Google does not penalize convention.

The fields that should not vary

These are the fields where varying actually hurts. Most of them are technical or structural.

Site architecture. Every site in your template system should have the same core information architecture. Homepage, about, services, contact, location pages, blog. Do not let one client have eight nav items and another have three because they made different requests during the build. Every additional structural variant is a maintenance cost forever, and the variation does not help SEO. It hurts maintainability without buying anything.

Schema shape. The structured data schema types and field names should be consistent across deployments. The values vary. The schema itself does not. If one clinic site uses MedicalBusiness and another uses LocalBusiness for the same vertical, your portfolio is harder to maintain and Google’s interpretation of your sites becomes inconsistent. Pick the right schema for the vertical and use it everywhere.

URL structure. Every site should follow the same URL pattern. Homepage at root, services at /services, individual locations at /locations/[city]. Inconsistent URL patterns across deployments make redirect management harder and confuse anyone who works on the system later, including your future self.

The geo-page strategy that actually works

The riskiest part of any tokenized template system is the geo-page expansion. You build five satellite pages around each location, one per nearby city. If those pages are template-with-city-swap, Google flags them as doorway pages and the entire site loses ranking.

The version that works requires every geo page to have something the other geo pages do not. Three things, specifically. Unique intro copy that references something local to that city, two to three sentences minimum, written by someone who knows the area or has researched it properly. A self-referencing canonical tag pointing to the geo page itself, not to the homepage. A list of nearby community references that are different on each page, drawn from actual nearby neighborhoods or landmarks.

That last item is the test. If you cannot list five real nearby neighborhoods or landmarks for a target city, you do not know that city well enough to deploy a geo page for it. Skip it. A site with twelve genuine geo pages outperforms a site with thirty thin ones. Always.

What I check before deploying

Here is the actual checklist I run before any tokenized site goes live. It takes about fifteen minutes per deployment and it has prevented more problems than any other quality gate I use.

Compare the homepage hero copy across the most recent five deployments in this vertical. If any two are similar enough that you could swap them without anyone noticing, rewrite one before launch. The hero is the highest-stakes piece of content on the page.

Check the testimonials section. Every testimonial must come from a real customer of this specific business. If they are not ready, leave the section out entirely. A missing section is better than a duplicate section.

Read every geo page out loud. Yes, out loud. If two of them sound interchangeable, kill the weaker one. Programmatic SEO does not mean publishing pages you would not be willing to defend individually.

Validate the schema in Google’s Rich Results Test. Every deployment, every time. The cost of wrong schema is high enough that this fifteen-second check is the cheapest insurance you will ever buy.

The deeper point

Templates are the right tool for solo operators serving multiple businesses in the same vertical. The economics do not work otherwise. The mistake is treating the template as a duplication engine instead of as a starting point for differentiation. The work that makes a template-built site rank is not the template itself. It is the discipline applied to the fields that have to be unique. That discipline is the actual product. The template is just how you get there efficiently.

If you are running programmatic SEO and your traffic curve has not collapsed yet, look hard at the fields above. The collapse is rarely sudden. It is usually a slow erosion that starts with one or two of the deployments losing rankings and ends with all of them losing rankings together. The fix is always the same. Add genuine variation to the fields that should vary. Strip variation from the fields that should not. The template survives. Your traffic does too.