本站同一份源码部署在多个平台(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 Pages | hugo --gc --minify | public | 无(本仓库 Actions 已配好,只需 DEPLOY_TOKEN Secret) |
| Vercel | hugo --gc --minify | public | HUGO_VERSION = 0.167.0 |
| Netlify | hugo --gc --minify | public | HUGO_VERSION = 0.167.0 |
| Cloudflare Pages | hugo --gc --minify | public | HUGO_VERSION = 0.167.0 |
| 其他平台 | hugo --gc --minify | public | 视平台而定 |
关键: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
- 导入
blog-hugo仓库 - Framework Preset 选 Hugo
- Build Command:
hugo --gc --minify - Output Directory:
public - Environment Variables 加
HUGO_VERSION=0.167.0
3.3 Netlify
- 导入仓库
- Build command:
hugo --gc --minify - Publish directory:
public - 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
- 连接 Git 仓库
- Build command:
hugo --gc --minify - Build output directory:
public - Environment variables 加
HUGO_VERSION=0.167.0
3.5 其他平台 / 自建服务器
hugo --gc --minify # 构建
# 把 public/ 作为静态站点根目录部署
四、备选方案:让各平台用自己的域名
如果你希望每个平台的域名都被独立收录(例如想分别推广),可以改为在构建时覆盖 baseURL:
| 平台 | 构建命令 | 环境变量说明 |
|---|---|---|
| Vercel | hugo --gc --minify --baseURL "https://$VERCEL_URL/" | VERCEL_URL 不含协议,需手动补 https:// |
| Netlify | hugo --gc --minify --baseURL "$URL/" | URL 含协议 |
| Cloudflare Pages | hugo --gc --minify --baseURL "$CF_PAGES_URL/" | CF_PAGES_URL 含协议 |
| GitHub Pages | hugo --gc --minify --baseURL "https://666mingqing6.github.io/" | 无自动变量,写固定值 |
代价:同一内容出现在多个域名下,搜索引擎视为重复内容,权重会分散。
若采用此方案又想避免重复内容,两种补救:
- 只让主站被收录:其他平台的
static/robots.txt写User-agent: * Disallow: / - 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 权重全部集中到主域名。 其他平台就是主站的镜像与备用入口。