在折腾博客的过程中,我们经常会将同一个博客部署到多个平台(比如主站用 EdgeOne,备用站用 Vercel、Cloudflare 或 Netlify)。这样做看着就(具备极强的容灾能力)很高级的样子,但如果配置不当,可能会给 SEO 带来严重的挑战。

由于搜索引擎(谷歌、必应等)非常讨厌“重复内容”,如果你在多个域名下部署了完全一样的博客:

  1. 权重分裂:搜索引擎会认为这是几个不同的站点,导致你的搜索排名被分散。
  2. 收录混乱:搜索引擎可能会收录你的备用站点(如 xxx.vercel.app),而不是你的主域名。

本文将分享如何通过合理配置 baseURL、环境变量,来实现“多端部署,权重归一”的完美 SEO 方案。本文以 极简(hugo-jijian) 主题为例,讲解如何在多平台部署中优化 SEO 表现。不保证其他主题的配置方法类似,可自行参考。

步骤一:固定 baseURL

1. 修改 hugo.yaml

baseURL 固定为你的主域名

1
baseURL: https://ihcll.cn/

2. 为什么不再推荐分平台修改 HUGO_BASEURL环境变量?

过去有些教程建议在每个平台上设置对应的 HUGO_BASEURL 环境变量,但这会导致生成的 canonical(权威链接)指向备用域名。

固定 baseURL 的好处:无论用户从哪个镜像站访问,HTML 源码里的 canonical 始终指向 ihcll.cn。这告诉搜索引擎:“这些镜像站只是我的化身,请把权重都给主站。”

步骤二:环境变量的妙用

虽然 baseURL 建议全局固定,但某些第三方验证码爬虫规则则建议按需配置。

1. 必应 (Bing) 站点验证

通常你只需要在主站验证。如果你在 hugo.yaml 里硬编码了 SiteVerificationTag,它会出现在所有镜像站。

推荐做法

  • hugo.yaml 中将该项留空或者干脆不写。
  • 然后仅在 你主域名网站 的部署面板中,添加环境变量:HUGO_PARAMS_ANALYTICS_BING_SITEVERIFICATIONTAG = "你的验证码",这样就达到了备用站点没有这个验证码,但是你的主站有验证码。

2. 禁止备用站点被收录

我们只需要主域名被收录,不希望 Vercel、Cloudflare 等的域名被搜到?

推荐做法

  • 在备用平台(Vercel/Cloudflare)添加环境变量:HUGO_PARAMS_ROBOTSNOINDEX = true,主站不要添加这个,因为主站由hugo.yaml中enableRobotsTXT: true的配置决定了。

该操作需要确保你的主题 head.html 支持该参数:

1
2
3
4
5
{{- if and (not (site.Param "robotsNoIndex")) (or hugo.IsProduction (eq site.Params.env "production")) }}
  <meta name="robots" content="index, follow">
{{- else }}
  <meta name="robots" content="noindex, nofollow">
{{- end }}

上述操作,在极简(hugo-jijian)主题中已经完成了。

步骤三:主题链接相对化

为了防止在 Vercel 预览站上点击菜单时突然跳回主站,我们需要将主题中的内部链接改为相对路径

修改建议:

  • 将导航菜单中的 absLangURL 改为 relLangURL
  • 将文章链接从 .Permalink 改为 .RelPermalink
  • 将 Favicon 等资源链接从 absURL 改为 relURL

这样做的好处

  • 用户体验:不管在哪个域名下访问,点击链接都会留在当前域名。
  • SEO 依旧完美:因为 head.html 里的 canonical 依然是绝对路径指向主站。

极简(hugo-jijian)主题已经完成了链接相对化的修改。

总结

配置项单站点建议多站点 (SEO 优化型)
baseURL设置为主域名固定为主域名,不随平台变动
enableRobotsTXTtrue主站允许,备用站环境变量禁止
Bing 验证直接写在 hugo.yaml仅在主站设置环境变量
主题链接绝对或相对均可强烈建议使用相对路径

通过以上配置,你的博客将具备极强的容灾能力,同时在搜索排名上保持绝对的权威性。