百度和360相继上线简单易用的JS自动推送和自动收录工具,两者的大概意思都是只要在站点部署了JS代码,就可以实现在用户浏览该页面的时候即时自动推送给百度和360,以实现链接自动提交,据说可以提高收录率。
想法是好的,可惜不论是百度还是360的这个JS工具都算是半产品,都没有考虑到重复推送问题。换句话就是说,部署了他们的JS代码,无论该页面是否已经被收录,只要有人浏览就会自动推送,这样就会造成同一个链接地址重复推送。据说有可能会让蜘蛛误以为这个文章更新频繁而且不稳定从而进入收录沙河短期内不会展示,而且还会浪费每天的可推送额度。虽然不知道这些重复推送的后果是真是假,我们作为站长的,还是宁可信其有不可信其无吧。
对于百度自动推送的重复推送问题,张戈博主也早已分享了相应的规避做法,具体请参考《WordPress百度自动推送JS优化,规避错误、重复推送问题》这篇文章进行设置。
张戈博主只分享并解决了百度自动推送的重复推送问题,而没有分享360自动收录的重复推送问题。其实这两者是十分相似的,只需要依瓢画葫芦就可以搞定。不过不是每个博主站长都会折腾代码,所以今天就顺便把百度自动推送和360自动收录JS代码造成的重复推送问题集合在一起解决。
百度自动推送和360自动收录JS代码造成的重复推送问题的解决办法如下:
只需要将以下代码添加到functions.php文件最后一个?>即可。(这个方法适用于WordPress站点,至于其他程序站点请自行研究解决)
add_action( 'wp_footer', '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,$matches) && preg_match_all('/百度为您找到相关结果/u',$rs, $matches)){
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;
}
}
}
//检查360是否已收录最新改进版本
if(!function_exists('sll_check_record')){
function sll_check_record($sslurl){
global $wpdb;
$post_id = ( null === $post_id ) ? get_the_ID() : $post_id;
$sll_record = get_post_meta($post_id,'sll_record',true);
if( $sll_record != 1){
$sslurl='http://www.so.com/s?q='.$sslurl;
$csslurl=curl_init();
curl_setopt($csslurl,CURLOPT_URL,$sslurl);
curl_setopt($csslurl,CURLOPT_RETURNTRANSFER,1);
$rs=curl_exec($csslurl);
curl_close($csslurl);
//如果抓取到的360结果中不存在【提交网址】这个关键词,则认为该页面已被360收录
if(!preg_match_all('/提交网址/u',$rs,$matches)){
update_post_meta($post_id, 'sll_record', 1) || add_post_meta($post_id, 'sll_record', 1, true);
return 1;
} else {
return 0;
}
} else {
return 1;
}
}
}
//输出百度自动推送和360自动收录的js代码
if(!function_exists('bdPushData')){
function bdPushData() {
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 "
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);
})();";
}
//判断是否是360未收录页面,并且当前页面是否等于正规url地址(get_premalink)
if(sll_check_record(get_permalink()) == 0 && $currentUrl == get_permalink()) {
echo "
(function(){
var src = (document.location.protocol == 'http:') ? 'http://js.passport.qihucdn.com/11.0.1.js?9d1e70eca6a305e9ff409dcab8478888':'https://jspassport.ssl.qhimg.com/11.0.1.js?9d1e70eca6a305e9ff409dcab8478888';
document.write('
})();
";
}
}
}
其中,一定要记得修改代码中的360自动收录的那个秘钥(9d1e70eca6a305e9ff409dcab847888就是秘钥,直接替换即可),每个站点都有属于自己的秘钥,具体秘钥可在360站长平台中获取,具体可见《360自动收录简介及添加360自动收录功能的详细教程》。
题外话:以上方法在boke112导航和梦轩丽人都已正常运行,但是在懿古今就有点不太正常。比如同样在百度和360搜索boke112导航和梦轩丽人某篇文章的链接地址,显示的结果要么显示收录的结果,要么显示未收录需要提交网址。但是搜索懿古今某篇文章的地址都显示一大堆不相关的结果,根本看不出是否已收录也看不到有提交网址的按钮。三个站点唯一不一样的地方就是懿古今是后缀为.wang的域名,不知道是否跟这个有关?