谷歌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实战问题。

相关推荐
伞伞悦读1 小时前
【第59期】转置不是摆好看:Python 矩阵乘法、逆矩阵与线性方程组
python
Dmz丶1 小时前
前端转 AI 100 天 Day 29:Nginx 反代 + HTTPS——让服务“能上公网“
python
清水白石0081 小时前
React Native与Flutter长期维护成本对比
开发语言·数据库
麦序子1 小时前
用 Python + python-docx 批量生成带表格样式的装修报价单 Word 文档(含合计公式)
开发语言·python·自然语言处理·word·python3.11
1-1=01 小时前
Python PyCharm
开发语言·python·pycharm
梦影_1 小时前
Langchain简单快速上手教程(九)—— 核心组件之少样本提示
人工智能·python·自然语言处理·中间件·langchain
牛肉胡辣汤1 小时前
Blender + Three.js 开发讲解:从 .blend 到能转的产品页
开发语言·javascript·blender
惊讶的猫1 小时前
Spring AOP
java·开发语言
机械设计扫地僧1 小时前
用PYTHON工具对FAG INA CS 系列薄壁轴承进行初步选型筛选
python