The Link Extractor parses pasted HTML source locally and returns a deduplicated, one-URL-per-line inventory of link targets, without ever contacting the listed destinations. Static source parsing is the right approach when you need an audit-ready list of every href on a page you can already view, without depending on a live crawl or running a browser. The tool reads start tags in the HTML you paste, identifies href values on anchor, area, and link elements, normalizes web, mail, and telephone links, removes duplicates, and surfaces the result together with transparent counts. Because all processing happens in the browser, the original HTML and the resulting targets stay on your device, and no discovered destination is ever requested. An optional base URL turns root-relative, path-relative, parent-relative, and scheme-relative href values into absolute addresses, so a partial source snippet behaves the same way as a complete document. For a legal, security, or migration audit, treat the extracted list as one input alongside a browser DOM export and a controlled crawl rather than the final word on what a page links to.

What the Extractor Reads and What It Omits
A page source can contain several different link-bearing tags. Ordinary anchors point users to documents, area elements add targets to image maps, and link elements reference stylesheets, icons, canonical pages, or alternate resources. The Link Extractor covers all three because its job is source inventory; it does not infer whether a target is navigational, canonical, preload, stylesheet, or another relationship, and it does not label internal versus external destinations.
| Element | Where it appears | Typical role |
|---|---|---|
| a | Inline in body and navigation | Clickable link to a document, fragment, mailto, or tel |
| area | Inside a map element | Hot-spot target on an image map |
| link | Inside the head | Stylesheet, icon, canonical, alternate, preload |
Before scanning, the tool strips comments and common raw-text containers such as script, style, textarea, title, iframe, noembed, and noframes. That prevents strings that merely look like anchor markup inside JavaScript or literal text from becoming false links. Template contents are also excluded by design.
The filtering step is what makes the count transparent. Empty values, same-document fragments, and executable or embedded-data schemes are skipped. In particular, javascript:, data:, and vbscript: targets are never returned, and invalid absolute URLs are dropped. Mail and telephone targets are kept because they are legitimate link destinations even though they are not web pages.
| Value seen in source | Outcome in the result |
|---|---|
| Empty href | Skipped |
| Same-document fragment (#section) | Skipped |
| javascript:, data:, vbscript: | Skipped |
| Invalid absolute URL | Skipped |
| mailto: link | Retained |
| tel: link | Retained |
| Absolute http or https | Retained, normalized |
| Relative href with a valid base | Resolved to absolute |
| Relative href without a base | Retained as written |
The parser also decodes a bounded set of attribute character references inside href values: decimal and hexadecimal numeric forms plus the small named set amp, quot, apos, lt, and gt. That covers common URL query escaping such as an ampersand inside a link target. Rare named references can remain encoded, which is preferable to silently applying a guessed or incomplete global entity table.
How to Extract Links From HTML Source
- Copy the HTML source from a page you are authorized to inspect, or obtain it through your own crawler.
- Open the Link Extractor and paste the source into the input area.
- If the source contains relative paths, add the absolute page URL into the base URL field so root-relative, path-relative, parent-relative, and scheme-relative values resolve correctly.
- Run the extraction. The output shows one target per line, plus unique, duplicate, and skipped counts.
- Copy the list for your crawl, audit, or review.
- Separately verify status, redirects, rel meaning, and links added after scripts run, since those facts live outside static source.
Reading the Unique, Duplicate, and Skipped Counts
The three counts tell you what the parser did and why the final line count may be lower than the number of href attributes in your source. The unique count is the number of distinct URLs in the final output. The duplicate count records how many additional occurrences collapsed into an earlier entry after normalization. Two identical relative links that resolve to the same absolute URL become one entry; a tracking parameter or fragment difference still counts as two distinct URLs because deduplication is exact after normalization.
The skipped count surfaces filtering decisions. An apparently short list does not hide the fact that empty values, fragments, executable schemes, or invalid URLs were removed. Reviewing the skipped count alongside the unique count is the quickest way to confirm the extraction matched your intent. A large skipped count with a small unique count usually means a section of the source contains data URIs or script blocks whose quoted href strings are being ignored on purpose.
Resolving Relative URLs With a Base URL
Without a base, the tool does not guess a host: relative values stay relative so the output never invents a context. When you supply a valid HTTP or HTTPS base URL, the browser URL model resolves relative hrefs for you. Base URLs must use HTTP or HTTPS and cannot contain credentials, which prevents a misleading resolution context and stops user information from being copied into every resolved result.
| Relative form | Meaning | Behavior with a valid http(s) base |
|---|---|---|
| /pricing | Root-relative path | Resolves against the host of the base URL |
| guide.html | Path-relative, same directory as the base | Resolves against the base directory |
| ../guide | Parent-relative | Resolves against the parent of the base directory |
| //cdn.example.com/file.js | Scheme-relative | Inherits scheme from base; host from the value |
| Any relative form, no base supplied | Relative to the source as written | Kept verbatim; the tool does not invent a host |
The product contract illustrates the canonical case: /pricing under https://example.com/products/page becomes https://example.com/pricing. Other forms follow the same browser URL model, which is why supplying the absolute page URL as the base is the cleanest way to keep partial snippets consistent with the full document.
Where the Output List Fits
A deduplicated link list is a useful starting point for several SEO and content workflows. You can feed it into a crawler to check status codes and redirects, compare it against your XML sitemap to catch unexpected destinations, or use it as a reference list when reviewing canonical and hreflang declarations on multi-region pages. For a focused SEO audit, the standard pipeline is to extract, dedupe, inspect the relative path resolution, and then run the URLs through a real crawler to verify status, redirects, and rel values; a practical walkthrough of that pipeline is in Extract All URLs From Page Source for SEO Audits.
The same list also doubles as a quick content inventory. Anchors that point to off-site resources, mailto and tel links for contact pages, and link elements for stylesheets and canonicals can all be reviewed together because the parser kept every legitimate target. Reviewing the unique and skipped counts side by side tells you which destinations were on purpose and which the tool deliberately left out.
Limits Worth Knowing Before You Trust the Output
The Link Extractor is a source parser rather than a full browser HTML tree builder. Severely malformed markup, unusual unquoted attributes, missing raw-text closing tags, or browser error recovery can produce a different DOM from the bounded scan, and the interface states that limitation. For any decision that affects indexing, migration, or compliance, compare the original source, a browser DOM export, and a real crawler instead of trusting one extraction channel.
Three operational limits shape what fits in a single paste. Input is capped at 200,000 characters to keep the interactive scan bounded, so very large documents should be split or handed to a controlled crawler. The tool cannot fetch a remote URL because arbitrary cross-origin requests are often blocked and silently contacting pasted links would create privacy and security problems; copy page source from a page you are authorized to inspect, or obtain HTML through your own crawler. Dynamic links inserted after scripts run will not exist in static source and therefore will not be found here.
Finally, the output is an inventory, not a health report. A listed target may redirect, return an error, require authentication, be blocked by robots controls, or intentionally point off-site. The extractor does not label internal versus external links, test HTTP status, evaluate rel attributes, or decide SEO quality. Review and crawl the URLs with an authorized tool if those facts matter to your audit.
For a deeper look, see SERP Snippet Preview for Large Text: Counts and Truncation.