WordPress 标签清理实践(四):基于Go脚本实现WordPress中英文标签合并与URL自动跳转
在进行WordPress多语言标签(Tag)合并时,旧标签的URL会面临404失效的问题,这不仅影响用户体验,更会对SEO造成负面影响。本文将分享如何通过编写Go脚本,结合日志与字典自动化生成Nginx重定向规则,并解决中文URL匹配、尾部斜杠兼容等常见坑点。
项目开源地址: https://github.com/shuijingwan/tag-merge
一、 数据准备与合并日志分析
一切重定向的源头来自于标签的合并操作。我们的合并脚本会将执行的操作记录在日志中,明确指出哪些源标签(ID)被合并到了哪个目标标签(ID)。
![图1:展示了 merge_log.txt 中的操作记录,如:准备处理:[中]权限(ID:27)->[中]permission(ID:1519)](https://www.shuijingwanwq.com/wp-content/uploads/2026/06/1-42.png)
同时,我们需要一个全量的标签字典文件,记录标签ID与URL Slug的映射关系,这是生成跳转链接的关键依据。

二、 Go脚本开发与踩坑记录
为了将上述日志和字典转化为Nginx可用的配置,我们编写了 cmd/nginx-redirect/main.go 脚本。在开发过程中,主要解决了以下三个核心问题:
- URL编码转换:Nginx的
$uri变量获取到的是解码后的路径。如果直接在正则中匹配%e6%9d%83%e9%99%90将会失败。因此,在Go读取CSV时,需使用net/url的PathUnescape方法,将Slug转为中文字符(如权限)再拼接规则。 - 兼容尾部斜杠:用户访问时可能带或不带斜杠(如
/tag/redis缓存和/tag/redis缓存/)。正则匹配需从/$调整为/?$,确保全部拦截并统一重定向至带斜杠的规范URL。 - 语法上下文控制:确保生成的
map块与server块层级分明。

三、 生成Nginx Map匹配规则
运行Go脚本后,会输出一份包含 map 指令和跳转逻辑的 nginx_redirect.conf 文件。该文件利用Nginx高效的 map 指令,将匹配到的旧URI映射到变量 $new_tag_uri 中。

四、 Nginx配置集成
拿到生成的配置文件后,需要将其正确集成到网站的Nginx主配置中。这里有一个极其重要的语法规则:map 指令属于 http 上下文,必须放在 server 块的外部,而具体的 if 判断与 return 跳转逻辑则需放在 server 块内部。


五、 效果验证
配置重载后,让我们来验证效果。当访问旧版的中文标签URL(如 https://www.shuijingwanwq.com/tag/%E6%94%AF%E4%BB%98%E5%AE%9D/ 即“支付宝”),浏览器Network面板清晰地显示:服务器成功响应了 301 状态码,并瞬间跳转到了全新的英文规范路径 https://www.shuijingwanwq.com/tag/alipay/,SEO权重得以完美传递。
