跳到正文

Google 在索引你的 vercel.app 地址吗?如何让预览和重复地址远离搜索结果

Google 能索引哪些 Vercel 地址,your-project.vercel.app 为何与你的域名竞争,以及用重定向、canonical 和保护设置解决问题。

阅读约 3 分钟

每个 Vercel 项目拥有的地址,都比你名片上印的那个多。有你的域名 www.yourcompany.com;有 Vercel 自动创建的生产环境地址 your-project.vercel.app;每次部署还有自己的地址,每个分支也有一个预览地址。

其中大多数从不会出现在 Google 里,因为 Vercel 已经处理好了。但通常有一个会出现,并在相同的搜索中与你真正的域名竞争。本文说明哪个地址是哪种情况,以及如何补上这个漏洞。

Vercel 已经做了什么

Vercel 会为以下部署添加 X-Robots-Tag: noindex 头,告诉搜索引擎不要索引这些页面:

  • 每个预览部署,也就是从生产分支以外的任何分支进行的部署;
  • 旧的生产部署:新的部署被设为生产版本后,上一个部署就开始返回 noindex。

当前的生产部署不受影响,因为那正是你希望出现在搜索中的网站。一条命令就能确认某个地址发送了什么:

这个地址是否告诉 Google 不要索引它?
curl -sI https://your-project-git-feature-team.vercel.app | grep -i x-robots-tag

两个漏洞

1. 生产环境的 vercel.app 地址

your-project.vercel.app 提供与你的域名相同的生产页面,而且没有 noindex。如果 Google 发现了指向它的链接(一份旧的 README、你分享过的一次测试、一个列出 Vercel 项目的目录网站),它就会拥有每个页面的两个副本,并且必须选择其一。重复内容不会受到惩罚,但会分散信号,而 Google 有时会选中你不想要的那个地址。

2. 预览分支上的自定义域名

如果你给某个非生产分支分配了自己的域名,例如 staging.yourcompany.com,Vercel 不会为它添加 noindex。被 Google 收录的测试网站,会以你的品牌名义展示未完成的页面、测试价格和重复内容。

解决方法

把 vercel.app 地址重定向到你的域名

最干净的做法是一条只匹配该主机名、并保留路径的永久重定向,这样 your-project.vercel.app/pricing?plan=pro 就会跳转到 www.yourcompany.com/pricing?plan=pro:

vercel.json
{
  "redirects": [
    {
      "source": "/:path*",
      "has": [{ "type": "host", "value": "your-project.vercel.app" }],
      "destination": "https://www.yourcompany.com/:path*",
      "permanent": true
    }
  ]
}

精确匹配主机名很重要:没有这个条件的规则会把你真正的域名重定向到它自己,而范围过宽的模式还会拦下你仍然需要的预览地址。

用一个深层页面加查询参数来测试。你应该看到 308 和正确的 Location:

检查重定向
curl -sI "https://your-project.vercel.app/pricing?plan=pro" | grep -iE "^HTTP|^location"

使用你域名下的绝对 canonical

每个页面都应该把它在你域名下的地址完整地声明为 canonical:<link rel="canonical" href="https://www.yourcompany.com/pricing">。两个常见错误:

  • 根据请求的主机名生成 canonical:在 your-project.vercel.app 上,页面会把 vercel.app 地址声明为主地址,重复页面反而确认了自己。请根据固定的网站网址设置来生成。
  • 所有页面都指向首页。 这等于请 Google 忽略你的其他所有页面。

为带自定义域名的预览分支添加 noindex

对于 staging.yourcompany.com,请自己添加这个头,并限定在该主机名上:

vercel.json
{
  "headers": [
    {
      "source": "/:path*",
      "has": [{ "type": "host", "value": "staging.yourcompany.com" }],
      "headers": [{ "key": "X-Robots-Tag", "value": "noindex" }]
    }
  ]
}

不要改用 robots.txt 屏蔽它。被禁止抓取的页面无法被读取,Google 就永远看不到它的 noindex,而这个地址仅凭外部链接仍可能出现在搜索结果中。

为生产环境以外的一切开启 Deployment Protection

在项目设置中,选择 Deployment Protection 的 Standard Protection,除了你的生产域名以外,访问任何地址都需要登录 Vercel,所有方案都可以使用。预览不再公开,这对你还没有公布的内容也是好事。如果外部服务需要访问受保护的预览(测试工具、正在审阅的客户),Vercel 提供了相应的绕过选项。

清理 Google 已经收录的内容

如果 vercel.app 地址或测试域名已经被 Google 收录:

  1. 先部署重定向或 noindex。Google 会在下次访问并发现变化时移除这些页面。
  2. 搜索 site:your-project.vercel.app,查看哪些内容被收录了。
  3. 如果想更快地隐藏某个页面,可以使用 Search Console 的移除工具。它会把该地址隐藏大约六个月;真正让结果永久生效的是重定向或 noindex。

不要为了让问题消失而删除项目或域名:一个突然开始返回错误的地址,会让 Google 无处可循;而重定向会把它的历史传递给你的域名。

每次部署之后

这类设置会悄无声息地失效:新的 vercel.json 丢掉了重定向,框架升级改变了 canonical 的生成方式。部署后检查重要页面时(参见部署会破坏哪些 SEO),请把 canonical 和对 vercel.app 地址的一次请求也加进去。

SEOVercel托管

本文还有以下语言版本: EnglishPortuguêsEspañol日本語

全部文章