天天看點

百度站長連結送出的js代碼推送進化版

百度站長連結送出的js代碼推送進化版

百度站長平台提供連結索引的自動送出 JS 腳本已經有一段時日了。用百度自己的話講:JS 連結推送代碼以網頁為最小對象,服務于全平台多終端,PC 站和移動站均可使用。安裝代碼的頁面在任意平台(浏覽器、微信、微網誌)被加載時,頁面連結會被第一時間推送給百度,進而提高站點新内容的發現速度。

原來的代碼長這樣:

//百度 JS 連結推送代碼
(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);
})();           

複制

隻要把這段代碼放入你的每個頁面中,每當使用者通路這些頁面時,就會通過這段腳本從百度下載下傳一個 1×1 的 gif,同時記錄頁面此時此刻的 URL 位址。

改良版本的百度索引自動推送腳本

這個改良的腳本長下面這樣,如果你對 js 一竅不通,那麼請用一下代碼替換原來百度官方的代碼。

//改良版本的百度索引自動推送腳本
	(function(){
		var canonicalURL, curProtocol;
		//Get the  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":"//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);})();           

複制

已加入了注釋,下面開始代碼解說。

  • 這個新腳本的作用是多了一步檢視頁面的 canonical URL 的步驟。我們知道canonical 屬性表示該頁面縱有千種 URL 的花樣,請搜尋引擎隻認準 href 中給出的 URL 值。這樣一來就不會讓搜尋引擎為了同一個頁面(或許已經索引了)多次檢查你的推送頁面具體内容。
  • 這個新腳本的另一個更改是直接将上述兩個 js 的内容拿了出來。由于這兩個 js 中的代碼其實是靜态的,每次都去調用并不必要。另一方面,我們需要對 r 的值進行更改,将它更改為 canonical URL 的值,是以這樣解決了我們上面的第二個問題。

最後,一點感想

自動推送是一個很實用的方法,它門檻低,容易部署,但是也有一些小問題。本文隻是提供了一種方法來改進自動推送的效率和效果。

需要注意的是百度随時可能更新這兩個 js 檔案的内容,雖然該功能上線後一直沒有更新不代表以後不會更新,是以需要手動及時更新代碼。

沈唁志|一個PHPer的成長之路!

原創文章采用CC BY-NC-SA 4.0協定進行許可,轉載請注明:轉載自:百度站長連結送出的js代碼推送進化版