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
- 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)
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
- Info
JavaScript error
Uncaught TypeError: Cannot read properties of null (reading "addEventListener") in theme.js.
On 3 pages ·How to fix: Usually harmless, but check that the newsletter form still submits.
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
WordPressPHP 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
| URL | Live site | New server | Differences |
|---|---|---|---|
| / | 200 House Coffee Roasters 90 ms · 47 KB | 200 House Coffee Roasters 240 ms · 50 KB |
|
| 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 |
|
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
- 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.
- 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
| Type | Host | Value | TTL |
|---|---|---|---|
| A | shop.example | 198.51.100.7 | 3600 s (1 h) |
| CNAME | www.shop.example | shop.example | — |
Records to recreate before changing nameservers
| Type | Host | Value | Priority |
|---|---|---|---|
| MX | shop.example | aspmx.l.google.com | 1 |
| TXT | shop.example | v=spf1 include:_spf.google.com include:mailgun.org ~all | |
| TXT | _dmarc.shop.example | v=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
| URL | Status | Redirects | Findings |
|---|---|---|---|
| https://shop.example/ | 200 | 0 | 2 |
| https://shop.example/shop→ https://shop.example/store | 200 | 3 | 1 |
| https://shop.example/product/house-blend | 200 | 0 | 1 |
| https://shop.example/product/dark-roast | 200 | 0 | 1 |
| https://shop.example/cart | 200 | 0 | 0 |
| https://shop.example/checkout | 500 | 0 | 1 |
| https://shop.example/about | 200 | 0 | 0 |
| https://shop.example/contact | 200 | 0 | 1 |

