GitHub Pages 自定义域名防接管清单:先验证域名、DNS 记录和 Enforce HTTPS 怎么排

GitHub Pages 自定义域名配置顺序错了可能造成域名接管,先验证域名再动 DNS 是硬规则。

GitHub Pages 自定义域名配置顺序错了可能造成域名接管,先验证域名再动 DNS 是硬规则。

  1. 01先读摘要,判断是否与你的场景相关。
  2. 02再看来源,保留继续查证的路径。
  3. 03最后看步骤、风险和可复用动作。

GitHub Pages 自定义域名看起来只是加一条 DNS 记录,但顺序错了可能造成域名接管。GitHub 官方明确建议先验证域名,再把自定义域名添加到仓库,最后才配置 DNS;如果站点被禁用或删除而 DNS 仍指向 GitHub,别人就可能用你的子域名发布自己的内容。下面这套流程按验证、仓库设置、DNS、HTTPS 和下线的顺序排。

适用场景

  • 你要把个人、组织或项目静态站从 github.io 切换到自有域名。
  • 你管理多个 Pages 站点,需要防止离职或账号变更后域名被接管。
  • 你想同时支持 example.com 和 www.example.com,并让 HTTPS 自动生效。
  • 你准备停用某个 Pages 站点,需要安全移除 DNS 记录。

不适用场景

  • 你只是临时测试 github.io 子域名,不需要自定义域名。
  • 你使用企业或第三方托管服务,不适用 GitHub Pages 的 DNS 要求。
  • 你无法控制 DNS 注册商或 Cloudflare 等托管商,验证和下线都做不了。
  • 你的站点依赖数据库或服务端脚本,不适合静态 Pages。

准备材料

  • GitHub 账号,以及目标 Pages 仓库的 Admin 权限。
  • 域名注册商或 DNS 托管商的登录权限。
  • 能运行 dig 或 Resolve-DnsName 的终端。
  • 记录旧 DNS、旧站点和重定向目标的清单。
  • 一个测试浏览器,用于验证最终页面和证书。

步骤一:先验证域名,再动 DNS

官方验证流程要求你在账户设置里添加自定义域名,系统会给出形如 `_github-pages-challenge-USERNAME.example.com` 的 TXT 记录。验证成功后,只有你的个人账号或组织才能把该域名或其直接子域名用于 Pages。这样即使仓库被删除或站点被禁用,别人也不能直接接管。

  1. 进入 GitHub 账号 Settings 的 Verified domains。
  2. 添加你的域名,并复制系统生成的 TXT 记录。
  3. 到 DNS 托管商添加该 TXT 记录。
  4. 用 dig 确认记录可见,再点击 Verify。
  5. 保留 TXT 记录,不要验证完就删除。

步骤二:在仓库设置里添加自定义域名

官方文档提醒,必须先把自定义域名添加到 GitHub Pages 仓库,再配置 DNS。先配置 DNS 会让域名在别人仓库上可被接管。添加后,GitHub 会生成或更新仓库根目录的 CNAME 文件。

  • 进入 Pages 仓库 Settings 的 Pages 区域。
  • 在 Custom domain 输入 example.com 或 blog.example.com。
  • 确认页面提示域名已被验证。
  • 检查仓库根目录是否出现 CNAME 文件,内容应只有你的域名。
  • 不要把 CNAME 文件写成 github.io 地址。

步骤三:按 apex 或子域名配置正确 DNS

官方记录表区分 apex 和 www/子域名。apex 域 example.com 可以使用 ALIAS、ANAME 或 GitHub Pages 的四个 A 记录;www.example.com 或 blog.example.com 使用 CNAME 指向 `USERNAME.github.io` 或 `ORGANIZATION.github.io`,不要包含仓库名。把 www 也配置好,可以让 GitHub 自动处理主域名和 www 的跳转。

# apex A 记录
185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153

# www CNAME
www.example.com CNAME USERNAME.github.io

如果你使用 ALIAS/ANAME,只需要指向 `USERNAME.github.io`。IPv6 可以额外添加四个 AAAA 记录,但不要只依赖 AAAA。

步骤四:用 dig 验证 DNS 与 CNAME 一致性

官方建议使用 dig 检查配置。对子域名,`dig www.example.com CNAME` 应返回 `USERNAME.github.io`。对 apex,`dig example.com A` 应返回 GitHub Pages 的 IP。如果 DNS 结果指向旧主机或通配记录,要立即修正。

dig example.com A +noall +answer
dig www.example.com CNAME +noall +answer
dig _github-pages-challenge-USERNAME.example.com TXT +noall +answer

步骤五:启用并验证 Enforce HTTPS

GitHub 官方建议开启 Enforce HTTPS,为你的自定义域名提供自动证书。证书签发可能不是立即完成,需要等待几分钟到几十小时。启用后,访问 http 应跳转到 https,页面不应出现证书警告。

  1. 在 Pages 设置中勾选 Enforce HTTPS。
  2. 等待页面不再显示证书签发中。
  3. 用无痕浏览器访问 https://example.com 和 https://www.example.com。
  4. 检查 www 与 apex 是否按预期 301 跳转。
  5. 如果证书一直不生效,先确认 DNS 只指向 GitHub,不指向旧托管商。

步骤六:避免通配 DNS,并写清下线流程

官方警告通配符 DNS 记录即使域名已验证也有接管风险。例如你验证了 example.com,`b.a.example.com` 仍可能被通配记录影响。停用 Pages 时,先禁用自定义域名或删除 DNS 记录,再删除仓库;如果域名不再使用,应在 DNS 托管商删除 A/CNAME/ALIAS 和验证 TXT。

  • 不要为 Pages 使用 `*.example.com` 通配记录。
  • 站点下线前先删除或修改 DNS 记录,避免悬空解析。
  • 删除仓库后检查 DNS 是否仍返回 GitHub Pages IP。
  • 域名不再使用时,把验证 TXT 记录也删除。
  • 在 DNS 台账里记录每个域名对应的仓库和负责人。

可复制检查表

域名:\n仓库:\n账户类型:个人 / 组织\nTXT 验证记录:\n验证状态:\n仓库 CNAME:\napex 记录:A / ALIAS / ANAME\nwww 记录:CNAME / 无\nAAAA 记录:\ndig A 结果:\ndig CNAME 结果:\nEnforce HTTPS:\nhttps://apex 状态:\nhttps://www 状态:\n通配 DNS:有 / 无\n下线负责人:

实际例子:组织站点迁移时避免域名悬空

一个开源组织要把 `docs.example.org` 从旧静态托管迁到 GitHub Pages。团队先验证了 example.org,再在组织 Pages 仓库添加 `docs.example.org`,随后把 CNAME 从旧托管改为 `ORGANIZATION.github.io`。dig 确认 CNAME 后启用 Enforce HTTPS。一个月后项目归档,他们先删除 DNS CNAME,再停用 Pages,最后删除验证 TXT,DNS 不再指向 GitHub。

验收清单

  • 域名已在 GitHub 账户级验证,TXT 保留。
  • 自定义域名已先添加到 Pages 仓库。
  • apex 使用 A/ALIAS/ANAME,www 使用 CNAME。
  • dig 结果只指向 GitHub Pages。
  • 没有通配 DNS 覆盖该域名。
  • Enforce HTTPS 已启用,两个域名都能用 https 访问。
  • 下线流程已写清,DNS 删除顺序明确。

常见坑

  • 先配 DNS 再添加仓库域名,让域名暂时可以被接管。
  • CNAME 指向仓库路径,例如 USER.github.io/repo。
  • 只配 apex 不配 www,用户访问 www 时拿到旧页面。
  • 验证 TXT 验证完就删,之后仓库删除会失去保护。
  • 使用通配 DNS,子域名出现悬空。
  • 删除仓库后忘记删除 DNS,域名仍解析到 GitHub Pages。

排错路径

  • 自定义域名没生效:先查 CNAME 文件、仓库域名和 DNS 是否一致。
  • Enforce HTTPS 一直等待:确认 apex 不指向旧主机,CNAME 不指向 apex,并等待证书签发。
  • www 不跳转:给 www 添加正确 CNAME,让 GitHub 自动处理重定向。
  • 验证一直失败:用 dig 查 TXT,确认记录名没有多写或少写后缀。
  • 域名被其他人使用:检查仓库是否已停用,DNS 是否仍悬空,并尽快删除记录。

后续维护建议

更新日期:2026-08-16。建议每季度检查一次所有 Pages 域名的 DNS 台账、TXT 验证状态和 HTTPS 证书。仓库改名、组织转移或 DNS 托管商变更后都要重新跑一遍本清单。只要域名还指向 GitHub,即使站点暂时停用,也要保留验证记录并定期确认没有悬空解析。

公开来源

  1. GitHub Docs: Managing a custom domain for your GitHub Pages site
  2. GitHub Docs: Verifying your custom domain for GitHub Pages
  3. GitHub Docs: Securing your GitHub Pages site with HTTPS

订阅更新

输入邮箱,订阅站点更新。

参与讨论

你的邮箱不会公开。 标有 * 的为必填项。