
迁移完成后首页能打开,但文章页 404、图片显示为裂图,是 WordPress 搬家后最常见的两类问题。它们大多不是数据真的丢了,而是新环境的配置、数据库中残留的旧地址,或媒体文件同步不完整造成的。下面按「先页面、后图片」的顺序排查。动手之前,请先保留新旧两端的完整备份(数据库与 wp-content 目录)。
一、页面 404:先判断是哪一种
- 首页正常,所有文章页都 404:几乎都是伪静态(重写规则)没有生效;
- 只有部分页面 404:可能是这些内容没有迁移过来,或 slug、分类结构发生了变化;
- 访问时跳回旧域名,或出现重定向循环:站点地址设置或 HTTPS 识别有问题。
第 1 步:检查伪静态规则
Apache 环境确认站点根目录存在 .htaccess 且包含 WordPress 默认规则,同时虚拟主机允许 AllowOverride。Nginx 环境需要在站点配置中加入:
location / {
try_files $uri $uri/ /index.php?$args;
}
宝塔等面板可以在站点设置的「伪静态」中直接选择 WordPress 规则。修改后重载 Nginx,再到后台「设置 → 固定链接」点一次保存,刷新重写规则;也可以用 WP-CLI:
wp rewrite flush --hard
wp rewrite list --format=count
第 2 步:核对站点地址
wp option get siteurl
wp option get home
两者都应是新地址,包括 http 或 https、是否带 www 都要和实际访问一致。使用 CDN 或反向代理时,还要确认 WordPress 能正确识别 HTTPS,否则会出现「重定向次数过多」。
第 3 步:确认内容是否完整
对比新旧站点的已发布内容数量:
wp post list --post_type=post,page --post_status=publish --format=count
数量一致但部分 URL 仍然 404 时,检查固定链接结构是否与旧站一致(例如旧站是 /%postname%/,新站变成了 /archives/123)。结构确实需要变化时,要为旧 URL 配置 301 重定向,避免已收录的页面变成 404。
二、图片丢失:先看浏览器请求的是哪个地址
在裂图上右键选择「在新标签页中打开图片」,或在开发者工具的 Network 面板中筛选 Img,查看请求地址与状态码:
- 地址仍是旧域名或旧 IP:数据库中的 URL 没有替换,见第 4 步;
- 地址是新域名但返回 404:文件没有同步过来或路径不对,见第 5 步;
- 地址正确但返回 403:权限或防盗链问题,见第 6 步;
- 控制台提示混合内容被拦截:HTTPS 页面引用了 http 图片,同样通过 URL 替换解决。
第 4 步:安全地替换数据库中的旧地址
WordPress 会把序列化数据(小工具、主题设置、页面构建器数据等)存进数据库。直接用 SQL 的 REPLACE 批量修改会破坏序列化长度,导致设置丢失。推荐使用 WP-CLI 的 search-replace,先预演再执行:
wp search-replace 'https://old.example.com' 'https://www.example.com' --all-tables --precise --dry-run
wp search-replace 'https://old.example.com' 'https://www.example.com' --all-tables --precise
注意同时处理 http 与 https、带与不带 www 的写法,以及 JSON 中被转义的地址(如 https:\/\/old.example.com,页面构建器的数据里很常见)。替换完成后清理对象缓存:
wp cache flush
并同时清理页面缓存插件和 CDN 的缓存。
第 5 步:检查媒体文件是否完整
- 对比新旧服务器
wp-content/uploads的文件数量与总大小:find wp-content/uploads -type f | wc -l和du -sh wp-content/uploads; - 部分迁移插件会因为体积限制跳过媒体库,需要用 rsync 或 SFTP 单独补传,例如
rsync -avz 旧服务器:/path/wp-content/uploads/ wp-content/uploads/; - 原图存在但缩略图缺失(列表页、卡片图裂开)时,可以补生成缩略图:
wp media regenerate --only-missing --yes; - 检查
upload_path、upload_url_path选项是否残留了旧服务器的绝对路径:wp option get upload_path。
第 6 步:权限、防盗链与 CDN
- 上传目录的属主应为 Web 服务运行用户(宝塔环境通常为 www),目录 755、文件 644,例如
chown -R www:www wp-content/uploads; - 检查面板或 CDN 的防盗链设置,确认新域名已加入白名单;
- 原来使用对象存储(OSS、COS、S3 等)托管媒体的,确认对应插件已配置新的存储桶和访问域名,且存储桶允许公开读取;
- CDN 可能缓存了迁移期间的 404 响应,修复后要清理 CDN 缓存再验证。
三、迁移后的收尾检查
- 在 Search Console 或站长平台查看抓取错误,逐条处理新增的 404;
- 重新生成并提交 XML 站点地图;
- 抽查不同类型的页面:文章、页面、分类、标签、商品和附件页;
- 检查主题设置、小工具和页面构建器中的背景图与图标;
- 旧服务器至少保留一段时间,以便补传遗漏的文件。
延伸阅读:WordPress 迁移与托管专题、站点迁移实践清单、常见报错速查。search-replace 的全部参数说明见 WP-CLI 官方文档。
常见问题
可以直接在 phpMyAdmin 里批量替换域名吗?
不建议。序列化数据的长度会对不上,导致主题设置、小工具等配置丢失。使用 WP-CLI search-replace 或支持序列化的迁移工具更安全。
为什么后台媒体库能看到图片,前台却不显示?
媒体库读取的是数据库记录,而前台页面里写死的可能是旧地址,或者是缓存的旧 HTML。替换 URL 并清理缓存后再检查。
迁移会影响搜索排名吗?
无法保证排名完全不变。能做的是保持 URL 不变或配置正确的 301、及时修复 404 并提交新的站点地图,尽量减少不必要的波动。
迁移问题较多,或同时涉及换域名、改版时,可以 申请免费诊断,我们帮你列出需要处理的 URL 与配置项。
