加快网站收录的方式就是尽可能早的让搜索引擎发现,另外就是提高页面内容质量。质量问题是站长自身去把控的,那么大家可以主动来推送URL,百度URL提交可以提高网站的收录速度。
待优化改造,通过分析自动提交脚本的流程,抽取提交逻辑,实现输入Sitemap后机器人自动模拟提交,仅渲染提交业务代码,或 模拟request请求, 而,无需渲染站点真实页面,降低资源占用率和业务复杂度,提升自动提交的性能和效率。
百度自动提交脚本:
<script>
(function(){
var bp = document.createElement('script');
var curProtocol = window.location.protocol.split(':')[0];
if (curProtocol === 'https') {
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
}
else {
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
}
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();
</script>
360自动收录代码:
<script>
(function(){
var src = (document.location.protocol == "http:") ? "http://js.passport.qihucdn.com/11.0.1.js?f757a4cfb88d6de03df10aaac75ebdc5":"https://jspassport.ssl.qhmsg.com/11.0.1.js?f757a4cfb88d6de03df10aaac75ebdc5";
document.write('<script src="' + src + '" id="sozz"><\/script>');
})();
</script>
【优化思路记录】
(百度JS链接推送代码)
只要把这段代码放入你的每个页面中,每当用户访问这些页面时,就会通过这段脚本从百度下载一个1x1的gif,同时记录页面此时此刻的URL地址。
自动推送脚本的性能考虑
通过这段脚本我们可以看出:
1、它先是判断了目前的协议类型是https还是其他类型(如,http,ftp等)
2、然后下载了百度官方的一个js文件
3、再然后它将js文件的内容生成一个脚本块插入到当前页面中
4、最后会运行这个脚本块
我们可以访问这两个js文件查看其内容,也就是短短的一行。它会读取这样一个gif。
https://sp0.baidu.com/9_Q4simg2RQJ8t7jm9iCKT-xh_/s.gif 或者https://cache.tdyun.com/upload/information/20200302/54/8759.jpg
同时将window.location.href等信息推送给了百度。
这里我们可以发现两个问题:
其一、是这段脚本先后会调用两个百度资源,这造成了冗余,不利于页面加载速度。
其二、是该脚本会提交目前URL,但是许多URL会是动态URL,会带各种参数。虽然百度爬虫也有自己的判断方法,但无疑这增加了其负担。
改良版本的百度索引自动推送脚本
这个改良的脚本长下面这样,。
<link ref=“canonical” href=“http://www.domain.com” > //在各个页面的Head中定义当前页完整地址
> <script>
> (function(){
> var canonicalURL, curProtocol;
> //Get the <link> tag
> var x=document.getElementsByTagName("link");
> //Find the last canonical URL
> if(x.length > 0){
> for (i=0;i<x.length;i++){
> if(x[i].rel.toLowerCase() == 'canonical' && x[i].href){
> canonicalURL=x[i].href;
> }
> }
> }
> //Get protocol
> if (!canonicalURL){
> curProtocol = window.location.protocol.split(':')[0];
> }
> else{
> curProtocol = canonicalURL.split(':')[0];
> }
> //Get current URL if the canonical URL does not exist
> if (!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://cache.tdyun.com/upload/information/20200302/54/8758.jpg":"//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的花样,请搜索引擎只认准href中给出的URL值
这个新脚本的作用是多了一步查看页面的canonical URL的步骤。我们知道。这样一来就不会让搜索引擎为了同一个页面(或许已经索引了)多次检查你的推送页面具体内容。
这个新脚本的另一个更改是直接将上述两个js的内容拿了出来。由于这两个js中的代码其实是静态的,每次都去调用并不必要。另一方面,我们需要对r的值进行更改,将它更改为canonical URL的值,因此这样解决了我们上面的第二个问题。
最后,一点感想
自动推送是一个很实用的方法,它门槛低,容易部署,但是也有一些小问题。本文只是提供了一种方法来改进自动推送的效率和效果。
需要注意的是百度随时可能更新这两个js文件的内容,虽然该功能上线后一直没有更新不代表以后不会更新,因此需要手动及时更新代码。
关于更新的问题,可以利用nginx的cache能力,定义更新频率解决