Contents
Movement IV · The Rebuild

The Rebuild Specification

How the site would be rebuilt and migrated — specified in full, deliberately not executed, so the decision can be made later with everything already worked out.

Movement IV. Specified, not executed. The plan, ready for when you want it. Current-state numbers were measured 2026‑08‑04; everything about the target is a proposal.


Contents


1. Why this is written down and not done

Three reasons, in order of weight.

A migration is the riskiest routine operation in SEO, putting every ranking, backlink and citation at risk in one moment. Do one only when you can detect a regression against a stable baseline. Right now you can't: no analytics exist (§2), so a traffic collapse after the move would be invisible.

You have almost nothing to lose today, which argues for care, not haste. The site ranks for zero keywords and has zero AI-assistant mentions. A migration can't destroy rankings you don't have, and there's no deadline.

Everything valuable can start without it. Per S18.8, items 1–6 of the fix list improve the existing Webflow site and can begin immediately. Only item 7, the platform change, needs this document.

So: instrument first, publish for a quarter, then migrate against a real baseline. Until you say go, this plan stays specified, not executed.

2. Current state of record

Measured 2026‑08‑04 (raw/stack.json, raw/psi_*.json, raw/danielle_onpage_*.json, raw/sitemap_urls.json).

2.1 Platform and network path

Three terms: the CMS is the software you edit your site in (yours is Webflow). DNS is the internet's address book, pointing your domain at the machine that serves it. The edge, or CDN, is servers near your visitors keeping copies of your pages so they load fast.

Layer Current Evidence
CMS / builder Webflow x-wf-region: us-east-1 and x-lambda-id headers on every page; danielle-carron.webflow.shared.*.min.css
Edge / CDN Cloudflare — Webflow's account, not hers Server: cloudflare, CF-Ray, CF-Cache-Status on all responses
Asset CDN cdn.prod.website-files.com Serves CSS, images, media-kit PDF
DNS SiteGround nameservers (ns1/ns2.siteground.net) Zone held at SiteGround; records point to Webflow. SiteGround serves no traffic.
Apex A record 198.202.211.1 (Webflow-owned)
www CNAME cdn.webflow.com
Apex behaviour Double redirect — http://daniellecarron.com → https://daniellecarron.com → https://www.daniellecarron.com Two hops where one belongs
HTTP HTTP/1.1 observed; alt-svc advertises h3

2.2 Application capability

Structured data is machine-readable labelling telling search engines what a page is (a person, a service, an episode). A canonical tag names a page's one official address.

Capability State
Analytics None sitewide. No GA4, GTM, Meta pixel, Hotjar, Clarity, or dataLayer.
Structured data None. Zero application/ld+json matches across 8 pages.
Canonical tags None on any page.
Booking software None. CTAs labelled “Book a Free Call” route to /contact.
Contact intake Custom form → https://formspree.io/f/xaqgpnzo → email relay. reCAPTCHA v2.
Newsletter Webflow-native form, /podcast footer only. Cloudflare Turnstile. No ESP behind it.
CRM None.
Payments None. Offers $300 – $20,000 sold by conversation.
Blog / CMS collections None. Flat 8 pages. /podcast is hand-authored embeds.
robots.txt Sitemap directive only; no Disallow rules.

2.3 Performance baseline (mobile Lighthouse)

The before measurement; any rebuild is judged against it.

Page Perf LCP TTI Weight Unused JS
/work-with-me 66 7.5 s 7.5 s 1,172 KiB 247 KiB
/contact 71 5.3 s 9.9 s 4,669 KiB 555 KiB
/ 76 4.5 s 6.7 s 2,758 KiB 247 KiB
/about 84 3.5 s 5.9 s 704 KiB 247 KiB

Desktop home: performance 94, LCP 1.5 s. Accessibility across pages: 80–89. SEO: 100 everywhere. Root-document server response: 0 ms (already edge-cached).

3. Target architecture

The governing constraint is S18.7: the strategy needs many pages published cheaply. Any target that keeps page creation a designer's task fails.

3.1 Proposed stack

Layer Proposal Rationale
Hosting / edge Cloudflare Pages on an account Danielle owns Own the cache rules, redirects, logs and edge functions (18.6). Static output is free at this scale.
Site generator A static generator with content in plain Markdown (Astro or Eleventy) Content stays in a portable, greppable format — kills the platform-risk problem in 15.1 outright.
Content model Templated types: article, episode, service, page One template renders 300 articles. This is the whole point of the rebuild.
Forms Cloudflare Pages Functions → ESP + CRM Removes the Formspree email dead-end.
Booking Hosted scheduler, embedded and linked See 3.3.
Payments Stripe (checkout links, not a full store) Needed only for the front/middle rungs of S16.
DNS Consolidate at Cloudflare Ends the two-vendor split where SiteGround holds a zone it does not serve.

If visual editing matters to you, price an alternative: a CMS with a real content API and collection templates. The non-negotiable is templated types plus clean export, not any vendor.

3.2 Performance budget

Enforced on every deploy; nothing ships that breaches it.

Metric Budget Current worst
Mobile Lighthouse performance ≥ 95 66
LCP (mobile) ≤ 1.5 s 7.5 s
Page weight (excl. video) ≤ 400 KiB 4,669 KiB
JavaScript shipped ≤ 50 KiB 247–555 KiB unused alone
Accessibility 100 80
CLS ≤ 0.05 already met (0.001–0.035)

The weight budget is the load-bearing one. A page of text, images and a booking button has no reason to exceed it.

3.3 Booking and back end

The flow replacing the four-to-eight manual touches in S18.4:

CTA "Book a call"
  → live availability (scheduler)
  → slot selected → confirmation email + calendar invite (automatic)
  → intake questions asked AFTER the slot is held
  → reminder at 24 h and 1 h
  → contact created in CRM, tagged by source
  → post-call: proposal / Stripe checkout link for the relevant rung

Options, all adequate. The choice is yours (§11):

Design rule regardless of choice: the intake questions now on /contact get asked after the booking is secured. A held slot with three unanswered questions beats a perfect intake form nobody submitted.

4. The URL map — every path stays

All eight live URLs, from raw/sitemap_urls.json. Every one keeps its path, so none needs a redirect. This is a rehost, not a restructure: the same address serves the same page from a different machine, so your three real inbound links keep working untouched.

Changing platform and URLs at once would make any regression impossible to diagnose.

# Current URL Target Action
1 https://www.daniellecarron.com / Keep
2 https://www.daniellecarron.com/work-with-me /work-with-me Keep
3 https://www.daniellecarron.com/how-i-work /how-i-work Keep
4 https://www.daniellecarron.com/podcast /podcast Keep — becomes an index over new per-episode pages
5 https://www.daniellecarron.com/press-and-speaking /press-and-speaking Keep
6 https://www.daniellecarron.com/about /about Keep
7 https://www.daniellecarron.com/contact /contact Keep — rebuilt around the scheduler
8 https://www.daniellecarron.com/cv /cv Keep

The only redirects anywhere are host-level, deciding which address is official; no page moves:

5. M1 — Build

Built in parallel with the live site. Nothing public changes during M1.

  1. Stand up the generator; deploy to a preview host (preview.<something>.pages.dev), noindex throughout.
  2. Port all 8 pages, copy verbatim unless you approve a change. Content moves into Markdown.
  3. Rebuild the design to the 3.2 budget: same look, a fraction of the bytes.
  4. Build the four content templates. Prove the article template by rendering three real pieces from the S6 content plan.
  5. Build the episode template and port the podcast back-catalogue (the maineshaman.com pattern from Movement III, transcripts included). The largest single content win, and it needs the rebuild to exist.
  6. Structured data throughout: Person, Service, FAQPage, PodcastEpisode.
  7. Canonicals on every page.
  8. Accessibility to 100: audited, not assumed.
  9. Wire forms to the ESP (email service provider) and CRM; wire the scheduler; wire Stripe for the S16 rungs.

6. M2 — Instrument

M2 doesn't wait for M1. It happens on the existing Webflow site, immediately.

  1. GA4 installed on the live Webflow site.
  2. Search Console verified, sitemap submitted.
  3. Baseline recorded and frozen: traffic, queries, impressions, Core Web Vitals field data, for a minimum of one full quarter before cutover.
  4. The same property and measurement IDs carry to the new site, so the series stays continuous.

Migrate first and instrument after, and you'll never know whether the move helped or hurt.

7. M3 — Cutover

The only step that waits on you: it doesn't begin without your explicit go-ahead on the day.

Pre-flight, all of which must pass:

  1. Acceptance criteria (§8) green on the preview host.
  2. Full crawl of the preview site: zero broken links, zero missing pages against the §4 map.
  3. DNS TTLs lowered to 300 s at least 24 hours ahead.
  4. Rollback rehearsed: the exact records to restore Webflow, written down, ready to paste.
  5. A quiet window chosen: not mid-launch, not during a campaign.

Cutover:

  1. Move DNS to Cloudflare; point at Pages.
  2. Remove noindex.
  3. Verify from an external resolver and your own machine.
  4. Submit the new sitemap; request re-crawl of the eight URLs.
  5. Watch Search Console daily for 14 days; investigate any indexing drop the same day.
  6. Keep the Webflow subscription active for at least 30 days after cutover. It is the rollback.

8. Acceptance criteria

Done means an executable check passes, not that it looks finished. Each check is written before the build and ships with it.

# Criterion How it is proven
1 All 8 URLs return 200 at their original paths Automated fetch of the §4 map
2 http:// and apex reach canonical in one hop curl -sIL, count redirects
3 Mobile Lighthouse ≥ 95 on all pages PSI run against live
4 Page weight ≤ 400 KiB (excl. video) on all pages Lighthouse total-byte-weight
5 Accessibility = 100 Lighthouse
6 Structured data present and valid on every page Rich Results Test
7 Canonical present on every page Fetch + grep
8 GA4 fires on every page Realtime report
9 Booking flow completes end to end Manual test booking
10 Form submission reaches ESP and CRM Test submission
11 Copy is byte-identical to approved source Diff against Markdown
12 No page ships noindex post-cutover Fetch + grep

Criterion 11: the most common silent migration failure is copy quietly altered in the port.

9. Risks and rollback

Risk Likelihood Mitigation
Ranking loss at cutover Low — she ranks for nothing today Paths preserved (§4); the downside is unusually small right now
Backlink loss Very low Only 3 links are real, and all 3 point at the 8 preserved paths (§4). The other 27 are spam nobody would miss
Copy altered in the port Medium — the common one Criterion 11: byte-diff against approved source
Booking flow silently broken Medium Criterion 9: a real test booking, not a visual check
DNS propagation confusion Medium TTL lowered 24 h ahead; verify from multiple resolvers
Migration during a campaign Low §7 pre-flight names the quiet window

Rollback: restore the Webflow DNS records (§2.1, kept ready per §7.4) and the old site is live within one TTL.

10. Explicitly out of scope

So nobody assumes them later:

11. Decisions required before M1 starts

None of these are urgent. All are yours.

  1. Scheduler: lightweight (Calendly / Cal.com / SavvyCal) or full practice-management (Practice Better / SimplePractice)?
  2. ESP: the S12 tribe island needs one. Choose before M2 so the list starts accumulating on the existing site.
  3. Canonical host: www or apex. Arbitrary, but decided once and never revisited.
  4. Visual editing: do you need to edit pages yourself? If yes, the generator choice changes.
  5. Podcast transcripts: the back-catalogue port is the largest content win (Movement III, maineshaman.com). All 66+ episodes, or the best twenty first?
  6. Timing: one full quarter of M2 instrumentation and publishing before M3 cutover.
Prepared for Danielle Carron · daniellecarron.com · research artifacts and method in danielle_seo/