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);
}
代码优化说明
相较于原始代码,本次重写进行了以下优化:
- 错误处理:为主动推送API请求添加了基本的错误判断(
is_wp_error)。 - 收录检查逻辑优化:将收录检查的搜索方式改为更精准的
site:url查询,并模拟百度蜘蛛User-Agent,提高判断准确性。 - 执行条件限制:自动推送JS代码仅在全站文章/页面单页(
is_singular())加载,避免在首页、分类页等无效页面加载。 - 移除冗余代码:删除了原始自动推送代码中与“奇虎”相关的第二段JS,因其与百度推送功能无关且可能已失效。
- 代码注释与结构:增加了更清晰的注释,并将三个功能模块明确分隔。
注意事项
- 百度官方已推荐使用HTTPS版本的推送JS(
https://zz.bdstatic.com/linksubmit/push.js),代码已适配。 - 收录检查函数(
baidu_check_record)依赖于远程请求百度搜索结果页,频繁使用可能影响页面加载速度或触发反爬机制。生产环境中可考虑将其设置为定时任务,而非每次页面加载都执行。 - 成功推送或检查到收录后,文章会添加
Baidusubmit和baidu_record两个自定义字段作为标记,可在文章编辑器的“自定义字段”区域查看。 - 请确保你的服务器支持并允许进行外部HTTP请求(
WP_Http和curl_init),这是代码正常运行的前提。
你好,那怎么判断提交成功了呢?
去百度站长后台检查
还有这个代码改token值就可以了吗?
可以