Sometimes you need every link in one place: all the product URLs in a supplier email, the outbound links in a blog post you are auditing, the links inside a PDF catalog, or the internal links on a page you are about to redesign. Doing it by hand means clicking through source code and missing the ones hidden in buttons and images.
This URL extractor reads text and HTML and returns a clean list. When you paste HTML, it reads the actual link elements, so you also get the anchor text and rel attributes such as nofollow. When you paste plain text, it finds addresses that start with http, https or www. It runs in your browser and does not fetch any page.
How to extract links
- Paste text into the box. For a web page, open it, press Ctrl+U (Option+Command+U on a Mac) to view the source, select all, copy and paste.
- Or drop files: HTML, TXT, CSV, XML sitemaps, DOCX, XLSX or PDF. In Word and Excel files the hyperlink targets are read; in PDFs, the clickable link annotations and any URLs in the text.
- Enter Your domain (for example harborlane.com) to label links as internal or external. If the source has a canonical tag, the domain is picked up from it automatically.
- Add a Base URL if the source uses relative links like
/pages/shippingand you want full addresses. - Pick options, then copy the list or download it as CSV or TXT.
Example: one blog post snippet
The tool loads with a small piece of HTML from a store blog. It holds a canonical tag, two links to the same collection with different UTM tags, a relative link, a nofollow link and a YouTube address typed as plain text. The extractor returns:
| URL found | Anchor text | Type |
|---|---|---|
| https://harborlane.com/pages/shipping | shipping policy | internal |
| https://harborlane.com/collections/linen?utm_source=blog&utm_medium=post | linen collection | internal |
| https://www.textileexchange.org/ | Textile Exchange (nofollow) | external |
| https://harborlane.com/collections/linen?utm_source=footer | Linen | internal |
| https://www.youtube.com/watch?v=abc123XYZ09 | (plain text) | external |
Turn on Strip tracking parameters and the two collection links become the same URL, so the unique list drops from 5 to 4. That is a quick way to see which pages a post really links to, regardless of how each link was tagged.
Options explained
| Option | What it does |
|---|---|
| Show: all, internal, external | Filters by your domain. A relative link always counts as internal. |
| Subdomains count as internal | With it on, shop.brand.com and blog.brand.com are internal to brand.com. |
| Unique only | Lists each URL once and counts repeats in the CSV column times_found. |
| Strip tracking parameters | Removes utm_ tags, gclid, gbraid, wbraid, fbclid, msclkid, Mailchimp, HubSpot and similar click IDs. Other query parameters, like ?variant= or ?page=, are kept. |
| Remove #fragments | Cuts the part after #, so page#reviews and page#specs count as one page. |
| Include images, scripts and stylesheets | Also lists img src and srcset, script src, iframe src, video and audio sources and link tags such as stylesheets, icons and canonical. |
| Include mailto: and tel: | Adds contact links, labeled contact. |
The stat boxes count links found, unique links, internal, external, nofollow (including sponsored and ugc) and distinct domains. The table shows up to 1,000 rows; copy and download always include everything.
How links are found
When the input looks like HTML, the extractor parses it the way a browser would, without running any scripts, and reads the href of every a and area element. The visible text of the link becomes the anchor text. If a link wraps an image instead of text, the image's alt text is used and marked [image], which is handy for spotting image links with empty alt attributes. It then scans the visible text for written-out URLs so that addresses typed into a paragraph are not missed.
Links that cannot lead anywhere useful are skipped: javascript: links, data: URLs, and a bare # that only scrolls the page. Protocol-relative links that start with // get https: added. If the source contains a <base href> tag, relative links are resolved against it, the same way the browser does.
The CSV columns
The download has one row per link with eight columns: url, domain, type (internal, external, contact or link when no domain is set), element (link, image, script, stylesheet and so on), anchor_text, rel, times_found and source. The file is UTF-8 with a byte order mark, so it opens cleanly in Excel. Sort it by domain in a spreadsheet to see which sites a page links to most, or filter the rel column to check every affiliate link carries sponsored or nofollow.
A practical check for internal linking: paste the source of your ten most important pages one at a time, download the internal links, and combine the files. Pages that never appear in the url column are pages your own site does not link to, and those are often the ones that struggle to rank. The same files also show anchor text, so you can see whether you link to a collection as "click here" or with words people actually search for.
What you can use it for
Link audits before a redesign or migration
Paste the source of your key pages and download the internal links. That list is the starting point for a redirect map when URLs change. Check the old addresses afterwards with the redirect checker to confirm each one lands where it should.
Outbound link review
Filter to external links to see who a page links out to and which links carry nofollow or sponsored. Affiliate and review sites use this to confirm every paid link is marked. The meta tag analyzer covers the rest of a page's on-page signals.
Collecting product links from supplier mail
Suppliers often send dozens of product URLs in one message or PDF. Drop it in, filter to their domain, strip tracking tags and you have a clean import list. In AM Jarvis, the Product Importer accepts product URLs from public Shopify and WooCommerce stores, so a clean list saves real time.
Checking a sitemap
Drop a sitemap.xml file to list the URLs it holds, then sort by domain or A to Z to spot staging addresses or http links that should not be there.
Cleaning a messy URL list
If you already have URLs but they are mixed with notes, tagged with different campaigns and repeated, paste the whole block. With Unique only, Strip tracking parameters and Remove #fragments on, a long column of shared links from a spreadsheet shrinks to the distinct pages behind them, because the same page tagged five different ways counts once. Sort A to Z and the list is ready to paste into a rank tracker, a redirect test or a spreadsheet. Since the work happens in the browser, there is no upload wait and no limit on how many times you run it.
Limits to know
- Nothing is fetched. To list links on a live page, paste its source; the tool cannot follow links or crawl a site.
- Links that a page builds with JavaScript after loading are not in the raw source. Copy the rendered HTML from your browser's developer tools (right-click the html element, Copy, Copy outerHTML) to include them.
- Plain text URLs must start with http://, https:// or www. A bare domain such as harborlane.com in a sentence is not treated as a link, because it could just as well be a brand name.
- Scanned PDFs have no text layer and only their clickable links, if any, are read.
If you are researching a niche and want the pages competitors rank with rather than the links on one page, Niche Research in AM Jarvis maps real Google searches into a site plan, and the guide to niche keyword research explains the method.