百度已收录

解决WordPress百度自动推送JS错误重复推送问题

  • 4
  • 1,395 阅读
  • A+
所属分类:WP优化

做过SEO优化、关注搜索引擎收录的站长们,应该都知道百度提供了自动推送的接口,可将任意网页推送到搜索引擎,从而实现快速收录。

一、问题描述

百度近些年推出过多种收录推送工具,比如结构化数据插件、主动推送、自动推送 js 等等。每一次张戈都会对这些东西进行优化处理,主要是因为这些工具都会出现重复推送的弊病!虽然百度并没有申明重复推送会带来什么副作用。但根据我个人的经验,同一篇文章,如果重复推送,可能会让百度蜘蛛认为你这文章更新频繁,不稳定从而进入收录沙盒短期内不会展示!

对于百度最新推出的自动推送 JS 代码,通过站长平台的反馈来看,依然存在重复推送的bug。

重复推送会不会影响网站在百度引擎的效果,百度并没有给我明确的答复。不过管理员明确回复,无需添加主动推送,已收录的页面也添加自动推送 js 代码,但是会存在一个问题, 当天剩余的可推送 url 条数会不够用。

http://www.lisashopmall.com/liuyan.html
http://www.lisashopmall.com/liuyan.html/***/#comments

对于新留言,js代码也会再推送一次,使得相同页面的内容重复推送。

二、问题解决

根据上面的分析,这类自动推送 js 代码就不能整站添加,而是只需添加到未收录且正规 Url 的页面。

比如:

http://www.lisashopmall.com/?p=10560 百度已收录,这种页面不添加

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 代码,不符合条件的页面则不会输出。

三、其他问题

和以前分享的百度是否收录代码一样的工作原理,文章加载时,会在百度搜索当前文章的 url 地址,如果百度未收录,查询结果中会匹配到【没有找到该 URL。您可以直接访问】或【很抱歉,没有找到与】文字内容。当代码确认页面已收录时,将会在文章中添加一个值为 1 的 baidu_record 自定义栏目。

只有当 baidu_record 这个自定义栏目的值不存在时,代码才会去百度查询收录结果。并且在确认未收录之后,才会在网页 footer 中输出自动推送 js 代码。

这样就规避了已收录页面重复推送和百度实时查询导致加载慢两个问题!

另外,其实还有另一个值得关注的坑:百度统计代码也会自动推送,是否也存在本文提到的问题,就不得而知了。

lisa小站点评:

以上方法在lisa小站已正常运行,但是并不是每篇都能被收录,还会出现个别未推送的结果。比如同样在百度和360搜索lisa小站某篇文章的链接地址,显示的结果要么显示收录的结果,要么显示未收录需要提交网址。具体问题还没找到。有兴趣的童鞋可以尝试下在每篇文章里面显示该篇文章是否已经被百度收录

 

 

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:4   其中:访客  2   博主  2

    • 美国主机 1

      感谢分享

        • yzq21056563 Admin

          @美国主机 可以把网站收藏,后面会有更多精彩文章~

        • 叽歪影视 0

          其他cms不知道能不能用?代码需不需要修改?

            • lisa Admin

              @叽歪影视 cms没玩过,可以试下。应该是可以