Sitemap 仍引用旧域名:3 个原因 + 修复路径

迁移域名后,sitemap.xml 仍列旧域名 URL——Search Console 报 host 不匹配。

你从 old.com 迁到 new.com。配了重定向。更新了 Search Console。但你查 https://new.com/sitemap.xml,里面 URL 还是 <loc>https://old.com/article</loc>。Search Console 报 “URLs in sitemap from wrong host”。哪怕重定向工作,Google 的 sitemap 解析器可能丢弃跟 sitemap 自身主机不匹配的 URL——你等于发了个废的 sitemap。多数静态站生成器构建时把 site URL 烤进 sitemap,所以原因几乎都是迁移时没更新 site 配置。

常见原因

按命中率从高到低。

1. Astro site: 配置仍指旧 URL

astro.config.mjs

export default defineConfig({
  site: 'https://old.com',  // ← bug
});

@astrojs/sitemapsite 组 URL。陈旧配置 → 陈旧 sitemap。

怎么判断:打开 astro.config.mjssite 值。是旧的就是这条。

2. Next.js siteUrl env var 还是旧的

next-sitemap.config.js

module.exports = { siteUrl: process.env.SITE_URL || 'https://old.com' };

生产环境没设 SITE_URL 就 fall back 到硬编码旧 URL。

怎么判断:查 .env.production 或平台环境变量里的 SITE_URL

3. Hugo config.tomlbaseURL 没改

baseURL = "https://old.com"

Hugo 把这个烤进所有生成 URL 包括 sitemap。

4. 自定义 sitemap 脚本硬编码 URL

有些站用自定义构建脚本生成 sitemap,里面硬编码 host。迁移时忘改。

怎么判断grep -rn "old.com" scripts/ build/

5. CDN 缓存了旧 sitemap

你更新了配置重新部署,但 CDN 从缓存服务旧 sitemap.xml。

怎么判断:部署后 curl yourdomain.com/sitemap.xml?nocache=$(date +%s) 绕缓存。跟 curl yourdomain.com/sitemap.xml 不一样 = CDN 缓存。

6. Sitemap 分多个文件、只更新了主的

站点有 sitemap-index.xml 引用 sitemap-articles.xmlsitemap-pages.xml 等。你改了配置但只主 sitemap 重新生成。

怎么判断:打开每个子 sitemap 检查。

最短修复路径

第 1 步:找 site URL 配置

去这些地方找:

  • Astro:astro.config.mjssite:
  • Next.js:next-sitemap.config.jsnext.config.js、env vars
  • Hugo:config.tomlhugo.tomlbaseURL
  • SvelteKit:svelte.config.js → adapter config 或 env
  • 自定义:grep -rn "siteurl\|site_url\|baseurl" .

找到 canonical site URL 设置的地方。

第 2 步:改成新 URL

设为新 canonical URL:

// Astro
site: 'https://new.com',
# Hugo
baseURL = "https://new.com"
# Next.js / .env.production
SITE_URL=https://new.com

第 3 步:重构建重部署

npm run build

部署前本地验证:cat dist/sitemap-index.xml | head -20——URL 应用新域名。

第 4 步:生产验证

curl https://new.com/sitemap.xml | head -20
curl https://new.com/sitemap-articles.xml | head -20  # 如果分拆了

所有 URL 应引用新域名。看到旧的就强制清 CDN 缓存。

第 5 步:提交更新的 sitemap

Search Console → 新 property → Sitemaps → 提交 sitemap.xml。旧 sitemap 已注册就移除老条目。

第 6 步:CI 加断言

# 构建后 CI 跑
if grep -q "old.com" dist/sitemap*.xml; then
  echo "ERROR: sitemap still references old domain"
  exit 1
fi

防止回归。

哪些情况可能不是你操作错了

一些 sitemap 生成器独立于 site 配置(自定义脚本)——审你的整个构建管道,不只是一个配置文件。

容易误判的情况

以为平台”自动检测”部署 URL。多数不会——它们构建时从配置文件烤值。配置陈旧 = sitemap 陈旧。

预防建议

  • Site URL 单一数据源(config 或 env)。
  • CI 断言:sitemap URL 必须匹配 canonical 主机。
  • 任何域名变更后本地构建并检查 sitemap 再部署。
  • 生产用环境变量设 site URL,不要硬编码。
  • 多 sitemap 设置:审每个子 sitemap,不只是 sitemap-index.xml

FAQ

  • Google 多久反映新 sitemap? 1-14 天处理。在 Search Console 显式提交加速。
  • 能临时有两个 sitemap 吗? 能——每语言一个或每分区一个都行。但任何 sitemap 里的所有 URL 都必须用 canonical 主机。

相关阅读

标签: #域名 #DNS #SSL #排查 #Sitemap #旧域名