Skip to content

Demo. Everything on this page is sample data for a made-up shop. Nothing you click here is sent anywhere.

Demo · sample data

Interactive demo: one migration, from preview link to launch

Follow a made-up shop, shop.example, as it moves to a new server at 203.0.113.10. Click around: every step works here, on sample data.

Step 1 · The real domain, served by the new server

Enter the domain and the new server’s IP, and DNSPeek gives you a link like the one below. Public DNS still points at the old server; the link shows the new one.

Address: https://demo.dnspeek-preview.link/

  • Valid HTTPS on the preview, even before the new server has a certificate for your domain
  • Opens on phones and tablets, where a hosts file cannot help
  • Send it to a client; add a password and an expiry date if you like
  • How preview links work

Step 2 · Find what broke before your visitors do

DNSPeek crawls the site on the new server and lists what would break at launch, most serious first. Try the filters. On the Agency plan and up, the report carries your own name. About QA reports

Prepared byYour Agency

Pre-launch QA report

shop.example

Crawled on the new server before the DNS switch · Sep 14, 2026, 9:12 AM UTC · 8 pages checked

Built with
  • WordPress 6.4 (Detected with high confidence: meta generator: WordPress 6.4.2)
  • WooCommerce 8.5 (Detected with high confidence: meta generator: WooCommerce 8.5.1)
  • probably Elementor (Probably: file https://shop.example/wp-content/plugins/elementor/assets/js/frontend.min.js)
  • PHP 8.2 (Detected with high confidence: x-powered-by: PHP/8.2.12)
  • nginx 1.24 (Detected with high confidence: server: nginx/1.24.0)
64of 100

Fix before launch

2 critical issues should be fixed before switching DNS.

Critical
2
Warning
4
Info
2

Findings

Showing 8 of 8

Broken pages1
  • Critical
    /checkout answers 500 Internal Server Error

    The checkout page fails on the new server while it works on the live site. The shop plugin’s PHP extension is probably missing.

    How to fix: Check the PHP error log on the new server and install the extensions the old server had (compare `php -m` on both).

Broken files1
  • Critical
    3 product images return 404

    /wp-content/uploads/2026/05/blend-dark.jpg and 2 more files are missing on the new server.

    How to fix: Copy the uploads folder again; the first sync probably finished before the last uploads were added.

Redirects1
  • Warning
    /shop redirects 3 times before it loads

    /shop → /shop/ → /store/ → /store. Every hop adds a round trip.

    How to fix: Point the old URL straight at the final one with a single 301.

Mixed content1
  • Warning
    The home page loads a script over plain HTTP

    http://shop.example/wp-content/plugins/reviews/widget.js is blocked by browsers on an HTTPS page.

    How to fix: Serve the script over HTTPS, or run a search-and-replace of http://shop.example in the database.

Hard-coded URLs1
  • Info
    12 links point at the old staging domain

    Menu and footer links use https://staging.shop.example.

    How to fix: Replace the staging domain in the menus and widgets.

JavaScript errors1
Email & DNS1
  • Warning
    The SPF record does not include the new server

    Order emails sent from 203.0.113.10 after the switch may land in spam.

    How to fix: Add ip4:203.0.113.10 to the SPF record before you switch DNS.

Platform checks1
  • Warning
    PHP errors are printed on the page
    WordPress

    PHP warnings or errors are shown to visitors and reveal server paths. Seen on 1 of 8 checked pages.

    Evidence: <b>Deprecated</b>: Creation of dynamic property Reviews_Widget::$cache is deprecated in <b>/var/www/shop/wp-content/plugins/reviews/widget.php</b> on line <b>41</b>

    Page: https://shop.example/about(opens in a new tab)

    How to fix: Set WP_DEBUG_DISPLAY to false (and display_errors=Off). Notices after a move usually mean a newer PHP version: update or replace the plugins named in the file paths. Documentation(opens in a new tab)

Old vs new server

The same URLs, fetched from the live site (public DNS) and from the new server with the same client on Sep 14, 2026, 9:12 AM UTC.

Live site is behind Cloudflare. The live site is behind Cloudflare, which may add this at the edge; it applies again once Cloudflare points to the new server.

HTTP/2:
live yes · new yes
Median time to first byte:
live 90 ms · new 240 ms
URLLive siteNew serverDifferences
/

200

House Coffee Roasters

90 ms · 47 KB

200

House Coffee Roasters

240 ms · 50 KB

  • Compression
  • HSTS
HTTP → HTTPShttp://shop.example/

200 · 1 redirect

→ https://shop.example/

House Coffee Roasters

90 ms · 47 KB

200 · 1 redirect

→ https://shop.example/

House Coffee Roasters

90 ms · 47 KB

Same
/checkout

200

Checkout – House Coffee Roasters

90 ms · 47 KB

500

Internal Server Error

610 ms · 900 B

  • Status

DNS & email readiness

Public DNS of shop.example as it is before the switch · checked Sep 14, 2026, 9:12 AM UTC

Before you switch

  1. Lower the TTL of the apex and www A/AAAA/CNAME records to 300 s 24–48 hours before the switch (current TTL: 3600 s), then raise it again once the new server is live.
  2. The domain uses Cloudflare DNS: change the IP of the existing records in Cloudflare (keeping them proxied if they are) instead of moving nameservers.
Nameservers
ada.ns.cloudflare.com, bob.ns.cloudflare.com
Highest TTL (apex and www)
3600 s (1 h)
Mail servers (MX)
1 aspmx.l.google.com
DMARC
policy quarantine
SPF
v=spf1 include:_spf.google.com include:mailgun.org ~all4 of 10 DNS lookups
DKIM (common selectors)
  • googlefound (TXT)
  • selector1not found
  • k1not found
Providers may use other selectors; “not found” is not a problem by itself.
Website records
TypeHostValueTTL
Ashop.example198.51.100.73600 s (1 h)
CNAMEwww.shop.exampleshop.example—
Records to recreate before changing nameservers
TypeHostValuePriority
MXshop.exampleaspmx.l.google.com1
TXTshop.examplev=spf1 include:_spf.google.com include:mailgun.org ~all
TXT_dmarc.shop.examplev=DMARC1; p=quarantine

Not tested

These are limits of the automated crawl, not problems of the site. They don't affect the score.

  • Service workers

    Service workers were disabled during the crawl; offline/PWA behaviour wasn't tested.

  • Scheduled jobs (WordPress)

    Background jobs and cron tasks were not tested. Recreate them on the new server, e.g. `wp cron event run --due-now`, and check they run after the switch.

  • Checkout, payments and webhooks (WooCommerce)

    Checkout, payments and webhooks were not tested. Payment providers call your domain, so after the switch they reach the new server: check webhook secrets and IP allowlists, and place a test order.

Pages crawled

URLStatusRedirectsFindings
https://shop.example/20002
https://shop.example/shop→ https://shop.example/store20031
https://shop.example/product/house-blend20001
https://shop.example/product/dark-roast20001
https://shop.example/cart20000
https://shop.example/checkout50001
https://shop.example/about20000
https://shop.example/contact20001

Step 3 · Spot the differences with the live site

Screenshots of the live site and the new server, compared pixel by pixel. Here the new server lost the web font, a product photo and a stylesheet. Drag the handle, or switch to the diff. On the Pro plan and up you can also browse both side by side live, with synced clicks and scroll. About visual compare

/12.5%

Live site, home page, sample illustration
New server, home page, sample illustration
LiveNew server
Page load signals, live site versus new server
SignalLiveNew server
HTTP status200200
Failed requests02
Console errors01
Web fonts loaded20

Step 4 · Switch DNS and watch it spread

After the switch, DNSPeek asks 16 public resolvers which IP they return. Run a few checks to see the new server take over. About DNS propagation

A record of shop.example → expected 203.0.113.10

9 of 16 resolvers

Resolvers still holding the old answer switch once their cached TTL runs out.

Answer of each public resolver
ResolverLocationAnswer
GoogleGlobal (US)203.0.113.10(new server)
CloudflareGlobal (US)203.0.113.10(new server)
Quad9Global (CH)203.0.113.10(new server)
OpenDNSGlobal (US)203.0.113.10(new server)
AdGuardGlobal (CY)203.0.113.10(new server)
Level3 / LumenNorth America198.51.100.7(old server)
UltraDNS PublicNorth America198.51.100.7(old server)
YandexRussia198.51.100.7(old server)
CleanBrowsingGlobal (US)203.0.113.10(new server)
NextDNSGlobal (US)203.0.113.10(new server)
Control DGlobal (CA)203.0.113.10(new server)
DNS4EUEuropean Union198.51.100.7(old server)
CIRA Canadian ShieldCanada203.0.113.10(new server)
HiNetTaiwan198.51.100.7(old server)
AliDNSChina198.51.100.7(old server)
Hurricane ElectricNorth America198.51.100.7(old server)

Step 5 · Get the client’s sign-off on the preview itself

On the Agency plan and up, clients pin comments right on the preview and approve the launch there, without an account. Press the button as if you were the client. About client comments

Address: https://demo.dnspeek-preview.link/

What your client sees at the bottom of the preview

What you see in the dashboard

Waiting for launch approval

Your client approves from the preview with the “Approve launch” button. You get an email right away.

  1. Sam (client)2 days agoResolved

    Can the headline use our brand font like on the current site?

    Pin 1 on the home page

  2. Sam (client)2 days agoResolved

    The third product photo is missing here.

    Pin 2 on the home page

  3. Sam (client)1 hour ago

    Looks great on my phone now. Happy to go live on Monday.

    Whole page

Now try it with your own site

Your first preview link is free and needs no account.