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

Introduction to

Setting up Social Media.

Course dates to be announced.

If you'd like to be the first to hear about our new courses, please enter your details below.

Learning Outcome 

bottom of page