
文章目录
先把旧站 URL 全量导出并做成 301 映射表,再用脚本或插件搬内容、图片,上线后用 curl 批量验证重定向状态码,观察 4 到 8 周收录恢复。判断做对的标准是:旧 URL 全部返回 301 到对应新页、无 404、Search Console 覆盖率不跌。
准备:梳理源站与运行环境
迁移到 WordPress 之前,先把源 CMS 的数据结构摸清。2026 年主流旧系统 Drupal 7/9、Joomla 4/5、Typecho、EmpireCMS 都能导出结构化数据。登录源库,导出文章、分类、标签、作者、自定义字段与附件清单。用如下 MySQL 命令导出 Drupal 7 节点标题与别名:
SELECT n.nid, n.title, ua.alias
FROM node n
LEFT JOIN url_alias ua ON ua.source = CONCAT('node/', n.nid)
WHERE n.type = 'article'
INTO OUTFILE '/tmp/drupal_urls.csv'
FIELDS TERMINATED BY ',' ENCLOSED BY '"';目标站建议运行 WordPress 6.8 或更高版本,PHP 8.2 或 8.3。若目标站还需调整域名,可参考我们关于 WordPress 换域名:搜索替换怎么做才不会把数据搞坏 的说明,避免序列化数据损坏。
环境检查清单
- 目标服务器安装 Redis Object Cache 并启用,减少迁移期数据库压力。
- 确认 wp-content/uploads 目录可写,磁盘空间大于源站附件总大小 1.5 倍。
- 安装 WP-CLI 2.11 以上版本,后续批量操作依赖命令行。
实施步骤:从映射到上线的完整流程
- 导出源站全量 URL 与内容,生成 URL 映射台账。
- 在 WordPress 建立对应文章类型、分类法与用户。
- 用脚本或 FG 类工具导入正文、特色图片与 meta。
- 配置服务器级或插件级 301 重定向表。
- 执行重定向验证与死链扫描。
- 提交 sitemap 并进入收录恢复观察期。
URL 结构映射与 301 表
这是保权的核心。搜索引擎只认旧 URL 是否 301 到语义对等的新页。把源站 URL 模式列出来,例如 Drupal 的 /node/123、/blog/my-post,Joomla 的 /index.php?option=com_content&view=article&id=45,统一映射到 WordPress 的 /%postname%/ 或 /blog/%postname%/。
在 WordPress 后台「设置 – 固定链接」选「文章名」,保存后根目录下会生成 .htaccess(Apache)或需手动写 Nginx 规则。映射表建议存为 CSV,字段包含 old_url,new_url,type,status。
# Nginx 中基于映射文件的 301 示例
map $request_uri $new_uri {
include /etc/nginx/conf.d/redirects.map;
}
server {
listen 80;
server_name example.com;
if ($new_uri) {
return 301 https://example.com$new_uri;
}
# 其余请求交给 WordPress
location / {
try_files $uri $uri/ /index.php?$args;
}
}其中 /etc/nginx/conf.d/redirects.map 每行格式为:
获取报价
邮箱 + 需求 + 预算区间,24 小时内回复报价。
/old-page-1 /new-page-1;
/old-page-2 /new-page-2;
/node/123 /blog/hello-world;Apache 用户可直接在 .htaccess 写 Redirect 301 /old-page-1 /new-page-1。若映射超过 2000 条,用 Nginx map 或插件 Redirection 的 CSV 导入,不要全塞进 .htaccess 拖慢解析。
常见踩坑:带参数的 URL 如 ?id=45 在 Nginx map 里默认不匹配 query string,需用 $request_uri 完整串或改在 PHP 层处理。失败回退:保留旧服务器反向代理到新站 48 小时,确认无误再切 DNS。
内容与图片搬迁
正文搬迁用 WordPress 官方导入器或自定义脚本。若源站提供 RSS/XML,可用 WordPress Importer 插件;但自定义字段与多图需写脚本。
以 Drupal 到 WordPress 为例,用 WP-CLI 创建文章并回填图片:
foreach ($rows as $r) {
$post_id = wp_insert_post([
'post_title' => $r['title'],
'post_content' => $r['body'],
'post_status' => 'publish',
'post_date' => $r['created'],
'post_name' => sanitize_title($r['title']),
]);
update_post_meta($post_id, '_drupal_nid', $r['nid']);
// 下载远程图到媒体库
$attach_id = media_sideload_image($r['image_url'], $post_id, null, 'id');
set_post_thumbnail($post_id, $attach_id);
}图片不要只改 HTML 里的 src,要用 media_sideload_image() 或 wp_handle_sideload() 入库,生成 -1024x768 等尺寸。若图片量超万张,先用 rsync 把文件同步到 wp-content/uploads/,再用 SQL 批量修正 guid 与 postmeta。
踩坑:源站正文含绝对路径 http://oldsite.com/a.jpg,导入后应批量替换为相对 uploads 路径;可用 WP-CLI:
wp search-replace 'http://oldsite.com/wp-content/uploads' 'https://newsite.com/wp-content/uploads' --precise --recurse-objects回退方法:导入前用 wp db export backup.sql 备份,出错就 wp db import backup.sql 还原。
重定向验证
上线后立刻验证。写 Bash 脚本读取映射表逐条 curl:
while IFS=, read -r old new; do
code=$(curl -o /dev/null -s -w '%{http_code}' -I "https://newsite.com$old")
loc=$(curl -o /dev/null -s -w '%{redirect_url}' -I "https://newsite.com$old")
echo "$old -> $code -> $loc"
done < redirects.csv期望每条输出 301 且 loc 等于目标新 URL。同时用 Screaming Frog 或 wget --spider 扫全站,确保无 404。
| 检查项 | 合格标准 | 工具 |
|---|---|---|
| 旧 URL 状态码 | 301 而非 302 | curl / httpie |
| 跳转目标 | 与映射表一致 | 脚本比对 |
| 新站内链 | 无指向旧域名的链接 | search-replace |
| sitemap | 仅含新 URL | Yoast / Rank Math |
若发现 302,多半是插件临时重定向,改成 301;若出现 404,补进映射表并重新加载 Nginx:nginx -s reload。
收录恢复的观察期

301 生效后,搜索引擎需要时间转移权重。2026 年 Google 通常 4 到 8 周完成大部分页面替换,百度稍慢。观察期内每天记录 Search Console 的「网页」覆盖率与点击率。
操作:在新站生成 XML sitemap(Yoast 或 Rank Math 自动生成 /sitemap_index.xml),到 Google Search Console 与百度站长平台提交;同时用「网址检查」工具手动请求收录核心页。
第 2 周若旧 URL 仍出现在搜索结果且跳转正常,属预期;第 6 周核心词排名回落超过 30%,检查是否有大量旧页变成软 404(返回 200 但内容为空)。此时应回到 Nginx 映射表核对遗漏条目。
踩坑:观察期内改了固定链接结构,会导致二次跳转链(A→B→C),权重传递打折。回退:用 WordPress 换服务器迁移:不停机搬家步骤 里的 DNS 灰度方案,保留旧机器随时切回。
常见问题
迁移后旧站图片全部裂图怎么办?
用 wp search-replace 把正文中的旧域名批量替换为新域名,并确认 wp-content/uploads 文件已同步;再清 Redis 与 CDN 缓存。
301 做完了但排名还是跌了?
先看观察期是否够 4 周,再检查是否有页面被误判软 404、或 robots.txt 屏蔽了新目录;必要时用 Search Console 的「更改地址」工具。
映射表有几万条会不会拖慢站点?
会。Nginx map 文件在万级以内可接受,超量应改由 PHP 层查数据库或上 CDN 边缘重定向,别写进 .htaccess。
可执行动作清单
- 导出源站全量 URL 与内容,生成
redirects.csv映射表。 - 用 WP-CLI 或脚本导入文章、图片,跑
search-replace修正绝对路径。 - 在 Nginx 或 Redirection 插件中配置 301,执行 curl 批量验证。
- 提交新 sitemap,进入 4 到 8 周收录观察期并记录排名。
- 备份
backup.sql与旧服务器,异常时立即回退。
需要专业团队接手迁移?访问 WordPress 网站迁移 服务页,我们提供全流程保权迁移。
