# Cloudflare Google Index Doctor

Cloudflare Google Index Doctor is a tested SKILL.md that reads what the owner of a site on Cloudflare Workers (usually Next.js through OpenNext) pasted - Search Console numbers, an audit of status codes, open-next.config.ts, wrangler.jsonc, data-fetch code, robots, sitemap and metadata code, wrangler tail lines, the owner's plan - and finds what stops Google from crawling, indexing or showing the pages, in a fixed diagnosis order; an agent buys it once for $0.05 over x402.

- Page: https://aiskills402.com/skills/cloudflare-google-index-doctor
- Category: SEO & Content (https://aiskills402.com/categories/seo)
- Price: $0.05 once, USD-priced, paid in USDC on Base over x402. Price as loaded on this page. The 402 response your agent receives is authoritative.
- Version: 1.0.0
- Card (JSON): https://api.aiskills402.com/v1/skills/cloudflare-google-index-doctor

## Use it when

Reads what the owner of a site on Cloudflare Workers (usually Next.js through OpenNext) pasted - Search Console numbers, an audit of status codes, open-next.config.ts, wrangler.jsonc, data-fetch code, robots, sitemap and metadata code, wrangler tail lines, the owner's plan - and finds what stops Google from crawling, indexing or showing the pages, in a fixed diagnosis order. Group 1, the crawler gets errors - the site's own API rate-limiting its own renders, a 5xx or 429 burst whose cause is not pasted. Group 2, the site tells Google the wrong thing, renders cold or never refreshes - ISR without a queue, a queue without its self reference, dynamic routes that never become ISR, a cold cache after every deploy, thin twin pages, pages linked from nowhere, noindex behind a Disallow, www blocked, titles pushed out by a suffix, an untrue lastmod, a redirect over a cached 404, no max-image-preview, a short sitemap address. Group 3, the reading or the plan is at the wrong stage - site:, ranking treated as discovery, an example list taken as the size, young pages, an audit taken during errors, a check without a cache-buster. Each finding has a fixed code, the evidence, a fix and a check that can fail, then one verdict. Use when asked about pages not indexed by Google, why Crawled - currently not indexed or Discovered - currently not indexed will not clear, OpenNext ISR not working with pages that carry no cache headers, or whether a plan will help.

## Not for

It does not crawl your site or open Search Console: it reads only what you paste, so it cannot see live headers, your account or Google's index. It promises no rankings, does not pick the next button to press, and covers Pages Functions or hosting outside Cloudflare only through the general Google rules. Facts dated 18 October 2026.

## Tested, honestly

Tested 2026-10-18.

- Strong model (claude-sonnet-5-5 (Claude Code alias "sonnet")): Right on all 46 situations, read by hand. With the evidence pasted it named the site's own API spending its own public rate limit, ISR with no queue and a queue with no self reference (fix before relying on it: the crawler gets the stale page with 200), dynamic routes that never become ISR, a cold cache after each deploy, thin twins, pages linked from nowhere, noindex behind a Disallow, www blocked, an untrue lastmod and a redirect over a cached 404, and gave no findings for the five sound setups. From only what an owner has on the first morning it put the main cause first all eleven times, including the missing queue behind pages that carry no cache header. The skill's own format check failed three answers: one opened with a misspelled code and corrected it, one finding line had no Check, and on a young site it added a ranking line the case did not need.
- Weak model (claude-haiku-5-5 (Claude Code alias "haiku")): Right on all 46 situations, read by hand, with the main cause first on each of the eleven hard ones: the queue missing behind pages with no cache header, the queue with no self reference, the own API limit, a cold cache after deploys and a robots.txt checked with no cache-buster, but it broke the skill's format three times: once it wrote a coded line for a check it then said had no finding, and on two hard situations it added a ranking line the case did not need.

Note: Two sets written for this skill, one run per model and situation. The first, 35 situations (30 with a fault, 5 sound) from the skill's spec, paste the telling evidence; the skill side is scored by code (the exact codes, a Check on every line, one verdict), the bare side on the concept in any words. The second, 11 situations written separately before any run, start where our own incident of 18 October 2026 started: Search Console numbers, a status audit, the config and the owner's plan, with no line that gives the cause away. Both sides were told to name the main cause first and are scored alike: the right cause before any wrong one, with no list of possible causes in front of it; the counts here were read by hand, because the mechanical check erred both ways (four known faults, listed in the record and left as they were after the run). Facts read on 18 October 2026: Google Search Central and Search Console help, Cloudflare, Next.js and OpenNext pages and the OpenNext 1.20.2 source. Measured by us the same day: 500s from the site's own API limit, ISR with no queue, a cold cache after deploys. After the first run two codes moved from group 1 to group 2, as the skill's own facts sided with Sonnet; those 3 situations and the 5 sound ones were run again. Bare-side checks were widened at eight places, none narrowed; the full record is in changelog.md.

### With and without the skill

Tested 2026-10-18.

- Situations diagnosed right, evidence pasted (35 situations): Sonnet 35/35 with, 35/35 without; Haiku 35/35 with, 32/35 without.
- Main cause named first, from the real starting point (11 situations): Sonnet 11/11 with, 9/11 without; Haiku 11/11 with, 8/11 without.

Same request on both sides. When the evidence was pasted, Sonnet without the skill reached the right cause in all 35 in its own words. From the real starting point it led with the right cause in 9 of 11; for ISR with no queue (our own incident) it led with generateStaticParams returning an empty list, and for a robots.txt checked minutes after a deploy it said a .txt file is not cached by default, which Cloudflare does. With the skill its answer is a code, a probe and one verdict, about 300 words against about 1,500. Haiku without the skill went wrong on 3 of 35 (the queue in one ISR setup, the short sitemap address, extra problems in a sound ranking plan) and 3 of 11 (the queue, the missing self reference, the robots.txt cache).

Same cases and the same checks with and without the skill. The cases are ours, written around what the skill is for; with a handful of cases, a difference of one or two is within noise.

Full summary: https://aiskills402.com/skills/cloudflare-google-index-doctor/tests

## Example

### English (claude-sonnet-5-5)

Before:

> === Search Console, Page indexing === 96 indexed, 204 not indexed (Crawled - currently not indexed 131, Discovered - currently not indexed 73) === audit of the sitemap, 300 URLs, 3 in parallel, 18 October 2026 === 200: 182   /blog/*, /collections/*, /, /about 500: 118   /recipes/[slug] (62), /recipes/[slug]/nutrition (56)…

After:

> [OWN-API-RATE-LIMITED] audit (118 of 300 URLs answered 500, all under /recipes/[slug] and /recipes/[slug]/nutrition, first 500 at request 97, the same URLs 200 one at a time) and the tail (`recipe API 429` thrown at app/recipes/[slug]/page.tsx:12, then `GET /recipes/lemon-orzo 500`): the page's `getRecipe` reads the site's own API at api.shelfwise.example, and that API's `PUBLIC_LIMITER` (60 per…

## What is in the file

- The answer
- Work in this order
- What the paste decides
- The codes
- Correct setups stay quiet
- How to check a fix
- Short example

## Languages

Any language

## How to buy

Agent (HTTP):

1. GET https://api.aiskills402.com/v1/skills/cloudflare-google-index-doctor/file without a payment header. The answer is 402 with a PAYMENT-REQUIRED header (x402 v2): exact amount, asset, network, recipient.
2. Sign `accepts[0]` with an x402 client (for example @x402/core + @x402/evm).
3. Repeat the GET with the signature in the PAYMENT-SIGNATURE header. The answer is 200 with the file, its sha256 and a re-download token.

Agent (MCP): https://mcp.aiskills402.com/mcp — free tools search_skills, get_skill, redownload_skill. Buying itself is over HTTP.

Full flow: https://aiskills402.com/docs

## The file

- Version: 1.0.0
- Size: 23.6 KB (24182 bytes)
- SHA-256: 409efb7b3b60adb3d128b4be673c7f7991341daa512bc8db31cdb74ac99e8dad
- Updated: 2026-10-18
- New versions are free through your re-download token.

## Versions

### 1.0.0 (2026-10-18)

First release: reads what the owner of a site on Cloudflare Workers (usually Next.js through OpenNext) pasted - Search Console numbers, an audit of status codes, `open-next.config.ts`, `wrangler.jsonc`, data-fetch code, robots, sitemap and metadata code, `wrangler tail` lines and the owner's plan - and reports what stops Google from crawling, indexing or showing the pages, in a fixed diagnosis order (Page indexing first, then Performance, then what is missing). Each finding has a fixed code, the evidence, a fix and a check that can fail, then one verdict (crawler sees errors, fix before relying on it, wrong stage, no site-side problem). Group 1, the crawler gets errors: the site's own API rate-limiting the site's own renders, a 5xx or 429 burst whose cause is not pasted. Group 2, the site tells Google the wrong thing, renders cold or never refreshes: ISR without a queue, a queue without its self reference binding, a dynamic route that never becomes ISR, a cold cache after each deploy, thin twin pages, pages with no internal link, noindex behind a Disallow, www blocked by a robots guard, a title suffix that pushes the useful words out, an untrue lastmod, a redirect over a cached 404, no max-image-preview, a short sitemap address in a Domain property. Group 3, the reading or the plan is at the wrong stage: `site:` used as a count, ranking treated as discovery, the example list of a report taken as its size, young pages treated as a defect, an audit taken while the pages answered errors, a check from one request without a cache-buster. Facts: Google Search Central and Search Console help, Cloudflare, Next.js and OpenNext documentation and the OpenNext source 1.20.2, all read on 18 October 2026, and our own measurements; contested or unverified points are marked as such and never turned into rules.

Model test, 18 October 2026, one run per model and case, read by hand: the first set (35 cases, 30 with a fault and 5 sound, the telling evidence pasted) - Sonnet 35/35 with the skill and 35/35 without, Haiku 35/35 and 32/35; the hard set (11 cases from the owner's real starting point, written separately before any run, scored alike on both sides: the main cause first and right) - Sonnet 11/11 and 9/11, Haiku 11/11 and 8/11. By the skill's own format checks: first set Sonnet 34/35 (a misspelled code corrected in place), Haiku 34/35 (a coded line for a check with no finding); hard set 9/11 each (an added ranking line on the young site, Haiku also on thin twins; one Sonnet line without `Check:`). The mechanical score of the hard set erred both ways; its four known faults are listed in `test/results-2026-10-18-hard-compare.md` and were left as they were after the run. Records: `test/results-2026-10-18*.md`, `notes/hard-set-2026-10-18.md`.

Price $0.05 (50000 micro-USDC), the owner's choice of 18 October 2026: the table gives $0.03 for a Sonnet gain of 2, and our rule puts a skill that helps Sonnet on content at $0.05 or more. Not marked Recommended (the gain is 2 of 11).

Known gaps, reported by the author of the hard set and left for 1.1 with a new set of cases (fixing them now against these cases would tune the skill to its test): the headers that tell ISR-NO-QUEUE from DYNAMIC-ROUTE-NOT-ISR; the owner-visible sign of a missing self reference (STALE that never returns to HIT until a deploy); OWN-API-RATE-LIMITED could name the branch when the paste says the API sits in another zone, and does not mention a zone WAF rate-limiting rule; YOUNG-PAGES-WAIT does not cover Discovered - currently not indexed; CHECK-WITHOUT-BUSTER gives no robots.txt cache time; no code for a plan that works on Crawled - currently not indexed while Crawl stats show live 5xx. None of them is a false statement in the skill.

Changed after the first run of 18 October 2026, before release: `ISR-NO-QUEUE` and `DO-QUEUE-NO-SELF-REFERENCE` moved from group 1 to group 2. Sonnet gave `fix before relying on it` in all three cases with these codes, against the skill's group 1 verdict; the skill's own facts side with Sonnet (OpenNext 1.20.2: the failed send to the queue is caught and logged, so the crawler gets the stale page with 200, not an error). The three cases now expect `fix before relying on it`; they and the five sound cases were run again on both models with the corrected text, the other cases keep their first-run answers.

Checks widened after reading every failure (for both sides, in `test/make-cases.mjs`): the own-API concept accepts "shares one rate-limit bucket" and "the site's own calls … the public limiter"; the burst concept accepts "rerun the audit and capture the body of a 503", and in `audit-during-errors` (whose input does not say one-by-one requests pass) also "wrangler tail while requesting one failing URL"; the one-by-one concept accepts "do not contradict" and the hyphenated "one-at-a-time"; the lastmod concept accepts the real edit field (`edited_on`, `updatedAt`) and "the real updated or published date"; the `site:` concept accepts "rough"; the internal-link concept accepts "render … as real links" and "a crawlable anchor". No check was narrowed.

## License

Perpetual, non-exclusive; use and modify for yourself incl. paid work; no resale or republishing. Holder: Georgi Kalchev, aiskills402.com. Terms: https://aiskills402.com/docs#license

## FAQ

### For one pasted situation, what comes back?

One line per problem, each with a fixed code, the pasted part that shows it, a fix and a check that can fail, then one verdict: the crawler sees errors, fix before relying on it, wrong stage, or no site-side problem. The 21 codes sit in three groups, ordered by how early they stop Google. A sound setup gets exactly one line saying no findings.

### Why does it ask which key the rate limiter sees?

Cloudflare documents two cases for a Worker calling another address: a call into another zone carries one fixed client address, a call inside the same zone carries the visitor's own. Either way a limit meant for outsiders can be spent by the site's own renders. We measured 162 of 330 URLs answering 500 at three in parallel on 18 October 2026, every one the API's 429, and the skill does not claim which case applies without the logged key.

### What does it leave unsettled instead of ruling on?

Where Google's own pages disagree it says so. For near-duplicate pages the duplicate guide prefers a canonical, while the crawl budget guide and the Page indexing help disagree on whether a noindex page is still requested, so it offers both options and promises no crawl saving. The sitemap address rule for a Domain property rests on our measurement, and it says that.

### Does it help Claude Sonnet?

Somewhat, where the start is hard. With the telling evidence pasted, Sonnet found the cause in all 35 situations with or without it. Starting from only the Search Console numbers, an audit and the config (11 situations), it named the main cause first 11 times with the skill and 9 without: bare, it blamed an empty generateStaticParams for ISR that had no queue, and said Cloudflare does not cache a .txt file by default. Haiku rose from 32 to 35 and from 8 to 11.

## Related skills

- [Search Console Next Action](https://aiskills402.com/skills/search-console-actions.md): $0.05 once
- [Cloudflare Workers Review: D1, OpenNext, Fetch](https://aiskills402.com/skills/workers-pitfalls-review.md): $0.05 once
- [Traffic Reality Check: Real Readers vs Bots](https://aiskills402.com/skills/traffic-reality-check.md): $0.07 once
- [Bing and IndexNow Submitter Review](https://aiskills402.com/skills/bing-indexnow-submitter.md): $0.04 once

## Measurement limits

- Models other than the two named above were not run.
- Each verdict comes from the test run on the date shown; the skill may have changed since (check the version).
- Full test inputs are not published here, only short excerpts of our own text.
- Results on your own texts, languages and domains can differ.

Offer note: Paid in USDC (USD-pegged) over x402 by an AI agent; one-time.
