1. 程式人生 > 其它 >WordPress百度自動推送JS優化,規避錯誤、重複推送問題

WordPress百度自動推送JS優化,規避錯誤、重複推送問題

導讀:關注 SEO、關注收錄的站長,應該都知道百度搜索提供了一段自動推送的 js 程式碼,可將任意網頁推送到搜尋引擎,加快收錄。但是,這段程式碼並不是簡單的增加到網頁中萬事大吉了!百度埋坑技術,你我都懂的!本文主要分享埋坑之自動推送 JS 程式碼的優化...

一、問題描述

百度近些年推出過多種收錄推送工具,比如結構化資料外掛、主動推送、自動推送 js 等等。每一次張戈都會對這些東西進行優化處理,主要是因為這些工具都會出現重複推送的弊病!雖然百度並沒有申明重複推送會帶來什麼副作用。但根據我個人的經驗,同一篇文章,如果重複推送,可能會讓百度蜘蛛認為你這文章更新頻繁,不穩定從而進入收錄沙盒短期內不會展示!

這一點,在以往的文章中我都反覆提出過:

BaiduSubmit:百度 WordPress 結構化資料外掛(改進版) WordPress 百度連結主動提交外掛:Baidu-links-submit 優化版 WordPress 釋出文章主動推送到百度,加快收錄保護原創

對於百度最新推出的自動推送 JS 程式碼,通過站長平臺的反饋來看,依然存在重複推送的坑:

Ps:看到這個回覆,其實我是打心底鄙視了百度一把!這 js 只需要新增到新頁面?那新頁面收錄之後,我們再去刪除 js 程式碼?那我還要經常關注頁面是不是被收錄?那幾萬個頁面的網站還得靠工具檢測咯?

重複推送到底有沒有副作用,百度並沒有給我明確的答覆。不過管理員明確回覆,無需新增主動推送,就算是沒有副作用,已收錄的頁面也新增自動推送 js 程式碼,也會浪費每天的可推送額度( 當天剩餘的可推送 url 條數)!

另外,我們知道,很多時候多個 url 地址其實是同一個頁面內容,比如:

http://zhangge.net/liuyan.html
http://zhangge.net/liuyan.html/comment-page-34/#comments

而且,當我們給頁面帶上查詢引數,顯示的依然是同一個頁面內容,但是 Url 地址變了!!那麼自動推送 js 獲取到的 Url 也變了!它就會將這個 Url 推送到搜尋引擎!實際上,這些相同內容的頁面我們並不希望重複抓取和收錄!

二、問題解決

根據上面的分析,這類自動推送 js 程式碼就不能整站新增,而是隻需新增到未收錄且正規 Url 的頁面。

比如:

http://zhangge.net/5093.html 百度已收錄,這種頁面不新增

http://zhangge.net/5096.html 百度未收錄,這種頁面要新增

http://zhangge.net/5096.html?from_weixin 百度未收錄,但屬於重複內容頁面,所以不新增

已收錄、未收錄的判斷,關注張戈部落格的朋友肯定記得我之前在部落格分享過百度是否收錄的外掛和程式碼吧!而對於是否是正規頁面,也只需要新增一個簡單判斷。

/**
* WordPress百度搜索自動推送、主動收錄JS優化 By 張戈部落格
* 文章地址:http://zhangge.net/5100.html
* 轉載請保留出處,謝謝合作!
**/
add_action( 'wp_footer', 'bdPushData', 999);

if(!function_exists('baidu_check_record')){
  function baidu_check_record($url,$post_id){
    $baidu_record  = get_post_meta($post_id,'baidu_record',true);
    if( $baidu_record != 1){
        $url='http://www.baidu.com/s?wd='.$url;
        $curl=curl_init();
        curl_setopt($curl,CURLOPT_URL,$url);
        curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
        $rs=curl_exec($curl);
        curl_close($curl);
        if( BD_PUSH == 'yes' && !preg_match_all('/提交網址/u',$rs) && preg_match_all('/百度為您找到相關結果/u',$rs)){
            update_post_meta($post_id, 'baidu_record', 1) || add_post_meta($post_id, 'baidu_record', 1, true);
            return 1;
        } else {
            return 0;
        }
    } else {
       return 1;
    }
  }
}

if(!function_exists('bdPushData')){
  function bdPushData() {
    global $wpdb;
    $post_id = ( null === $post_id ) ? get_the_ID() : $post_id;
    $currentUrl = home_url(add_query_arg(array()));
    //這裡修改了下:給get_permalink指定了文章ID
    if(baidu_check_record(get_permalink($post_id), $post_id) == 0 && $currentUrl == get_permalink($post_id)) {
        echo "<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);
            })();
            (function(){
                var src = (document.location.protocol == 'http:') ? 'http://js.passport.qihucdn.com/11.0.1.js?af9e600e6a4ba6d33cd7f1b088210cf7':'https://jspassport.ssl.qhimg.com/11.0.1.js?af9e600e6a4ba6d33cd7f1b088210cf7';
                document.write('<script src="' + src + '" id="sozz"></script>');
            })();</script>";
   }
 }
}

如上 PHP 程式碼,新增到主題 functions.php 即可。當頁面未被百度收錄,且被訪問的頁面地址等於 WordPress 唯一頁面地址時,將會輸出百度自動推送 js 程式碼,不符合條件的頁面則不會輸出。

2016 年 5 月 31 日更新說明:有朋友反饋收錄判斷不準確,花時間 DEBUG 看了下,發現抓取到的百度搜索結果可能是空白內容等錯誤內容,導致判斷為已收錄! 所以,上述程式碼加入百度搜索結果必要關鍵詞【百度為您找到相關結果】的條件判斷,目前來看應該比較準確了,已在使用的朋友請更新到最新程式碼。

三、其他說明

和以前分享的百度是否收錄程式碼一樣的工作原理,文章載入時,會在百度搜索當前文章的 url 地址,如果百度未收錄,查詢結果中會匹配到【沒有找到該 URL。您可以直接訪問】或【很抱歉,沒有找到與】文字內容。當代碼確認頁面已收錄時,將會在文章中新增一個值為 1 的 baidu_record 自定義欄目。

只有當 baidu_record 這個自定義欄目的值不存在時,程式碼才會去百度查詢收錄結果。並且在確認未收錄之後,才會在網頁 footer 中輸出自動推送 js 程式碼。

這樣就規避了已收錄頁面重複推送和百度實時查詢導致載入慢兩個問題!

另外,其實還有另一個值得關注的坑:百度統計程式碼也會自動推送,是否也存在本文提到的問題,就不得而知了。

最後,順便說明一下,360 搜尋也推出了主動收錄 js 程式碼,喜歡折騰的朋友可以參考本文進行優化。

效果補充:實施後,自動推送數量以從 200+降為 20+,說明已收錄的文章不會重複推送了。