您当前的位置:首页 > CMS常见问题 > phpcms常见问题 >

phpcms百度自动推送JS优化,规避错误、重复推送问题

0

昨天接到了一个客户的诉求,说能不能在网站页面上增加百度自动推送JS代码,这样就实现了在页面被访问时,页面URL将立即被推送给百度,这也是近一两年来百度为了保护原创内容而推出的功能。

经过与客户沟通后,了解到客户的网站早就在前几年已经建设好了,当时百度还没有推出自动推送JS代码的功能,现在客户公司里招聘了一位专门来管理网站的SEO人员,但是不懂程序代码,所以就找到我来帮忙解决这个问题。

程序员都是很懒的,因为他们很少重复去做同一件事情!所以,在解决这个问题之前看看有没有人遇到过并提供解决方案的文章,网上搜索过后,发现已有很多的解决方法,但是大部分这些方法或插件都是基于WordPress建站程序的,其中也有dedecms的插件,并没有其他建站程序(如phpcms)的代码或插件,客户的网站就是基于phpcms建站程序的,没办法,只能自己动脑写代码了。

我的方法是参考了其他网友发表的一些技巧并结合自己的想法,首先,我们需要在相关的模型管理里增加一个自定义字段,用来记录百度收录已否,如下图所示:

增加自定义字段

自定义字段添加成功之后,在/api文件夹内新建一个php文件,并以check_record.php命名,稍后会在模板文件里调用,然后将以下代码复制粘贴进去并保存:

defined('IN_PHPCMS') or exit('No permission resources.'); 

$db = '';
$db = pc_base::load_model('content_model');

if($_GET['catid'] && $_GET['id'] && $_GET['modelid']) {
   $catid = intval($_GET['catid']);
   $id = intval($_GET['id']);
   $modelid = intval($_GET['modelid']);
   if(!$id || !$catid || !$modelid){return false;}
   $db->set_model($modelid);
   $r = $db->get_one(array('id'=>$id),'`baidu_record`');
   if($r) {
      if($r['baidu_record'] == 0){
         $get_url = go($catid,$id,1);
         $url = 'http://www.baidu.com/s?wd='.$get_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,$match1) && preg_match_all('/百度为您找到相关结果/u',$rs,$match2)){
            $db->update(array('baidu_record'=>1),array('id'=>$id));
            return 1;
         }else{
            echo "(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);
                 })();";
         }
      }else{
         return 1;
      }
   }else{
      return false;
   }
}

之后,就可以在文章的内容页模板文件的底部添加如下调用代码:

{if $baidu_record == 0}
<script type="text/javascript" src="{APP_PATH}api.php?op=check_record&catid={$catid}&id={$id}&modelid={$modelid}"></script>
{/if}

至此,网站前台页面具有百度自动推送JS代码功能!

顶部中部底部