网站开启SSL(HTTPS)后 百度SEO的完美解决方案

远方的海开启SSL后经过不少的折腾终于找到了完美解决百度对SSL站点不友好的问题了。还是谷歌好,直接就收录SSL站点,而且真正的提高了https网站的权重。来看看Sven研究出来的方案吧!

问题所在

问题一,百度蜘蛛不给力,经常抓取超时

为什么说百度对SSL不友好,经过百度站长中心的抓取诊断测试,我发现了百度虽然通过这个模拟测试可以抓取到网页,但是显示跳转而且时间颇长。

没有加HTTPS的网页(按照远方的海为例),抓取时间在0.2秒左右;而加上了HTTPS跳转,百度的抓取时间则快在三秒,慢则十几秒。这个十几秒是什么概念?如此慢的抓取速度,在网络高峰期再慢点就可以导致抓取超时了!

来看看网站异常数据统计,开启了SSL后百度的蜘蛛一直显示我的网站抓取超时,其出错率已经超过10%,我们来看图片里面潮起潮落的绿色线条,它表示着抓取超时次数:

百度蜘蛛抓取超时

问题二,sitemap文件不能抓取

远方的海已经获取了百度的sitemap提交权限,我打开百度的sitemap提交更新了一下sitemap,发现了如下所示:

SSL站点百度站长中心抓取sitemap错误

我们来看看这些问题:

  • 呵呵哒了,网站居然华丽丽的不能抓取sitemap.xml文件。
  • 既然不能抓取sitemap.xml文件,那好吧,百度出了一款baidu submit的插件,这款插件的效果如何呢?Sven也郑重的告诉大家,这款插件提交的网址也是https的,所以百度一样不能抓取。
  • 最近很火的代码版提交网页,按照上面的节奏估计多半也是不可以正常抓取的。

百度SEO解决方案

让我们一起来看看解决方案吧!

第一步,首先在WordPress设置 – 常规设置 中把WordPress的两个网址全部改回http开的。

第二步,修改.htaccess文件来重定向到https网站。代码如下:

RewriteEngine On
RewriteCond %{HTTPS} !on [NC]
RewriteCond %{HTTP_USER_AGENT} (chrome|googlebot|safari|opera|firefox) [NC]
RewriteRule ^(.*)$ http://www.seavia.com/$1 [R=301,L]

这里已经包括了很多浏览器和谷歌爬虫的UA了,把这些UA定向到https页面,其余的基本可以让它去抓http的网页。

或者给出类似于V2EX这种网站的解决方法,V2EX据我分析是百度的spider定向到http上,谷歌的spider定向到https上,其余的不作处理,以下是Apache主机的.htaccess重定向写法:

RewriteEngine On
RewriteCond %{HTTPS} !on [NC]
RewriteCond %{HTTP_USER_AGENT} (googlebot) [NC]
RewriteRule ^(.*)$ http://www.seavia.com/$1 [R=301,L]
RewriteCond %{HTTPS} on [NC]
RewriteCond %{HTTP_USER_AGENT} (baiduspider) [NC]
RewriteRule ^(.*)$ http://www.seavia.com/$1 [R=301,L]

第三步,把主题里面的http://www.seavia.com类似的网址全部换成http://www.seavia.com,这样就可以自动识别http和https了。

设置完之后,我们来看看现在的情况:

  • 用chrome等浏览器打开网站,依然显示小绿锁;
  • 百度抓取也成功缩短到0.2s,sitemap也可以成功提交了。

百度sitemap成功提交

于是,度娘对SSL不友好的问题就这么解决了,也不指望百度那边的SSL给我的网站加多少权重,只希望不影响我网站的排名。

via:  www.wpdaxue.com

WordPress非插件实现向百度提交链接

百度官方给WordPress专门出过一个插件,叫做baidu sitemap,用过的人都知道这个插件在发布文章的时候,需要奇卡无比的5秒左右的时间来反应。今天正好看见了这个插件的代码版本,在这里分享给大家。

Baidu submit代码版

新建一个名叫baidusubmit.php的文件,把以下代码放入这个文件中,注意,代码里面的WEB_TOKEN值每个网站都不一样,前往百度站长中心 查看自己网站的值。

//百度推送
if(!function_exists('Baidu_Submit')){
 function Baidu_Submit($post_ID) {
 $WEB_TOKEN = '这里是你自己的值,形如ucyMy5jfslZjvLSn'; //这里要换成你自己的token值
 $WEB_DOMAIN = get_option('home');
 //已成功推送的文章不再推送
 if(get_post_meta($post_ID,'Baidusubmit',true) == 1) return;
 $url = get_permalink($post_ID);
 $api = 'http://data.zz.baidu.com/urls?site='.$WEB_DOMAIN.'&token='.$WEB_TOKEN;
 $request = new WP_Http;
 $result = $request->request( $api , array( 'method' => 'POST', 'body' => $url , 'headers' => 'Content-Type: text/plain') );
 $result = json_decode($result['body'],true);
 //如果推送成功则在文章新增自定义栏目Baidusubmit,值为1
 if (array_key_exists('success',$result)) {
 add_post_meta($post_ID, 'Baidusubmit', 1, true);
 }
 }
 add_action('publish_post', 'Baidu_Submit', 0);
}

把刚才制作好的baidusubmit.php放在主题的文件夹中,并在functions.php中添加以下代码:

//Baidu submit
if( is_admin() ) :
 require( dirname(__FILE__) . '/baidusubmit.php' );
endif;

这样就可以只在后台发布文章时才调用这串代码了。

代码效果测试

在更新或发布新文章时,代码会提交给百度你的文章链接,成功的时候会在文章新增自定义栏目Baidusubmit,值为1。如下所示:

baidusubmit

如果你找不到自定义栏目,在文章编辑器的右上角,点击显示选项就能开启。这个百度提交还是很不错的,大家都可以试试!

via: www.seavia.com