Your marketing site doesn't need to be a React app.

For engineering-led teams whose marketing pages are trapped in the product's Next.js repo, release process, and mental overhead.

Why migrate

Why teams move marketing off Next.js.

  • Marketing stops waiting on engineering

    Content moves into a CMS instead of a pull request, so a copy change doesn't need a code review and a deploy.

  • Out of the product release cycle

    The marketing site ships on its own cadence rather than riding the product's release train.

  • Less JavaScript on the wire

    Astro ships zero JS by default. Marketing pages stop paying the cost of a hydration model they never needed.

  • Simpler mental model

    No server components, caching layers, or rendering-mode decisions for pages that are fundamentally documents.

  • Keep React where it earns it

    Astro islands let you keep the React components that genuinely need interactivity, and drop the rest.

  • Cheaper and calmer to run

    Static output on a CDN instead of a Node runtime, with fewer moving parts to monitor.

Honest assessment

When this move makes sense.

This is a narrower migration than the others and it's the wrong call for plenty of teams. Worth being precise about it.

Move marketing to Astro when

  • Marketing pages live in the product repo
  • Content changes require a developer and a deploy
  • The marketing site is mostly static content
  • Core Web Vitals are suffering from unused JS
  • Engineering time is going into marketing pages
  • You want a CMS without rebuilding the product

Stay on Next.js when

  • Marketing and product genuinely share app-level UI
  • Pages depend on authenticated or personalised state
  • You rely heavily on Next-specific infrastructure
  • The team has no appetite for a second framework
  • The marketing site is small and rarely changes

What happens to your Next.js app?

Nothing. This migration usually carves the marketing pages out of the app and leaves the product exactly where it is.

The two are then routed together, either on separate subdomains or via edge rewrites so the marketing site and app share one domain.

  • Product app stays on Next.js untouched
  • Marketing pages carved out into Astro
  • Routed together via edge rewrites
  • Shared design tokens across both codebases

Publishing experience

Content leaves the repository.

The point of this migration is usually not performance. It's that marketing can no longer be blocked on engineering for a headline change.

  • A CMS instead of a PR

    Editors publish through a visual CMS with preview, rather than opening a pull request against the product repo.

  • Shared design system

    Design tokens and component patterns stay consistent across the marketing site and the product.

  • Islands where you need them

    Interactive React components can be embedded as islands, so nothing genuinely dynamic is lost.

Architecture

How it fits together.

The product app keeps its own pipeline. Only the marketing surface moves, which is what makes this a low-risk migration.

Headless CMS

  • Marketing content out of the repo
  • Typed collections and preview
  • No deploy needed to publish

Astro

  • Static output, zero JS by default
  • React islands where warranted
  • Shared tokens with the product

CDN + rewrites

  • Static marketing at the edge
  • Rewrites route /app to the product
  • One domain, two codebases

Process

How the migration actually runs.

Discovery and audit

We map which routes are genuinely marketing pages, which are app surfaces, and which are ambiguous and need a decision.

Content model

Marketing content is modelled as CMS collections, with MDX and hardcoded copy extracted out of the repo.

Design

Existing components are translated into the Astro component library, reusing your design tokens rather than reinventing them.

Build and migrate

Astro build, component library, CMS wiring, and edge rewrites so both surfaces coexist on one domain.

Validate

Redirect testing, Core Web Vitals, accessibility audit, analytics parity, and route-by-route comparison against production.

Launch and monitor

Staged rollout, usually route by route, then Search Console and vitals watched closely for the first weeks.

Content migration

Content moves by script, not by hand.

  • Extract content

    Copy embedded in JSX, MDX files, and JSON fixtures is extracted and modelled as structured CMS content.

  • Port components

    Presentational React components are ported to Astro components; genuinely interactive ones stay React and become islands.

  • Assets

    Images move to the Astro asset pipeline with build-time optimisation replacing runtime image handling.

  • Reconcile

    Route-by-route diffing against production, so the new site is verifiably equivalent before any traffic moves.

SEO & redirects

The part that decides whether this goes well.

Full URL inventory

Every indexed URL is pulled from Search Console, analytics, the sitemap, and a fresh crawl, not just the ones the CMS knows about.

Redirect map

A one-to-one 301 redirect map, built and tested against the live inventory before launch.

Metadata parity

Titles, descriptions, canonicals, Open Graph, and structured data carried across and diffed page by page.

Crawl and index

Sitemaps, robots, and internal linking rebuilt, then submitted and monitored through Search Console after cutover.

Post-launch watch

Rankings, crawl errors, redirect hits, and Core Web Vitals monitored for the first weeks, with fixes shipped fast.

The details

Integrations, performance, accessibility.

Integrations

  • CRM and marketing automation
  • Forms and lead routing
  • Site search (Pagefind)
  • GA4, GTM, consent management
  • Product analytics parity
  • Edge rewrites to the app

Performance

  • Zero JS by default
  • React islands only where needed
  • Build-time image optimisation
  • Core Web Vitals verified pre-launch
  • Real-user monitoring after launch

Accessibility

  • WCAG 2.2 AA as the build standard
  • Semantic markup and landmarks
  • Keyboard and focus states
  • Contrast checked against tokens
  • Screen reader passes on key flows

Relevant work

Migrations we've run.

See all work

FAQs

Next.js to Astro questions.

Do we have to rewrite the product too?

No. This migration is deliberately scoped to the marketing surface. The product app stays on Next.js and keeps its own pipeline.

Can we keep our React components?

Yes. Presentational ones get ported to Astro; interactive ones stay React and run as islands. Shared design tokens keep both consistent.

How do the two sites share a domain?

Edge rewrites. Marketing routes serve from the Astro build, app routes proxy to the Next.js deployment. Visitors see one site.

Is this worth it if performance is already fine?

Often yes, because the real win is workflow: marketing stops needing a developer. If neither performance nor workflow is a problem, don't do this.

How long does it take?

Usually four to eight weeks, since the design system typically already exists and only the marketing routes are in scope.

What about our existing CI/CD?

The Astro site gets its own pipeline, which is part of the point: marketing deploys stop being coupled to product releases.