Skip to main content
Revenue Spark

Capability · Astro migration

Astro migration: ports the marketing surface into your GitHub.

8–12 week migration from WordPress / HubSpot / Webflow to a static-first Astro stack. Included on a 3-year retainer, $35,000 add-on with annual.

What this is

The Astro migration ports your marketing surface from a CMS you fight with into a static-first stack you own. We sell it as a multi-year retainer item rather than a POC component because it should land after the content engine and technical SEO work has proven worth keeping; until then, it is premature.

This site itself runs on the same stack. The public repository is the reference implementation — same Astro / Tailwind / Cloudflare Pages stack, same schema graph patterns, same CI guardrails. We migrate clients onto something we operate ourselves.

Why Astro

Three reasons that hold up under scrutiny.

Performance

Astro static deploys ship near-zero JavaScript by default. The Core Web Vitals targets that take heroic effort on a WordPress + plugin stack — LCP under 1.5s, INP under 200ms, CLS under 0.05 — fall out almost for free. The performance budget for this site is 50KB first-load JS per route; we hit it without trying.

Productisation

Your marketing site becomes a code artifact your dev team can review, branch, ship, and roll back. The cadence we set up in the engagement compounds because publishing is git push rather than a CMS ticket. Schema graph changes ship as PRs with diff visibility. Build-time validators (anchor-bleed in meta, unthreaded @graph) catch regressions before deploy.

Discoverability

Server-rendered HTML at first request, no hydration delay. Every byte of content is in the initial response — answer engines crawling get the full page on first hit. JavaScript-heavy sites where content arrives via React hydration are increasingly weighted-down in citation rankings; static-first sites are weighted-up.

How we run it

Weeks 1–2: discovery + URL inventory

Full URL inventory (sitemap + Google Search Console + GA4 cross-check). 301 map drafted: every existing URL either ports cleanly or 301s to a defined canonical. CMS decision: do we ship pure static or static + visual CMS layer?

Weeks 3–6: build

Astro project scaffold ports your existing marketing surface page-by-page. Schema graph implemented as code (this site’s src/lib/schema-graph.ts pattern). Build-time validators ported. Content layer connected to whatever CMS we agreed on (Sanity headless, TinaCMS, or pure-MDX).

Weeks 7–8: soak

Beta domain stands up the new site. SEO continuity rehearsal: schema graph validated, sitemap verified, robots and llms.txt published, canonical and 301 map checked end-to-end. Two-week soak under your team’s review.

Weeks 9–10: cutover

DNS cutover with warmup. CF Pages SSL provisioned. Old CMS goes dark; 301s ship from old URLs to new canonicals. Rank and citation tracking for four weeks post-cutover.

Weeks 11–12: verify + handover

Schema graph re-verified post-cutover. Lighthouse CI run on the canonical landing pages. Rank deltas reported. Marketing-site repo handed to your dev team with a written runbook.

What you get

  • Astro project repo in your GitHub org with full deploy config (CF Pages, GH Actions CI, schema validators, anchor-bleed checks).
  • Schema graph as code — same threading pattern as this site, ports between projects.
  • Visual CMS layer (optional, picked at kickoff) — Sanity / TinaCMS / Contentlayer / pure-MDX. Authoring team keeps a familiar UI.
  • 301 map — full URL inventory mapped to new canonicals; rank-loss avoidance documented.
  • CWV report — pre vs post; deltas published.
  • Runbook — your dev team’s how-to for shipping new pages, running schema validators, deploying via CF Pages.

When to commit

If you are renewing on a 3-year retainer, the migration is included; we typically ship it in Year 1 of the renewal. If you are renewing on annual, it is a $35,000 add-on; we run it in the off-quarter when the cadence cycle is gentlest. See pricing for the multi-year math.

FAQ

Questions buyers ask.

What is the RevenueSpark Astro migration?

An 8–12 week migration of your marketing surface from WordPress / HubSpot / Webflow / Sanity / Contentful to a static-first Astro site. The marketing surface ports into a GitHub repo you own; SSL via Cloudflare Pages; schema graph + canonical structure re-verified post-cutover; 301 map preserved across the full URL inventory.

Why migrate to Astro?

Two reasons. Performance — Astro static deploys ship near-zero JS by default; Core Web Vitals targets become trivial to hit. Productisation — your marketing site becomes a code artifact your dev team can ship to without filing a CMS ticket, which compounds the cadence we set up in the engagement. We run our own site on this stack.

Do we lose CMS authoring?

Not necessarily. Astro plays cleanly with visual CMS layers — Sanity, Contentlayer, TinaCMS, even WordPress in headless mode. Your authoring team keeps a familiar UI; the static build runs on every commit. We decide the CMS at migration kickoff based on what your team is comfortable with.

What about SEO continuity?

Non-negotiable. Every URL in your current inventory either ports cleanly to the same path or 301s to a defined canonical. We run a three-week soak on the new site behind a beta domain before cutover; the schema graph is re-verified post-cutover; ranking and citation are tracked weekly for the four weeks following cutover. We have not yet had a measurable rank loss on a migration.

When should we do this — POC or post-POC?

Post-POC, by default. The POC ships into your existing CMS so we can prove the work without imposing a migration. Migration becomes a multi-year retainer item — included on 3-year, $35,000 add-on on annual. About one engagement in three runs the migration concurrently with the POC because the existing CMS is so painful that a delayed migration would block the cadence; that is a written exception.

Ready for a measurable Month-6 verdict?

Book a 30-minute discovery call. We'll run a live LLM citation test on your domain during the call.