SEO & Content

Internal Link Orphan Audit

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.

Internal Link Orphan Audit is a tested SKILL.md that 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; an agent buys it once for $0.03 over x402.

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

Not for

Crawling a site: it reads a pasted crawl export only. It does not judge content, anchor text, nofollow, external links or ranking. A thin export gives thin findings, and a crawl that failed on some pages leaves the orphan verdicts unknown on purpose.

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
Cases audited right (30 cases)30/3028/3030/3029/30

Same request on both sides; the bare side is scored on substance in any words, with a fence removed first. Read by hand, Sonnet without the skill already counted inbound links, redirects, dead links and depth correctly in most cases. It missed two: it saw the noindex tag on a page in the sitemap and set the page aside without reporting it, and when six pages had answered 5xx or timed out it named only three of them. Haiku without the skill missed one hard case: it called two pages orphans as a certain fact while several pages that might link to them had not been fetched. With the skill both models were right on all 30.

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 30 cases, read by hand, and exact by the skill's own format: it listed the pages that could not be fetched first and held back the orphan, weak and depth verdicts, found the orphan and the dead links, the links that point at a redirect, the noindex page left in the sitemap, the page that is too deep and the page held up only by the footer. It answered No findings. for the sound exports.
HaikuWeak model, claude-haiku-5-5
Right on all 30 cases, read by hand, and exact by the skill's own format: the same kinds of findings as Sonnet, in the fixed order, with the unfetched pages first and the verdicts held back when pages were missing, and No findings. for the sound exports.

Full test summary

Example

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

English · claude-sonnet-5-5

Before

Site: https://site.example Home page: / Exempt from the inbound-link rules (legal pages, footer only is fine): /terms, /privacy On every fetched page (navigation and footer): /, /terms, /privacy SITEMAP (31 addresses): https://site.example/ https://site.example/about https://site.example/kitchen https://site.example/kitchen/quick-cooker https://site.example/kitchen/slow-compost…

After

ORPHAN — /garden/dry-hinge — no page links it (not in /garden's list or any other row, and not in the navigation or footer); it is in the sitemap only, though it links out to 3 pages. Fix: link it from the /garden hub and from at least one related garden page such as /garden/warm-trellis or /garden/deep-loaf.

What is in the file

  • The answer
  • Which links count (the heart of the audit)
  • The codes
  • Rules
  • Work in this order
  • 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-19. Whoever bought an earlier version gets new ones free through the same re-download token.

  1. v1.0.0 · 2026-10-19

    First release (written, not yet tested on a model): audits a pasted crawl export of a site — one row per page with its status, its robots setting and the links in its body, the sitemap list and the navigation and footer links — and reports internal-link problems with a fixed code, the address, the reason and a fix, worst first, or exactly `No findings.`. Codes: `CRAWL-INCOMPLETE` (pages that answered 5xx or timed out; first; withholds the orphan, weak and depth verdicts), `ORPHAN`, `LINK-TO-ERROR`, `LINK-TO-REDIRECT`, `NOINDEX-IN-SITEMAP`, `TOO-DEEP`, `WEAK-INBOUND`. Facts are ours (owner-measured 18 October 2026, not re-checked; see notes/facts-2026-10-18.md); no vendor facts, so no dated line. Test: 30 cases (17 planted, 3 hard, 10 controls), 15 of the 20 defect cases from the real starting point; expected answers computed by script and re-computed from the pasted text by a second implementation (`test/control.mjs`); `test/no-leak.mjs` clean. No model was run by the writer.

    Decisions while writing (one line each): - `LINK-TO-ERROR` is 404 and 410 only; a 5xx or timeout is `CRAWL-INCOMPLETE` (the brief listed 5xx; a failed fetch is not a verdict on the link, and the same page would be both an unfetched source and a broken target). - Inbound links that all land on a redirect produce `LINK-TO-REDIRECT` alone, never `ORPHAN` or `WEAK-INBOUND` on top: fixing the link is the fix. - A redirect costs no extra click in the depth count; this is stated in the shared request of the tests, not hidden in the skill alone. - While any page is unfetched, `ORPHAN`, `WEAK-INBOUND` and `TOO-DEEP` are withheld for every page (each could vanish when the unfetched page's links become known); the three codes read straight from fetched rows stay. - An orphan is reported alone, not also as `TOO-DEEP` (unreachable); a cluster that links only to itself is `TOO-DEEP`, because each of its pages has inbound links. - Thresholds (two contextual sources, three clicks) and the exempt list are stated in the shared request of the tests, so the bare side is judged on the same rules; the skill's gain is the counting rules, the order and the refusal path. - No inbound verdict for the home page; addresses missing from the sitemap get no inbound or depth code, though their links still count. - Checks accept the code at the start of the line with a bullet or backticks, and the address as a path or a full address; they measure the page right after the code, so a page named in the reason of another line is not a false finding. - The bare side is measured on substance only (the address and a word of the finding on one line, never the code); rows of the export are excluded from matching so the input never passes by itself. - `CRAWL-INCOMPLETE` cases also fail on the bare side if a possibly-linked page is declared an orphan as a certain fact. - Price: $0.05 start; class A only if Sonnet gains at least two content cases once the test has run.

    Measured 18 October 2026 (one run per model and case, 60 with the skill and 60 without; every failure read by hand): - Content, both sides scored on the plain-words checks: Claude Sonnet 30/30 with the skill, 28/30 without; Claude Haiku 30/30 with, 29/30 without. By the skill's own format: 30/30 and 30/30 after the widening below. - Real misses without the skill: Sonnet left a noindex tag page in the sitemap unreported (it noticed the noindex and set the page aside) and named only the three unfetched pages that mattered to its verdict, not the other three that answered 5xx or timed out; Haiku called two pages orphans as a certain fact while several pages that might link to them had not been fetched. - Check widened after the run, both sides: an orphan said as "0 contextual inbound links" or "no crawled page links to it" now counts (two right bare answers had failed on wording). - Check widened after the run, both sides: in the redirect-and-depth case, the series page with one direct link plus links through a redirect may also be reported as weak; both models with the skill did so, which the skill's redirect rule supports. Every other code on that page still fails. - Price: Sonnet gained 2 content cases → $0.03 by the price table.

FAQ

Pages the crawl could not fetch: how are they treated?

When we audited our skill catalog, 77 of 120 skill pages answered 500 under a burst. Their outgoing links were counted as zero, so the audit showed pages as lonely that were linked all along. The skill lists every page that failed first and holds back the orphan, weak and depth verdicts until those pages are crawled again. This is owner-measured on 18 October 2026, not re-checked.

What does the export need to contain?

One row per page with its status, its robots setting and the links in its body, the list of sitemap addresses, and the links that every page carries in its navigation and footer. A plain list of links from page to page also works, but then redirects, errors and noindex pages cannot be judged, and the skill says nothing about them rather than guess. Addresses may be relative, full or with a trailing slash. The thresholds are ours, at least two contextual sources and at most three clicks from the home page; say so in the request if your policy differs.

Do footer and navigation links count as inbound links?

No. A link that every page carries makes every page look linked, so it says nothing about the page. A page that only the footer links to is reported as weak unless your export names it as a legal page that is exempt. Contextual means a link in the body of another page, counted once per linking page.

Does it help Claude Sonnet?

Slightly. Thirty crawl-export cases went to both models. Bare Sonnet already counted orphans, redirects and depth well and was right on 28. It set a noindex page in the sitemap aside without reporting it, and named only some of six pages that had answered 5xx or timed out. With the skill it was right on all 30. Haiku moved from 29 to 30: bare, it declared two pages orphans as certain while pages that might link to them were never fetched.

Share

Read this page as Markdown: /skills/internal-link-orphan-audit.md.

  • 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

  • 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

  • Robots.txt Policy Writer

    SEO & Content

    SKILL.md · v1.0.0 · 8.0 KB

    Turns a crawler policy written in words into a correct robots.txt, answered as the file only. Knows the mistakes that make a file do the opposite of what was meant - a crawler obeys only the one group that names it, so a GPTBot group silently drops every rule written for the star group and the private paths must be repeated; longest match wins and Allow wins a tie; Google ignores Crawl-delay; Host is a Yandex-only line; Sitemap must be an absolute address; Google-Extended is a control token for Gemini training and does not touch Google Search; training, search and user-triggered AI bots are separate tokens. Says in a NOTE comment what robots.txt cannot do, such as removing a page from Google. Use when asked to write, check or fix a robots.txt, to allow or block search engines, AI crawlers or AI training bots, or to keep private paths out of crawlers.

    $0.03once

    • x402
    • USDC
    • Base
    Get skill

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

More in SEO & Content

  • 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

  • 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

  • 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

  • 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