First CH AppsSmall apps that need a server

日本語

First CH Apps / Broken Link & Image Alt Checker

Broken Link & Image Alt Checker

Enter one URL and our server pulls every link (a href) written on that page, fetches them, and reports the broken ones. It also lists images whose alt attribute is missing or unhelpful. Made for the checks you run before handing a site over.

Only the page you enter is examined — this never crawls a whole site. If you already have a list of URLs, use the Bulk HTTP Status Check; to follow a single redirect chain, use the Redirect Chain Tracer.

Up to 40 links are fetched; anything beyond that is labelled “not checked”.

How to read it

Links are deduplicated before they are fetched (three copies of one URL become one row labelled “3 occurrences”). Trailing #fragments are stripped before counting.

404 (not found) and 410 (gone) are the real broken links. 403 means our server was refused — such pages often open fine in a browser (bot protection). A 3xx is harmless if its destination works, but updating the link to the new URL is safer.

“Missing” and “empty” alt are not the same thing. A missing attribute makes screen readers announce the filename, so fix those first; alt="" is the correct way to mark a decorative image, so it is counted as a breakdown rather than flagged. Filenames left in alt, generic words like “image”, and alt text over 125 characters are listed for review.

Only the page you enter is examined; the pages behind those links are not crawled. Links and images injected later by JavaScript are not in the HTML, so they are out of scope.

The first 40 links are fetched and the rest are shown as “not checked” (to stay inside the free-tier subrequest limit). Each link times out after 8 seconds and follows at most 5 redirects.

SERVER PROCESSING — what we send and what we keep

Sent: only the URL you enter. Our server (Cloudflare Workers) fetches that page with a public GET and then requests each link found on it. No cookies and no credentials are sent.

Stored: nothing. The check lives entirely inside one request and writes neither the URL nor the results to any database (no KV, no D1). It leaves memory when the request ends. There is no login and no account.

Returned: the extracted link URLs with their status, plus each image's src and alt verdict. The fetched HTML itself is never returned — this app cannot be used to browse other sites through us.

Note: pages behind a login, internal networks, localhost and private IPs are rejected. Because our server is not signed in, results for members-only pages can differ from what you see.

Use it as an API

POST /link-check/api/inspect with JSON ({"url": "https://example.com/"}) and you get the same results back as JSON. /link-check/api/extract returns the extracted links and images without fetching them, and /link-check/api/check takes a list of URLs (up to 10 per request) and returns their status.