本站同一份源码部署在多个平台(GitHub Pages / Vercel / Netlify / Cloudflare Pages …), 但主域名只有一个。本文档说明配置方式。


一、本站采用的方案:主域名统一

hugo.yaml 里 baseURL 填的是主域名:

baseURL: "https://blog.646474.xyz/"

所有平台都用这一个值,构建命令不需要任何额外参数。这样做的效果:

内容实际行为
CSS / JS 资源用相对路径(/assets/...)→ 每个平台都能正常加载
文章图片根相对路径(/images/...)→ 同上
canonical统一指向 https://blog.646474.xyz/...
sitemap.xml / rss.xml统一指向主域名
分享卡片(OG / Twitter)统一指向主域名
SEO 效果权重集中在主域名,不存在重复内容问题
其他平台的角色镜像 / 备用入口(访问正常,但不与主站争夺收录)

这是最省心的多平台方案:配一次,处处可用。


二、各平台配置表

平台构建命令输出目录需要的环境变量
GitHub Pageshugo --gc --minifypublic无(本仓库 Actions 已配好,只需 DEPLOY_TOKEN Secret)
Vercelhugo --gc --minifypublicHUGO_VERSION = 0.167.0
Netlifyhugo --gc --minifypublicHUGO_VERSION = 0.167.0
Cloudflare Pageshugo --gc --minifypublicHUGO_VERSION = 0.167.0
其他平台hugo --gc --minifypublic视平台而定

关键:HUGO_VERSION 必须填 0.167.0,且必须是 extended 版本(PaperMod 用 SCSS,标准版会构建失败)。Cloudflare Pages 默认装的即是 extended;Vercel / Netlify 需要确认。


三、各平台详细步骤

3.1 GitHub Pages(本仓库已配置)

.github/workflows/deploy.yml:推送 main → 构建 → 推送到 666mingqing6.github.io 仓库。

只需配置一个 Secret:

名称值
DEPLOY_TOKEN对 666mingqing6.github.io 有写权限的 GitHub Token(经典 Token 勾 repo)

3.2 Vercel

  1. 导入 blog-hugo 仓库
  2. Framework Preset 选 Hugo
  3. Build Command:hugo --gc --minify
  4. Output Directory:public
  5. Environment Variables 加 HUGO_VERSION = 0.167.0

3.3 Netlify

  1. 导入仓库
  2. Build command:hugo --gc --minify
  3. Publish directory:public
  4. Environment 加 HUGO_VERSION = 0.167.0

如构建报 SCSS 错误,在仓库根目录加 netlify.toml:

[build]
  command = "hugo --gc --minify"
  publish = "public"

[build.environment]
  HUGO_VERSION = "0.167.0"

3.4 Cloudflare Pages

  1. 连接 Git 仓库
  2. Build command:hugo --gc --minify
  3. Build output directory:public
  4. Environment variables 加 HUGO_VERSION = 0.167.0

3.5 其他平台 / 自建服务器

hugo --gc --minify      # 构建
# 把 public/ 作为静态站点根目录部署

四、备选方案:让各平台用自己的域名

如果你希望每个平台的域名都被独立收录(例如想分别推广),可以改为在构建时覆盖 baseURL:

平台构建命令环境变量说明
Vercelhugo --gc --minify --baseURL "https://$VERCEL_URL/"VERCEL_URL 不含协议,需手动补 https://
Netlifyhugo --gc --minify --baseURL "$URL/"URL 含协议
Cloudflare Pageshugo --gc --minify --baseURL "$CF_PAGES_URL/"CF_PAGES_URL 含协议
GitHub Pageshugo --gc --minify --baseURL "https://666mingqing6.github.io/"无自动变量,写固定值

代价:同一内容出现在多个域名下,搜索引擎视为重复内容,权重会分散。

若采用此方案又想避免重复内容,两种补救:

  1. 只让主站被收录:其他平台的 static/robots.txt 写
    User-agent: *
    Disallow: /
    
  2. canonical 统一指向主域名:需要自定义 layouts/_partials/post_canonical.html, 把 .Permalink 换成主域名拼路径。

五、常见问题

现象原因解决
页面能打开但样式全无极少见(PaperMod 用相对路径,一般不会)检查平台是否正确部署了 public/ 全部内容
分享卡片链接指向主域名正常行为(主域名统一方案)无需处理
搜索引擎只收录主域名正常行为无需处理;想改见第四节
某平台构建报 SCSS 错误装的是标准版 Hugo设 HUGO_VERSION=0.167.0 并确认平台提供 extended
构建成功但页面是旧的平台 CDN 缓存平台后台清缓存
想临时用其他域名本地预览命令行覆盖即可hugo server --baseURL http://localhost:1313/
不确定产物里的地址对不对构建后检查grep -o '<link rel=canonical[^>]*>' public/posts/*/index.html | head

六、一句话总结

baseURL 固定填主域名 https://blog.646474.xyz/,所有平台共用; 资源走相对路径各平台都能显示,SEO 权重全部集中到主域名。 其他平台就是主站的镜像与备用入口。