Migration

How do you cut over from the old CMS to Sanity with a parallel run and a rollback plan?

Short answer

A cutover from an old content management system (CMS) to Sanity is one switch for a small or medium site; a large site can move by section in a parallel run (Google, October 2026). Rerunnable imports with stable IDs limit the freeze to the final run (Sanity Learn, October 2026). The old CMS stays read-only, so traffic can roll back.

One switch or by section
Small or medium sites move all at onceGoogle recommends moving all URLs of a small or medium site together; a large site can move one section at a time, which makes problems easier to spot and fixSource: Google Search Central (Site Moves and Migrations)
Content freeze
Only the final export and importSanity's course runs the script against the latest content, and predetermined IDs make each run update the same documents; the final import needs --replace to overwrite themSources: Sanity Learn (Migrating without downtime); Sanity Docs (Import data)
Document history on Growth
90 days, 365 on EnterpriseFree keeps 3 days, as of October 2026. History restores one document at a time, not a whole cutoverSources: Sanity Docs (History experience); Sanity (Plans that scale with you)
Backups and dataset hot swap
Enterprise only, as of October 2026Managed backups are off by default even where the plan includes them; on Free and Growth your rollback copy is your own dataset exportSources: Sanity Docs (Backups, How to use Hot Swapping for datasets); Sanity (Plans that scale with you)

Deploi’s call

Cut a small or medium site over to Sanity in one switch, and a large one section by section behind the same domain. Either way, keep the old CMS live and read-only until the rollback window closes and redirects are verified, because switching traffic back is the only rollback that undoes a whole cutover at once.

MigrateCut over to Sanity in one switch when

  • The site is small or medium, so Google's advice to move all URLs at once applies, as of October 2026, and its index updates faster.
  • One front end will serve every URL, and the final import reruns from a fresh export with stable document IDs.
  • The old content management system (CMS) can stay live and read-only through the rollback window, so switching traffic back stays a real option.

PhaseRun the old CMS and Sanity in parallel, section by section, when

  • The site is large, so Google allows a move one section at a time, which makes problems easier to spot and fix.
  • Sections run on different templates, because each template is its own build and its own test.
  • The front end can pass unmigrated paths to the old site, as Next.js fallback rewrites do.
  • The old CMS license runs past the last section's switch, so no contract date forces one big cutover.

Should you cut over to Sanity in one switch or run both CMSs in parallel?

Site size decides how you cut over to Sanity: move a small or medium site in one switch, and a large site one section at a time while the old content management system (CMS) serves the rest. Google's site move guidance splits the same way (Google Search Central, Site Moves and Migrations, October 2026):

  • Small or medium site. Google recommends moving all URLs at once, because that "helps our algorithms detect the site move and update our index faster".
  • Large site. Google lets you move one section at a time, which "can make it easier to monitor, detect, and fix problems faster".

Sanity's re-platforming course backs the section route for a first move: "identify low-risk content and perform an incremental migration" (Sanity Learn, remodeling lesson, October 2026). A parallel run means two systems to keep current, so in Deploi's judgment it earns its cost only when the site is large or its sections run on different templates. Whether to start at all belongs to planning a CMS migration to Sanity; cutover planning starts once that call is made.

How do the old CMS and Sanity serve one site during a parallel run?

During a parallel run, one front end owns the domain: it serves migrated sections from Sanity and passes every other path through to the old content management system (CMS). Next.js does this with fallback rewrites, which proxy to an existing website "after checking all Next.js routes", so you don't change the rewrite rules as more pages move. A dynamic route, including a getStaticPaths page with fallback set to true or "blocking", takes priority over a fallback rewrite, so it shadows matching old CMS paths (Next.js Docs, rewrites, October 2026). The domain switches once, to the new front end; each later section switches when its routes ship, with no DNS (Domain Name System) change. How Sanity and Next.js work together covers that front end.

Two rules keep a parallel run clean (Deploi's judgment):

  • One owner per URL. Each path is served by Sanity or by the old CMS, never both, so editors know where every page lives.
  • Freeze per section. Editors stop editing a section on the old CMS when its final import runs, not the whole site.

Deploi has used a related pattern inside one front end, not between two CMSs: in September 2026 deploi.ca's FAQ moved to a new page template behind a launch switch environment variable, and with the switch off 261 pages compared identical. Safe release scripts shows that mechanism.

How do you keep the content freeze short at cutover?

Keep the content freeze to the final export and import: editors keep publishing on the old content management system (CMS) until that last export, and a rerunnable script carries their latest work across. Sanity's course says the script "should be able to run against the most up-to-date version of your current platform's content", and predetermined document IDs make each run update the same documents instead of creating new ones (Sanity Learn, Migrating without downtime, October 2026).

Three cutover checks keep the final run short and complete (Deploi's judgment):

  • Time a full rehearsal. Run the complete export and import once into a staging dataset and time it, so the freeze is planned around one measured run, not a guess.
  • Delete what the source dropped. "Import never deletes documents" (Sanity Docs, Environments, October 2026), so list the IDs that left the old CMS since the last run and delete them in Sanity.
  • Keep migrated documents hands-off. Sanity warns that editors may be editing while a migration runs (Sanity Docs, Important considerations, October 2026), and a rerun with --replace overwrites what they changed in Sanity Studio.

Safe imports into Sanity covers which import mode the final run needs and why.

What happens on cutover day, in order?

Cutover day from an old content management system (CMS) to Sanity runs in a fixed order: freeze, export, import, check, switch. Lower your DNS (Domain Name System) time to live (TTL) beforehand: Google suggests "a few hours" set "at least a week in advance" (Google Search Central, October 2026); Sanity's Webflow course says 300 seconds at least 24 hours before (Sanity Learn, October 2026). A week ahead meets both. A section-by-section run repeats steps 1 to 6 per section and switches routes, not DNS.

Cutover day for a move to Sanity

  1. Freeze the old CMS. Editors stop publishing; take the final export. Owner: content lead.
  2. Export Sanity. sanity datasets export gives your rollback copy. Owner: developer.
  3. Pause automations. Disable webhooks (Sanity Docs) and scope or remove Functions, which have no on/off switch (Sanity Docs). Owner: developer.
  4. Final import. Import with --replace and save the imported ID list. Owner: developer.
  5. Check. Run sanity documents validate and compare counts per type. Owner: developer.
  6. Resume automations. Turn webhooks and Functions back on, then trigger one rebuild yourself, because disabling a webhook cancels its pending requests. Owner: developer.
  7. Switch traffic. Point DNS or routes at the new front end, redirects included. Owner: developer.
  8. Crawl and submit. Crawl the old URLs and submit the old and new sitemaps. Owner: search lead.

What can you roll back after a cutover to Sanity, and what can't you?

Rollback after a cutover to Sanity works in layers, and only switching traffic back to the old content management system (CMS) undoes the whole cutover, because the other layers restore documents, not the live site. Managed backups and dataset aliases need Enterprise, as of October 2026 (Sanity pricing; Sanity Docs, Backups, October 2026).

Each rollback layer undoes something different, and two need Enterprise
LayerHow it rolls backIts limitPlans, as of October 2026
TrafficRoute back to the old CMSOnly while the old CMS is live and currentAny
Imported documentsDelete the saved ID listDoesn't restore what they replacedAny
Whole datasetImport the pre-cutover export with --replaceNot point-in-time: newer documents surviveAny
One documentRestore from history3 days Free, 90 Growth, 365 EnterpriseAny
Managed backupsRestore a daily backupOff by default, enabled per datasetCertain Enterprise plans
Dataset aliasPoint the alias at a known-good datasetRead-only: Studio and webhooks need real namesCertain Enterprise plans
Sources: Sanity Docs (Development, staging, and production environments, Backups, How to use Hot Swapping for datasets, History experience, Documents CLI command reference); Sanity (Plans that scale with you). As of 24 October 2026.

Deploi's wave 1 package for its Shopify data section, 406 documents and 159 images in October 2026, shipped with an ID list. Safe imports into Sanity covers the mechanics; backups and restore covers Enterprise.

When can you switch off the old CMS after moving to Sanity?

Switch off the old content management system (CMS) only after the rollback window closes and every old URL checks out against its redirect. Google's hosting guide says to shut old infrastructure down "when you're confident that all users, including Googlebot, are receiving content correctly from the new infrastructure" (Google Search Central, Changing your hosting, October 2026).

Deploi’s point of view

Where we disagree
Cutover plans often write "restore the backup" as the rollback, and on Sanity that line hides two mistakes. Managed backups are an Enterprise feature that's off by default, as of October 2026, so most teams have no backup unless they took an export. And importing an export with --replace isn't a point-in-time reset: documents created after the export survive it. Rollback is a set of layers, each with its own limit, and a cutover plan should name the layer it will use before the day.
What we’ve seen
These are changes to deploi.ca's own Sanity systems, not a parallel run between two CMSs. In September 2026 deploi.ca's FAQ moved to a new page template behind a launch switch environment variable, and with the switch off 261 pages compared identical. The runbook planned an export before any change and a rollback for each step. The same month Deploi moved its FAQ content and chatbot settings from a standalone Sanity project into a shared one with a one-transaction cutover script: a dry run unless told to apply, allow-listed deletes, and a referential-integrity check before any delete. That import ran without --replace so editors' versions were never overwritten, and the old project still exists. Deploi's release runbook also has the revalidation webhook created only after the bulk change, so the 256 changed answers wouldn't trigger 256 rebuilds.
What this adds
The root plans the migration and gives cutover one step. This page holds what that step needs: the one-switch or section-by-section call, how the old CMS and Sanity share one domain during a parallel run, the order of cutover day, what each rollback layer can undo on Free, Growth and Enterprise, and when the old CMS can go.
What we refuse to promise
We don't promise a cutover with no traffic loss or a fixed freeze length. Google says rankings can fluctuate during a move, and the freeze depends on how long your final export and import take. What we write instead is a rollback path for each layer, agreed before cutover day.

When this answer changes

  • Sanity changes document history retention on the Free, Growth or Enterprise plan
  • Sanity offers managed backups or dataset hot swap below Enterprise
  • sanity datasets import gains a dry run or an option that deletes documents missing from the file
  • Sanity Functions get an on/off switch like webhooks
  • Google revises its site move guidance on moving a site all at once or by section
  • Next.js changes how fallback rewrites proxy to an external site

Sources

Every source opened and checked on 25 October 2026.

  1. Sanity Learn, Migrating without downtimesanity.io · checked 24 October 2026
  2. Sanity Learn, Re-modelling your existing contentsanity.io · checked 24 October 2026
  3. Google Search Central, Site Moves and Migrationsdevelopers.google.com · checked 24 October 2026
  4. Google Search Central, Changing your hostingdevelopers.google.com · checked 24 October 2026
  5. Next.js Docs, rewritesnextjs.org · checked 24 October 2026
  6. Sanity Learn, Launch checklist and DNS transfersanity.io · checked 24 October 2026
  7. Sanity Docs, Import datasanity.io · checked 24 October 2026
  8. Sanity Docs, Development, staging, and production environmentssanity.io · checked 24 October 2026
  9. Sanity Docs, Backupssanity.io · checked 24 October 2026
  10. Sanity Docs, How to use Hot Swapping for datasetssanity.io · checked 24 October 2026
  11. Sanity Docs, History experiencesanity.io · checked 24 October 2026
  12. Sanity Docs, GROQ-powered webhookssanity.io · checked 24 October 2026
  13. Sanity Docs, Important considerations for schema and content migrationssanity.io · checked 24 October 2026
  14. Sanity, Plans that scale with yousanity.io · checked 24 October 2026
  15. Sanity Docs, Functions cheat sheetsanity.io · checked 24 October 2026
  16. Sanity Docs, Documents CLI command referencesanity.io · checked 24 October 2026