The rejection: Your homepage URL is unresponsive

Fix “homepage URL is unresponsive” on Replit

Replit's version of this rejection has a distinctive cause: Google checked the wrong URL, or checked a Deployment that couldn't return real HTML.

Platform: ReplitStack: Anything you run (often a Node server that can render HTML on the server)Lands on: *.replit.app
01 — Why this happens

Replit gives you a *.replit.dev development URL that goes to sleep when you're not actively editing. If that's the URL on your consent screen, Google's checker can hit a sleeping or empty page. A static/SPA Deployment can also return a shell with no server-rendered content — same 'unresponsive' verdict, different cause than a Node Deployment that renders HTML.

02 — What Google says

Each fix below traces to a requirement Google publishes.

Nothing here is our opinion. Every requirement links to Google’s own page — open it and verify the fix yourself before you resubmit.

Your homepage must be publicly accessible without login — a bare sign-in screen is rejected.

Google requirement · R5Read it on Google’s docs

Your homepage must return meaningful, server-rendered HTML to an automated fetch — a JS-only shell, a bot challenge, a robots block, or an invalid TLS certificate all read as 'unresponsive'.

Google requirement · R9Read it on Google’s docs
03 — The fix

Do these in order, on Replit.

  1. 01

    Stop using the dev URL

    Remove any *.replit.dev address from your OAuth config. It sleeps and is ephemeral — never a homepage Google can rely on.

  2. 02

    Publish a Node Deployment that server-renders

    A Reserved-VM or Autoscale Deployment running a Node server can return real HTML for the homepage. Prefer that over a static SPA Deployment for the landing page.

  3. 03

    Verify what the Deployment returns

    Run curl -A "Googlebot" -L https://your-deployment-domain and confirm you get descriptive HTML with a privacy-policy link — not an empty shell or a sleeping-app page.

  4. 04

    Attach your own domain and resubmit

    Point a custom domain at the Deployment, use it everywhere in the OAuth config, and resubmit.

Check it before you resubmit

See exactly what Google’s crawler sees — free.

Paste your URL and scopes. The pre-check fetches your homepage the way Google does, finds your privacy-policy link, and flags the blockers this rejection is about — in seconds, no signup.

Questions

Straight answers.

Why would a working Replit app show as unresponsive?

Usually because Google checked the *.replit.dev dev URL, which sleeps when idle. Use the published Deployment on a custom domain instead.

Does my Deployment need to server-render?

The homepage does need to return real HTML. A Node Deployment that renders the landing page server-side satisfies the crawler; a pure static SPA shell doesn't.