Broken Anchor Checker & Repair Suggestions avatar

Broken Anchor Checker & Repair Suggestions

Pricing

$2.00 / 1,000 html section link checkeds

Go to Apify Store
Broken Anchor Checker & Repair Suggestions

Broken Anchor Checker & Repair Suggestions

Find missing HTML section anchors even when pages return HTTP 200. Get source links, evidence and existing replacement candidates. No AI API key.

Pricing

$2.00 / 1,000 html section link checkeds

Rating

0.0

(0)

Developer

AGENT DOJO

AGENT DOJO

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Security

Limited permissions

Share

Find links to missing HTML sections even when the target page returns HTTP 200. Get the source page, link text, verification evidence and up to three existing replacement anchors to review.

Useful after documentation updates, heading changes, content publication and website migrations. No AI key, browser, proxy or separate subscription is required by this Actor. Apify charges depend on the configured Store pricing.

Start here

  1. Choose Extract links from pages and paste the pages you are permitted to check, or choose Check exact deep links and paste URLs containing #section.
  2. Run the Actor. Enable Check links to other origins if Pages mode should also check external references.
  3. Open the HTML repair report. Review missing_in_html, then inspect any replacement candidates before editing your site.

The default Fictional demo uses built-in HTML examples. It makes no network requests, is labelled isDemo: true, and is not evidence of compatibility with a live website. Switch modes and enter your URLs for real checks.

{
"mode": "links",
"deepLinks": ["https://www.sitemaps.org/protocol.html#xmlTagDefinitions"],
"maxLinks": 10,
"maxRequests": 10
}

Pages example

{
"mode": "pages",
"pageUrls": ["https://www.sitemaps.org/protocol.html"],
"includeExternal": false,
"maxPages": 1,
"maxLinks": 30
}

These are public smoke-check inputs, not promises that a third-party site will remain available. There is no recursive site crawl or sitemap discovery: Pages mode reads only the source URLs supplied.

What you get

Each link result contains status, sourceUrl, linkText, targetUrl, finalUrl, httpStatus, fragment, matchedId, reason, suggestions, bounded sources, occurrences, checkedAt, verificationMode and isDemo.

StatusMeaning
foundMatching HTML ID / legacy named anchor, or a supported document-top link
missing_in_htmlNo matching target in the complete fetched HTML; JavaScript may add it later
target_unavailableTarget returned HTTP 404 or 410; no fragment check charged
unverifiedTimeout, access restriction, server error, interrupted response or another verification failure
skippedRobots policy, disabled external checks or a target-document limit
unsupportedNon-HTML, unsupported charset, hash-router or text-fragment URL
no_fragmentA directly supplied URL has no section identifier
invalid_inputMalformed, credential-bearing, local or otherwise unacceptable URL

Source-page failures use recordType: "source_error". A source with no fragment links is a legitimate zero-result check, with an uncharged summary row.

The default key-value store contains REPORT (HTML), SUMMARY (coverage, limits and billing), and RESULTS (full JSON). Dataset rows can be exported through Apify. complete refers only to the supplied scope; inspect skipped/unverified results and limits before treating a report as complete.

Replacement candidates

Suggestions are ranked by lexical overlap between the old fragment, link text and existing IDs/headings. Every candidate points to an ID or named anchor found in the fetched document. A similarity score is not a probability or a guarantee of the same meaning. No website is edited automatically.

Candidate ranking is bounded to the first 2,000 IDs/named anchors; suggestionSearchLimited reports a larger document. Exact fragment matching still uses all parsed IDs. Source extraction is capped at 10,000 fragment links per supplied page and reports limited coverage if exceeded.

Pricing contract

Primary event: fragment-checked. One event per unique completed live check with status found or missing_in_html. Multiple references to the same normalized target URL and fragment share one check. Fragments on the same document reuse its HTML.

Fictional demo results, diagnostic rows, unavailable targets, fetch errors, unsupported and skipped links do not trigger this event. The Store Pricing tab is authoritative for the actual price. This implementation requires automatic per-dataset-item and Actor-start fees to be disabled so those promises remain true.

The Actor stops when the event budget or work limits are reached. Platform usage in a PPE + usage configuration, if selected by the publisher, is separate from the event budget. Review the Pricing tab before running.

Limits and privacy

  • Static UTF-8/ASCII HTML only. No JavaScript execution, login, cookies, CAPTCHA bypass or rendered visibility check.
  • Ordinary HTML anchors and legacy a[name] are supported. PDF/SVG fragments, text fragments and hash-router routes are outside this version's scope.
  • Requests respect robots.txt and declared crawl delays. If robots policy cannot be verified, the origin is not crawled. Standard ports only; private/reserved network addresses and unsafe redirect destinations are blocked.
  • Default limits: 50 source pages, 300 unique links, 200 target documents, 500 HTTP requests, 2 MB/document and 30 MB/run. Requests are sequential with at least 500 ms between requests to an origin.
  • Redirects and robots requests consume the request allowance. No proxy is used. Compressed responses that ignore the identity request are unverified.
  • Source references are capped at 25 per unique target; occurrences counts additional references. Limits and interrupted work are reported explicitly.
  • Input and output live in your Apify run storage. URLs, including query parameters, can be sensitive: use public URLs without secrets. Records are not sent to third-party AI services and page bodies are not logged.
  • missing_in_html does not prove a broken JavaScript-generated target. This is a section-link QA tool, not a guarantee of accessibility, indexing, rankings or sales.

API / n8n

Start this Actor using its Apify API endpoint and the same JSON input. After the run, read dataset items or the SUMMARY/REPORT records. In n8n, use the Apify integration to run it after content publication, then branch on status === "missing_in_html". Check summary coverage before sending a success notification.

Local development

Requires Node.js 22 or newer.

npm ci --ignore-scripts
npm test
npm run check
npm run demo
# Optional public network test; no paid API calls:
npm run smoke:live
# Run your input locally:
node scripts/run-local.js examples/input.links.json

Local reports go into output/. npm start runs the Apify SDK entry point; without a cloud environment it uses local storage. Cloud builds and owner-run cloud tests consume your own Apify credits.