<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>网站分析 Web Analytics &#187; 自动跳转页面</title>
	<atom:link href="http://www.webanalytics.org.cn/tag/%e8%87%aa%e5%8a%a8%e8%b7%b3%e8%bd%ac%e9%a1%b5%e9%9d%a2/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.webanalytics.org.cn</link>
	<description>专注于网站分析工具、网站分析方法与网站分析实践</description>
	<lastBuildDate>Fri, 25 Jun 2010 05:55:20 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>自动跳转页面的跟踪</title>
		<link>http://www.webanalytics.org.cn/track-redirection-page/</link>
		<comments>http://www.webanalytics.org.cn/track-redirection-page/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 06:59:14 +0000</pubDate>
		<dc:creator>深蓝</dc:creator>
				<category><![CDATA[分析工具]]></category>
		<category><![CDATA[自动跳转页面]]></category>
		<category><![CDATA[重定向]]></category>

		<guid isPermaLink="false">http://www.webanalytics.org.cn/?p=98</guid>
		<description><![CDATA[由于种种原因，在网站中，存在一些自动跳转的页面。这类页面主要是程序方面的处理，并不会有真正的页面在浏览器中显示，然后就跳转到目标页面了。在某些情况下，这些页面也需要被跟踪。

比如，在<a title="重定向的影响" href="http://www.webanalytics.org.cn/effect-on-data-by-redirect/" target="_blank">上一篇文章</a>中提到的，电子商务网站生成订单以后，需要跳转到一个第三方平台去支付。用户选择了商品，输入地址等信息，最后确认订单。这时，会有一个不会在浏览器中显示的自动重定向页面，这里会真正的处理订单的生成，并且生成重定向的URL，最后自动通过服务端重定向到第三方的支付平台，请用户支付。

在这种情况下，如果网站希望能够跟踪到订单生成的情况，应该如何做呢？

首先想到的最简单的是，<b>在订单确认的页面中的确认按钮上增加onclick方法</b>，来监听这个按钮的点击。只要用户点击了按钮，就使用分析工具的函数生成一个虚拟的页面，这个页面来代表订单的生成。不过，这种方式，在我们遇到的这个问题中不能成立。因为，用户点击确认按钮的时候，并不能保证订单就一定生成了。点击确认按钮提交到服务器后，服务端程序还要对用户输入的信息进行一些处理和检查，然后才生成订单，这中间可能会有错误出现导致不能生成订单。如果采用这种方式，统计到的订单数会比实际的大许多。]]></description>
			<content:encoded><![CDATA[<p>由于种种原因，在网站中，存在一些自动跳转的页面。这类页面主要是程序方面的处理，并不会有真正的页面在浏览器中显示，然后就跳转到目标页面了。在某些情况下，这些页面也需要被跟踪。</p>
<p>比如，在<a title="重定向的影响" href="http://www.webanalytics.org.cn/effect-on-data-by-redirect/" target="_blank">上一篇文章</a>中提到的，电子商务网站生成订单以后，需要跳转到一个第三方平台去支付。用户选择了商品，输入地址等信息，最后确认订单。这时，会有一个不会在浏览器中显示的自动重定向页面，这里会真正的处理订单的生成，并且生成重定向的URL，最后自动通过服务端重定向到第三方的支付平台，请用户支付。</p>
<p>在这种情况下，如果网站希望能够跟踪到订单生成的情况，应该如何做呢？</p>
<p>首先想到的最简单的是，<b>在订单确认的页面中的确认按钮上增加onclick方法</b>，来监听这个按钮的点击。只要用户点击了按钮，就使用分析工具的函数生成一个虚拟的页面，这个页面来代表订单的生成。不过，这种方式，在我们遇到的这个问题中不能成立。因为，用户点击确认按钮的时候，并不能保证订单就一定生成了。点击确认按钮提交到服务器后，服务端程序还要对用户输入的信息进行一些处理和检查，然后才生成订单，这中间可能会有错误出现导致不能生成订单。如果采用这种方式，统计到的订单数会比实际的大许多。</p>
<p>那我们改进一下。我们将中间的自动重定向页面调整一下，不再使用服务端的重定向，而是<b>返回一个HTML页面，在页面中加入跟踪的代码</b>，在跟踪的代码后面放上Javascript的跳转代码。因为，服务端只有在程序执行结束以后才返回页面，在页面上放入代码，可以保证，在页面被跟踪到时，订单确确实实的生成了。</p>
<p>当看报表的时候，发现跟踪到的订单生成的数量非常少，比实际生成的数量少了很多。为什么会这样呢？</p>
<p>还记得在《<a title="脚本型网站分析工具工作原理" href="http://www.webanalytics.org.cn/principle-of-script-web-analytics-tools/" target="_blank">脚本型网站分析工具工作原理</a>》中提到的吗？脚本型网站分析工具，工作的时候，是把采集到的数据整理到一个图片请求的链接的参数里，通过请求这个位于数据收集服务器上的图片，将数据发送出去的。那么，跳转的代码虽然放在了跟踪的代码的后面，但跟踪代码执行完成的时候，并不是把数据已经发送完了，而只是生成了一个图片的对象，而在这个对象还没有被加载。那么浏览器会一边继续执行Javascript的代码，一边加载这个图片。在这种情况下，有非常大的可能，在图片还没来得及请求的时候，跳转的Javascript就被执行了。也就是说，跟踪的数据压根就没来得及发送出去。</p>
<p>问题已经找到，如何来解决呢？也许你会说，</b>跳转前增加一个延时，让图片有足够的时间被请求</b>。其实问题又来了，这个延时多长的时间合适呢？0.1秒？会不会太短，万一有的客户电脑慢那个图片还没请求出去怎么办？那2秒？会不会太长了，让用户傻等2秒的时间会不会体验太差，特别是在要让他们掏腰包的时候，多1秒等待，他们就多了1秒来改变主意。</p>
<p>有没有办法，知道什么时候图片的请求已经发送了，然后在这个时候立刻跳转到支付平台呢？这样就可以跟踪到这个页面，又能不耽误时间。</p>
<p>刚才已经说过，在跟踪代码执行完的时候，会新创建一个图片的对象。这个图片的对象，在这个时刻还没有请求，更不可能加载，我们只要能够<b>找到这个对象就能够通过回调来知道什么时候这个请求完成了，那这个时候就可以跳转了</b>。步骤如下：</p>
<p>1、找到那个图片对象。跟踪代码执行完后，紧接着在HTML的所有图片对象中遍历，找到src是指向分析工具的数据收集服务器的图片。比如，Google Analytics的服务器是www.google-analytics.com。</p>
<p>2、调用这个图片的onLoad()，注册一个回调函数。</p>
<p>3、在回调函数中，执行Javascript跳转。</p>
<p>以上是我的解决方法，如果你也遇到类似的问题，赶紧试试吧。如果大家觉得我哪里写错了，请不吝赐教哦！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webanalytics.org.cn/track-redirection-page/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
