一、前置准备工作
操作前请确保你已具备以下条件,避免中途卡壳:
- 已注册百度搜索资源平台账号,且目标站点已完成 ownership 验证,平台地址:https://ziyuan.baidu.com
- 使用PHPCMS V9版本(其他版本逻辑通用,仅文件路径略有差异),拥有后台管理员权限、服务器FTP/文件管理器编辑权限
- 操作前请备份所有需修改的文件,避免操作失误导致站点异常
首先获取百度推送接口地址:登录百度搜索资源平台→进入站点管理→选择对应站点→点击左侧「普通收录」→「资源提交」→「API提交」,复制页面展示的完整接口调用地址(包含token参数),该接口地址请勿泄露,否则他人可恶意占用你的推送配额。
二、后端代码修改步骤
1. 新增百度推送核心函数
我们将推送逻辑写入PHPCMS扩展函数文件,避免后续官方系统升级覆盖代码,打开文件路径:phpcms/libs/functions/extention.func.php,在文件末尾添加以下代码:
```php
function baidu_push($urls) {
// 替换为你刚才复制的百度API推送接口地址,若使用快速推送则替换为快速推送的接口
$api = 'http://data.zz.baidu.com/urls?site=https://你的域名&token=你的专属token';
// 支持单条/批量推送
if(!is_array($urls)) $urls = [$urls];
// 优先使用CURL推送,兼容性更强
if (function_exists('curl_init')) {
$ch = curl_init();
$options = array(
CURLOPT_URL => $api,
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => implode("\n", $urls),
CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
// HTTPS站点请取消注释下面两行
// CURLOPT_SSL_VERIFYPEER => false,
// CURLOPT_SSL_VERIFYHOST => false,
);
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
curl_close($ch);
} else {
// 无CURL扩展时使用file_get_contents推送
$opts = array(
'http' => array(
'method' => 'POST',
'header' => 'Content-Type: text/plain',
'content' => implode("\n", $urls)
)
);
$context = stream_context_create($opts);
$result = file_get_contents($api, false, $context);
}
// 如需排查问题可将$result写入日志文件,此处省略
return json_decode($result, true);
}
```
修改完成后保存文件即可。
2. 配置内容发布/更新自动触发推送
打开内容模型核心文件:phpcms/modules/content/classes/content_form.class.php
首先找到add方法(新增内容调用的方法),定位到方法末尾、生成内容页静态HTML的代码之后,添加以下代码:
```php
// 百度主动推送逻辑
$push_url = 'https://你的域名'.$this->urls['content'];
baidu_push($push_url);
```
再找到edit方法(更新内容调用的方法),同样在生成静态页的代码之后添加上述相同的推送代码,实现内容更新时自动重新推送给百度。

注意:请将代码中的域名替换为你站点的实际域名,和百度资源平台验证的域名前缀保持完全一致(包含http/https协议头)
3. 新增历史内容批量推送功能
针对站点已发布的历史内容,我们可以快速开发一个批量推送页面,无需手动逐条提交。在phpcms/modules/content/目录下新建文件baidu_push.php,写入以下代码:
```php
defined('IN_PHPCMS') or exit('No permission resources.');
// 验证管理员身份,非管理员无法访问
$admin_username = param::get_cookie('admin_username');
if(empty($admin_username)) exit('请先登录PHPCMS后台再访问');
// 加载内容模型
$db = pc_base::load_model('content_model');
$page = isset($_GET['page']) ? intval($_GET['page']) : 1;
$pagesize = 100; // 百度单次最多支持推送100条,请勿修改
$start = ($page-1)$pagesize;
// 可自行修改筛选条件,比如添加catid=指定栏目ID、inputtime>xxx限定发布时间
$list = $db->select('status=99', 'url', $start.','.$pagesize, 'id desc');
$urls = [];
foreach($list as $v) {
// 补全域名前缀
$urls[] = 'https://你的域名'.$v['url'];
}
if(empty($urls)) exit('所有符合条件的内容已推送完成');
// 调用推送函数
$res = baidu_push($urls);
echo "第{$page}页推送结果:
";
echo "成功推送:".intval($res['success'])."条
";
echo "今日剩余可推送配额:".intval($res['remain'])."条
";
if(isset($res['error'])) {
echo "推送错误:".htmlspecialchars($res['message'])."
";
}
// 自动跳转下一页,间隔2秒避免请求过快
echo "";
```
保存文件后,登录PHPCMS后台,直接访问地址:你的域名/admin.php?m=content&c=baidu_push即可自动批量推送历史内容,页面会自动翻页直到全部推送完成。
三、功能测试与验证
1. 单条推送测试
登录PHPCMS后台,发布一篇新的测试内容,发布完成后回到百度搜索资源平台→「普通收录」→「API提交」→查看「最近30天推送记录」,如果能看到刚刚推送的URL,返回状态为成功,则配置生效。
常见返回错误说明:
- 401:token无效,请检查推送函数中的接口地址是否和平台给出的完全一致
- 403:站点未验证,或者接口中的site参数和你在百度平台验证的站点不一致
- 400:推送的URL不属于当前验证的站点,检查URL前缀是否正确
2. 批量推送测试
访问刚才创建的批量推送页面,观察返回的成功条数是否和当前页的内容数量一致,如果剩余配额为0则次日再继续推送即可。
四、常见问题排查
- 推送后百度未收录:推送仅提升抓取效率,不保证收录,收录和内容质量、站点权重有关
- 系统升级后功能失效:仅
content_form.class.php可能被官方升级包覆盖,升级后重新添加推送调用代码即可,其他修改的文件均为自定义文件不会被覆盖
- 配额不足:每日推送配额由百度根据站点质量动态分配,新站配额较低,持续输出优质内容可提升配额
- 快速推送配置:如需配置快速推送(仅优质站点可开通),只需将推送函数中的$api替换为百度平台给出的快速推送接口地址即可,其他逻辑无需修改
注意:请勿重复推送相同URL,避免浪费配额,也不要推送死链、低质量内容,否则会导致站点权限被降低。