← Back

Useful SEO Bookmarklets

by Alexey BogomolovUpdated Jan 21, 2026

Hey! I'm using bookmarklets for SEO, and they're super handy. Here's what you need to know:

A bookmarklet is basically a browser bookmark, but instead of opening a website it runs a small piece of JavaScript code. You save it like a normal bookmark, and the link usually starts with javascript:. When you click it while you're on a page, your browser executes that code on the current page only. It can read things like titles, headings, links, or text, show a small overlay, copy useful info to your clipboard, open helper tabs, or highlight elements on the page. It runs locally in your browser, and once you reload or leave the page, everything it changed disappears.

To create a bookmarklet:

  • Go to your bookmarks

  • Add a new bookmark (name it anything you want)

  • Paste the code into the URL/address field

  • Save it

I also recommend creating a separate folder for bookmarklets in your bookmarks so you always have quick access to them — that's their whole point.

Here's a list of my favorites:

1. Enable Text Selection and Right Click (Copy Protection Remover)

javascript
javascript:(function(){document.body.onselectstart = function() {return true;};document.body.oncopy = function() {return true;};window.addEventListener('contextmenu',function(e){e.stopPropagation()},true);})()

This bookmarklet disables right-click protection on a page and also restores text selection and copying — perfect for those annoying sites that block basic actions, and it fixes it instantly.

2. Check Indexed Pages in Google (site:domain)

javascript
javascript:(function(){const d=location.hostname.replace(/^www\./,'');const q='site:'+d;window.open('https://www.google.com/search?q='+encodeURIComponent(q),'_blank');})()

Opens Google.com in a new tab with a site:domain search for the current website, so you can quickly estimate how many pages are indexed.

3. Open Multiple URLs at Once (Bulk Tab Opener)

javascript
javascript:(function(){
  const input = prompt("Paste URLs to open (one per line, or separated by spaces/commas):","https://example.com\nhttps://example.org");
  if(!input) return;

  const urls = input
    .split(/[\s,]+/g)
    .map(s=>s.trim())
    .filter(Boolean)
    .map(u=>/^https?:\/\//i.test(u)?u:"https://"+u);

  const MAX = 25;
  const list = urls.slice(0, MAX);
  if(!list.length) return;

  let blocked = 0;
  for (const u of list) {
    const w = window.open(u, "_blank", "noopener,noreferrer");
    if(!w) blocked++;
  }

  if (urls.length > MAX) alert(`Opened ${MAX} tabs. ${urls.length - MAX} were skipped.`);
  if (blocked) alert(`Your browser blocked ${blocked} tab(s). Allow pop-ups for this site and try again.`);
})();

Important note: This bookmarklet only works if pop-ups are allowed. In Google Chrome, go to Settings → Privacy and security → Site settings → Pop-ups and redirects, and enable Sites can send pop-ups and use redirects. Also, keep in mind that ad blockers like Adblock can also block pop-ups, so you may need to disable them for this bookmarklet to work.

It opens up to 25 tabs per run, but you can change this limit by editing the MAX value in the bookmarklet if needed.

4. Open robots.txt for the Current Site

javascript
javascript:(function(){location.href='https://'+location.host+'/robots.txt';})()

Redirects your current tab to the robots.txt file of the website you're on (using the same domain).

5. Compare Page with JavaScript vs No JavaScript (Side-by-Side View)

javascript
javascript:void function(){javascript:!function(){var a=document.createElement("style");a.innerHTML="%5Cn  .side-by-side%7B%5Cn    position:absolute;%5Cn    top:0;%5Cn    width: 50vw;%5Cn    height:100vh!important;%5Cn    z-index:999;%5Cn  %7D%5Cn  .side-by-side-nojs %7B%5Cn    left:50%25;%5Cn  %7D%5Cn  .side-by-side-js %7B%5Cn    left:0;%5Cn  %7D%5Cn  .side-by-side-label %7B%5Cn    padding: 10px;%5Cn    background-color: black;%5Cn    color: white;%5Cn    font-size: 12px;%5Cn    position: absolute;%5Cn    z-index: 1000;%5Cn    margin: 10px;%5Cn    opacity: 0.7;%5Cn    text-transform: uppercase;%5Cn    font-family: 'Arial';%5Cn    pointer-events: none;%5Cn  %7D%5Cn  .no_js%7B%5Cn    left:50vw;%5Cn  %7D%5Cn  body%7B%5Cn    display:none!important;%5Cn    overflow:hidden!important;%5Cn  %7D%5Cn  ",document.head.appendChild(a);var b=document.createElement("div");b.setAttribute("class","js side-by-side-label"),b.innerText="JavaScript Enabled",document.body.insertAdjacentElement("afterend",b);var c=document.createElement("div");c.setAttribute("class","no_js side-by-side-label"),c.innerText="JavaScript Disabled",document.body.insertAdjacentElement("afterend",c);var d=document.createElement("iframe");d.setAttribute("class","side-by-side-nojs side-by-side"),d.src=window.location.href,d.frameBorder=0,d.sandbox="allow-forms allow-pointer-lock allow-popups allow-same-origin allow-top-navigation",document.body.insertAdjacentElement("afterend",d);var e=document.createElement("iframe");e.setAttribute("class","side-by-side-js side-by-side"),e.src=window.location.href,e.frameBorder=0,document.body.insertAdjacentElement("afterend",e)}()}();

6. Highlight H1–H6 Headings (Instant Heading Map)

javascript
javascript:(function(){var style=document.getElementById('bstrongemhighlight');if(style){style.remove();}else{var bStngEm=document.createElement('style');bStngEm.setAttribute('type','text/css');bStngEm.setAttribute('id','bstrongemhighlight');bStngEm.innerHTML='h1:before {content: "H1 - " !important;} h2:before {content: "H2 - " !important;} h3:before {content: "H3 - " !important;} h4:before {content: "H4 - " !important;} h5:before {content: "H5 - " !important;} h6:before {content: "H6 - " !important;} h1 {background-color: pink !important; border: solid !important; padding: 2px !important; color: black !important;} h2 {background-color: orange !important; border: solid !important; padding: 2px !important; color: black !important;} h3 {background-color: yellow !important; border: solid !important; padding: 2px !important; color: black !important;} h4 {background-color: aquamarine !important; border: solid !important; padding: 2px !important; color: black !important;} h5 {background-color: lightskyblue !important; border: solid !important; padding: 2px !important; color: black !important;} h6 {background-color: plum !important; border: solid !important; padding: 2px !important; color: black !important;}';document.getElementsByTagName('body')[0].appendChild(bStngEm);}})();void(0);

Adds visible "H1/H2/H3…" labels and colorful highlighting to every heading on the page, making the heading structure easy to scan — click again to toggle it off. Absolutely must-have.

7. Open Schema.org Validator for This Page

javascript
javascript: (function() {
   window.open('https://validator.schema.org/#url='+window.location)
})();

Opens the Schema.org Validator in a new tab and loads the current page's URL, so you can quickly check structured data (JSON-LD, Microdata, RDFa) for errors and warnings.

8. Extract All Links and Anchor Text From the Current Page

javascript
javascript:(function(){output=&apos;<html><head><title>SEO SERP Extraction Tool</title><style type=&apos;text/css&apos;>body,table{font-family:Tahoma,Verdana,Segoe,sans-serif;font-size:11px;color:#000}h1,h2,th{color:#405850}th{text-align:left}h2{font-size:11px;margin-bottom:3px}</style></head><body>&apos;; output+=&apos;<table><tbody><tr><td></td><td><h1>SEO SERP Extraction Tool</h1></td></tr></tbody></table>&apos;; pageAnchors=document.getElementsByTagName(&apos;a&apos;); divClasses=document.getElementsByTagName(&apos;div&apos;); var linkcount=0;var linkLocation=&apos;&apos;; var linkAnchorText=&apos;&apos;; output+=&apos;<table><th>ID</th><th>Link</th><th>Anchor</th>&apos;; for(i=0;i<pageAnchors.length;i++){ if(pageAnchors[i].parentNode.parentNode.getAttribute(&apos;class&apos;)!=&apos;iUh30&apos;){ var anchorText = pageAnchors[i].textContent; var anchorLink = pageAnchors[i].href; var linkAnchor = anchorLink + &apos;\t&apos;+anchorText; var anchorID = pageAnchors[i].id; if(anchorLink!=&apos;&apos;){ if(anchorLink.match(/^((?!google\.|cache|blogger.com|\.yahoo\.|youtube\.com\/\?gl=|youtube\.com\/results|javascript:|api\.technorati\.com|botw\.org\/search|del\.icio\.us\/url\/check|digg\.com\/search|search\.twitter\.com\/search|search\.yahoo\.com\/search|siteanalytics\.compete\.com|tools\.seobook\.com\/general\/keyword\/suggestions|web\.archive\.org\/web\/|whois\.domaintools\.com|www\.alexa\.com\/data\/details\/main|www\.bloglines\.com\/search|www\.majesticseo\.com\/search\.php|www\.semrush\.com\/info\/|www\.semrush\.com\/search\.php|www\.stumbleupon\.com\/url|wikipedia.org\/wiki\/Special:Search).)*$/i)){ if(anchorID.match(/^((?!hdtb_more|hdtb_tls|uh_hl).)*$/i)){ linkLocation+=anchorLink+&apos;<br />&apos;; linkAnchorText+=anchorText+&apos;<br />&apos;; linkcount++; if (anchorText === undefined) anchorText = pageAnchors[i].innerText;output+=&apos;<tr>&apos;; output+=&apos;<td>&apos;+linkcount+&apos;</td>&apos;; output+=&apos;<td>&apos;+pageAnchors[i].href+&apos;</a></td>&apos;; output+=&apos;<td>&apos;+anchorText+&apos;</td>&apos;; output+=&apos;</tr>\n&apos;; } } } } } output+=&apos;</table><br/><h2>URL List</h2><div>&apos;; output+=linkLocation;output+=&apos;</div><br/><h2>Anchor Text List</h2><div>&apos;; output+=linkAnchorText;output+=&apos;<br/>%C2%A0<br/><p align=center></p>&apos;; with(window.open()){document.write(output);document.close();}})();

Opens a new window with a table of every link (<a>) found on the page, showing each URL and its anchor text, plus copy-friendly lists of all URLs and all anchor texts. This is my must-have when reviewing donor sites for backlinks: it helps me quickly spot outgoing links to external resources, and also catch signs of a hacked site by revealing suspicious or hidden links (in which case this donor is an instant no-go).

9. Replace Images With Alt Text

javascript
javascript:(function(){function toArray (c){var a, k;a=new Array;for (k=0; k < c.length; ++k)a[k]=c[k];return a;}var images, img, altText;images=toArray(document.images);for (var i=0; i < images.length; ++i){img=images[i];altText=document.createTextNode(img.alt);img.parentNode.replaceChild(altText, img)}}());

Swaps every image on the current page with its alt text, so you can instantly see which images have meaningful alt attributes and which ones are missing or empty.

Important: this changes the DOM on the current page, but everything will revert back after you reload.

10. Open This Page in the Wayback Machine (Archive History)

javascript
javascript:(function(){ window.open(&apos;http://web.archive.org/web/*/&apos;+location.href)})();

Opens the Internet Archive's Wayback Machine for the current URL in a new tab, so you can quickly check older snapshots and see how the page looked in the past.

A Few More Words About Bookmarklets

Thanks for reading — I hope this list of my bookmarklets was useful and will come in handy in your work (even if it's just one of them; the right-click/unblock one has saved me more than 100 times).

I only included the 10 I actually use. There are many more out there for different purposes — you can find plenty online or create your own. Any AI like Claude or chatGPT can generate almost any small script from your prompt in no time.

P.S. And RIP to my favorite bookmarklet: checking a page's Google cache. It was incredibly useful and by far my most-used one, but Google removed that feature back in 2024 — and the bookmarklet was gone with it.