每個站長都知道。做網站想要加快收錄的速度,必須要在想被收錄的頁面添加百度的自動推送代碼,此代碼讓用戶每次瀏覽該頁面的時候都會向百度提交一次。省去了站長的人工操作,極大的提升了收錄效率。但是這代碼中每一行的含義卻少有人知道,僅知道此代碼可以自動推送,卻不知道是如何實現的,假如知道每一行的含義,則可以根據需要進行自行設置,以降低代碼的冗余,提升運行效率。代碼如下:
<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>
我們來仔細看看這個JS代碼,它首先是用if函數判斷了當前瀏覽的網址協議是經過SSL加密過的https或者是其他類型的網址,根據不同的類型分別訪問了2個JS文件。之后會將訪問的JS文件內容生成腳本插入到當前的url頁面中,運行該腳本則會讀取對應的一個非常小體積的gif圖像,在這個過程中將url地址推送到百度中。
分析了以上代碼我們會發現,它在判斷的時候會加載2個百度的js資源,這個可以根據用戶自己的url地址類型去掉不必要的判斷,并且可以將其直接替換為gif地址。另外一點就是當訪問的url地址為動態地址,帶有非常多的參數的話,是很不利于搜索引擎爬蟲的抓取的。我們在之前使用MIP的時候接觸了一個非常有用的標簽,那就是canonical標簽,可以使用該標簽對這一點進行優化。
優化后的代碼如下:
<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://sp0.baidu.com/9_Q4simg2RQJ8t7jm9iCKT-xh_/s.gif":"http://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地址,大大減少搜索引擎爬蟲的負擔,并減少搜索引擎爬蟲對同一頁面的抓爬次數,這對于具有大量動態url的網站來說是非常大的提升。另外從優化后的代碼中也可以看到,使用了一個三元運算來對url的協議類型進行判定,判定后的結果會直接訪問百度對應的gif地址,從而去除了之前代碼訪問JS腳本的操作,也在一定程度上對頁面的性能進行了優化,提升了頁面運行的效率。
在使用優化后的代碼需要注意的是
1、將r=localcanonicalURL的值修改為用戶自己的canonical標簽所對應的url的值;
2、時常訪問gif地址,確保地址正確可以訪問,否則代碼會失效,需進行手動更新。