SEO & Content

Cloudflare Google Index Doctor

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.

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.

Tested 2026-10-18No code, no hidden instructionsv1.0.0 · 23.6 KB · perpetual license

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 with a strong and a weak model.

With and without the skill

Results with and without the skill, for Sonnet and Haiku
SonnetHaiku
withwithoutwithwithout
Situations diagnosed right, evidence pasted (35 situations)35/3535/3535/3532/35
Main cause named first, from the real starting point (11 situations)11/119/1111/118/11

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.

SonnetStrong model, claude-sonnet-5-5
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.
HaikuWeak model, claude-haiku-5-5
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.

Full test summary

Example

Our own test text, before and after the skill ran. Excerpts only.

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. Tried in: English.

License

Perpetual, non-exclusive; use and modify for yourself incl. paid work; no resale or republishing. Holder: Georgi Kalchev, aiskills402.com. Full terms.

Versions

Current version 1.0.0, updated 2026-10-18. Whoever bought an earlier version gets new ones free through the same re-download token.

  1. v1.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.

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.

Read more

Share

Read this page as Markdown: /skills/cloudflare-google-index-doctor.md.

  • Search Console Next Action

    SEO & Content

    SKILL.md · v1.0.0 · 8.0 KB

    Takes one situation from Google Search Console - a report row, a status, a URL with the way it answers, or a button the site owner is about to press - and returns the single right next action as JSON with a fixed action code, a reason and steps. Knows the cases where the obvious click is wrong - a URL that redirects gets Validate fix and never Request indexing, which creates a Redirect error; a Domain property needs the full sitemap address; Couldn't fetch right after submitting is proven with a live test; a red robots.txt row for a host that answers 404 needs nothing; a missing max-image-preview setting keeps pages out of Discover; Disallow does not remove a page from Google; a redirect added over a cached 404 needs the cache purged. Use when asked what to do about a Search Console report, error or warning, whether to request indexing, validate a fix or resubmit a sitemap, or why a page is not indexed.

    $0.05once

    • x402
    • USDC
    • Base
    Get skill

    Tested with Sonnet and Haiku, 8 Oct 2026

  • Cloudflare Workers Review: D1, OpenNext, Fetch

    Code & Engineering

    SKILL.md · v1.2.0 · 9.8 KB

    Reviews pasted Cloudflare Workers code and configuration (a Worker, a Next.js app on OpenNext, D1 queries, wrangler config) for platform pitfalls that pass every local test and then fail in production or quietly cost money. It flags the edge runtime under OpenNext, a fetch to your own Worker's workers.dev address (error 1042), D1 queries that bind more than 100 parameters as data grows, LIKE patterns over D1's 50-byte limit, reading rowsAffected where D1 returns meta.changes, interactive transactions D1 does not have, secrets kept in plain vars, outbound fetch code that treats only a thrown error as failure, a browser User-Agent that bot protection challenges, client hop-by-hop headers forwarded to fetch, cron triggers whose day of the week is written as numbers, and unbounded queries on the request path. Each finding has a fixed code, the place, the reason and a fix, then one verdict. Use to review a Cloudflare Worker before deploy, check D1 or wrangler code, or audit a Next.js app running on Cloudflare.

    $0.05once

    • x402
    • USDC
    • Base
    Get skill

    Tested with Sonnet and Haiku, 8 Oct 2026

  • Traffic Reality Check: Real Readers vs Bots

    SEO & Content

    SKILL.md · v1.0.1 · 7.0 KB

    Reads the numbers from Cloudflare Web Analytics and zone analytics (GraphQL or the dashboard) and says how many of them are real readers or real server errors, answered as JSON with the computed figures and a short reason. Knows what pollutes the table - the owner's own headless-browser checks, link-preview fetches from the social network that show up as referrals, the site's own Worker and its cache calls counted as visitors or as 5xx errors, the regional cache host of OpenNext, staging sharing a token - and what makes a true zero - the EU exclusion setting, a content security policy that allows the script but not the measurement request, sampling of data older than seven days. Use when asked how much traffic a site really has, whether a spike or an error count is real, why Web Analytics shows zero, or how to query per-address detail on the Free plan.

    $0.07once

    • x402
    • USDC
    • Base
    Get skill

    Tested with Sonnet and Haiku, 8 Oct 2026

  • Bing and IndexNow Submitter Review

    SEO & Content

    SKILL.md · v1.0.1 · 9.2 KB

    Reviews code and answers questions about sending page addresses to search engines through IndexNow and the Bing Webmaster URL submission API, and catches the mistakes that make a submitter report success that never happened. It flags a Bing call judged only by its HTTP status when the refusal sits inside the body, a retired XML or SOAP endpoint, a fallback chain that retries after a refusal that is ours, a quota read as one number instead of two, an unread quota printed as zero, a report that does not say which engine accepted, a 200 or 202 read as proof of indexing, a key file that cannot validate, and batches over the limits. For a question it answers in the JSON shape asked. Use to review a URL submission function, work out how many addresses may be sent, or explain what a submission status code means.

    $0.04once

    • x402
    • USDC
    • Base
    Get skill

    Tested with Sonnet and Haiku, 8 Oct 2026

More in SEO & Content

  • AI Crawler Access Check: Who Gets a 403

    SEO & Content

    SKILL.md · v1.0.0 · 9.5 KB

    Reads the results of probing a website with AI-crawler user agents (status codes per bot, a control request, sometimes robots.txt or the site's settings) and says what they really show as JSON - whether training bots, search bots and user-triggered agents are open, blocked, mixed or unknown, what is behind a refusal, and whether the robots.txt that answered is the site's own file. Knows the traps - a bare bot name proves nothing and lies differently for each bot, a blocked training bot is a choice while a blocked search bot is a defect, Python-urllib and libwww-perl are refused by Browser Integrity Check and not by the site's policy, since 15 September 2026 Cloudflare refuses training bots on zones nobody touched, and a robots.txt of only comments is a stand-in from the edge. Use when asked whether a site blocks ChatGPT, Claude, Perplexity or Google AI, how to read curl results with bot user agents, or why an AI crawler gets a 403.

    $0.05once

    • x402
    • USDC
    • Base
    Get skill

    Tested with Sonnet and Haiku, 8 Oct 2026

  • Canonical URL Decision

    SEO & Content

    SKILL.md · v1.0.0 · 14.2 KB

    Decides for every URL variant of a page whether it is the canonical URL, gets a canonical tag to another address, a permanent redirect, a noindex, a 404 or 410, or cannot be settled from the facts given, answered as JSON only with the target and a short reason per URL. Follows Google's current canonicalization guidance on duplicate content - a redirect when the duplicate is deprecated, rel=canonical when it must stay reachable (tracking parameters, print views, a product under several categories, a mobile host), noindex only for pages that should not be in results at all (site search, staging, a syndicated copy) and never as a way to pick between duplicates; page two of a list is its own canonical, a translated page is its own canonical and an untranslated copy is not, a page with no replacement is gone rather than redirected to the home page. Carries the traps measured on live sites - a noindex behind a Disallow is never read, a www host blocked by robots.txt hides its own 301, a redirect added over a cached 404 can answer 308 with no Location, a 302 left in place keeps the old address canonical. Use when asked which URL should be canonical, whether to redirect, canonical or noindex a duplicate, what to do with www, http, trailing-slash, parameter, print, mobile, paginated, language or staging variants, or how to fix a wrong Google-selected canonical.

    $0.05once

    • x402
    • USDC
    • Base
    Get skill

    Tested with Sonnet and Haiku, 8 Oct 2026

  • llms.txt Writer

    SEO & Content

    SKILL.md · v1.0.0 · 8.8 KB

    Writes an llms.txt file in the shape the llms.txt proposal defines, from a site description and a list of pages, answered as the Markdown file only. One H1 with the site name, a blockquote summary, optional plain notes, then H2 sections that hold lists of links in the form "- [name](address): notes". Every address is absolute (a relative one is joined to the stated origin) and copied exactly, never invented; pages marked noindex, private or behind a login are left out; a page listed twice appears once; the section named Optional holds only what the input marks as secondary. Notes use only facts from the input, in the language of the site, with no marketing words the input does not use. Use when asked to write, generate, fix or check an llms.txt for a site, a documentation area or a shop.

    $0.02once

    • x402
    • USDC
    • Base
    Get skill

    Tested with Sonnet and Haiku, 8 Oct 2026

  • RSS Feed Builder

    SEO & Content

    SKILL.md · v1.0.0 · 11.6 KB

    Writes an RSS 2.0 file, or an Atom one when asked, from a list of posts, answered as the XML only with no fence and no sentence around it. Dates are RFC 822 with a correct weekday, never ISO; a post with no date gets no date, a post with no image gets no image and a post with no summary gets no description, so nothing is invented. Ampersands are escaped, HTML summaries go in CDATA, every link is absolute, the guid never changes, and the Atom namespace with a self link is declared. For Pinterest auto-publish it adds the image, title, description and link the importer needs. Use when asked to build, fix or check an RSS feed or an Atom feed for readers or for Pinterest.

    $0.02once

    • x402
    • USDC
    • Base
    Get skill

    Tested with Sonnet and Haiku, 8 Oct 2026