写在前面
对于访问量低的新站来说,等待搜索引擎收录新内容比较慢,可以通过百度站长平台提供的接口向其主动推送链接,以加快收录。百度站长平台相关功能入口:登陆后点击左侧列表中的链接提交
1、主动推送:最为快速的提交方式,推荐您将站点当天新产出链接立即通过此方式推送给百度,以保证新链接可以及时被百度收录。
2、自动推送:最为便捷的提交方式,请将自动推送的JS代码部署在站点的每一个页面源代码中,部署代码的页面在每次被浏览时,链接会被自动推送给百度。可以与主动推送配合使用。
3、sitemap:您可以定期将网站链接放到sitemap中,然后将sitemap提交给百度。百度会周期性的抓取检查您提交的sitemap,对其中的链接进行处理,但收录速度慢于主动推送。
4、手动提交:一次性提交链接给百度,可以使用此种方式。
P.S.笔者的环境是PHP5.3 + WordPress4.2
一.主动推送
据说是最快的方式,WP中很容易实现,直接编辑functions.php
(可以通过WP后台,外观
->编辑
->模板函数(functions.php)
在线编辑,也可以通过FTP工具拿下来改了再放上去,路径为wordpress/wp-content/themes/[currentTheme]/functions.php
),在开头注释结束的位置添上filter,如下:
/*submit url*/
function submitUrl($postID, $post) {
$url = 'www.ayqy.net/blog/'.$post->post_name.'/';
$api = 'http://data.zz.baidu.com/urls?site=www.ayqy.net&token=[yourtoken]';
$ch = curl_init();
$options = array(
CURLOPT_URL => $api,
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => $url."\n",
CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
);
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
//echo $result;
if (function_exists( 'swpsmtp_test_mail' )) {
$email = 'nwujiajie@163.com';
swpsmtp_test_mail( $email, 'Submit Result', $result.'<p><a href="http://'.$url.'">点我</a>查看原文<p>' );
}
}
add_action('publish_post', 'submitUrl', 0, 2); // submit url
/*end submit url*/
注意:把上面代码中的[yourtoken]
换成从百度站长平台拿到的token
在发布博文时执行filter,拼接得到文章url,再通过curl_exec发送post请求提交url,最后把链接提交结果发送到邮箱(WP发送邮件需要配置SMTP,笔者使用的是Easy WP SMTP插件)
效果还行,每次发布博文都会自动提交链接,缺点是无法提交以前的链接,如果需要提交以前的链接,可以采用sitemap自动提交,下面详细介绍
二.自动推送
…请将自动推送的JS代码部署在站点的每一个页面源代码中…
不考虑,页面加载的JS已经够多了,越来越慢可不好,如果非要用这种方法的话,需要编辑footer.php
(和改functions.php
的方法一样,文件位置也一样),在</body>
前添上如下代码:
<script>
(function(){
var bp = document.createElement('script');
bp.src = '//push.zhanzhang.baidu.com/push.js';
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();
</script>
P.S.上面的代码是百度站长平台提供的,每个站点应该一样,不用修改
不建议使用该方法,虽说不麻烦,但让所有用户买单是不对的
三.sitemap
最方便的方法,当然,前提是我们得先有一个会自动更新的sitemap.xml文件,这件事不用自己动手,可以使用WP插件:All In One SEO Pack
装好插件并启用后,WP后台左侧仪表盘
下面会有多合一SEO集
,子菜单中的XML网站地图
就是我们需要的sitemap.xml,可以点击更新网站地图
,下方输出信息类似于:
2016-03-08 15:46:03 3.29 MB memory used generating the dynamic 压缩 root sitemap in 0.628 seconds, 35.38 MB total memory used.
2016-03-08 09:17:31 3.25 MB memory used generating the dynamic root sitemap in 0.596 seconds, 35.34 MB total memory used.
2016-03-08 00:41:29 3.25 MB memory used generating the dynamic root sitemap in 0.595 seconds, 35.34 MB total memory used.
2016-03-07 19:23:09 Daily scheduled sitemap check has finished.
2016-03-07 19:23:09 已成功通知bing贵站网站地图(http://www.ayqy.net/blog/sitemap.xml.gz)的变动。
2016-03-07 19:23:09 通知google贵站网站地图(http://www.ayqy.net/blog/sitemap.xml.gz)变动失败,无法通过wp_remote_get()访问。
猜一下,sitemap就是http://www.ayqy.net/blog/sitemap.xml
,可以尝试下载或者用浏览器访问一下,确定没问题后拿着这个url百度站长平台填表吧
特别注意:sitemap链接必须是带有http://
的完整url,而不是表单提示的:
示例如下:
www.site.com/site.txt
www.site.com/site.xml
然后输入验证码提交就好了,5分钟后看,如果状态为“正常”,就可以了。从此再也不用管链接提交了
四.结构化数据插件
官方提供了用于提交数据的WP插件,下载地址:http://bs.baidu.com/zhanzhang/wp-baidusubmit-140213.zip
介绍如下:
自动推送sitemap,优化内容收录 没有sitemap权限,不知道怎么提交sitemap数据?结构化数据插件帮你搞定。遍历论坛帖子页历史URL数据,自动生成sitemap提交到百度。
实时推送论坛新内容,加快收录 每天海量新帖子?各种数据频繁更新?结构化数据插件帮你搞定。有新帖发布,立即将新帖子网址及内容推送至百度站长平台,帖子页发生变化,百度也能实时更新相应数据。
优质内容,优化展现,提升用户点击率 优质内容不够醒目?应用结构化摘要优化展现,提升结果点击率,流量节节攀升不是梦。
其实是交给站长一只小蜘蛛,内容更新(比如发布博文)时,小蜘蛛出来一圈,把抓到的内容处理后提交给百度
WP插件可能会报错(虽然是官方正品),报错如下:
Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when safe_mode is enabled or an open_basedir is set in /home/xxx/
CURLOPT_FOLLOWLOCATION
用来深度爬取链接,php安全模式下不支持该选项,不建议为了插件去关掉安全模式,所以我们修改插件,在sitemap.php
(路径为wordpress/wp-content/plugins/baidusubmit/sitemap.php
)开头<php
标签下一行添上如下代码:
// fix CURLOPT_FOLLOWLOCATION cannot be activated when safe_mode
function curl_exec_follow(/*resource*/ $ch, /*int*/ &$maxredirect = null) {
$mr = $maxredirect === null ? 5 : intval($maxredirect);
if (ini_get('open_basedir') == '' && ini_get('safe_mode' == 'Off')) {
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $mr > 0);
curl_setopt($ch, CURLOPT_MAXREDIRS, $mr);
} else {
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
if ($mr > 0) {
$newurl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
$rch = curl_copy_handle($ch);
curl_setopt($rch, CURLOPT_HEADER, true);
curl_setopt($rch, CURLOPT_NOBODY, true);
curl_setopt($rch, CURLOPT_FORBID_REUSE, false);
curl_setopt($rch, CURLOPT_RETURNTRANSFER, true);
do {
curl_setopt($rch, CURLOPT_URL, $newurl);
$header = curl_exec($rch);
if (curl_errno($rch)) {
$code = 0;
} else {
$code = curl_getinfo($rch, CURLINFO_HTTP_CODE);
if ($code == 301 || $code == 302) {
preg_match('/Location:(.*?)\n/', $header, $matches);
$newurl = trim(array_pop($matches));
} else {
$code = 0;
}
}
} while ($code && --$mr);
curl_close($rch);
if (!$mr) {
if ($maxredirect === null) {
trigger_error('Too many redirects. When following redirects, libcurl hit the maximum amount.', E_USER_WARNING);
} else {
$maxredirect = 0;
}
return false;
}
curl_setopt($ch, CURLOPT_URL, $newurl);
}
}
return curl_exec($ch);
}
// end fix CURLOPT_FOLLOWLOCATION cannot be activated when safe_mode
再把报错的语句替换掉,如下:
// curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_exec_follow($ch); // fix CURLOPT_FOLLOWLOCATION cannot be activated when safe_mode
注意:深度爬取链接比较慢,装上这个插件后每次发布博文大约需要30s的样子,慎重
五.总结
首先必备的是sitemap自动提交:
然后主动推送和结构化数据插件可以作为辅助措施: