Vercel

Vercel staging site indexed by Google: fix it

Vercel protects normal previews, but a custom domain on a non-production branch can lose noindex. Check the header and restore it.

Vercel normally sends "X-Robots-Tag: noindex" on Preview Deployments, but a custom domain attached to a non-production branch misses that header. Check the exact staging URL, add the noindex response header through the framework or vercel.json, redeploy, and confirm the live response now includes it.

Why Vercel does this

Vercel adds "X-Robots-Tag: noindex" to Preview Deployments by default. Its documentation names one exception: a custom domain assigned to a non-Production Branch does not receive that header. If a staging custom domain is indexed, check this exception before changing anything.

Check it right now

Before changing anything, confirm what a crawler actually sees. The check is free, takes one URL and needs no account.

Run the check

How to fix it

  1. Run the X-Robots-Tag checker on the exact indexed staging URL. A normal Preview Deployment should return "X-Robots-Tag: noindex".
  2. If the URL is a custom domain on a non-production branch and the header is absent, add "X-Robots-Tag: noindex" to every route through your framework response-header configuration. Vercel recommends the framework method first.
  3. If the framework cannot set response headers, add the same header in vercel.json. Vercel documents this as the last resort.
  4. Redeploy the preview and run the checker again. Stop when the staging response returns "X-Robots-Tag: noindex".
  5. If Google already shows the staging host, use Search Console > Removals > Temporary Removals > New Request after the header is live. Remove the staging prefix, not the production domain. Google says this is temporary, so the header is the permanent part of the fix.

Why it happens again

Vercel omits its automatic noindex header when a custom domain is assigned to a non-production branch. Recheck the header whenever a preview domain mapping changes.

stillindexed re-checks the URLs you give it every 30 minutes on Starter and alerts when a directive changes, at most 30 minutes after it does. It is a monitor rather than a crawler: it watches a list you choose and tells you when one of seven things changes. Card first, no trial, and a 30 day refund.

See what monitoring covers

Catching it next time

Fixing it once is the easy half. The setting that caused this can be changed again by anyone with access, and the page will keep returning 200 while it happens.

Other ways Vercel loses pages

A staging or preview site indexed by Google, on other platforms

Sources

Every claim about Vercel above is from their own documentation, read on 2026-08-30. Platforms change their settings; if one of these is out of date, their page wins and we would like to know.