SEO & Content

Soft 404 Fix

Finds which layer makes a page that does not exist answer 200 OK, the soft 404 that Search Console reports and site checks flag, and gives a fix that keeps every real route working plus the checks to run afterwards. Reads the report line or notice, the hosting name and the config or code that serves unknown paths - a catch-all rewrite to index.html on Netlify, Vercel, Firebase, Render or Cloudflare, an nginx fallback, an app route that sends the page shell, an error page set up as a redirect or given a new status, a Next.js notFound that comes after streaming has begun. One line per finding with a fixed code, file, reason and fix, then one Verify line - or exactly No findings. when unknown paths answer 404. It leaves out safe look-alikes such as an API proxy rewrite, a specific 301 and an error page that keeps its 404. Use when a site check or Search Console reports a soft 404, when a random URL answers 200, or before shipping a single-page app or an error-page config.

Soft 404 Fix is a tested SKILL.md that finds which layer makes a page that does not exist answer 200 OK, the soft 404 that Search Console reports and site checks flag, and gives a fix that keeps every real route working plus the checks to run afterwards; an agent buys it once for $0.01 over x402.

Tested 2026-11-05No code, no hidden instructionsv1.0.1 · 12.6 KB · perpetual license

Not for

Redirect maps for deleted pages, canonical tags, cached 404s in an ISR cache, and hosts or servers not named in the skill, which get a fix in the same shape marked unchecked. It reads the pasted config and code and the report line; it does not request your site.

Tested, honestly

Tested 2026-11-05 with a strong and a weak model.

With and without the skill

Results with and without the skill, for Sonnet and Haiku
SonnetHaiku
withwithoutwithwithout
Cases fixed right (5 cases)5/55/55/55/5

Scored on content only, with a fence removed first. Read by hand, Sonnet without the skill already named every layer, kept the real routes, wrote the control that a real page still answers 200 and gave a clean answer on the Workers setup; it also added useful extras such as missing assets falling into the same catch-all. Haiku without the skill did the same on all five. So on these five cases the skill did not add content for either model; what it adds is a fixed code per cause, one line per finding, a Verify line and the exact sentence for a clean input, which the side without it does not give.

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 5 cases, read by hand. On a Netlify single-page app it named the wildcard rewrite to index.html, kept the API proxy and the 301, and rewrote only the real routes with a 404.html; on a Next.js site it found that loading.tsx starts the stream before notFound() runs and left the manuals route alone; on an Express server it named the catch-all that sends the shell and added a last 404 handler; on an Apache site it named the ErrorDocument with a full URL that turns into a redirect. On the clean Workers setup with a 404 page it answered exactly No findings.
HaikuWeak model, claude-haiku-5-5
Right on 4 of 5 cases by the skill's own format checks, read by hand, but it missed the one-line format on the Express case: the cause, the fix and the real routes were correct, yet it added a code block and two paragraphs after the finding line. It named the right layer on the Netlify, Next.js and Apache cases and answered exactly No findings on the clean Workers setup. On the Next.js case its Verify line named the not-found heading instead of the home page; the check was widened to accept that.

Full test summary

Example

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

English · claude-sonnet-5-5

Before

Report line: GET https://news.example/zz404probe-k3m9q2xa → 200 Stack: Next.js 16 App Router on Cloudflare Workers (OpenNext). Articles live at /<slug>, for example the real article https://news.example/launch-notes; the manuals live at /docs/<id>. --- app/[slug]/page.tsx import { notFound } from "next/navigation"; import { getArticle } from "@/lib/articles";…

After

STREAMED-NOT-FOUND — app/[slug]/loading.tsx (the `Loading` component) above the `notFound()` call in app/[slug]/page.tsx — loading.tsx wraps the page in a Suspense boundary, so its fallback streams first with status 200 and the later `notFound()` only swaps the screen and adds noindex, which is why /zz404probe-k3m9q2xa answers 200 — delete loading.tsx (or move the `getArticle(slug)` existence…

What is in the file

  • The answer
  • How a status gets decided
  • What is NOT a finding
  • The codes
  • The fix for each host
  • Rules
  • Work in this order
  • Short example

Languages

English. 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.1, updated 2026-11-05. Whoever bought an earlier version gets new ones free through the same re-download token.

  1. v1.0.1 · 2026-11-05

    Two phrases of the instructions reworded (the Express line and the last step of the work order), so that no free article on the site repeats the paid wording. The rules, the codes and the answer format are unchanged; the tests were not run again for this edit.

  2. v1.0.0 · 2026-11-05

    First release. Ordered by the site checker after it found that most live sites answer 200 for a URL that does not exist. The idea is ours; no foreign skill was opened, facts come from the public documentation of each host (see notes/ideas.md). Output: one line per finding with a fixed code, then one Verify line, or exactly `No findings.`

    Test: five cases written by hand (four planted, each with a safe look-alike, one clean control), one run on Claude Sonnet and one on Claude Haiku with the skill, and the same runs without it. Content gain over the side without the skill: none for Sonnet (5 of 5 against 5 of 5) and none for Haiku, so the price is $0.01. Two checks were widened after the run for both sides (the 404-body element of the Verify line, the wording of the real-route control) and one forbidden pattern was narrowed to ignore the word change. `test/control.mjs` shows that the checks pass on the ideal answers and fail on realistic wrong ones, on both sides. See `test-summary.json`.

    After the runs (listing wording only, rules and SKILL.md unchanged): FAQ and keywords reworded for the uniqueness gate; case order in cases.json changed so that the public example is a different case; no model call was repeated.

FAQ

Four codes: what are they?

Four, each with a fixed code: a catch-all rule in the host or server config, application code that sends the page shell for unknown paths, an error page configured as a redirect or given a new status, and a Next.js notFound call that runs after streaming has begun. A router not-found screen or a noindex tag is called a mitigation in the same line.

Why must the fix name the real routes?

The obvious cure for a catch-all rewrite is to delete it, and that makes every deep link fail when someone reloads the page. Each answer line therefore names the routes the new rule keeps, and the Verify line asks for one real route that must still answer 200, because a check without that control also passes when the whole site is down.

Does it help Claude Sonnet?

It did not on these five cases. Without the skill Sonnet already found the layer on a Netlify app, a Next.js site, an Express server and an Apache site, kept the real routes and judged a clean Workers setup correctly; with the skill it also scored five of five. Haiku matched too. The skill contributes a fixed code per cause, one line each, and a set clean reply.

What does a clean setup return?

A single sentence, No findings., on a line by itself, so a pipeline can read it. Safe look-alikes, such as an API proxy rewrite, one specific 301 or an error page that keeps its 404 status, get no line and no remark.

Share

Read this page as Markdown: /skills/soft-404-fix.md.

  • Redirect Map Builder

    SEO & Content

    SKILL.md · v1.0.0 · 8.8 KB

    Turns an old-URL list and the mappings you have into a redirect map as JSON - one rule per old URL, chains collapsed to the final target, loops reported and never emitted, queries and percent-encoding kept as written, and old URLs with no named target listed as unmapped instead of guessed. Also writes the same map as a Cloudflare Pages style _redirects file. Knows the status codes (301 for a moved page, 308 where the method must be kept and what Next.js really sends for permanent true) and the cache trap, where a redirect added over a cached 404 keeps serving a 308 with no Location until the path is purged. Use when asked to plan or write redirects for a site migration, a redesign, a URL rename or a domain change, or to check a redirect list for chains and loops.

    $0.01once

    • 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

  • 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

  • Next.js Cache Review: ISR, Tags, Redirects

    Code & Engineering

    SKILL.md · v1.0.0 · 10.9 KB

    Reviews pasted Next.js App Router code and config that runs on Cloudflare through OpenNext, for caching and ISR mistakes that serve a wrong or stale answer, or make every visit read the database. It flags an unstable_cache key whose cached shape changed while the key stayed, force-dynamic pages that disable the browser back-forward cache, a wildcard Cache-Control override that makes the whole site dynamic, a dynamic route that never starts ISR because generateStaticParams is missing, a static page reading D1 at build time, a writer that evicts a tag on every event, s-maxage trusted to cap database reads, whole pages cached instead of the data, a redirect added over a path that was cached as 404, a middleware matcher that skips robots.txt and sitemap files, and a clock stored inside cached data. Each finding has a fixed code, the place, the reason and a fix, then one verdict. Use to review Next.js caching, ISR and revalidation code, a next.config headers or redirects block, or middleware before deploying to Cloudflare.

    $0.03once

    • x402
    • USDC
    • Base
    Get skill

    Tested with Sonnet and Haiku, 8 Oct 2026

More in SEO & Content

  • Bing and IndexNow Submitter Review

    SEO & Content

    SKILL.md · v1.0.2 · 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

  • Internal Link Orphan Audit

    SEO & Content

    SKILL.md · v1.0.0 · 10.8 KB

    Reads a crawl export of a website (one row per page with its status, its robots setting and the links in its body, or a plain list of links from page to page), the sitemap list and the navigation and footer links, and reports the internal-link problems that keep pages from being found and indexed - orphan pages with no inbound link from another page, pages with a single contextual inbound link or links only from the footer, pages too many clicks from the home page or not reachable at all, links that point at a redirect or at a removed page, noindex pages listed in the sitemap, and a crawl that failed on some pages so that the orphan verdicts are unknown. Each finding has a fixed code, the address, the reason and a fix, worst first, or exactly No findings. Use for an internal link audit, to find orphan pages, to check pages with no inbound links before publishing, to check click depth, or to audit a blog or a catalog from a crawl export.

    $0.03once

    • x402
    • USDC
    • Base
    Get skill

    Tested with Sonnet and Haiku, 18 Oct 2026

  • Cloudflare Google Index Doctor

    SEO & Content

    SKILL.md · v1.0.0 · 23.6 KB

    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.

    $0.05once

    • x402
    • USDC
    • Base
    Get skill

    Tested with Sonnet and Haiku, 18 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