<?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>简单生活 —— Kevin Yang的博客 &#187; Web Analytics</title> <atom:link href="http://www.imkevinyang.com/tags/web-analytics/feed" rel="self" type="application/rss+xml" /><link>http://www.imkevinyang.com</link> <description>It&#039;s all about sharing</description> <lastBuildDate>Thu, 29 Jul 2010 17:50:43 +0000</lastBuildDate> <generator>http://wordpress.org/?v=2.9.1</generator> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <item><title>Document.Referrer丢失的几个原因</title><link>http://www.imkevinyang.com/2010/01/document-referrer%e4%b8%a2%e5%a4%b1%e7%9a%84%e5%87%a0%e4%b8%aa%e5%8e%9f%e5%9b%a0.html</link> <comments>http://www.imkevinyang.com/2010/01/document-referrer%e4%b8%a2%e5%a4%b1%e7%9a%84%e5%87%a0%e4%b8%aa%e5%8e%9f%e5%9b%a0.html#comments</comments> <pubDate>Sun, 17 Jan 2010 17:19:00 +0000</pubDate> <dc:creator>Kevin Yang</dc:creator> <category><![CDATA[WebAnalytics]]></category> <category><![CDATA[Document]]></category> <category><![CDATA[Google Analytics]]></category> <category><![CDATA[Referrer]]></category> <category><![CDATA[Web Analytics]]></category> <category><![CDATA[Web分析]]></category> <category><![CDATA[不兼容]]></category> <category><![CDATA[流量分析]]></category> <category><![CDATA[空字符串]]></category><guid isPermaLink="false">http://www.imkevinyang.com/2010/01/document-referrer%e4%b8%a2%e5%a4%b1%e7%9a%84%e5%87%a0%e4%b8%aa%e5%8e%9f%e5%9b%a0.html</guid> <description><![CDATA[<h2>Referrer的重要性</h2><p>HTTP请求中有一个referer的报文头，用来指明当前流量的来源参考页。例如在www.sina.com.cn/sports/上点击一个链接到达cctv.com首页，那么就referrer就是www.sina.com.cn/sports/了。在Javascript中，我们可以通过document.referrer来获取同样的信息。通过这个信息，我们就可以知道访客是从什么渠道来到当前页面的。这对于Web Analyt&#8230;</p>]]></description> <content:encoded><![CDATA[<h2>Referrer的重要性</h2><p>HTTP请求中有一个referer的报文头，用来指明当前流量的来源参考页。例如在www.sina.com.cn/sports/上点击一个链接到达cctv.com首页，那么就referrer就是www.sina.com.cn/sports/了。在Javascript中，我们可以通过document.referrer来获取同样的信息。通过这个信息，我们就可以知道访客是从什么渠道来到当前页面的。这对于Web Analytics来说，是非常重要的，这可以告诉我们不同渠道带来的流量的分布情况，还有用户搜索的关键词等，都是通过分析这个referrer信息来获取的。</p><p>但是，出于各种各样的原因，有时候Javascript中读到的referrer却是空字符串。下面总结一下哪些情况下会丢失referrer。</p><h2>Referrer丢失的几个场景</h2><h3>修改Location对象进行页面导航</h3><p>Location对象是一个用于页面导航的非常实用的对象。因为他允许你只变更Url的其中一部分。例如从cn域名切换到com域名，其他部分不变：</p><pre class="csharpcode">window.location.hostname = &quot;<span class="str">example.com&quot;;</span></pre><p>但是，通过修改Location进行页面导航的方法，会导致在IE下丢失Referrer。</p><blockquote><p>IE5.5+ 下返回空字符串</p><p>Chrome3.0+，Firefox3.5，Opera9.6，Safari3.2.2均正常返回来源网页</p></blockquote><h3>window.open方式打开新窗口</h3><p>示例：</p><pre class="csharpcode"><span class="kwrd">&lt;</span><span class="html">a</span> <span class="attr">href</span><span class="kwrd">=&quot;#&quot;</span> <span class="attr">onclick</span><span class="kwrd">=&quot;window.open('http://www.google.com')&quot;</span><span class="kwrd">&gt;</span>访问Google<span class="kwrd">&lt;/</span><span class="html">a</span><span class="kwrd">&gt;</span></pre><p>点击此链接会在新窗口打开Google网站，我们在地址栏中输入以下js代码就可以看到发送的referrer了。</p><pre class="csharpcode">javascript:alert(document.referrer)</pre><p>测试结果：</p><blockquote><p>IE5.5+ 下返回空字符串</p><p>Chrome3.0+，Firefox3.5，Opera9.6，Safari3.2.2均正常返回来源网页</p></blockquote><p>如果是同个域名下通过此方式跳转的，那么我们可以通过访问windoww.opener对象去获取丢失的referrer信息。代码如下：</p><pre class="csharpcode"><span class="kwrd">&lt;</span><span class="html">script</span> <span class="attr">type</span><span class="kwrd">=&quot;text/javascript&quot;</span><span class="kwrd">&gt;</span>
    <span class="kwrd">var</span> referrer = document.referrer;
    <span class="kwrd">if</span> (!referrer) {
        <span class="kwrd">try</span> {
            <span class="kwrd">if</span> (window.opener) {
                <span class="rem">// IE下如果跨域则抛出权限异常</span>
                <span class="rem">// Safari和Chrome下window.opener.location没有任何属性</span>
                referrer = window.opener.location.href;
            }
        }
        <span class="kwrd">catch</span> (e) {}
    }
<span class="kwrd">&lt;/</span><span class="html">script</span><span class="kwrd">&gt;</span></pre><p>跨域的话则没辙了~</p><h3>鼠标拖拽打开新窗口</h3><p>鼠标拖拽是现在非常流行的用户习惯，很多浏览器都内置或者可以通过插件的方式来支持鼠标拖拽式浏览。但是通过这种方式打开的页面，基本全都丢失referrer。并且，这种情况下，也无法使用window.opener的方式去获取丢失的referrer了。</p><p>已测试：</p><p>Maxthon2.5.2，Firefox的FireGesture插件，Chrome3.0+，Opera9.6，Safari3.2。</p><h3>点击Flash内部链接</h3><p>点击Flash上到达另外一个网站的时候，Referrer的情况就比较杂乱了。</p><p>IE下，通过客户端Javascript的document.referrer读取到的值是空的，但是如果你使用流量监控软件看一下的话，你会发现，实际上HTTP请求中的Referer报文头却是有值的，这可能是IE实现的Bug。同时，这个值指向的是Flash文件的地址，而不是来源网页的地址。</p><p>Chrome4.0下点击Flash到达新窗口之后，Referrer也是指向的Flash文件的地址，而不是源网页的地址。</p><p>Chrome3.0和Safari3.2是一样的，都是会丢失Referrer信息。</p><p>Opera则和Firefox一样，Referrer的值都是来源网页的地址。</p><h3>HTTPS跳转到HTTP</h3><p>从HTTPS的网站跳转到HTTP的网站时，浏览器是不会发送referrer的。这个各大浏览器的行为是一样的。</p><p>例如，我们在HTTPS下使用Google Reader或是Gmail的时候，点击某个链接去到另外一个网站，那么从技术上来说，这样的访问和用户直接键入网址访问是没有什么分别的。</p><h2>Referrer丢失对于广告流量监控的影响</h2><p>Referrer如果丢失，Web Analytics就会丢掉很重要的一部分信息了，特别对于广告流量来说，就无法知道实际来源了。目前国内好多用了Google Adsense广告的网站，都使用了window.open的方式来打开广告链接，因此IE下会丢失Referrer，而我们知道，IE是目前市场份额最大的浏览器，因此其影响是很大的。很多流量统计工具会因此将这部分流量归入“直接流量”，和用户直接键入网址等价了。</p><p>对于这样的情况，需要让广告投放者在投放广告的时候，给着陆页面的Url加上特定的跟踪参数。</p><p>例如，某个Flash广告，点击之后到达的网址是http://www.example.com/，为了监控此流量是从哪个渠道过来的，我们可以修改此投放的着陆Url，改成http://www.example.com/?src=sina，类似这种方式，然后在着陆页面中使用Javascript代码提取此src参数，这样就可以得到广告来源信息。</p><p>在投放Google Adwords的时候，后台系统有一个“自动标记”的选项，当启用此选项的时候，Google在生成所有广告的着陆页面Url的时候，就会自动加上一个gclid的参数，这个参数能够将Google Analytics后台和Adwords广告后台的数据进行整合。这样就可以知道广告流量对应于哪个广告系列，哪个广告来源和广告关键词等信息了。和上面提到的思路其实是类似的。只不过Google自动帮你做了Url的修改了而已。</p><p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.imkevinyang.com/wp-content/uploads/2010/01/image_thumb24.png" width="244" height="128" /></p><p>如果你发现了其他丢失Referrer的情况，或是你有其他解决方案，欢迎和我交流~</p><p align="right">——<a href="http://www.imkevinyang.com/"><em><strong>Kevin Yang</strong></em></a></p>标签：<a href="http://www.imkevinyang.com/tags/document" title="Document" rel="tag">Document</a>, <a href="http://www.imkevinyang.com/tags/google-analytics" title="Google Analytics" rel="tag">Google Analytics</a>, <a href="http://www.imkevinyang.com/tags/referrer" title="Referrer" rel="tag">Referrer</a>, <a href="http://www.imkevinyang.com/tags/web-analytics" title="Web Analytics" rel="tag">Web Analytics</a>, <a href="http://www.imkevinyang.com/categories/techarticles/webanalytics" title="WebAnalytics" rel="tag">WebAnalytics</a>, <a href="http://www.imkevinyang.com/tags/web%e5%88%86%e6%9e%90" title="Web分析" rel="tag">Web分析</a>, <a href="http://www.imkevinyang.com/tags/%e4%b8%8d%e5%85%bc%e5%ae%b9" title="不兼容" rel="tag">不兼容</a>, <a href="http://www.imkevinyang.com/tags/%e6%b5%81%e9%87%8f%e5%88%86%e6%9e%90" title="流量分析" rel="tag">流量分析</a>, <a href="http://www.imkevinyang.com/tags/%e7%a9%ba%e5%ad%97%e7%ac%a6%e4%b8%b2" title="空字符串" rel="tag">空字符串</a><br /><h4 style="background-color:#3B3B3B;border-bottom:2px groove gray;color:#F2F2F2;margin-top:20px;padding:6px 6px 6px 15px;margin:20px 0px 0px 0px">你可能对下面的文章感兴趣</h4><ul class="st-related-posts"><li><a href="http://www.imkevinyang.com/2010/01/google-analytics%e4%b8%ad%e7%9a%84page%e7%bb%b4%e5%ba%a6.html" title="Google Analytics中的Page维度 (2010/01/04)">Google Analytics中的Page维度</a> (2010/01/04)</li><li><a href="http://www.imkevinyang.com/2009/03/ie%e4%b8%ad%e4%bd%bf%e7%94%a8windowopen%e6%89%93%e5%bc%80%e6%96%b0%e7%aa%97%e5%8f%a3%e6%97%b6%e6%97%a0%e6%b3%95%e8%8e%b7%e5%8f%96referrer%e5%af%b9%e8%b1%a1.html" title="IE中使用window.open打开新窗口时无法获取Referrer对象 (2009/03/07)">IE中使用window.open打开新窗口时无法获取Referrer对象</a> (2009/03/07)</li><li><a href="http://www.imkevinyang.com/2009/07/javascript-%e4%b8%ad%e7%9a%84false%e9%9b%b6%e5%80%bcnullundefined%e5%92%8c%e7%a9%ba%e5%ad%97%e7%ac%a6%e4%b8%b2%e5%af%b9%e8%b1%a1.html" title="Javascript 中的false,零值,null,undefined和空字符串对象 (2009/07/07)">Javascript 中的false,零值,null,undefined和空字符串对象</a> (2009/07/07)</li><li><a href="http://www.imkevinyang.com/2009/11/%e3%80%90%e6%8e%a8%e8%8d%90%e3%80%91%e4%b8%a4%e6%ac%behttp%e6%b5%81%e9%87%8f%e5%88%86%e6%9e%90%e5%b7%a5%e5%85%b7%e7%9a%84%e6%af%94%e8%be%83.html" title="【推荐】两款HTTP流量分析工具的比较 (2009/11/08)">【推荐】两款HTTP流量分析工具的比较</a> (2009/11/08)</li><li><a href="http://www.imkevinyang.com/2010/05/%e5%bd%93google-analytics%e3%80%81firefox%e5%92%8ciis%e8%b5%b0%e5%88%b0%e4%ba%86%e4%b8%80%e8%b5%b7.html" title="当Google Analytics、Firefox和IIS走到了一起&#8230; (2010/05/29)">当Google Analytics、Firefox和IIS走到了一起&#8230;</a> (2010/05/29)</li><li><a href="http://www.imkevinyang.com/2010/01/%e9%ab%98%e6%95%88%e4%bd%bf%e7%94%a8google-analytics%e8%bf%9b%e8%a1%8cweb%e6%b5%81%e9%87%8f%e5%88%86%e6%9e%90.html" title="高效使用Google Analytics进行Web流量分析 (2010/01/02)">高效使用Google Analytics进行Web流量分析</a> (2010/01/02)</li></ul>]]></content:encoded> <wfw:commentRss>http://www.imkevinyang.com/2010/01/document-referrer%e4%b8%a2%e5%a4%b1%e7%9a%84%e5%87%a0%e4%b8%aa%e5%8e%9f%e5%9b%a0.html/feed</wfw:commentRss> <slash:comments>2</slash:comments> </item> </channel> </rss>