昨天接到了一个客户的诉求,说能不能在网站页面上增加百度自动推送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代码功能!