FB
Twitter
(function () {
try {
var ua = (navigator.userAgent || "").toLowerCase();
var suspicious = false;
// Allow “good” search bots so SEO still works
var goodBots = [
"googlebot",
"bingbot",
"duckduckbot",
"slurp", // Yahoo
"linkedinbot"
];
for (var i = 0; i < goodBots.length; i++) {
if (ua.indexOf(goodBots[i]) !== -1) {
return; // let them pass
}
}
// Known “bad” / scraping user-agents
var badAgents = [
"ahrefsbot",
"semrushbot",
"mj12bot",
"python-requests",
"python-urllib",
"curl/",
"wget",
"scrapy",
"httpclient",
"java/",
"okhttp",
"guzzlehttp",
"node-fetch",
"axios",
"httpx",
"php/",
"perl",
"ruby",
"phantomjs",
"headlesschrome",
"puppeteer",
"selenium",
"spider",
"crawler"
];
for (var j = 0; j < badAgents.length; j++) {
if (ua.indexOf(badAgents[j]) !== -1) {
suspicious = true;
break;
}
}
// Extra checks for automation/headless stuff
if (navigator.webdriver) {
suspicious = true;
}
if (window.chrome && window.chrome.runtime && ua.indexOf("edge") === -1 && ua.indexOf("edg/") === -1) {
// Normal Chrome – fine
} else if (/chrome/.test(ua) && !/edge|edg\//.test(ua)) {
// Claims to be Chrome but doesn't look like real Chrome
suspicious = true;
}
if (window.screen && (screen.width === 0 || screen.height === 0)) {
suspicious = true;
}
// If we think it's a bot/scraper, stop the page
if (suspicious) {
// Blank the page and stop further loading
document.documentElement.innerHTML = "";
try { window.stop(); } catch (e) {}
}
} catch (e) {
// Fail silently – never break the site for real users
}
})();
top of page
No plans availableOnce there are plans available for purchase, you’ll see them here. bottom of page