SEO & Content

No-JavaScript Visibility Fix

Finds which layer keeps a page's text out of the first HTML response, so a reader that does not run JavaScript sees an almost empty page, and gives the fix for that framework or host. Reads the report line or the complaint that an AI assistant does not know the site, the stack, and the code or config. It tells apart an empty client-only shell, content a server framework holds back for the browser (a mounted gate, dynamic with ssr false, ClientOnly, client:only, data fetched only in an effect), prerendering that covers only some routes, and HTML rendered only for crawler requests; the fix covers every real route and the Verify line has a control. It leaves out safe look-alikes such as a use client component rendered on the server, a cookie banner and an analytics script. One line per finding, or exactly No findings. Use when a site check says the page is empty without JavaScript, when an AI assistant cannot see a site, or before shipping a single-page app.

No-JavaScript Visibility Fix is a tested SKILL.md that finds which layer keeps a page's text out of the first HTML response, so a reader that does not run JavaScript sees an almost empty page, and gives the fix for that framework or host; an agent buys it once for $0.02 over x402.

Tested 2026-11-06No code, no hidden instructionsv1.0.0 · 13.6 KB · perpetual license

Not for

Missing pages that answer 200, bots that get a 403 or a challenge, stale cached pages, and frameworks or hosts not named in the skill, which get a fix in the same shape marked unchecked. It reads the pasted files and the report line; it does not fetch your site.

Tested, honestly

Tested 2026-11-06 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/54/55/54/5

Scored on content only. Read by hand, Sonnet without the skill found the ready gate in the Next.js shell and said the use client mark on the page does not empty the HTML, listed the journal slugs for prerender on the React Router site, named the empty root on the Vite app without making noscript the fix, and called the Astro site fine. It missed the Lovable case: it said Lovable cannot render on the server and advised a prerender plugin, with no word about prerendering for verified crawlers. Haiku did the same on all five, including the plugin advice. The skill added that one fact to each model, plus a fixed code per cause and the exact sentence for a clean input.

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 Next.js app it found the ready gate in the shared shell component, said that the use client mark on the page was not the cause, and covered every route; on a React Router site on static hosting it saw that prerender true leaves out the journal posts and listed them from the content file; on a plain Vite app it named the empty root, did not offer the noscript line as a fix and called copy in index.html a stop-gap for the home page; on an older Lovable project it said the host prerenders only for verified crawlers, sent the owner to the TanStack Start upgrade and told them not to add a prerender plugin; on a clean Astro docs site 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 plain Vite case: the cause, the fix and the routes were correct, yet it added two extra lines after the Verify line, one listing what is not a finding and one listing what it could not check. It named the right layer on the Next.js, React Router and Lovable cases, kept the cookie banner and the tracking pixel out of every finding, and answered exactly No findings on the clean Astro site.

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://studio.example/ → 31 characters of visible text Stack: next. Next.js 15 App Router on a Node host. Real routes: /, /pricing and /journal/<slug>, for example https://studio.example/journal/clay-glazes. --- app/layout.tsx import { Shell } from "@/components/Shell"; import { CookieBanner } from "@/components/CookieBanner";…

After

CONTENT-CLIENT-ONLY — components/Shell.tsx, `if (!ready) return <div className="spinner" aria-hidden="true" />` with `ready` set only in `useEffect` — effects do not run during server rendering, so the first response holds only the spinner div and none of the `{children}` for any route — remove the `ready` gate so Shell renders `<Header />` and `<main>{children}</main>` on the server (keep any…

What is in the file

  • The answer
  • How to find the layer
  • What is NOT a finding
  • The codes
  • What each framework documents
  • 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.0, updated 2026-11-06. Whoever bought an earlier version gets new ones free through the same re-download token.

  1. v1.0.0 · 2026-11-06

    First release. Ordered by the site checker after it found that most live sites ship a page that is nearly empty without JavaScript. The idea is ours; no foreign skill was opened, facts come from the public documentation of each framework and 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 one trap and one 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: one case for Sonnet (5 of 5 against 4 of 5) and one for Haiku, the older Lovable project, so the price is $0.02. Haiku with the skill added two extra lines to the answer on one case, which the format check counts as a miss (4 of 5 by format). One check was widened after the run for both sides (copy put into noscript). `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`.

    Before release one sentence in "How to find the layer" was reworded (same rule, the layers are still read top to bottom and the first that explains the empty page wins), because its wording matched a free article on the site word for word; the models were not run again for that change.

FAQ

How many causes are there, and what are they?

Four, each under a fixed label: an empty client-only shell that nothing renders to HTML, a server framework that holds the text back for the browser, prerendering that covers only some routes, and HTML rendered only for crawler requests. A noscript line or hidden copy is called a stop-gap, never the fix.

Why does the fix name every route?

The tempting fix is applied to the home page only, and the report then turns green on that page while every deeper page stays empty. Each answer line names the routes the fix covers. The Verify line asks for a second, deeper route and for a 200 reply that is no challenge page, since a check without them also passes on a site that is broken for everyone.

Does it help Claude Sonnet?

Slightly. On five cases (a Next.js layout gate, a React Router site whose prerender skips the posts, a plain Vite app, an older Lovable project and a clean Astro site) Sonnet alone solved four, and Haiku alone also four. Both stumbled on one: the Lovable host prerenders only for verified crawlers, and they advised adding a plugin. With the skill both solved all five in content.

What does a clean site return?

The reply is the fixed sentence No findings., alone on its line, which a script can match against a single string. A cookie banner, an analytics script, a noscript tracking pixel and a client-side search box on a page whose text is already in the HTML earn no line and no remark.

Share

Read this page as Markdown: /skills/no-js-visibility-fix.md.

  • Soft 404 Fix

    SEO & Content

    SKILL.md · v1.0.1 · 12.6 KB

    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.

    $0.01once

    • x402
    • USDC
    • Base
    Get skill

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

  • React Performance Review

    Code & Engineering

    SKILL.md · v1.0.0 · 8.2 KB

    Reviews pasted React and Next.js App Router code for five performance mistakes that pass every test and then make pages slow, and lists only those, one line each with a fixed code, the place, why it costs time and the fix - or exactly No findings. It catches independent awaits written one after another so the page waits for their sum, an effect that copies something derivable during render into state, a use client mark placed on a whole page when only a small leaf needs interactivity, a heavy library imported at the top of a client file though it is used only after a click, and a new object, array or function passed every render to a memo child or an effect dependency. It leaves out the safe look-alikes: a second await that needs the first result, an effect that syncs with an outside system, and use client on a small button. Use to review React or Next.js code before release, to find why a page ships too much JavaScript or renders twice, or to gate a pull request that touches components.

    $0.01once

    • x402
    • USDC
    • Base
    Get skill

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