Good links are the lifeblood of good information architecture (IA). The On-Page Link Report tool gives you the data you need to understand a page’s function (or disfunction) in your inbound Search experience.
It also has applications in several SEO use cases. is your link auditing sidekick. Available on Chrome, and powered by JavaScript, it provides snappy on-page interlinking data with filters and export options.
How It Works
Good links are the lifeblood of good information architecture. This tool gives you the data you need to understand a page’s function (or disfunction) in building Search experiences that drive results, and the flexibility to apply to various SEO practices.

When run, the code executes client-side JavaScript to scan the active browser tab.
Then, a new tab will open. Containing a user-friendly view of each link URL detected, plus additional context critical to foundational SEO.
Use Cases
It’s more than a link checker. It’s utility extends beyond on-page link structure scanning:
- Screen Reader Accessibility: Instantly view and export image alt text of a page, or product galleries without navigating CMS, scanning HTML, downloading a browser extension or firing up your web crawler.
- Funnel Mapping: With this in mind, run the report on hub pages, conversion pages, and organizational detail pages to understand how you’re distributing link equity & transforming intent.
- Benchmark the Competition: ranking shifts are often tied to competitors improving the Search experience or contextualizing link equity distribution with a buyer’s journey. Run the report an key pages on competitor sites periodically to learn from their successes (or mistakes).
- Check Your Digital Footprint: run it on socials, directory profiles, and pages that mention your brand. In any setting, the on-page link report gives you the ingredients for quick-start optimization prioritization.
Disclaimer: some websites prevent the use of bookmarklets, in some cases clearing cache and restarting the browsers fixes it.
Setup Guide
Read on for the step-by-step guide for your new on-page link analysis toolkit.
-
Create the Bookmarklet
To get started, scroll to Copy The Code and prepare you pasting skills.
Click the snippet to copy the bookmarklet code.
Create a new bookmark in your browser.
When prompted to add a URL for your new bookmark, instead paste the bookmarklet code you just copied. -
Navigate to Any Web Page
Open the page you want to audit: homepage, a product page, a blog post, or a competitor site. The choice is yours.
-
Click the New Bookmarklet
Once you’ve decided the page you’d like to audit, click the new bookmarklet. Instantly, the tool will open a new tab and render a full link report, sorted by internal and external links.
-
Filter by Location
Use the quick filters to view links in specific locations. This tool supports filtering by navigation (head nav), footer, body, and image links. Great for spotting nav clutter, broken footers, empty anchors and hidden links.
-
Customize the Data You Export
Click “COPY VISIBLE” to quickly grab a clean, spreadsheet-friendly copy of the links displayed. Paste directly into spreadsheets, word document, or slide deck. Please note that “COPY VISIBLE” is literal – if you filter to view only external image links then that’s what you’ll be able to copy.
Copy Code
javascript:(function () { function guessLocation(a) { if (a.closest('footer,[role="contentinfo"],.footer')) return 'Footer'; if (a.closest('nav,[role="navigation"],.nav,.navbar,header,[data-nav]')) return 'Navigation'; return 'Body'; } function escapeText(value) { return String(value) .replace(/&/g, '&') .replace(/</g, '<') .replace(/>/g, '>'); } function escapeAttr(value) { return escapeText(value).replace(/"/g, '"'); } var domain = location.hostname.replace(/^www\./, ''); var all = [].map.call(document.querySelectorAll('a[href]'), function (a) { var href = a.href; var loc = guessLocation(a); var img = a.querySelector('img'); if (img) { return { text: img.alt ? img.alt : %27⚠missing!%27, href: href, loc: %27Image%27, table: %27Images%27 }; } if (a.querySelector(%27svg%27)) { return { text: %27[SVG Icon]%27, href: href, loc: %27Image%27, table: %27Images%27 }; } var text = a.innerText.trim() || a.getAttribute(%27aria-label%27) || href; var targetDomain = new URL(href, location.href).hostname.replace(/^www\./, %27%27); var internal = targetDomain === domain; return { text: text, href: href, loc: loc, internal: internal, table: internal ? %27Internal%27 : %27External%27 }; }); var internals = all.filter(function (l) { return l.table === %27Internal%27; }); var externals = all.filter(function (l) { return l.table === %27External%27; }); var images = all.filter(function (l) { return l.table === %27Images%27; }); function renderTable(rows) { return %27<div class="table">%27 + %27<div class="row header">%27 + %27<div class="cell colA">Anchor</div>%27 + %27<div class="cell colB">Location</div>%27 + %27<div class="cell colC">URL</div>%27 + %27</div>%27 + rows.map(function (l) { return %27<div class="row loc-%27 + escapeAttr(l.loc) + %27">%27 + %27<div class="cell colA">%27 + escapeText(l.text) + %27</div>%27 + %27<div class="cell colB">%27 + escapeText(l.loc) + %27</div>%27 + %27<div class="cell colC"><a href="%27 + escapeAttr(l.href) + %27" target="_blank">%27 + escapeText(l.href) + %27</a></div>%27 + %27</div>%27; }).join(%27%27) + %27</div>%27; } var html = `<!doctype html><html><head><meta charset="utf-8"><title>🗲 On-Page Link Report by the Strandfish Collective</title><style>:root{--animation-speed:.3s;--light-font-color:#424242;--light-header-bg:#2c302e;--light-bg-color:#fff;--light-cell-font-color:#fe6f5e;--light-a-color:#20a39e;--dark-font-color:#dbffb9;--dark-cell-font-color:#fff;--dark-a-color:#f5cff4;--dark-bg-color:#2c302f;--dark-header-bg:#000;--font-color:var(--light-font-color);--a-color:var(--light-a-color);--cell-font-color:var(--light-cell-font-color);--header-bg:var(--light-header-bg);--bg-color:var(--light-bg-color);--fs:1em;--pad:16px;--wmax:1100px}*{box-sizing:border-box}body{font-family:Calibri,Arial,Helvetica,sans-serif;font-size:var(--fs);margin:0;color:var(--font-color);background:linear-gradient(to right,#00FFCD 0%,#F5CFF4 100%)}h1{font-size:14px;margin:0 0 8px}a{text-decoration:underline;color:var(--a-color)}button{padding:6px 10px;margin:6px 4px}.wrap{max-width:100%;margin:0;padding:var(--pad);background:var(--bg-color)}header.strandfish-seo-tool-header{background:linear-gradient(to right,#00FFCD 0%,#F5CFF4 100%);display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;font-size:.9em;padding:10px 16px}header a{text-decoration:none;color:black;font-weight:600}header .fish-icon.wave{font-size:6em;line-height:0;background:linear-gradient(90deg,#00FFCD,#F5CFF4,#00FFCD);background-size:200% 100%;-webkit-background-clip:text;-webkit-text-fill-color:transparent;animation:shimmer 3s infinite linear;cursor:pointer}@keyframes shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}header .fish-icon.wave:hover{animation-play-state:paused;transform:scale(1.1)}.filters{text-align:right;margin:0 auto 12px}.filters input[type=radio]{display:none}.filters label{display:inline-block;min-width:120px;background:var(--bg-color);border:1px solid;color:var(--font-color);padding:8px 10px;margin:4px;box-shadow:1px 3px;cursor:pointer;border-radius:0;font-weight:600}.filters input#f-nav:checked+label{background:#f5cff4;color:#000;transition:.3s;box-shadow:1px 3px #000!important;border-color:#f5cff4}.filters input#f-body:checked+label{background:#dbfeb8;color:#000;transition:.3s;box-shadow:1px 3px #000!important;border-color:#dbfeb8}.filters input#f-footer:checked+label{background:#fe6f5e;color:#000;transition:.3s;box-shadow:1px 3px #000!important;border-color:#fe6f5e}.filters input#f-all:checked+label{background:#2c302e;color:#fff;transition:.3s;box-shadow:1px 3px #000!important;border-color:#2c302e}.filters input#f-img:checked+label{background:#20a39e;color:#000;transition:.3s;box-shadow:1px 3px #000!important;border-color:#20a39e}.table{display:block;width:100%;border:1px solid #ddd;margin:12px auto;background:var(--bg-color)}.row{display:flex;transition:max-height .4s ease,opacity .4s ease;max-height:500px;opacity:1;overflow:hidden}.row.header{font-weight:bold;background:var(--header-bg);color:#fff}.cell{flex:1;padding:6px;text-align:left;word-break:break-word}.colA{flex:45%}.colB{flex:15%}.colC{flex:40%}footer{text-align:center;margin:18px 0;color:var(--font-color)}.row.filtered{max-height:0;opacity:0;padding:0;margin:0;border:0}.theme-switch-wrapper{text-align:center;margin:10px 0}.theme-switch{position:relative;display:inline-block;width:40px;height:20px}.theme-switch input{display:none}.slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;transition:.4s;border-radius:20px}.slider:before{position:absolute;content:"";height:14px;width:14px;left:3px;bottom:3px;background:#fff;transition:.4s;border-radius:50%}button#copyVisible{font-family:Calibri,Arial,Helvetica,sans-serif;font-size:10px;margin-top:0;margin-bottom:0;color:#000;background:#00ffcd;padding:8px 10px;box-shadow:1px 3px;font-weight:600;border:1px solid}.copy-status{display:inline-block;min-width:64px;margin-left:6px;font-size:10px;font-weight:600}.toc{align-content:center}</style></head><body><header class="strandfish-seo-tool-header"><div>Code by <a href="https://strandfish.com?utm_source=strandfish-seo-tools&utm_medium=bookmarklet">The Strandfish Collective</a></div><div><span class="fish-icon wave"><a href="https://strandfish.com?utm_source=strandfish-seo-tools?utm_source=strandfish-seo-tools&utm_medium=bookmarklet&utm_content=fish-icon" style="color:black;">𓆛</a></span></div><div style="text-align:right;">Discover more <a href="https://strandfish.com/seo-tools/?utm_source=strandfish-seo-tools&utm_medium=bookmarklet&utm_content=discover-seo-tools">SEO Tools</a></div></header><div class="wrap"><h1>🗲 On-Page Link Report: ${escapeText(location.hostname)}</h1><div style="display:flex;justify-content:space-between;"><div class="toc" style="align-content:center;">Jump To: <a href="#internal">Internal Links</a> | <a href="#external">External Links</a> | <a href="#images">Image Links</a><br><a href="${escapeAttr(location.protocol + '//' + location.hostname + '/sitemap.xml?utm_source=strandfish-seo-tools&utm_medium=bookmarklet&utm_content=sitemap-link')}" target="_blank">View Sitemap →</a></div><div class="filters" style="text-align:right;display:block;">Choose Report Filters: <input type="radio" id="f-all" name="loc" checked><label for="f-all">ALL</label><input type="radio" id="f-nav" name="loc"><label for="f-nav">NAVIGATION</label><input type="radio" id="f-body" name="loc"><label for="f-body">BODY</label><input type="radio" id="f-footer" name="loc"><label for="f-footer">FOOTER</label><input type="radio" id="f-img" name="loc"><label for="f-img">IMAGES</label><button id="copyVisible" type="button">COPY VISIBLE DATA</button><span id="copyStatus" class="copy-status" aria-live="polite"></span><br>or <a href="#" id="printReport">get a PDF</a></div></div><h2 id="internal">Internal Links</h2>${renderTable(internals)}<h2 id="external">External Links</h2>${renderTable(externals)}<h2 id="images">Image Links</h2>${renderTable(images)}<footer>For the latest tools check out the <a href="https://strandfish.com/blog/?utm_source=strandfish-seo-tools&utm_medium=bookmarklet&utm_content=blog-cta" target="_blank">Strandfish Blog</a><br>Updated 08/23/2026</footer></div></body></html>%60; var w = window.open('', '_blank'); if (!w) { alert('The On-Page Link Report was blocked by the browser. Allow pop-ups for this page and run the bookmarklet again.'); return; } w.document.open(); w.document.write(html); w.document.close(); var d = w.document; function selectedFilter() { if (d.getElementById('f-nav').checked) return 'Navigation'; if (d.getElementById('f-body').checked) return 'Body'; if (d.getElementById('f-footer').checked) return 'Footer'; if (d.getElementById('f-img').checked) return 'Image'; return 'All'; } function applyFilter() { var filter = selectedFilter(); [].forEach.call(d.querySelectorAll('.row'), function (row) { if (row.classList.contains('header')) return; if (filter === 'All' || row.classList.contains('loc-' + filter)) { row.classList.remove('filtered'); } else { row.classList.add('filtered'); } }); } function setCopyStatus(message) { var status = d.getElementById('copyStatus'); if (!status) return; status.textContent = message; w.setTimeout(function () { if (status.textContent === message) status.textContent = ''; }, 2200); } function legacyCopy(text) { var textarea = d.createElement('textarea'); textarea.value = text; textarea.setAttribute('readonly', ''); textarea.style.position = 'fixed'; textarea.style.left = '-9999px'; textarea.style.top = '0'; d.body.appendChild(textarea); textarea.focus(); textarea.select(); var copied = false; try { copied = d.execCommand('copy'); } catch (error) { copied = false; } textarea.remove(); return copied; } function manualCopy(text) { var textarea = d.createElement('textarea'); textarea.value = text; textarea.setAttribute('aria-label', 'Link report data ready to copy'); textarea.style.position = 'fixed'; textarea.style.zIndex = '2147483647'; textarea.style.left = '5%'; textarea.style.top = '5%'; textarea.style.width = '90%'; textarea.style.height = '80%'; textarea.style.padding = '16px'; textarea.style.background = '#fff'; textarea.style.color = '#000'; textarea.style.border = '2px solid #2c302e'; d.body.appendChild(textarea); textarea.focus(); textarea.select(); setCopyStatus('PRESS CTRL+C'); function removeManualCopy(event) { if (event.key === 'Escape') { textarea.remove(); d.removeEventListener('keydown', removeManualCopy); } } d.addEventListener('keydown', removeManualCopy); } function writeClipboard(text) { var clipboard = w.navigator && w.navigator.clipboard; if (clipboard && typeof clipboard.writeText === 'function') { return clipboard.writeText(text).then(function () { return true; }).catch(function (error) { console.warn('Instant On-Page Link Report: Clipboard API failed.', error); return legacyCopy(text); }); } return Promise.resolve(legacyCopy(text)); } function copyVisible() { var rows = [].slice.call(d.querySelectorAll('.row')).filter(function (row) { return !row.classList.contains('header') && !row.classList.contains('filtered'); }); if (!rows.length) { setCopyStatus('NO LINKS'); return; } var out = ['Anchor\tLocation\tURL']; rows.forEach(function (row) { var cells = row.querySelectorAll('.cell'); out.push([ cells[0].innerText.trim(), cells[1].innerText.trim(), cells[2].innerText.trim() ].join('\t')); }); var text = out.join('\n'); writeClipboard(text).then(function (copied) { if (copied) { setCopyStatus('COPIED'); } else { manualCopy(text); } }); } ['f-all', 'f-nav', 'f-body', 'f-footer', 'f-img'].forEach(function (id) { d.getElementById(id).addEventListener('change', applyFilter); }); d.getElementById('copyVisible').addEventListener('click', copyVisible); d.getElementById('printReport').addEventListener('click', function (event) { event.preventDefault(); w.print(); }); applyFilter(); w.focus(); })();