百度站长平台链接提交

写在前面

对于访问量低的新站来说,等待搜索引擎收录新内容比较慢,可以通过百度站长平台提供的接口向其主动推送链接,以加快收录。百度站长平台相关功能入口:登陆后点击左侧列表中的链接提交

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自动提交:

sitemap

sitemap

然后主动推送和结构化数据插件可以作为辅助措施:

baidu sitemap

baidu sitemap

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

code