Google AdSense JavaScript导致多个页面加载?

UpT*_*eek 12 javascript asp.net-mvc adsense iis-7.5

更新

好的 - 我现在知道多页加载的来源!(然而,这个谜尚未解决).

似乎在向包含AdSense广告的网页发出请求,Google会立即请求完全相同的网址(一次或多次)

例如,这就是日志的样子(注意来自Mediapartners-Google的请求):

2011-07-20 09:50:20 xxx.xxx.xxx.xxx GET /requestedURL/ 80 - xxx.xxx.xxx.xxx Mozilla/5.0+(Browserstring removed) 200 0 0 1140
2011-07-20 09:50:20 xxx.xxx.xxx.xxx GET /requestedURL/ 80 - 66.249.72.52 Mediapartners-Google 200 0 64 218
2011-07-20 09:50:22 xxx.xxx.xxx.xxx GET /requestedURL/ 80 - 66.249.72.52 Mediapartners-Google 200 0 0 171
Run Code Online (Sandbox Code Playgroud)

(我应该更多地关注IIS日志,而不是我自己的应用程序日志 - 我不会发现这些多个相同的同时请求可能来自不同的来源).这也解释了为什么在用WireShark分析请求时我找不到任何奇怪的东西,以及为什么fiddler没有表现出任何奇怪的东西.

所以赏金的问题现在变成了:

  • 为什么谷歌在请求页面后如此快速地提出这些请求?(我知道他们需要评估内容的页面,但是之后会立即对我进行多次滥用.)
  • 我能做些什么来阻止这种情况?

出于兴趣:

  • 有没有其他人在他们的日志中看起来类似?(或者这个我的AdSense帐户有点奇怪)

好的,我会事先为这个长度道歉!...

关于谷歌Adsense Javascript代码导致错误,这个问题适用于此问题.(形式)Unable to post message to googleads.g.doubleclick.net. Recipient has origin something.com

我不会复制那里的所有信息,但结论似乎是AdSense JS是错误的.(如果你有时间,请阅读背景问题).我已经知道这个问题已经有一段时间了,但我决定忍受JS错误,而不是从网站上拉AdSense.

但是,最近我注意到在我的ASP.NET MVC2应用程序中,Controller Actions似乎每次请求被调用两次(有时甚至是3次). 奇怪的是,它只发生在生产服务器上. 经过一番思考后,我重新认识到Dev和Production环境之间的一个区别是AdSense javscript只在生产中有效.

为了测试这一点,我从其中一个生产页面中删除了所有的adsense代码,并且看到,多页面加载问题就消失了!

我想也许是因为页面上存在导致问题的一般JS错误,所以为了测试这个我在我自己的JS代码中引入了一些简单的错误,但是这并没有导致多页加载问题重新出现.

每个请求可以多次调用页面的一种已知情况是,存在具有空src属性的图像标记,或具有空src属性的外部资源引用.至关重要的是,AdSense JS Bug问题最受欢迎的答案指出:

"此调用中的targetOrigin参数,this.la设置为 http://googleads.g.doubleclick.net.但是,新的iframe是在src设置为about:blank的情况下编写的."

这似乎与空洞的src问题非常相似...... 这似乎太过于共同发生,而且目前我认为这就是问题所在. [编辑:这是一个红鲱鱼]

但是,我不知道我们要离开这里. 这些多个动作调用引起了实际问题(我不得不使用代码阻止,序列化事务和各种讨厌的黑客来限制不利影响).当然,我可以完全找错了树-我很困惑,我无法找到任何相关的参考资料,给出的AdSense的普及,以及问题的性质(但随后又在AdSense的结论JS Bug问题也令人惊讶).我希望这对我来说是一个愚蠢的错误,所以我需要进行健全性检查.

我想问一下社区:

  • 是否有其他人遇到此问题?或者使用AdSense的任何人是否可以复制并确认?[见下面的注释]
  • 假设问题出现在什么地方,我该怎么办?(当然不是拉AdSense)
  • 如果没有,那么可能是什么造成的呢?

致Sumarise: - 我的行动每页请求执行2次(有时3次).

  • 只有GOOGLE ADSENSE ADS出现时才会发生这种情况
  • 我删除了所有AdSense JS并在我自己的JS中引入了错误:只调用一次操作...
  • 当页面上存在空src属性时,可能会发生类似的问题
  • 对上一个问题的回答表明,AdSense JS src="about:blank"在iFrame上设置了一个
  • 我得出的结论是,src="about:blank"AdSense代码中最容易出现问题.
  • 如果我在浏览器上禁用JavaScript,则问题就会消失

只是为了记录我已经排除的事情:

  • 这是在各种浏览器中发生的:Chrome(12)Firefox(5)和IE(8).
  • 我已经在浏览器上禁用了所有插件(YSlow,Firebug等......)
  • 图像中没有空的src(src=""/ src="#"),或者我的代码中的html中没有其他外部资源
  • css(url('') )中没有空的url引用
  • 它不太可能是服务器端代码/配置问题,因为它不会发生在Dev中(开发和生产之间的一些差异是Dev中没有AdSence JS)

注意:对于任何想要复制它的人,应该注意到,奇怪的是,当多个动作调用发生时,Fiddler只显示一个请求被发送到服务器.我不知道为什么这应该是这样,但服务器日志不在:)也许有人通过空SRC时引起谁拥有这个问题以前的经验中的img标签属性可以说他们是否已经看到提琴手相同的行为.


请求额外信息

HTML(@Ivan)

以下是我如何实施Adsense(删除了ID)

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<div class="ad">
<%if (!HttpContext.Current.IsDebuggingEnabled) { %>
<script type="text/javascript"><!--
google_ad_client = "ca-pub-xxxxxxxxxxxxxxx";
/* xxxxxxxxxxxxxxx */
google_ad_slot = "xxxxxxxxx";
google_ad_width = 728;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>                     
<%} else { %>
<img src="/Content/images/googleAdMock728x15_4_e.gif" width="728" height="15" />
<%} %>
</div>
Run Code Online (Sandbox Code Playgroud)

这是由View中的RenderPartial插入的:

<% Html.RenderPartial("AdSense_XXXXXX"); %>
Run Code Online (Sandbox Code Playgroud)

TCP记录(@Tomas)

到目前为止,我已经做了一个wireshark捕获:

  1. 客户端请求有问题的 生产页面时
  2. 客户端上请求页面时,生产没有问题(即删除的AdSense)

我真的看不出两者之间的显着差异(虽然我的网络技能不是很好).需要注意的一点是,他们似乎有一个TCP retransmittion初始请求后立即HTTP请求的-我不知道那的意义.我可以确认,虽然在案例1中服务器日志报告了2次执行,而在案例2中只有一次执行.

接下来,我将在两种情况下尝试在服务器端进行TCP日志记录,并在此处发布结果.

Tom*_*mas 1

鉴于您观察到的行为似乎难以避免,我们是否可以专注于解决方法?

能否根据UserAgent区分请求,从而过滤掉请求。这对你来说是一个可行的方法吗?如果是这样,那么您可能可以基于这种方法:http://blog.flipbit.co.uk/2009/07/writing-iphone-sites-with-aspnet-mvc.html 这里他们检测iPhone,但概念是Mediapartners-Google 机器人也是如此。