After a WordPress migration: "does it load fast?" is the question, but "as fast as before?" is what matters for SEO.
Run Lighthouse on top pages before cutover. Save the median LCP, TTFB, page weight. Re-run after. Any 10%+ regression needs investigation before declaring cutover complete.
12 years ago today, ServMask shipped its first line of code.
5M+ active installs. 60M+ sites moved. Every migration, every backup, every restore still runs because a small team sweats the details no one else sees.
Happy 12th birthday to All-in-One WP Migration. ๐
Importing a WordPress database from MySQL 5.7 to MySQL 8.0 and getting "Unknown collation: utf8mb4_0900_ai_ci"?
MySQL 8.0 uses utf8mb4_0900_ai_ci by default. MySQL 5.7 does not have it. Reverse migrations break.
Convert collations during export with mysqldump --skip-set-charset, or normalize before import.
Locked out of WordPress after migration? Email reset not working because SMTP is not configured yet?
WP-CLI bypasses login:
wp user update 1 --user_pass='NewSecure123'
Direct password change, no email needed. Requires shell access to the host.
WP-CLI is the difference between a 20-minute migration cleanup and a 4-hour one.
Search-replace, cache flush, plugin activation, user list, option update, thumbnail regenerate. All scriptable, all faster than admin UI.
Install on the new host before cutover. ssh https://t.co/hm2eGJrzNU.
After WordPress migration, all media URLs return 404 or images load from the wrong domain.
Check wp-config.php for UPLOADS constant. Check wp_options upload_path. Match to actual filesystem on the new host.
S3-offloaded media needs the plugin active and credentials valid on the destination.
After a WordPress migration, you fixed the bug in production. The fix does not appear for some users.
Three cache layers can serve stale data: browser cache, server cache (Redis, page cache plugin), CDN cache.
Purge all three after every cutover. Order matters: CDN, server, then ask users to hard-refresh.
After migration: every WordPress visitor logs as the same IP. Security plugins block admins. Rate limiters lock out single users.
Behind a reverse proxy or CDN, REMOTE_ADDR is the proxy's IP. The visitor's IP is in X-Forwarded-For or CF-Connecting-IP.
Configure trust at the web server, not the app.
After WordPress migration, your custom post type content is in the database but does not appear in admin or on the frontend.
CPTs are registered in code (functions.php or a plugin), not the database. The code did not migrate or the plugin is inactive on the new site.
Activate the plugin or restore the code.
WordPress WP-Cron is not a real cron. It runs on visitor traffic, not on schedule.
Low-traffic site? Scheduled tasks never run. Backups, security scans, email queues silently fail.
Disable WP-Cron in wp-config.php. Add a real cron job to hit wp-cron.php every 5 minutes.
After WordPress migration: page layouts look wrong, images load slowly, some images broken entirely.
WordPress creates resized copies of every upload (thumbnail, medium, large, theme-specific). Migration sometimes skips them.
Run: wp media regenerate --yes
Especially if you also changed themes.
"Maximum number of allowed input variables exceeded" during a WordPress import or after restoring a site with many widgets, menu items, or custom fields.
max_input_vars defaults to 1000 in PHP. A complex site easily exceeds this. Bump to 5000 or 10000 in php.ini or .user.ini.
WordPress import dies at 60% with no error?
Default PHP memory_limit (128M) is not enough for migrations over 500MB. Bump to 512M for medium, 1024M for sites over 2GB. Set in .user.ini, wp-config.php, or your host's control panel.
Restore defaults after cutover.
Migrated WordPress and forgot to regenerate authentication salts in wp-config.php?
Anyone holding a session cookie from the source environment can still authenticate to the new site. The old SSH/FTP user, the developer who tested staging, the agency that built it.
Generate fresh salts after every cutover.
After Cloudflare migration: "too many redirects" or 525 errors.
Cloudflare SSL modes interact with the origin certificate:
- Flexible: no origin cert (redirect loops with HTTPS plugins)
- Full: any cert
- Full Strict: valid cert (recommended)
Mismatch breaks the site. Match the mode to the origin state.
Restoring a large WordPress backup and the import dies mid-stream with a 403 or "request blocked."
Not a plugin bug. Cloudflare WAF, ModSecurity, or your host's security rules flagged the upload as suspicious payload. Whitelist your IP or temporarily disable WAF during cutover.
Search and replace ran clean. Site loads. But Elementor pages show the old domain in image sources.
Page builders store URLs as JSON inside postmeta. Escaped slashes (\/) hide them from standard replacers. Run the builder's native URL update tool after migration.
The most expensive moment of any WordPress disaster: discovering the daily backup you have been relying on for months does not actually restore.
A backup you have never restored is not a backup.
Run a restore drill quarterly. Time it. Document the gaps.
The most expensive line of text in a WordPress migration: Disallow: /
Staging sites are often configured to block all search engines. Copy that robots.txt to production. Or copy the WordPress "Discourage search engines" toggle. Watch organic traffic disappear in a week.
Check both after cutover.
Premium WordPress plugin licenses are usually bound to the site URL.
Migration to a new domain invalidates the license. Plugin loads, but updates stop and premium features disable.
Reactivate every premium plugin after cutover. Elementor Pro, ACF Pro, Yoast Premium, WP Rocket, Gravity Forms.