How a clinic site gets built

Eleven clinics are moving from WordPress to full-code sites on Cloudflare Pages. This is the process we follow for each one, and why each step exists. Winthrop was the pilot; Kallangur is the second and proved the process works.

The shape of it

One template holds the design and the code. Each clinic has its own repository holding only its own content, and its own site. A change to the template reaches every clinic as a pull request, so one bad change can never take down eleven sites.

Template repo design, page layouts, build script, shared images holds no clinic content sync as a pull request Winthrop repo its words, photos, prices, redirects, SEO files Kallangur repo its words, photos, prices, redirects, SEO files the other nine one repo each Cloudflare Pages winthropvillagedental .com.au Cloudflare Pages kallangurdental .com.au one site each own domain
Push to a clinic repo and that clinic's site rebuilds in about a minute. Nothing else moves.

Shared by everyone

The look, the page layouts, the build script, treatment illustrations, health-fund logos and the group's dentist list. These live in the template and are never edited inside a clinic's repo.

The clinic's own

Every word on its pages, its photographs, its prices, its opening hours and team, its 301 redirect map and its SEO files.

The journey for one clinic

Eleven steps, three approval gates. Work stops at a gate until it is signed off.

0

Intake

The live website address, the logo pack, colour direction, photos, the Google Business Profile link, a few real reviews, and the team's names. We ask the clinic group for the slow things on day one: founding year, email, each dentist's registered name, and the analytics and call-tracking IDs.

1

Capture the old site

Every page of the existing site is crawled and saved: titles, headings, word counts, image alt text, structured data. This can only be captured while the old site is still live, and it is the evidence we compare against after launch.

2

Scaffold

A script cuts the new repo from the template, drops in the clinic's facts, colours and logos, and puts clearly-labelled placeholder images everywhere a photo is still missing. The site builds from day one.

3

Check it is really this clinic

We search the built site for any other clinic's name, address or phone number. This is how we caught Winthrop's address hiding in the shared privacy policy.

4

Publish a private preview

The repo goes to GitHub, Cloudflare Pages builds it, and the preview is blocked from Google so it can never compete with the live site.

5

Research, then lock the sitemap

We read what the old site actually ranks for, research keywords and competitors on top, and decide every page of the new site. See the next section.

Gate: the sitemap is approved

Nothing is written until the page list is agreed.

6

Approval document

The design, the colour scheme and the imagery go to the client together.

Gate: client approves the look

7

Home page

Real photography, real copy, real offers.

Gate: home page sign-off

No other page is built before this passes.

8

Every other page

Worked through highest-value first, each page written against its own keyword brief.

9

Redirects and checks

Every old address must lead somewhere on the new site. A script fails until that is true.

10

Review, then go live

Kevin reviews, the domain is pointed at the new site, the old site stays running for four to eight weeks as a fallback, and rankings are watched daily.

The SEO part, which is the risky part

A clinic's rankings are worth more than its website. Moving hosts is where sites lose them, so the whole process is built around not losing any.

1. Capture every old page + what it ranks for 2. Research keywords and local competitors 3. Lock sitemap one decision per page, approved 4. Build pages each to its own keyword brief 5. Redirects every old address still works 6. Cut over, then watch for 4 to 8 weeks old site stays running as a fallback, rankings checked daily against the baseline

How we decide which pages the new site has

Two things meet: the standard set of pages every clinic in the group should have, and the pages the old site already earns something from.

The rule. A page keeps its old web address only if it has earned it: it gets visits, it ranks in Google's top 30, or another website links to it. Everything else is built at the standard address and the old one redirects. Every standard page is built even if the old site never had one, so the new site can rank for more than the old one did.

For Kallangur that meant 111 pages to build and 284 old addresses redirected. Of 305 blog posts, 32 earned their place and the rest now point at the treatment page they were about.

What happens to the old blog

The same test. A post that ranks, gets visits or has a link pointing at it carries over at its exact address. The rest redirect. We do not rebuild hundreds of posts to preserve nothing.

How the words get written

Every page starts from the equivalent Winthrop page, then is rewritten for this clinic. The layout is shared. The words are not.

The Winthrop page layout and starting draft Its keyword brief what people actually search This clinic's own facts, suburbs, team, prices Rewritten page this clinic's words Duplicate check fails if more than a fifth of the wording still matches Winthrop's
The check swaps clinic names and suburbs for a placeholder first, so a page where only the names were changed still fails.
Why the check exists. Eleven sites in one group carrying the same paragraphs is duplicate content. Google picks one and buries the rest. Kallangur's 73 pages came out between 0% and 7% shared with Winthrop's.

Rules every page follows

Photographs

Heroes and any photo taken inside the practice belong to that clinic and are never reused elsewhere: a patient walking in should recognise the place. Treatment illustrations, before-and-after cases, dentist headshots and fund logos are shared across the group.

Where a photo does not exist yet, the page shows a plain panel with the word PLACEHOLDER on it, so nothing half-finished can reach a live site by accident.