博客 / WordPress/ 最新版WordPress可用主动推送及自动推送至百度搜索收录代码

最新版WordPress可用主动推送及自动推送至百度搜索收录代码

最新版WordPress可用主动推送及自动推送至百度搜索收录代码

WordPress 百度搜索收录代码(主动推送与自动推送)

以下代码整合了百度搜索资源平台提供的两种收录方式:主动推送(实时)自动推送(JS推送)。代码源自网络,并已进行优化和修正。

功能说明

  • 主动推送:文章发布时,立即通过API将链接推送给百度,收录速度最快。
  • 自动推送:访客浏览页面时,通过嵌入的JavaScript代码自动推送当前页面URL给百度。
  • 收录状态检查:自动推送前会检查文章是否已被百度收录,避免重复推送。

使用方法

将以下完整代码添加到你主题的 functions.php 文件末尾,或通过“代码片段”插件添加。

重要提示:使用前,请将代码中的 xxxxxxxxxxxx 替换为你自己在百度搜索资源平台获取的“主动推送”接口的Token。

/**
 * WordPress 百度搜索收录优化代码(主动推送 + 自动推送)
 * 主动推送代码修改自张戈博客,自动推送部分包含收录检查逻辑
 */

// 1. 主动推送功能 (发布文章时触发)
if(!function_exists('Baidu_Submit')){
    function Baidu_Submit($post_ID) {
        // 请在此处替换为你的百度主动推送Token
        $WEB_TOKEN  = 'xxxxxxxxxxxx';
        $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'
        ));

        if (is_wp_error($result)) {
            // 推送请求失败,可在此记录日志
            return;
        }

        $result = json_decode($result['body'], true);

        // 如果推送成功,则给文章添加一个标记
        if (is_array($result) && array_key_exists('success', $result)) {
            add_post_meta($post_ID, 'Baidusubmit', 1, true);
        }
    }
    // 文章发布时执行推送
    add_action('publish_post', 'Baidu_Submit', 0);
}

// 2. 辅助函数:检查文章是否已被百度收录
if(!function_exists('baidu_check_record')){
    function baidu_check_record($url, $post_id){
        $baidu_record = get_post_meta($post_id, 'baidu_record', true);
        // 如果已有记录表明已收录,则直接返回
        if( $baidu_record == 1){
            return 1;
        }

        // 构造百度搜索该URL的查询
        $search_url = 'https://www.baidu.com/s?wd=site:' . urlencode($url);
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $search_url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)'); // 模拟蜘蛛
        $rs = curl_exec($curl);
        curl_close($curl);

        // 分析搜索结果页面,判断是否收录
        // 如果页面中没有“没有找到”等提示,且能找到该URL的痕迹,则认为已收录
        if (!strpos($rs, '很抱歉,没有找到与') && preg_match('/' . preg_quote($url, '/') . '/i', $rs)) {
            update_post_meta($post_id, 'baidu_record', 1) || add_post_meta($post_id, 'baidu_record', 1, true);
            return 1;
        } else {
            return 0;
        }
    }
}

// 3. 自动推送功能 (在页面底部插入JS代码)
if(!function_exists('bdPushData')){
    function bdPushData() {
        // 只在文章/页面单页加载
        if(!is_singular()) return;

        $post_id = get_the_ID();
        if(!$post_id) return;

        $current_url = get_permalink($post_id);

        // 检查当前页面是否未被收录,是则插入自动推送JS
        if(baidu_check_record($current_url, $post_id) == 0) {
            $push_js = <<<EOD
<script>
(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);
})();
</script>
EOD;
            echo $push_js;
        }
    }
    // 在页面底部输出
    add_action('wp_footer', 'bdPushData', 999);
}

代码优化说明

相较于原始代码,本次重写进行了以下优化:

  1. 错误处理:为主动推送API请求添加了基本的错误判断(is_wp_error)。
  2. 收录检查逻辑优化:将收录检查的搜索方式改为更精准的 site:url 查询,并模拟百度蜘蛛User-Agent,提高判断准确性。
  3. 执行条件限制:自动推送JS代码仅在全站文章/页面单页(is_singular())加载,避免在首页、分类页等无效页面加载。
  4. 移除冗余代码:删除了原始自动推送代码中与“奇虎”相关的第二段JS,因其与百度推送功能无关且可能已失效。
  5. 代码注释与结构:增加了更清晰的注释,并将三个功能模块明确分隔。

注意事项

  • 百度官方已推荐使用HTTPS版本的推送JS(https://zz.bdstatic.com/linksubmit/push.js),代码已适配。
  • 收录检查函数(baidu_check_record)依赖于远程请求百度搜索结果页,频繁使用可能影响页面加载速度或触发反爬机制。生产环境中可考虑将其设置为定时任务,而非每次页面加载都执行。
  • 成功推送或检查到收录后,文章会添加 Baidusubmitbaidu_record 两个自定义字段作为标记,可在文章编辑器的“自定义字段”区域查看。
  • 请确保你的服务器支持并允许进行外部HTTP请求(WP_Httpcurl_init),这是代码正常运行的前提。
  1. avatar
    大金牙

    你好,那怎么判断提交成功了呢?

    1. 去百度站长后台检查

  2. avatar
    大金牙

    还有这个代码改token值就可以了吗?

    1. 可以

发表评论

您的邮箱不会公开。必填项已用 * 标注。