Still Indexed

← Back to the checker

How it works

The homepage is the product. You paste URLs; a Cloudflare Worker fetches them. Nothing here pretends to know Google’s index unless you connect Search Console.

1. Live fetch (always on)

For each URL the Worker:

  1. Requests the URL (follows redirects, 12s timeout, first 512 KB of the body).
  2. Reads X-Robots-Tag and any HTML <meta name="robots"> / googlebot.
  3. Reads rel=canonical (HTML or Link header).
  4. Fetches /robots.txt once per origin and evaluates the URL path for the Googlebot group, then *. Longest Allow/Disallow wins; * and $ are honoured.

BLOCKING means we found a directive that stops Google from indexing or crawling that URL. We quote it: meta name="robots": noindex, X-Robots-Tag: noindex, none, an expired unavailable_after, or robots.txt Disallow: /path.

ALLOWED means we did not find such a directive. A 404 can still be ALLOWED. HTTP status is shown beside the verdict so you can see fetch failures without us inventing “not indexed.”

2. Search Console inspect (optional)

If GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, and SESSION_SECRET are set, you can OAuth with scope https://www.googleapis.com/auth/webmasters.readonly.

After consent we call the official methods:

We display documented fields only: coverageState, verdict, indexingState, robotsTxtState, lastCrawlTime, pageFetchState, googleCanonical, userCanonical, and inspectionResultLink. The inspect API reports the version already in Google’s index, not a live indexability test.

3. Watch (optional)

Save an email plus the URL list to KV (WATCH). A cron at 0 6 * * * UTC re-runs the fetch. If a GSC refresh token was stored, we re-inspect. History is written when fetch verdict flips (ALLOWED ↔ BLOCKING) or when coverageState moves between indexed and not indexed. Email goes out through Resend when RESEND_API_KEY is present.

What this is not

Check a page now · About