进化百度链接提交自动推送脚本
自动推送代码放入你的每个页面中,每当用户访问这些页面时,就会通过这段脚本从百度下载一个1×1的gif,同时记录页面此时此刻的URL地
自动推送代码放入你的每个页面中,每当用户访问这些页面时,就会通过这段脚本从百度下载一个1×1的gif,同时记录页面此时此刻的URL地址。
自动推送脚本的性能考虑
通过这段脚本我们可以看出:
- 它先是判断了目前的协议类型是https还是其他类型(如,http,ftp等)
- 然后下载了百度官方的一个js文件
- 再然后它将js文件的内容生成一个脚本块插入到当前页面中
- 最后会运行这个脚本块
我们可以访问这两个js文件查看其内容,也就是短短的一行。它会读取这样一个gif。
https://sp0.baidu.com/9_Q4simg2RQJ8t7jm9iCKT-xh_/s.gif 或者http://api.share.baidu.com/s.gif
同时将window.location.href等信息推送给了百度。
这里我们可以发现两个问题:
- 其一是这段脚本先后会调用两个百度资源,这造成了冗余,不利于页面加载速度。
- 其二是该脚本会提交目前URL,但是许多URL会是动态URL,会带各种参数。虽然百度爬虫也有自己的判断方法,但无疑这增加了其负担。
在大牛的帮助下,我们有了下面这个改良版本。
改良版本的百度索引自动推送脚本
这个改良的脚本长下面这样,如果你对js一窍不通,那么请用下图<script>…</script>部分(行6~30)替换原来百度官方的代码。
<script>
(function(){var canonicalURL, curProtocol;//Get the tagvar x=document.getElementsByTagName("link");//Find the last canonical URLif(x.length > 0){for (i=0;i if(x[i].rel.toLowerCase() == 'canonical' && x[i].href){canonicalURL=x[i].href;}}}//Get protocolif (!canonicalURL){curProtocol = window.location.protocol.split(':')[0];}else{curProtocol = canonicalURL.split(':')[0];}//Get current URL if the canonical URL does not existif (!canonicalURL) canonicalURL = window.location.href;//Assign script content. Replace current URL with the canonical URL!function(){var e=/([http|https]:\/\/[a-zA-Z0-9\_\.]+\.baidu\.com)/gi,r=canonicalURL,t=document.referrer;if(!e.test(r)){var n=(String(curProtocol).toLowerCase() === 'https')?"https://sp0.baidu.com/9_Q4simg2RQJ8t7jm9iCKT-xh_/s.gif":"//api.share.baidu.com/s.gif";t?(n+="?r="+encodeURIComponent(document.referrer),r&&(n+="&l="+r)):r&&(n+="?l="+r);var i=new Image;i.src=n}}(window);})();</script>
改进后的百度索引链接自动提交脚本
在上图中我们已加入了注释,下面开始代码解说。
- 这个新脚本的作用是多了一步查看页面的canonical URL的步骤。我们知道canonical属性表示该页面纵有千种URL的花样,请搜索引擎只认准href中给出的URL值。这样一来就不会让搜索引擎为了同一个页面(或许已经索引了)多次检查你的推送页面具体内容。
- 这个新脚本的另一个更改是直接将上述两个js的内容拿了出来。由于这两个js中的代码其实是静态的,每次都去调用并不必要。另一方面,我们需要对r的值进行更改,将它更改为canonical URL的值,因此这样解决了我们上面的第二个问题。