{"id":4530,"date":"2026-09-25T14:09:34","date_gmt":"2026-09-25T14:09:34","guid":{"rendered":"https:\/\/skynethosting.net\/blog\/?p=4530"},"modified":"2026-10-02T14:15:31","modified_gmt":"2026-10-02T14:15:31","slug":"move-woocommerce-store-off-shared-hosting","status":"publish","type":"post","link":"https:\/\/skynethosting.net\/blog\/move-woocommerce-store-off-shared-hosting\/","title":{"rendered":"How to Move a WooCommerce Store Off Shared Hosting Without Losing Order History"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">To move a WooCommerce store off shared hosting without losing orders, back up everything, build a copy on the new server, test it before DNS changes, run one final database sync while new orders are paused, then switch DNS and keep the old server available for rollback. That sequence matters more than any single tool. A store keeps changing while you work, and a plain file copy does not account for that.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A brochure site can be copied on a quiet afternoon. A WooCommerce store collects orders, customer accounts, stock changes and scheduled tasks around the clock. Every hour between your first backup and your final switch is an hour of data the copy does not know about.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We have hosted 700,000+ websites over 20+ years, and the migrations that go wrong share one habit. The owner treated the move as a copy job instead of a handover. This guide covers why stores outgrow shared hosting, what must be preserved, how to prepare, how to move the data, how to test and how to switch DNS with little downtime.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why Do WooCommerce Stores Move Away From Shared Hosting?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Most stores move because they outgrow the resources a shared plan can give them. More shoppers, a bigger database and busy sales periods push against CPU, memory and process limits, and the owner has little control over the server to fix it. Slow pages and failed checkouts at the worst moments are the usual trigger.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Growing traffic and concurrent shoppers<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Concurrency is the number that hurts. A store with 5,000 visitors a day spread evenly is easy. The same 5,000 arriving in two hours after an email campaign is a different workload, because every shopper adding to a cart or opening checkout runs uncached PHP and database queries.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On shared hosting that work competes with every other account on the machine, and the host caps how many processes your account may run at once. When the cap is hit, visitors see slow pages or errors even though the server itself is fine. Our <a href=\"https:\/\/skynethosting.net\/cpanel-web-hosting.htm\">cPanel web hosting<\/a> plans are a good home for a young store with modest traffic. They are not meant for a store that regularly spikes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A simple test: look at your host&#8217;s resource usage graphs after your last busy day. If the lines touched the ceiling, you have your answer.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Resource limits affecting store performance<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Shared plans set limits on CPU time, memory, disk speed and simultaneous processes. WooCommerce is hungry for all four, since pages like cart, checkout and My Account cannot be fully cached. Plugins for shipping, subscriptions and analytics add more.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The symptoms are specific. The admin area crawls while the front end seems fine. Checkout takes eight seconds. Orders appear late and emails queue up. You may see resource limit messages or 503 errors at peak times.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Before you decide to move, rule out the cheap fixes: a caching plugin tuned for WooCommerce, image compression, removing unused plugins and updating PHP. Those help a lot. They do not remove a hard limit, and when you hit that wall, hardware is the fix.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Database workload from orders and customer activity<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Every order writes rows into the database, and WooCommerce stores far more than the total on the receipt. Line items, shipping details, tax rows, customer notes and order metadata all land in tables. Modern WooCommerce can keep orders in dedicated tables through High-Performance Order Storage, called HPOS, while older stores keep them as posts and post meta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Add customer sessions, scheduled action logs, coupon usage and plugin data, and the database grows quietly. A store with tens of thousands of orders often has a database several times larger than its media folder. Slow queries against that data are a common reason pages drag, and a shared database server gives you almost no way to tune it. On an <a href=\"https:\/\/skynethosting.net\/nvme-vps.html\">NVMe VPS<\/a> you control the database settings and get fast storage underneath.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A tuned database is not magic. If a plugin runs a badly written query on every page, no server hides that for long.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Limited server-level control<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">On shared hosting you cannot change MySQL settings, choose PHP worker counts, install a Redis object cache or schedule server cron jobs freely. You work inside what the host allows. For many sites that is fine, and even a relief.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A growing store tends to want those levers. A real server cron job in place of WordPress&#8217;s built in task runner makes scheduled actions far more reliable. An object cache cuts repeated database reads. Control over the PHP version and extensions avoids waiting for a support ticket.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Control comes with duty, though. On a VPS you, or someone you pay, must patch the operating system, manage the firewall and watch disk space. If nobody on your team wants that job, price a managed option before you commit.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Performance requirements during peak sales periods<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Peak periods like Black Friday, a product launch or a seasonal rush are where a weak hosting setup costs real money. A store that loses ten minutes of checkout during a sale has lost revenue it cannot get back. Plan for peak, not for the average Tuesday.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Work out your peak rate: orders per hour on your busiest day, multiplied by a safety margin of two or three. Then ask whether your current plan handled that day comfortably. If it limped, a VPS is the usual next step, and a <a href=\"https:\/\/skynethosting.net\/dedicated-servers.htm\">dedicated server<\/a> suits stores whose traffic needs a whole machine.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Do the move well before the season, not during it. Migrating in November because the store is already struggling is how mistakes happen. Pick a quiet week and give yourself room to roll back.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What WooCommerce Data Must Be Preserved During a Hosting Migration?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Everything the store has recorded must come with you: orders and their metadata, customer accounts, products with variations and stock, uploaded media, coupons, tax and shipping settings and the configuration of payment gateways and integrations. Most of it lives in the database and the rest lives in files. Move one without the other and the store breaks.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Historical orders and order metadata<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Orders are the records you can never recreate. Each one includes line items, totals, statuses, addresses, notes, refunds and metadata added by plugins, such as tracking numbers or gateway transaction IDs. Accountants, customers and tax authorities all depend on them.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Where they live depends on your store. If HPOS is on, orders sit in dedicated tables such as wc_orders and wc_orders_meta. Older stores keep them in the posts and postmeta tables. A full database copy brings either layout across, which is why we recommend copying the whole database instead of exporting orders through a plugin.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A CSV order export is useful as an extra safety copy. It is not a migration method, because it loses metadata and relationships.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Customer accounts and customer data<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Customer accounts sit in the WordPress users and usermeta tables, with WooCommerce adding billing and shipping details, saved addresses and in some setups saved payment tokens. Passwords are stored as hashes, so customers can keep logging in after the move without resetting anything, provided the whole database comes across.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Do not export customers to a spreadsheet and import them again. You will lose password hashes, order links and any membership or loyalty data tied to their user ID. Keep the database intact and the relationships come with it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Privacy matters here. Backups contain personal data, so keep them encrypted or at least out of public folders, and delete stray copies once the move is done.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Products, variations, and inventory<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Products and variations are stored as posts with a lot of metadata and attribute data, plus taxonomy tables for categories and tags. Stock levels live in product metadata, which means they change with every sale.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That last fact is the one people forget. If your first backup is taken on Monday and you cut over on Thursday, Thursday&#8217;s stock numbers come from Monday&#8217;s copy unless you sync again. Stores can oversell a bestseller after a move because inventory was never refreshed. The final database sync fixes it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Check variable products with extra care. A product with forty variations has forty sets of price, stock and image data, and any gap shows up quickly on the product page.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">WordPress media and uploaded files<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The wp-content\/uploads folder holds product images, downloadable files and plugin generated files. It often grows to many gigabytes and is the slowest part of the transfer. Digital product stores must check that protected download folders and their permissions come across correctly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Themes and plugins live in wp-content too. Copy the exact versions you run today, not newer ones from a fresh download, so the test copy behaves like the live store. Update after the move, one change at a time.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you offload media to a CDN or an external storage service, note the settings and credentials now. Those links need to survive the move too.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Coupons, taxes, shipping, and store settings<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Coupons are stored like posts, and usage counts are stored with them. Tax rates and shipping zones live in WooCommerce&#8217;s own tables and in the options table. Most settings sit in options, so they travel with the database.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Screenshots help. Before you start, capture the main WooCommerce settings screens, your shipping zones and your tax rates. If anything looks different after the move, you will have proof of what it should be. It takes ten minutes and has saved us arguments.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Add a note of any custom code snippets in the theme or a snippets plugin. Tax and shipping tweaks often hide there.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Payment gateway and integration configuration<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Gateway settings are saved in the database, including API keys, but the gateway account itself sits outside your store. Some gateways tie keys, webhooks or allowed IP addresses to your current server. Shipping carriers, accounting tools and email services may do the same.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">List every external service that talks to your store. Write down what each one needs: a webhook URL, an IP allowlist, a callback address. Check each after the move. It is the step that gets forgotten, and a broken webhook can hide for days while orders quietly sit in the wrong status.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How Do You Prepare a WooCommerce Store Before Moving It?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Preparation means six jobs: take full backups you have actually tested, record how the current server is set up, confirm the new server meets WooCommerce&#8217;s needs, lower your DNS TTL, build the new environment and write a rollback plan. Skipping any one of them is where most migration trouble starts.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Creating a complete backup of files and database<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Take a full backup of the files and the database, and store a copy away from your hosting account. For the database, use a tool that creates a consistent snapshot. On a server with command line access, mysqldump with the single transaction option does this for InnoDB tables without locking the store. Hosting control panels and plugins can also produce exports.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Then prove the backup works. Restore it somewhere harmless and check that it opens. A backup nobody has restored is a hope. Our <a href=\"https:\/\/skynethosting.net\/reseller-features.htm\">reseller features<\/a> page lists the backup and security options on our plans, and whichever host you use, ask what they keep and for how long.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Keep this first backup untouched. It is your oldest safety net.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Recording the current hosting and software configuration<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Write down the PHP version and extensions, the database type and version, the WordPress and WooCommerce versions, the active plugin list with versions, the web server software and any custom settings in php.ini or .htaccess. The WooCommerce System Status page collects much of this on one screen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Also note scheduled jobs, special redirects and anything customized outside the WordPress admin: custom code in the theme, server rules, firewall exceptions. The documented item is the one you will remember to recreate. The forgotten one breaks checkout at midnight.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Save the whole list in a shared document, not on your laptop, so a colleague can follow it if you are unavailable on migration day.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Checking PHP, database, and plugin compatibility<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Check what WooCommerce currently requires for PHP and for MySQL or MariaDB, and compare the new server to that list. Then check every plugin. An old payment plugin that works on an older PHP release may fail on a newer one.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If the new server runs a newer PHP version than the old one, treat that as a second project. Change one big thing at a time. Move first on matching versions if you can, test, and upgrade PHP afterward. Two changes at once make a failure impossible to trace.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Check that the PHP extensions WooCommerce and your plugins rely on, such as those for images and compression, are installed on the new server.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Lowering DNS TTL before the migration<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">TTL, or time to live, tells resolvers how long to cache your DNS records. If it is set to 24 hours, some visitors will keep reaching the old server for up to a day after you switch. Lower it to about five minutes, ideally one to two days before the cutover.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The timing matters. The old, longer TTL must expire before the short one takes effect everywhere. Lowering it an hour before you switch does almost nothing. Put a reminder in the calendar, and raise the TTL again a few days after the move.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you put a proxy in front of the store, such as <a href=\"https:\/\/skynethosting.net\/cloudflare.htm\">CloudFlare CDN<\/a>, you may be able to change the origin address without waiting on DNS caches, which makes the cutover quicker. Check how your own setup behaves before relying on that.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Preparing the new hosting environment<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Set up the server before you copy anything. Install the web server, PHP with the right extensions and the database server, and settle your SSL plan. Create an empty database and a database user with a strong password and rights only to that database. Set the PHP memory limit, upload limits and execution time at sensible levels for a store.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Our servers use Intel Dual Xeon hardware with NVMe drives and LiteSpeed, which suits the constant small reads and writes a store makes. If you want a deeper look at drive types, see our page on <a href=\"https:\/\/skynethosting.net\/pcie-nvme-ssd-reseller-hosting.htm\">NVMe drives versus SSDs<\/a>. And if your new environment has a panel with an installer such as <a href=\"https:\/\/skynethosting.net\/softaculous.htm\">Softaculous<\/a>, you can drop in a clean WordPress to confirm the server works before the real data arrives.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Set up a real cron job too. WordPress&#8217;s built in scheduler only runs when someone visits the site, which is a weak foundation for a store. A server cron job that calls wp-cron.php every few minutes, with the built in trigger switched off in wp-config.php, keeps scheduled actions running on time.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Planning a rollback before making the final switch<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Decide now what failure looks like and what you will do about it. Examples: checkout errors above a set rate, orders not appearing in the admin, payments not confirming. Write the trigger and the action next to each.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The rollback itself is usually simple if you prepared it. Point DNS back at the old server, which is still running and still holds the last good data. The catch is orders placed on the new server after the switch. If you roll back, you must bring those orders back to the old site or accept losing them. Know that before you start.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Set a point of no return, perhaps a few days after the move, after which the old server is retired.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How Do You Migrate WooCommerce From Shared Hosting to the New Server?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Copy the WordPress files and media, import the database into a new empty one, update wp-config.php with the new database details, confirm settings and permalinks, set up SSL and server rules, and finish with a final sync of orders and customers just before DNS changes. Do the first full copy early, and treat the last sync as a separate, short event.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Transferring WordPress files and media<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Transfer the full WordPress directory, including wp-content with themes, plugins and uploads. Use rsync over SSH or SFTP when you can, since rsync resumes interrupted transfers and only sends changes. Downloading to your laptop and uploading again works, but doubles the time.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Because uploads are large and mostly static, copy them early and then run rsync again at the end. The second pass sends only new files, so it takes minutes. Check file ownership and permissions afterward. Directories at 755 and files at 644 are the usual defaults, with wp-config.php locked down tighter. Wrong ownership causes failed uploads and plugin update errors that look unrelated.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Importing the WooCommerce database<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Export the database from the old server and import it into the empty database on the new one. For a small store, phpMyAdmin may be fine. For a large one it will time out, so use the command line instead, with mysqldump for the export and the mysql client for the import. WP-CLI offers wp db export and wp db import if it is installed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As a made up example, a database of 600 MB might import in a couple of minutes on a fast server, while one ten times that size takes far longer. That duration decides how long your final sync window will be. Time your first import. It gives you the real number.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Configuring the new database connection<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Open wp-config.php on the new server and update DB_NAME, DB_USER, DB_PASSWORD and DB_HOST to match the new database. DB_HOST is often localhost on a single server but not always. Check the table prefix, set by the table_prefix line, and make sure it matches the imported tables exactly. A mismatch shows up as a fresh WordPress install screen, which alarms people but is easy to fix.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Do not edit the live site&#8217;s file by accident. It is an easy slip to make, so label your terminal windows and keep clear which server you are connected to.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you test on a temporary address and the domain differs, replace the URLs in the database with a tool that understands serialized data, such as the WP-CLI search and replace command. A plain text replace can corrupt serialized settings. With the same domain and a hosts file test, you can skip this step entirely, which is simpler and safer.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Restoring WordPress and WooCommerce settings<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Most settings arrive with the database. Still, confirm them. Log in to the admin area on the test copy and check WooCommerce settings, shipping zones, tax rates, email templates and payment methods. Then go to Settings, Permalinks and click Save to flush rewrite rules. That one click fixes a surprising number of 404 errors on product pages.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Check the WooCommerce Status page for warnings and review the active plugins. Clear every cache, including page cache, object cache and plugin caches. Cart, checkout and account pages must be excluded from page caching, or customers can end up seeing each other&#8217;s cart data. A caching mistake here is worse than slowness.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Reconfiguring SSL and server-level settings<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Your store must serve HTTPS from the first minute after DNS changes, or browsers will warn shoppers away from checkout. Free certificates that validate over HTTP usually need the domain pointing at the new server. Your options are to use DNS based validation, install your existing certificate and key on the new server, or issue the new certificate the moment DNS changes and accept a brief gap.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Decide this in advance. Also move server level rules: redirects between www and non www, HTTP to HTTPS redirects, security headers, upload size limits and any rules that protect downloadable products. Since we run LiteSpeed, we find that rewrite rules from an old .htaccess file generally carry over, but test them instead of assuming.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Synchronizing final order and customer data before DNS cutover<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">This is the step that separates a safe migration from a risky one. Your first copy is already out of date by the time you finish testing, because customers kept ordering. So you freeze the old store briefly, take a fresh database export, import it on the new server and sync any new files.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Do not try to merge new orders by hand into the copy. Order IDs, stock counts, customer records and HPOS tables are tangled together, and a partial merge creates duplicates or gaps. Replacing the new server&#8217;s database with a fresh full export is far safer, as long as no testing data on the new server needs to survive. It should not.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Freezing orders for 15 to 30 minutes at a quiet hour is a small cost. Live replication from the old database to the new one can avoid even that, but it is complex and easy to get wrong, so we would only suggest it for stores that truly cannot pause.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How Do You Test a Migrated WooCommerce Store Without Losing Orders?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Test with DNS still pointing at the old server, using a hosts file entry on your own computer so you see the new server under the real domain name. Check old orders and accounts, products, the full checkout in test mode, gateways and webhooks, shipping, tax, coupons, emails and scheduled actions. If anything fails, you have lost nothing.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Checking historical orders and customer accounts<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Open the orders list and compare counts with the old store. The totals should match exactly, along with the newest order number. Open a handful of old orders from different years and compare line items, notes and refunds side by side with the old site.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Then check customers. Log in as a test customer whose password you know and confirm that order history and addresses show. Check the reports in the WooCommerce admin, which should match the old figures. A count mismatch at this stage is a gift. It tells you something went wrong while there is still time to fix it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Testing product pages and inventory<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Browse like a shopper. Open category pages, search results, product pages with variations and products with images, galleries and downloads. Check that prices, sale dates and stock statuses are correct.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Compare stock for a few products against the old store, and watch for broken images, which usually point to missing uploads or wrong permissions. Look at page load times too. Server location affects them, and our 25 worldwide locations and <a href=\"https:\/\/skynethosting.net\/multi-location-hosting.htm\">multi-location hosting<\/a> let you place a store near its shoppers. If the new server is not clearly faster on the same pages, find out why before you cut over.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Testing cart and checkout functionality<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Run the whole path: add items, change quantities, apply a coupon, enter an address, choose shipping, pay and reach the thank you page. Do it as a guest and as a logged in customer. Try a variable product and a digital product if you sell them.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Be careful on a test copy. It can send real emails to real customers and, if gateways are in live mode, take real payments. Put gateways in test mode, and stop or redirect outgoing mail on the test copy. A customer receiving a test order confirmation is embarrassing, and a duplicate renewal charge from a subscription plugin is worse.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Verifying payment gateways and webhooks<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Use each gateway&#8217;s test or sandbox mode to complete payments, including a failed card and a refund. Then confirm that the order status updates as it should. Status updates after payment usually depend on a webhook or callback reaching your store.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Webhooks target your domain, so during testing with a hosts file entry, outside services will still reach the old server, not the new one. That means you cannot fully test webhook delivery until DNS changes. Plan for that. After cutover, watch your gateway&#8217;s dashboard for failed webhook deliveries and resend them. Most gateways show failures and let you replay events.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Testing shipping, tax, coupons, and transactional emails<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Test each shipping zone and method with realistic addresses. Test tax calculations for a few regions and for a tax exempt customer if you have one. Test coupons with their rules: minimum spend, expiry and usage limits.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Transactional emails deserve a special look, because mail often behaves differently on a new server. Check that order confirmations arrive, land in the inbox and are not marked as spam. Authentication records for your domain, such as SPF and DKIM, must allow the new server to send. A reliable mail path such as our <a href=\"https:\/\/skynethosting.net\/mailchannels-email.htm\">MailChannels email<\/a> helps with deliverability, and it is worth sorting before launch, not after the first complaint.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Checking WooCommerce scheduled actions and cron jobs<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">WooCommerce runs background work through Action Scheduler: sending emails, processing subscriptions, syncing data and cleaning up. See the queue under WooCommerce, Status, Scheduled Actions. Look for failed or overdue actions, and compare pending counts with the old site.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Confirm your server cron job is firing. Check that past due actions get processed and that the number does not climb. After the final sync there is one more risk. The old and new servers may both run the same scheduled actions for a while, which can send duplicate emails or duplicate renewals. Once the final export is taken, stop the old store&#8217;s scheduled tasks by disabling its cron and keeping it in maintenance mode.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How Do You Switch DNS to the New WooCommerce Server With Minimal Downtime?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pick a quiet window, pause new orders, run the final database sync, change the DNS records and watch both servers while the change spreads. Keep the old server running for several days so you can roll back. If TTL was lowered ahead of time, most visitors reach the new server within minutes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Choosing the final migration window<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Look at your order data by hour and by weekday, and pick the quietest stretch, often very early morning in your main customer timezone. Avoid sale days, payday weekends and the days around big marketing sends. Warn your team and any support staff.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Allow more time than the plan says. If your trial import took ten minutes and the file sync took five, book two hours anyway. Spare time costs nothing, and rushed steps cost orders. Make sure the people who can fix problems, such as your developer and whoever holds the DNS login, are awake and reachable.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Temporarily controlling new orders during synchronization<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">On the old store, stop new orders for the sync period. Options include maintenance mode, a banner with checkout disabled or a plugin that closes the store temporarily. Whichever you use, make sure it blocks checkout and not just the home page, because shoppers with a saved cart link can still reach it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tell customers plainly, with a short message and a return time. A fifteen minute pause with a clear notice costs very little. A silent failure at checkout costs customers. Pause marketing automation and abandoned cart emails for the same period.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Check that scheduled social posts and paid ads are not about to send a wave of visitors into a closed store.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Performing the final database sync<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">With orders paused, export the database one more time using a consistent snapshot, import it into the new server&#8217;s database to replace the test data, and run the final rsync of uploads. Then repeat the quick checks: order count, latest order number, stock on a few products and one admin login.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Write the numbers down. Compare the latest order ID on both servers, and the count of orders in each status. If both match, you have not lost anything. If they do not, stop and fix it before touching DNS. This is the last cheap moment to catch a mistake.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Updating DNS records<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Change the A record, and the AAAA record if you use IPv6, for the root domain and for www to the new server&#8217;s IP address. If your DNS lives at the registrar, make the change there. If you use a proxy service, change the origin address instead. Check for stray records still pointing at the old server, such as a subdomain you meant to move.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Email needs separate care. If your mail runs somewhere else, leave MX records alone. If email was hosted on the old server, move the mailboxes before pointing MX records, or you will lose messages. It is easy to overlook, and store owners find out when customers say their emails bounce.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Once the new server answers, open the store to orders and place one live low value order yourself, then refund it. That single test proves the whole payment path.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Monitoring the old and new servers during propagation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">For the next few hours, some visitors will reach the old server and some the new one. Watch both. Keep the old store in maintenance mode so it cannot take orders the new one will never see, and watch its access logs. As traffic drains from it, you can see propagation finishing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On the new server, watch error logs, the orders list and server load. Check your gateway dashboard for failed webhooks and resend them. Keep an eye on CPU, memory and database connections. If a figure sits near a limit even on a quiet day, the sizing was wrong, and it is better to know now.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Keeping the old hosting environment available for rollback<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Do not cancel the old hosting the same day. Keep it, in maintenance mode, for at least a week or two, longer if your order cycle is monthly. It is your rollback path, and a source of truth if someone asks about a missing order.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Take a final full backup of the old account and store it safely before closing it. Then raise your DNS TTL back to a normal value, delete leftover test data, remove staging copies and confirm that backups on the new server run on a schedule and restore correctly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Finally, write down what you learned: the timings, the problems, the checks that mattered. The next migration, or the next store, will start from your notes instead of from zero.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If your store has outgrown its shared plan, our <a href=\"https:\/\/skynethosting.net\/vps.htm\">VPS hosting<\/a> gives you the resources and server level control a busy WooCommerce store needs. Pick a quiet week, follow the sequence above and keep the old server until you are sure.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>To move a WooCommerce store off shared hosting without losing orders, back up everything, build a copy on the new server, test it before DNS changes, run one final database sync while new orders are paused, then switch DNS and keep the old server available for rollback. That sequence matters more than any single tool. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-4530","post","type-post","status-publish","format-standard","hentry","category-skynethostinghappenings"],"blog_post_layout_featured_media_urls":{"thumbnail":"","full":""},"categories_names":{"1":{"name":"Skynethosting.net News","link":"https:\/\/skynethosting.net\/blog\/category\/skynethostinghappenings\/"}},"tags_names":[],"comments_number":"0","wpmagazine_modules_lite_featured_media_urls":{"thumbnail":"","cvmm-medium":"","cvmm-medium-plus":"","cvmm-portrait":"","cvmm-medium-square":"","cvmm-large":"","cvmm-small":"","full":""},"_links":{"self":[{"href":"https:\/\/skynethosting.net\/blog\/wp-json\/wp\/v2\/posts\/4530","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/skynethosting.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/skynethosting.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/skynethosting.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/skynethosting.net\/blog\/wp-json\/wp\/v2\/comments?post=4530"}],"version-history":[{"count":1,"href":"https:\/\/skynethosting.net\/blog\/wp-json\/wp\/v2\/posts\/4530\/revisions"}],"predecessor-version":[{"id":4531,"href":"https:\/\/skynethosting.net\/blog\/wp-json\/wp\/v2\/posts\/4530\/revisions\/4531"}],"wp:attachment":[{"href":"https:\/\/skynethosting.net\/blog\/wp-json\/wp\/v2\/media?parent=4530"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/skynethosting.net\/blog\/wp-json\/wp\/v2\/categories?post=4530"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/skynethosting.net\/blog\/wp-json\/wp\/v2\/tags?post=4530"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}