{"id":39021,"date":"2025-09-15T12:08:52","date_gmt":"2025-09-15T10:08:52","guid":{"rendered":"https:\/\/tremhost.com\/blog\/?p=39021"},"modified":"2025-09-15T12:08:52","modified_gmt":"2025-09-15T10:08:52","slug":"move-your-clients-in-24-hours-zero-downtime-reseller-migration-guide","status":"publish","type":"post","link":"https:\/\/tremhost.com\/blog\/move-your-clients-in-24-hours-zero-downtime-reseller-migration-guide\/","title":{"rendered":"Move Your Clients in 24 Hours: Zero-Downtime Reseller Migration Guide"},"content":{"rendered":"<div id=\"bsf_rt_marker\"><\/div><h1>Move Your Clients in 24 Hours: Zero-Downtime Reseller Migration Guide<\/h1>\n<p>You can migrate 10\u2013100+ cPanel sites in ~24 hours with <strong>no visible downtime<\/strong> by (1) lowering DNS TTL 24h ahead, (2) pre-staging full cPanel transfers, (3) validating SSL\/email on temporary hostnames, (4) switching nameservers\/MX during a quiet window, and (5) running post-cutover QA. The keys are <strong>preflight checks<\/strong>, <strong>DNS choreography<\/strong>, and a <strong>rollback plan<\/strong>.<\/p>\n<blockquote><p>Quiet plug: <strong>Tremhost<\/strong> does instant setup, white-label DNS, and <strong>free cPanel-to-cPanel migrations<\/strong>\u2014ideal when you have to move fast without drama. See: tremhost.com\/reseller.html<\/p><\/blockquote>\n<h2>The 24-Hour Zero-Downtime Plan (Hour-by-Hour)<\/h2>\n<h3>H-24 to H-18: Preflight &amp; TTL<\/h3>\n<ul>\n<li><strong>Inventory<\/strong> every domain, site, mailbox, database, cron job, and third-party integration (SMTP, payment gateways, webhooks).<\/li>\n<li><strong>Lower DNS TTL<\/strong> to 300s (5 minutes) on A, AAAA, CNAME, MX, and TXT records. If using Cloudflare\/another proxy, lower proxy\/TXT TTLs too.<\/li>\n<li><strong>Freeze windows<\/strong>: agree on a content freeze for heavy CMS editors and a checkout freeze for WooCommerce during the final 30\u201360 minutes of cutover.<\/li>\n<\/ul>\n<h3>H-18 to H-12: Pre-Staging<\/h3>\n<ul>\n<li><strong>cPanel-to-cPanel transfers<\/strong> via WHM Transfer Tool (includes files, DBs, emails, DNS zones).<\/li>\n<li><strong>Non-cPanel sources<\/strong>: use full backups + import, or <code>imapsync<\/code> for mailboxes if email is staying on the old host for a while.<\/li>\n<li><strong>Temporary hostnames<\/strong>: verify each site over <code>https:\/\/temp.yourbrand.com\/~account<\/code> or mapped preview domains.<\/li>\n<\/ul>\n<h3>H-12 to H-6: Validation<\/h3>\n<ul>\n<li><strong>SSL\/AutoSSL<\/strong>: ensure staging hostnames issue certificates successfully.<\/li>\n<li><strong>DB connections<\/strong>: check wp-config.php\/.env; confirm no hardcoded old hostnames.<\/li>\n<li><strong>Email<\/strong>: confirm mailbox presence, SPF\/DKIM\/DMARC templates, and rDNS on shared IPs.<\/li>\n<li><strong>Cron jobs<\/strong>: re-create and test; disable duplicates on the old host.<\/li>\n<\/ul>\n<h3>H-6 to H-1: Dry Run &amp; Comms<\/h3>\n<ul>\n<li><strong>Uptime probes<\/strong> on staging URLs.<\/li>\n<li><strong>Cache warm-up<\/strong>: LSCache\/OPcache, image thumbnails, sitemap prefetch.<\/li>\n<li><strong>Client notice template<\/strong>: \u201cWe\u2019re upgrading your hosting tonight; no downtime expected. If you published in the last hour, please republish after 10:00.\u201d<\/li>\n<\/ul>\n<h3>H-1 to H-0: Cutover Window<\/h3>\n<ul>\n<li><strong>Switch DNS<\/strong>: update nameservers or A\/MX to the new IPs.<\/li>\n<li><strong>Purge caches\/CDNs<\/strong> and re-issue AutoSSL if necessary.<\/li>\n<li><strong>Spot-check<\/strong>: home, login, checkout, contact forms, admin, search.<\/li>\n<\/ul>\n<h3>H+1 to H+6: Post-Cutover QA<\/h3>\n<ul>\n<li><strong>Mail flow<\/strong>: send\/receive tests, SPF pass, DKIM signature, DMARC aggregate.<\/li>\n<li><strong>404\/500 sweep<\/strong>: scan logs; fix hardcoded URLs.<\/li>\n<li><strong>Payment &amp; webhooks<\/strong>: Stripe\/PayPal IPN, Woo webhooks, ERP integrations.<\/li>\n<li><strong>DNS propagation<\/strong>: confirm low TTL behavior, then plan to raise TTL back later.<\/li>\n<\/ul>\n<h3>H+6 to H+24: Stabilize &amp; Close<\/h3>\n<ul>\n<li><strong>Raise TTL<\/strong> back to 1\u20134 hours.<\/li>\n<li><strong>Backup &amp; restore test<\/strong> (non-negotiable): restore a single file and a DB table.<\/li>\n<li><strong>Sign-off<\/strong>: send a status email and open a 48-hour grace support window.<\/li>\n<\/ul>\n<h2>Zero-Downtime Checklist (Copy\/Paste)<\/h2>\n<p><strong>DNS &amp; Identity<\/strong><\/p>\n<ul class=\"contains-task-list\">\n<li class=\"task-list-item\"><input disabled=\"disabled\" type=\"checkbox\" \/> TTL lowered to <strong>300s<\/strong> on A\/AAAA\/CNAME\/MX\/TXT<\/li>\n<li class=\"task-list-item\"><input disabled=\"disabled\" type=\"checkbox\" \/> Private nameservers (<code>ns1\/ns2.yourbrand.com<\/code>) ready<\/li>\n<li class=\"task-list-item\"><input disabled=\"disabled\" type=\"checkbox\" \/> rDNS checked for the outbound IP<\/li>\n<\/ul>\n<p><strong>Accounts &amp; Data<\/strong><\/p>\n<ul class=\"contains-task-list\">\n<li class=\"task-list-item\"><input disabled=\"disabled\" type=\"checkbox\" \/> Full cPanel transfers completed<\/li>\n<li class=\"task-list-item\"><input disabled=\"disabled\" type=\"checkbox\" \/> External storage\/CDN rewrites verified<\/li>\n<li class=\"task-list-item\"><input disabled=\"disabled\" type=\"checkbox\" \/> Cron jobs recreated and old ones disabled<\/li>\n<\/ul>\n<p><strong>Security &amp; Certificates<\/strong><\/p>\n<ul class=\"contains-task-list\">\n<li class=\"task-list-item\"><input disabled=\"disabled\" type=\"checkbox\" \/> AutoSSL issued on staging<\/li>\n<li class=\"task-list-item\"><input disabled=\"disabled\" type=\"checkbox\" \/> HSTS\/cert chains validated post-cutover<\/li>\n<li class=\"task-list-item\"><input disabled=\"disabled\" type=\"checkbox\" \/> WAF\/Malware scans run<\/li>\n<\/ul>\n<p><strong>Email &amp; Deliverability<\/strong><\/p>\n<ul class=\"contains-task-list\">\n<li class=\"task-list-item\"><input disabled=\"disabled\" type=\"checkbox\" \/> Mailboxes migrated (IMAP sizes verified)<\/li>\n<li class=\"task-list-item\"><input disabled=\"disabled\" type=\"checkbox\" \/> SPF\/DKIM\/DMARC aligned; DMARC rua\/ruf set<\/li>\n<li class=\"task-list-item\"><input disabled=\"disabled\" type=\"checkbox\" \/> Transactional mail path (SMTP API or dedicated IP) confirmed<\/li>\n<\/ul>\n<p><strong>Apps &amp; Commerce<\/strong><\/p>\n<ul class=\"contains-task-list\">\n<li class=\"task-list-item\"><input disabled=\"disabled\" type=\"checkbox\" \/> WordPress\/Woo logins, checkout, webhooks tested<\/li>\n<li class=\"task-list-item\"><input disabled=\"disabled\" type=\"checkbox\" \/> .env\/wp-config.php points to new DB host<\/li>\n<li class=\"task-list-item\"><input disabled=\"disabled\" type=\"checkbox\" \/> Scheduled tasks (wp-cron\/real cron) confirmed<\/li>\n<\/ul>\n<p><strong>Backups<\/strong><\/p>\n<ul class=\"contains-task-list\">\n<li class=\"task-list-item\"><input disabled=\"disabled\" type=\"checkbox\" \/> Daily + on-demand retention configured<\/li>\n<li class=\"task-list-item\"><input disabled=\"disabled\" type=\"checkbox\" \/> Single-file and DB restore <strong>tested<\/strong><\/li>\n<\/ul>\n<h2>Special Cases (Avoid Gotchas)<\/h2>\n<h3>Cloudflare \/ Proxied DNS<\/h3>\n<ul>\n<li>Keep <strong>orange-cloud<\/strong> on to maintain edge IPs; only origin A\/AAAA changes.<\/li>\n<li>If you must switch nameservers, <strong>pre-import<\/strong> the zone and validate before the flip.<\/li>\n<li>Purge CF cache at cutover; re-enable security rules gradually.<\/li>\n<\/ul>\n<h3>Email Hosted Elsewhere (e.g., Google Workspace)<\/h3>\n<ul>\n<li>Keep MX at the external provider; only web A\/AAAA moves.<\/li>\n<li>Verify SPF includes your new sending path (include or +ip4).<\/li>\n<li>Update DKIM selector if you change outbound platform.<\/li>\n<\/ul>\n<h3>Non-cPanel Sources<\/h3>\n<ul>\n<li>Use <strong>tarball + rsync<\/strong> for files and <strong>logical DB dumps<\/strong> (mysqldump\/pg_dump).<\/li>\n<li>Rebuild mailboxes with <strong>imapsync<\/strong> or cut over at night with a delta pass just before DNS switch.<\/li>\n<\/ul>\n<h2>Communications Templates (Client-Friendly)<\/h2>\n<p><strong>T-24h (TTL Notice)<\/strong><br \/>\n<em>Subject:<\/em> Scheduled hosting upgrade\u2014what to expect<br \/>\n\u201cHi {{Name}}, we\u2019re upgrading your hosting tomorrow. No downtime expected. From now until then we\u2019ve reduced a DNS timer to speed up the change. If you edit your site during the final 60 minutes, please republish after {{local_time}}. We\u2019ll keep you posted.\u201d<\/p>\n<p><strong>T-1h (Cutover Window)<\/strong><br \/>\n<em>Subject:<\/em> We\u2019re switching you to the faster platform now<br \/>\n\u201cWe\u2019re moving your site to our faster, more secure platform. Expected interruption: none. We\u2019ll verify checkout, login, and email, then confirm.\u201d<\/p>\n<p><strong>T+1h (Confirmation)<\/strong><br \/>\n<em>Subject:<\/em> Migration complete\u2014please spot-check<br \/>\n\u201cAll done \ud83c\udf89. Please test: homepage, login, contact form, and any checkout. If you see anything odd, reply directly\u2014this mailbox pages our team for the next 24 hours.\u201d<\/p>\n<h2>Rollback Plan (Because Real Life Happens)<\/h2>\n<ul>\n<li>Keep old hosting active for <strong>48\u201372 hours<\/strong>.<\/li>\n<li>Maintain a <strong>hosts file<\/strong> entry to reach the old site if needed.<\/li>\n<li>If critical failure: point A\/AAAA back to the old IP; restore the last good DB snapshot; announce limited content freeze; fix, re-stage, retry.<\/li>\n<\/ul>\n<h2>Tooling &amp; Shortcuts That Save Hours<\/h2>\n<ul>\n<li><strong>WHM Transfer Tool<\/strong> for cPanel-to-cPanel (brings accounts and DNS).<\/li>\n<li><strong>JetBackup\/Imunify<\/strong> (or equivalents) for fast restores and cleanup.<\/li>\n<li><strong>Uptime monitor + webhook<\/strong> to a chat channel for instant alerts.<\/li>\n<li><strong>Log tailing<\/strong> (real-time) during cutover to catch 500s and permission issues.<\/li>\n<\/ul>\n<blockquote><p>With <strong>Tremhost Reseller Hosting<\/strong>, you get the core stack\u2014CloudLinux + LiteSpeed + NVMe, AutoSSL, daily backups\u2014and <strong>free cPanel migrations<\/strong> so you can focus on QA, not plumbing. tremhost.com\/reseller.html<\/p><\/blockquote>\n<h2>Frequently Asked Questions (People Also Ask)<\/h2>\n<p><strong>Can a migration really be \u201czero-downtime\u201d?<\/strong><br \/>\nFor dynamic sites, \u201czero-visible-downtime\u201d is realistic. With low TTL, pre-staging, and a short freeze during cutover, users won\u2019t notice.<\/p>\n<p><strong>How do I prevent email loss?<\/strong><br \/>\nMigrate mailboxes first, keep MX as-is until the web cutover, and do a last-minute IMAP delta sync. Validate SPF\/DKIM\/DMARC before switching outbound.<\/p>\n<p><strong>What\u2019s the fastest way to move many WordPress sites?<\/strong><br \/>\nBulk transfer with WHM, then run a scripted URL search-replace, regenerate thumbnails, warm caches, and test logins\/checkout via a checklist.<\/p>\n<p><strong>When should I change nameservers vs. only A\/AAAA records?<\/strong><br \/>\nIf you want full white-label control, move nameservers. If speed is paramount and you\u2019re keeping the registrar DNS, update A\/AAAA\/MX only.<\/p>\n<p>Need the migration muscle without the headaches? <strong>Tremhost<\/strong> offers <strong>free cPanel migrations<\/strong>, <strong>private nameservers<\/strong>, and a <strong>performance-first<\/strong> stack that keeps tickets low. Start here: <strong>tremhost.com\/reseller.html<\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Move Your Clients in 24 Hours: Zero-Downtime Reseller Migration Guide You can migrate 10\u2013100+ cPanel sites in ~24 hours with no visible downtime by (1) lowering DNS TTL 24h ahead, (2) pre-staging full cPanel transfers, (3) validating SSL\/email on temporary hostnames, (4) switching nameservers\/MX during a quiet window, and (5) running post-cutover QA. The keys [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":39022,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"tdm_status":"","tdm_grid_status":"","footnotes":""},"categories":[163],"tags":[],"class_list":{"0":"post-39021","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-hosting"},"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/tremhost.com\/blog\/wp-json\/wp\/v2\/posts\/39021","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tremhost.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tremhost.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tremhost.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tremhost.com\/blog\/wp-json\/wp\/v2\/comments?post=39021"}],"version-history":[{"count":1,"href":"https:\/\/tremhost.com\/blog\/wp-json\/wp\/v2\/posts\/39021\/revisions"}],"predecessor-version":[{"id":39023,"href":"https:\/\/tremhost.com\/blog\/wp-json\/wp\/v2\/posts\/39021\/revisions\/39023"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tremhost.com\/blog\/wp-json\/wp\/v2\/media\/39022"}],"wp:attachment":[{"href":"https:\/\/tremhost.com\/blog\/wp-json\/wp\/v2\/media?parent=39021"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tremhost.com\/blog\/wp-json\/wp\/v2\/categories?post=39021"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tremhost.com\/blog\/wp-json\/wp\/v2\/tags?post=39021"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}