Fix · Health checks pass but production is failing silently

Vercel login screen instead of my public site, uptime check fails

Your site loads for you, but the uptime monitor reports failures because it gets a Vercel login redirect instead of your page. Two causes are common: a Deployment Protection scope that covers the URL being checked, or a monitor that requests a URL that is not a production domain.

Likely causes, most common first

Cause 1

The protection scope is set to All Deployments

With All Deployments selected, Vercel protects both preview and production URLs, including your production domain. Vercel Authentication redirects anonymous visitors and monitoring probes to a Vercel login before your code runs.

How to tell: An anonymous request to your production domain gets the Vercel login redirect, and the project's Deployment Protection scope reads All Deployments.

Cause 2

The new subdomain is not a production domain

Standard Protection protects every domain except production domains, so a hostname that is not assigned as a production domain stays behind the login. Your DNS records can be correct while the hostname sits on a different environment. The domain docs treat DNS setup and environment assignment as separate steps.

How to tell: Your apex or main production domain loads publicly, but the new subdomain redirects to login even though its DNS records are configured.

Cause 3

The monitor checks the generated vercel.app URL

With Standard Protection enabled, the production generated deployment URL is restricted, even though your custom production domain is public. A monitor configured with a vercel.app address sees the login redirect.

How to tell: The same page returns normally on your custom production domain, but the generated vercel.app URL redirects to login.

Check and fix it, step by step

  1. Request the failing URL without credentials

    Run an anonymous request against the exact URL your monitor uses and read the response. A redirect to Vercel login means Deployment Protection is answering before your code runs.

    curl -sI https://status.example.com/

    Docs: vercel.com →

  2. Read the protection scope in project settings

    Open the project's Settings, then Deployment Protection, and check whether the scope is All Deployments. If the production site should be public, choose Standard Protection, which protects all domains except production domains.

    Docs: vercel.com →

  3. Assign the new subdomain to the right environment

    Open the project's Settings, click the Environments menu item, and select the environment you want the domain assigned to. For a public site, that is Production. Adding DNS records is a separate step after the domain is added, so correct DNS does not tell you which environment serves the hostname.

    Docs: vercel.com →

  4. Point the monitor at the production domain

    Replace any generated vercel.app address in the uptime check with your custom production domain. Under Standard Protection the production generated deployment URL is restricted, so a public check against it fails.

    Docs: vercel.com →

  5. Send the bypass header when the URL must stay protected

    If the checked URL must stay protected, create a secret under Protection Bypass for Automation and send it in the x-vercel-protection-bypass header. If the monitor cannot set headers, send the same name as a query parameter. Redeploy after you regenerate or replace the secret, because deployments carry the value from build time.

    curl -sI -H "x-vercel-protection-bypass: $BYPASS_SECRET" https://status.example.com/

    Docs: vercel.com →

Quick check: curl -sI https://your-domain/ | head -5 # a redirect to Vercel login means Deployment Protection is answering

How often this shows up in our data

2 of the 937 verified cases from the last 12 months in our data match this symptom (0.2%). How we collect and verify cases.

With Gemmein

On Gemmein the Development site (https://<slug>-dev.gemmein.dev) is a private preview, while the public Live site is a separate address (https://<slug>.gemmein.dev) that changes only when you approve putting a version live. Your own domain can show the Live site but never the private preview.

Questions

Why do visitors see a Vercel login instead of my site?

Vercel Authentication redirects visitors to a Vercel login when it protects the URL they request. Team members, project members, granted users, shareable-link holders and callers using the bypass header can get through.


Does Standard Protection cover my production domain?

No. Standard Protection protects all domains except production domains, while All Deployments protects preview and production URLs, including the production domain. A hostname that is not a production domain is protected under Standard Protection.


Can an uptime monitor get past Deployment Protection?

Yes. The docs describe Protection Bypass for Automation for monitoring tools. Send the secret in the x-vercel-protection-bypass header, or as a query parameter if the tool cannot set headers.


Do I need a paid plan to use the bypass header?

The docs list Protection Bypass for Automation as available on all plans, which includes Hobby.


Sources

Every cause and step above was checked against these pages on 3 Nov 2026.

The broader pattern

This is one symptom of a wider failure pattern: Health checks pass but production is failing silently. The guide covers every cause we see for it, on any stack.

Get a heads-up when Vercel breaks something

Vercel

Leave your email and we'll let you know when something big changes for Vercel. Unsubscribe any time by replying. Gemmein Limited. Research terms · Privacy

← All fixes