谷歌SEO 网站迁移 301 映射脚本:旧站 URL 自动匹配新站结构

谷歌SEO 网站迁移 301 映射脚本:旧站 URL 自动匹配新站结构

网站迁移(换域名/换 CMS/改版)是 SEO 最容易翻车的操作:旧 URL 没有 301,权重全丢、收录归零。本篇给一个可运行的映射脚本,把旧站 URL 清单自动匹配到新站 URL,输出 301 映射表。迁移官方规范见搜索中心站点迁移文档。

一、迁移翻车的原因

环节 常见错误 后果
映射 只做了域名级 301 权重被首页吸走
清单 漏掉老文章 收录归零
顺序 先切 DNS 后配 301 空档期 404
验证 没查重定向链 301 链过长丢权重

核心原则:逐条 URL 映射,不是整站跳首页。脚本帮你把旧 URL 与结构类似的新 URL 自动配对,剩下少量手工确认。

二、数据准备

  1. 旧站全量 URL:导出旧 sitemap 或爬取,存 old_urls.txt。
  2. 新站全量 URL:导出新 sitemap,存 new_urls.txt。
  3. 两个文件每行一个 URL,UTF-8。

三、301 映射脚本

python 复制代码
import re
from urllib.parse import urlparse, unquote

def normalize(u):
    p = urlparse(unquote(u))
    segs = [s for s in p.path.split("/") if s and s != "index"]
    return p.netloc, "/" + "/".join(segs).lower()

old = [u.strip() for u in open("old_urls.txt", encoding="utf-8") if u.strip()]
new = [u.strip() for u in open("new_urls.txt", encoding="utf-8") if u.strip()]

new_norm = {}
for u in new:
    host, path = normalize(u)
    new_norm.setdefault(path, []).append(u)

def similarity(a, b):
    sa, sb = set(a.split("/")), set(b.split("/"))
    return len(sa & sb) / max(1, len(sa | sb))

print("=== 301 映射建议 ===")
mapped, manual = [], []
for u in old:
    host, path = normalize(u)
    if path in new_norm:
        mapped.append((u, new_norm[path][0], 1.0))
        continue
    best, best_sim = None, 0
    for np_ in new_norm:
        s = similarity(path, np_)
        if s > best_sim:
            best, best_sim = np_, s
    if best and best_sim >= 0.5:
        mapped.append((u, new_norm[best][0], round(best_sim, 2)))
    else:
        manual.append(u)

with open("301_mapping.csv", "w", encoding="utf-8-sig", newline="") as f:
    import csv
    w = csv.writer(f)
    w.writerow(["old_url", "new_url", "similarity"])
    for a, b, s in mapped:
        w.writerow([a, b, s])

print(f"自动映射 {len(mapped)} 条(已写入 301_mapping.csv)")
print(f"需人工确认 {len(manual)} 条:")
for u in manual[:15]:
    print(f"  {u[:90]}")

四、输出解读与动作

输出 判定 动作
similarity=1.0 完全匹配 直接采用
similarity 0.6-0.9 结构相近 人工抽查后采用
similarity 0.5-0.6 勉强匹配 人工核对意图
未匹配清单 无对应新页 决定删除/重建/跳相关页

硬决策规则:相似度 <0.5 的旧 URL 禁止自动映射,必须人工判断;每条映射必须是 301(永久),禁止用 302 迁站。

五、常见坑

坑 后果 正解
只映射主域名 权重全到首页 逐条 URL 映射
301 链 >3 跳 权重流失 直接映射最终 URL
新旧混跑期太长 数据混乱 一次切换,别长期双跑
忘了更新 sitemap 新 URL 不收录 迁移后提交新 sitemap
没保留旧域名证书 旧域名 404 旧域名续期并配 301

六、FAQ

Q1:相似度多少才算可自动映射?

0.9+ 放心用;0.6-0.9 抽查;<0.6 全部人工。

Q2:迁移后多久恢复排名?

通常 2-6 周恢复,取决于站点规模与重定向正确度。用 GSC 的"页面迁移"报告跟踪(参考迁移跟踪文档)。

Q3:不相关的旧页怎么办?

原则是删除前先想:能否 301 到新站最相关的页面;实在没有就让它 404,别硬映射到首页。

七、行动清单

  1. 导出旧/新全量 URL,跑 301 映射脚本。
  2. 人工确认低相似度条目,生成最终映射表。
  3. 服务器配好逐条 301(.htaccess / nginx rewrite),避免重定向链。
  4. 切换后提交新 sitemap,旧域名保持 301 至少 6 个月。
  5. 用 GSC 监控迁移期抓取与索引变化,及时修异常。

完整版迁移映射脚本(含栏目智能归类、404 兜底策略、重定向链检测模块)我整理成了 PDF,评论区扣「迁移」或私信我,免费发你。也欢迎一起交流谷歌SEO实战问题。

相关推荐
huaqianzkh8 小时前
WinForm C#:循环修改控件UI闪烁卡顿?SuspendLayout / ResumeLayout 与 BeginUpdate 优化
开发语言·ui·c#
沐晓时光18 小时前
C语言入门,内存函数知识讲解
c语言·开发语言
用户956256254291 天前
跟做:Firecrawl 单页转 Markdown 再丢进沙箱总结
python·api
威哥爱编程1 天前
模拟面试智能体开发实战 02:回答等半分钟,谁还愿意练?把服务端和流式输出搭起来
python·agent·harmonyos
威哥爱编程1 天前
模拟面试智能体开发实战 01:面试挂了都不知道挂在哪?用 Python 给自己造一个随叫随到的 AI 面试官
python·agent·harmonyos
2601_967980111 天前
Python行情API量化 02:顺序拉 20 要 2 秒?并发批量把时间压到 0.5 秒
python·api·限流·并发·量化
伞伞悦读1 天前
【第81期】特征缩放怎么选:标准化、MinMax 与 Robust 的原理、泄漏对照和完整实验
人工智能·python·深度学习·机器学习
新*1 天前
从一段 WebSocket 代码聊开:bytes 不是 zlib、binaryType 决定一切,15MB 大消息的零拷贝优化
javascript·python·websocket·性能优化·blob·zlib·arraybuffer
David猪大卫1 天前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
卷无止境1 天前
mathmodel-figure-templates 以及两个上手案例
后端·python