WordPress教程网
WordPress教程网

WordPress百度自动推送JS优化重复推送问题

当途网1030

关注SEO、关注收录的站长,应该都知道百度搜索提供了一段自动推送的js代码,可将任意网页推送到搜索引擎,加快收录。但是,这段代码并不是简单的增加到网页中万事大吉了!本文主要讲对百度自动推送JS代码的优化...百度近些年推出过多种收录推送工具,比如结构化数据插件、主动推送、自动推送js等等。但这些工具都会出现重复推送的弊病,需要进一步优化!虽然百度并没有申明重复推送会带来什么副作用。但个人觉得,同一篇文章,如果重复推送,可能会让百度蜘蛛认为你这文章更新频繁,不稳定从而进入收录沙盒短期内不会展示;再者,已收录的页面也添加自动推送js代码,也会浪费每天的可推送额度( 当天剩余的可推送url条数)!另外,我们知道,很多时候多个url地址其实是同一个页面内容,而且,当我们给页面带上查询参数,显示的依然是同一个页面内容,但是Url地址变了!那么自动推送js获取到的Url也变了!它就会将这个 Url 推送到搜索引擎!实际上,这些相同内容的页面我们并不希望重复抓取和收录!根据上面的分析,这类自动推送js代码就不能整站添加,而是只需添加到未收录且正规Url的页面。下面就给出解决方法:/*** 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指定了文章IDif(baidu_check_record(get_permalink($post_id), $post_id) == 0 && $currentUrl == get_permalink($post_id)) {echo \"\";}}}工作原理:文章加载时,会在百度搜索当前文章的url地址,如果百度未收录,查询结果中会匹配到【没有找到该URL。您可以直接访问】或【很抱歉,没有找到与】文字内容。当代码确认页面已收录时,将会在文章中添加一个值为1的 baidu_record 自定义栏目。只有当 baidu_record 这个自定义栏目的值不存在时,代码才会去百度查询收录结果。并且在确认未收录之后,且被访问的页面地址等于WordPress唯一页面地址时,才会在网页 footer 中输出自动推送js代码。这样就规避了已收录页面重复推送和百度实时查询导致加载慢两个问题!可能在使用上述代码时,会出现不正常的情况,比如:使用上述代码时,我通过echo,得到的get_permalink()为每个页面中最后一篇文章的地址链接......可能原因:get_permalink() 函数在文章型页面(文章索引、存档等)的主循环外使用时,如果没有指定ID参数,将返回循环中最后一篇文章的URL,而不是当前页面的固定链接。经过一番折腾,将上述代码做了一点点修改后,终于正常了,具体代码如下:/*** WordPress百度自动推送JS优化重复推送问题(龙笑天下修改版)* https://www.ilxtx.com/baidu-auto-pushdata-js.html* 原作者:张戈百度自动推送百度自动推送*/add_action( \'wp_head\', \'bdPushData\', 999);//检查百度是否已收录最新改进版本if(!function_exists(\'baidu_check_record\')){function baidu_check_record($url){global $wpdb;$post_id = ( null === $post_id ) ? get_the_ID() : $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(!preg_match_all(\'/提交网址/u\',$rs) && preg_match_all(\'/百度为您找到相关结果/u\',$rs)){if( $baidu_record == 0){update_post_meta($post_id, \'baidu_record\', 1);} else {add_post_meta($post_id, \'baidu_record\', 1, true);}return 1;} else {if( $baidu_record == false){add_post_meta($post_id, \'baidu_record\', 0, true);}return 0;}} else {return 1;}}}//输出百度自动推送js代码if(!function_exists(\'bdPushData\')){function bdPushData() {$currentUrl = home_url(add_query_arg(array())); //wordpress原生的方法获取当前页面的地址,注意:固定链接不是默认的形式,且首页形式是www.ilxtx.com;否则请注释掉此行,启用下面5行// if ($_SERVER[\'HTTPS\'] != \"on\") {//      $currentUrl = \'http://\'.$_SERVER[\'HTTP_HOST\'].$_SERVER[\"REQUEST_URI\"];//  } else {//      $currentUrl = \'https://\'.$_SERVER[\'HTTP_HOST\'].$_SERVER[\"REQUEST_URI\"];//  }//判断是否是未收录页面,并且当前页面是否等于正规url地址(get_premalink)if(baidu_check_record(get_permalink()) == 0 && $currentUrl == get_permalink()) {echo \"\";}}}工作原理和上面的一样,只有2点不同:这段代码是加载在头部的;如果文章未收录,则会给文章增一个自定义栏目baidu_record为0。20170828:终于弄清楚原因了,主题的底部通栏文章列表小工具使用了WP_Query,然而竟然没有使用wp_reset_postdata()来重置获取的文章数据...不知道什么原因,需在头部加载才能正确获取页面的固定链接...求大神告知!上面2段代码请选择合适的添加到主题的functions.php中!另外,其实还有另一个值得关注的坑:百度统计代码也会自动推送,是否也存在本文提到的问题,就不得而知了。最后,顺便说明一下,360搜索也推出了主动收录js代码,希望有朋友能参考着优化下。

标签: 百度自动推送