本文へ移動

vercel.app のアドレスが Google にインデックスされていませんか? プレビューや重複を検索結果から外す方法

Google にインデックスされうる Vercel のアドレス、your-project.vercel.app が自社ドメインと競合する理由、リダイレクト・canonical・保護設定による対処法を解説します。

4分で読めます

Vercel のプロジェクトには、名刺に載せているもの以外にもアドレスがあります。自社ドメインの www.yourcompany.com。Vercel が作る本番用のアドレス your-project.vercel.app。さらに、デプロイごとに専用のアドレスがあり、プレビュー用にブランチごとのアドレスもあります。

これらのほとんどは Vercel が処理してくれるので、Google に表示されることはありません。ただ、たいてい1つだけ例外があり、同じ検索語で自社ドメインと競合してしまいます。この記事では、それぞれのアドレスの扱いと、その抜け穴をふさぐ方法を説明します。

Vercel がすでにしてくれていること

Vercel は、検索エンジンにページをインデックスしないよう伝える X-Robots-Tag: noindex ヘッダーを、次のデプロイに付けています。

  • すべてのプレビューデプロイ、つまり本番以外のブランチからのデプロイ
  • 過去の本番デプロイ。新しいデプロイが本番に切り替わると、それまでのデプロイは noindex を返すようになります。

現在の本番デプロイには付きません。検索結果に表示させたいサイトそのものだからです。あるアドレスが何を返しているかは、コマンド1つで確認できます。

このアドレスは Google にインデックスしないよう伝えているか
curl -sI https://your-project-git-feature-team.vercel.app | grep -i x-robots-tag

2つの抜け穴

1. 本番の vercel.app アドレス

your-project.vercel.app は、自社ドメインと同じ本番ページを noindex なしで配信しています。Google がこのアドレスへのリンクを見つけると(古い README、共有したテスト、Vercel のプロジェクトを一覧にしたサイトなど)、すべてのページに2つのコピーがあることになり、どちらかを選ばなければなりません。重複によるペナルティはありませんが、評価が分散し、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 は自社ドメインの完全な URL で書く

すべてのページで、自社ドメイン上の自分自身のアドレスを、省略せずに canonical として宣言します。<link rel="canonical" href="https://www.yourcompany.com/pricing"> のような形です。よくある間違いは2つあります。

  • リクエストのホストから canonical を組み立てている。 your-project.vercel.app で開くと、ページが vercel.app のアドレスを正式なものとして宣言してしまい、重複を自ら裏付けることになります。固定のサイト URL の設定から組み立ててください。
  • 全ページがトップページを指している。 これは、ほかのすべてのページを無視するよう 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 へのログインが必要になります。この機能はすべてのプランで使えます。プレビューが公開されなくなるので、まだ発表していない内容を守るうえでも役立ちます。外部のサービス(テストの実行環境や、確認を依頼した顧客など)が保護されたプレビューにアクセスする必要がある場合は、そのための回避オプションが用意されています。

Google にすでに載っているものを片付ける

vercel.app のアドレスやステージング用のドメインがすでに Google に載っている場合は、次の手順で対応します。

  1. まずリダイレクトか noindex をデプロイします。Google は次にそのページを訪れて変更に気づいたときに、ページを削除します。
  2. site:your-project.vercel.app で検索し、何がインデックスされているかを確認します。
  3. より早く非表示にしたい場合は、Search Console の削除ツールを使います。アドレスは約6か月間非表示になります。恒久的に外すのは、あくまでリダイレクトや noindex です。

問題を消すためにプロジェクトやドメインを削除するのはやめましょう。突然エラーを返すようになったアドレスでは、Google はたどる先を失います。リダイレクトなら、そのアドレスの評価を自社ドメインに引き継げます。

デプロイのたびに

こうした設定は、気づかないうちに壊れます。新しい vercel.json でリダイレクトが消えたり、フレームワークのアップグレードで canonical の組み立て方が変わったりします。デプロイで SEO が壊れるパターンで紹介したように、デプロイ後に重要なページを確認する際は、canonical と、vercel.app のアドレスへのリクエスト1回も確認項目に加えてください。

SEOVercelホスティング

この記事は次の言語でも読めます: EnglishPortuguêsEspañol中文

記事一覧