Short answer
RaftLabs migrated their website from Webflow to Sanity CMS with Gatsby/Next.js, launching 3,000+ programmatic pages in 12 weeks with zero downtime. The migration moved 12,000 visitors loss-free. Organic traffic grew 30% in the first year. The headless architecture decoupled content from the frontend, letting generate pages from Sanity content. Non-technical team can now publish directly. Built on Sanity and Next.js.
The situation
A website that cannot generate pages programmatically is a ceiling on SEO. Webflow let us build and design, but it could not support a pSEO strategy at scale: launching thousands of pages based on structured data, without manual editorial work for each one. Content updates required developer involvement. Plugin restrictions blocked advanced SEO customization. The platform was not designed for what we needed to do next.
We migrated to Sanity CMS with Gatsby and Next.js. The goal: a headless architecture where structured content feeds programmatic page generation, non-technical team members can manage content without developer support, and Core Web Vitals stay strong as page volume grows. Per our internal records, we launched 3,000+ pages with zero downtime, moved 12,000 monthly visitors without traffic loss, and grew organic traffic 30% in year one.
The failure mode is well documented: 100,000 thin pages get deindexed while 500 quality pages rank. Google ranks pages, not page counts. If you can swap one modifier for another and the page is 85% identical, you fail. The migration was built as a quality-gated system, not a page factory: structured content with a real trust anchor, server-rendered output Googlebot could read from day one, and a rollout that never risked the traffic we already had.

Engagement
The programmatic SEO engagement
- Subject
- RaftLabs' own website: a migration from Webflow to Sanity CMS with Gatsby and Next.js
- What we built
- A headless architecture where structured content feeds programmatic page generation: non-technical content publishing, server-rendered output, and Core Web Vitals that stay strong as page volume grows
- Stack
- Sanity CMS, Gatsby, Next.js, structured content schemas
- Status
- Live. Per our internal records: 3,000+ pages launched with zero downtime, 12,000 monthly visitors moved without traffic loss, 30% organic growth in year one
Before and after
What changed
- Webflow's limited plugin support blocked advanced SEO customization, automated metadata generation, and performance tuning at the page level
- Launching a programmatic SEO strategy required generating thousands of pages from structured data: Webflow could not support that volume without manual page-by-page work
- Content updates required developer involvement; the marketing team could not publish or edit without opening a development ticket
- Core Web Vitals scores were constrained by Webflow's rendering approach, with limited control over what loaded and when
- Migration risk was high: any new platform launch that caused downtime or URL structure changes would disrupt 12,000 monthly visitors and damage hard-won rankings
- Sanity's structured content model feeds Gatsby's build pipeline directly: 3,000+ programmatic pages generated from content schemas without per-page editorial input
- Non-technical team members manage, update, and publish content through Sanity Studio without developer involvement; changes go live through the staging review workflow
- Sub-second page loads across all pages, with strong Core Web Vitals scores on mobile and desktop
- The migration moved 12,000 monthly visitors to the new platform with zero downtime and no disruption to existing rankings or traffic
- Organic traffic grew 30% in year one as the pSEO page coverage expanded into search terms that the old platform had no capacity to target
What we had to solve
Migrating 12,000 monthly visitors to a new architecture without disrupting rankings or causing downtime
A website migration that causes even a brief downtime or URL restructure can set organic rankings back months. With 12,000 monthly visitors and an established link profile, we could not afford a cutover that broke existing URLs, dropped pages from the index, or created a traffic gap while search engines recrawled the new domain. The migration ran in phases: URL structure was preserved across the transition, redirects were audited before the cutover, and the new platform was validated in staging against real crawler behavior before any traffic moved.
Building a content model that generates programmatic pages without per-page editorial work
Programmatic SEO only works if the content model is designed for it from the start. Generating 3,000+ pages requires a schema structure where each page's unique content (headline variations, location or category modifiers, structured data) derives from a set of base records rather than individual entries. Building that schema in Sanity so it was both editorially manageable and technically capable of feeding Gatsby's build pipeline at scale was the design challenge at the core of the project.
Proof
What our internal records show, and what this page can't claim
Migration figures from RaftLabs' own records. These are our own reported numbers, not third-party measurements.
| Result | What changed | Period or context | Evidence and limitation |
|---|---|---|---|
| Page generation | 3,000+ programmatic pages launched at migration | Structured content feeds page generation from one schema set. No per-page editorial entry required | RaftLabs-reported |
| Migration safety | Zero downtime. 12,000 monthly visitors moved without traffic loss | No URLs broke, no rankings dropped. A platform migration with any downtime or URL disruption would have lost rankings built over years | RaftLabs-reported |
| Organic growth | 30% organic traffic growth in year one | The old platform had no capacity to target the long-tail keyword clusters that programmatic SEO covers | RaftLabs-reported |
the build
What we built
The architecture separates the content model from the frontend so each can evolve independently: Sanity holds the structured records, Gatsby and Next.js consume them, and Vercel delivers the output at the edge.
12,000 monthly visitors moved to the new platform, no URLs broke, no rankings dropped
The migration ran in phases with URL structure preserved throughout. Existing pages, redirects, and canonical signals were audited before any traffic moved. Search engines recrawled the new platform before the cutover completed. The 12,000 monthly visitors moved to the new platform without service disruption; no URLs broke, no rankings dropped during the transition.

Pages load in under one second: performance gains came from the architecture, not patches
Static site generation eliminated server render time. Pages load in under one second across mobile and desktop. Core Web Vitals scores improved across LCP, CLS, and FID, metrics that directly affect how search engines rank and feature pages. The performance gains came from the architecture, not post-launch patches.

Marketing team publishes content changes in minutes, no development ticket needed
Content changes go through a staging environment before they reach the live site. The marketing team reviews updates, checks rendering, and approves changes in Sanity Studio, then deploys with one action. No developer is in the loop for routine content updates. The workflow that previously required a development ticket now takes minutes.

3,000+ pages generated from one schema set, no per-page editorial entry required
The Sanity content model defines the base records from which programmatic pages derive. Service, industry, technology, and location combinations generate distinct pages at build time from a single schema set. No per-page editorial entry. The system supports 3,000+ pages, processes 30,000+ API requests, and manages 966 MB of assets through 75 GB bandwidth without performance degradation under load.

The lesson
Programmatic SEO is a content-quality problem, not a page-count problem
The temptation is to measure the build by page count. The industry's graveyard says otherwise: thousands of pages discovered, a fraction indexed, and thin pages triggering site-wide penalties that drag down the quality pages too. Programmatic content without a trust anchor is increasingly vulnerable to core updates.
The swap test decides whether a page deserves to exist. If you can change one variable and the page is nearly identical, it fails. Strip the template chrome and look at the data: is the page still useful? The architecture exists to serve that test at scale: real structured data, real editorial backing, and rendering that puts content in front of Googlebot from the first crawl.
How it runs
- Sanity CMS
- Programmatic page generation at 3,000+ pages needs a content model where structured records feed the build pipeline directly, not one-by-one editorial entries. Sanity's schema-first approach let us define content types that Gatsby could consume at build time. The Studio interface gave non-technical team members a clean editing experience without exposing the underlying schema complexity.
- Gatsby
- Static site generation at scale required a build pipeline that consumed Sanity content via GraphQL and produced pre-rendered pages with no server overhead. Gatsby's build system handled the 3,000+ page volume without runtime latency and kept load times sub-second across the full pSEO page set.
- Next.js
- Marketing and campaign pages needed server-side rendering for dynamic metadata, real-time content updates, and ISR revalidation: patterns that static generation alone cannot support. Next.js handled those surfaces while Gatsby owned the high-volume pSEO routes, each doing the job it was designed for.
- Vercel
- Deploying both Gatsby and Next.js on one platform with edge CDN delivery, preview environments for every pull request, and zero-configuration SSL. Vercel's global edge network kept the site fast across the US, UK, and Australia (the primary traffic regions) without a separate CDN configuration layer.
Common questions
The site was working for content, but Webflow has a hard ceiling for programmatic SEO. Generating thousands of pages based on structured data (service + industry + location combinations, technology pages, pSEO clusters) is not something Webflow supports at scale. Every page would have required manual creation. The migration was not about fixing something broken; it was about removing a constraint that prevented the SEO strategy from running at all.
The answer is in the content model. Sanity holds base records (service categories, industries, technology types, location data) that the build pipeline combines into distinct pages. Each programmatic page gets its unique metadata, structured data, and on-page signals from the schema rather than from a human sitting down to write each one. Editorial work happens at the schema level, not the page level. Once the model is right, the page volume is a function of the record count.
Zero traffic was lost. The migration preserved the existing URL structure so search engines did not need to re-evaluate the site's link profile. Pages that ranked before the migration ranked afterward. The 12,000 monthly visitors moved to the new platform without experiencing any downtime. Rankings held, and organic traffic grew 30% in year one as the new pSEO pages indexed and started driving long-tail traffic the old platform could not capture.
Non-technical team members manage content in Sanity Studio, a clean editing interface that surfaces only the fields each content type needs. Writing, updating, and publishing a page does not require a developer. Changes go through a staging environment for review before the team deploys them to production. The workflow that previously required a development ticket now takes minutes and sits entirely within the marketing team's control.
We completed the full migration (content architecture, schema design, Gatsby and Next.js build, Sanity Studio setup, pSEO page generation, staging workflow, and zero-downtime cutover) in 12 weeks. Timeline is affected by three factors: the volume and structure of existing content (complex content types with many fields take longer to model), the number of programmatic page combinations the schema needs to support, and how much existing redirect and URL audit work is required before cutover. Contact us to scope based on your current platform, content volume, and pSEO targets.
Related work
More work like this

AI phone agents automate global feedback loops through voice interviews
Text surveys only reached people comfortable filling out forms. We built a voice platform that calls anyone with a phone, runs the interview, and has the findings ready when the last call ends.

Musgrave receipt scanning software case study for SuperValu and Centra
Musgrave's post-campaign report records 1,062 users and 1,610 receipt submissions. At the reporting snapshot, 1,158 were AI approved, 409 AI rejected, 4 manually approved, 10 manually rejected, and 29 remained processing.

Brux ships a dental marketing SaaS: AI smile previews, GoHighLevel sync, and self-serve onboarding built for 1,000-office scale
Brux Smile Makeover is a dental marketing SaaS where patients upload a selfie and get a lifelike AI smile preview in seconds. We built the AI pipeline, GoHighLevel two-way CRM sync, Stripe billing, and self-serve QR flyer onboarding built for 1,000-office scale.