Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 过滤掉广告系统中的机器人和蜘蛛。阻挡太过分了_Javascript_Web Crawler_Bots - Fatal编程技术网

Javascript 过滤掉广告系统中的机器人和蜘蛛。阻挡太过分了

Javascript 过滤掉广告系统中的机器人和蜘蛛。阻挡太过分了,javascript,web-crawler,bots,Javascript,Web Crawler,Bots,我们有一个内部广告系统,并不断与机器人和蜘蛛作战。显然,我们希望获得尽可能接近100%的有效印象,我有一个特别的广告区,我的实验 这个广告区只出现在网站的一个页面上,所以我将该页面的谷歌分析页面浏览量与该广告区的印象计数进行比较,并试图让它们尽可能接近 基本的保护措施包括,一个已知的机器人/蜘蛛列表,使用javascript为广告服务,以及一个自动收集新的爬虫/机器人的蜜罐 这使得广告投放量占页面浏览量的130-150%。也就是说,机器人触发的是印象,而不是页面浏览量 于是我开始只在鼠标移动时加

我们有一个内部广告系统,并不断与机器人和蜘蛛作战。显然,我们希望获得尽可能接近100%的有效印象,我有一个特别的广告区,我的实验

这个广告区只出现在网站的一个页面上,所以我将该页面的谷歌分析页面浏览量与该广告区的印象计数进行比较,并试图让它们尽可能接近

基本的保护措施包括,一个已知的机器人/蜘蛛列表,使用javascript为广告服务,以及一个自动收集新的爬虫/机器人的蜜罐

这使得广告投放量占页面浏览量的130-150%。也就是说,机器人触发的是印象,而不是页面浏览量

于是我开始只在鼠标移动时加载广告,页面浏览量下降到40-60%

现在这只是桌面,没有手机

我怎么会不认为现在的成就感这么低呢?没有那么多人关闭了JS,或者没有鼠标浏览

事实上,我认为我几乎不会打断别人的印象,因为我认为大多数机器人都会模拟鼠标的运动,而不是我会把它们放得太低

有人有什么想法吗

用JS代码段编辑

adShow = 0;
document.onmousemove = function(){
    if (adShow == 0) {
            var leaderboard = CODE_FOR_AD;
            var adLeaderboard = document.querySelector('.adspace-leaderboard#adspace');
            adLeaderboard.innerHTML = leaderboard;
            adShow = 1;             
    }
}

正如您对这个答案所做的评论(正如我所预料的那样),您将JS代码片段放在打开的
body
-标记之后,因此放在实际HTML元素之前(如果您将此代码片段放在页面的
head
部分,也会发生同样的情况)。 很可能有人在加载页面的过程中移动了鼠标,因此mousemove事件可能会在HTML元素出现之前执行,因此广告空间永远不会被实际加载

您可以通过将代码片段放在
结束标记之前,或者将代码包装在
onDomReady
onLoad
事件中,轻松解决此问题。最后两个将使代码在加载所有DOM后,甚至在加载所有资产(图像等)后分别执行。在您的情况下,
onDomReady
就足够了

像这样:

document.onDomReady = function(){
    adShow = 0;
    document.onmousemove = function(){
        if (adShow == 0) {
                var leaderboard = CODE_FOR_AD;
                var adLeaderboard = document.querySelector('.adspace-leaderboard#adspace');
                adLeaderboard.innerHTML = leaderboard;
                adShow = 1;             
        }
    }
}

正如您对这个答案所做的评论(正如我所预料的那样),您将JS代码片段放在打开的
body
-标记之后,因此放在实际HTML元素之前(如果您将此代码片段放在页面的
head
部分,也会发生同样的情况)。 很可能有人在加载页面的过程中移动了鼠标,因此mousemove事件可能会在HTML元素出现之前执行,因此广告空间永远不会被实际加载

您可以通过将代码片段放在
结束标记之前,或者将代码包装在
onDomReady
onLoad
事件中,轻松解决此问题。最后两个将使代码在加载所有DOM后,甚至在加载所有资产(图像等)后分别执行。在您的情况下,
onDomReady
就足够了

像这样:

document.onDomReady = function(){
    adShow = 0;
    document.onmousemove = function(){
        if (adShow == 0) {
                var leaderboard = CODE_FOR_AD;
                var adLeaderboard = document.querySelector('.adspace-leaderboard#adspace');
                adLeaderboard.innerHTML = leaderboard;
                adShow = 1;             
        }
    }
}

您可以发布javascript代码片段来检测鼠标移动并触发广告加载吗?可能是出了什么问题。发布了JS代码片段。你把这个JavaScript放在你的页面的什么地方了?你能发布javascript代码片段来检测鼠标移动并触发广告加载吗?可能是出了什么问题。发布了JS代码片段。你把这个JavaScript放在你的页面的什么地方了?在头部?在“.adspace排行榜#adspace”元素之后?不。就在开头的body标签下面。好的,我认为这就是问题所在。所以我想你应该试试上面的方法,或者把JS放在body closing标签下面。那么我的答案解决了你的问题了吗?如果是这样,你能把我的答案贴上“答案”的标签吗?它没有效果。我猜在确认鼠标移动并加载广告所需的时间内,人们可以在加载广告之前单击并离开页面。在“.adspace leaderboard#adspace”元素之后?不。就在开始正文标签下面。好的,我认为这就是问题所在。所以我想你应该试试上面的方法,或者把JS放在body closing标签下面。那么我的答案解决了你的问题了吗?如果是这样,你能把我的答案贴上“答案”的标签吗?它没有效果。我猜在确认鼠标移动和加载广告所需的时间内,人们能够在加载广告之前单击并离开页面。