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
--replaceoverwrites 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
- Freeze the old CMS. Editors stop publishing; take the final export. Owner: content lead.
- Export Sanity.
sanity datasets exportgives your rollback copy. Owner: developer. - Pause automations. Disable webhooks (Sanity Docs) and scope or remove Functions, which have no on/off switch (Sanity Docs). Owner: developer.
- Final import. Import with
--replaceand save the imported ID list. Owner: developer. - Check. Run
sanity documents validateand compare counts per type. Owner: developer. - Resume automations. Turn webhooks and Functions back on, then trigger one rebuild yourself, because disabling a webhook cancels its pending requests. Owner: developer.
- Switch traffic. Point DNS or routes at the new front end, redirects included. Owner: developer.
- 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).
| Layer | How it rolls back | Its limit | Plans, as of October 2026 |
|---|---|---|---|
| Traffic | Route back to the old CMS | Only while the old CMS is live and current | Any |
| Imported documents | Delete the saved ID list | Doesn't restore what they replaced | Any |
| Whole dataset | Import the pre-cutover export with --replace | Not point-in-time: newer documents survive | Any |
| One document | Restore from history | 3 days Free, 90 Growth, 365 Enterprise | Any |
| Managed backups | Restore a daily backup | Off by default, enabled per dataset | Certain Enterprise plans |
| Dataset alias | Point the alias at a known-good dataset | Read-only: Studio and webhooks need real names | Certain Enterprise plans |
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).
- Redirects outlive the old CMS. Google says to keep redirects "generally at least 1 year" (Google Search Central, Site Moves and Migrations, October 2026). In a Sanity stack redirects run in the front end or at the host (Deploi's reading of Sanity's redirects guide), so the old CMS can go first; keeping search rankings through a move to Sanity owns the redirect plan.
- Keep a reference copy. Sanity's Webflow course keeps the old staging URL "bookmarked and accessible" for visual checks after launch (Sanity Learn, October 2026).
- Time the license. End the old contract at a renewal date after the rollback window; the Contentful exit checklist works through one vendor's terms.
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.
- Sanity Learn, Migrating without downtime
- Sanity Learn, Re-modelling your existing content
- Google Search Central, Site Moves and Migrations
- Google Search Central, Changing your hosting
- Next.js Docs, rewrites
- Sanity Learn, Launch checklist and DNS transfer
- Sanity Docs, Import data
- Sanity Docs, Development, staging, and production environments
- Sanity Docs, Backups
- Sanity Docs, How to use Hot Swapping for datasets
- Sanity Docs, History experience
- Sanity Docs, GROQ-powered webhooks
- Sanity Docs, Important considerations for schema and content migrations
- Sanity, Plans that scale with you
- Sanity Docs, Functions cheat sheet
- Sanity Docs, Documents CLI command reference