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