A genuine way to catch broken internal links without live requests
Actually checking whether a link returns a working page normally means sending a real network request to that URL and reading back its HTTP status code — something a browser-based tool can't reliably do for arbitrary external sites, since cross-origin requests are blocked by design for security reasons. For your own internal links, though, there's a fully honest workaround that doesn't require any live request at all: if you already know the complete, current list of valid URLs on your own site — which you do, since it's your site — you can simply compare every internal link found on a page against that known-good list, entirely offline.
This tool does exactly that. Paste a page's HTML, and separately paste your own list of valid URLs or paths (a sitemap's URL list works well here, or an export from your CMS), and it extracts every internal link from the page and checks each one against your provided list. Any link pointing somewhere not on that list is flagged, since it's either a genuine broken link — pointing at a page that was deleted, renamed, or never existed — or simply a URL your valid list is missing, which is also worth knowing about.
Getting a useful valid-URL list
The quality of this check depends entirely on how complete and current your valid-URL list is. A convenient source is your site's own XML sitemap, since it should already represent a maintained list of every page you want discoverable — you can extract just the URLs from a sitemap.xml file and paste them in here, one per line. Alternatively, many content management systems can export a full list of published page URLs directly, which serves the same purpose. Whichever source you use, keep in mind that this list needs to be paths or URLs specifically, one per line, without any surrounding XML tags or extra formatting for the comparison to work correctly.
Why paths are normalized before comparing
To avoid flagging harmless differences as broken links, this tool normalizes every URL down to its path before comparing — stripping the domain, protocol, and any trailing slash, so "https://example.com/about" and "/about/" and "/about" are all treated as the same page. This means the check focuses on whether the actual page exists in your list, not on cosmetic differences in how a link happens to be written, which would otherwise create a flood of false positives on a page that mixes relative and absolute internal links.
What this tool intentionally doesn't do
This check only validates against the list you provide — it has no way to verify that list itself is accurate or that a URL on it is actually still live on your server, since that would again require a real network request. It also doesn't check external links, mailto or tel links, or anchor-only fragment links, all of which are deliberately skipped since they're outside what a same-site valid-URL comparison is meant to catch. Use this as a fast, honest first pass for internal link hygiene, paired with periodically refreshing your valid-URL list so the comparison stays meaningful as your site changes.