什么是百度主动推送?
在讲解如何配置之前,我们先简单理解一下它的概念和好处。

- 传统方式:网站发布新内容后,需要等待百度蜘蛛(Spider)通过网站的sitemap或外部链接来“爬取”和“发现”,然后收录,这个过程可能需要数天甚至数周。
- 主动推送:当你发布新内容后,主动将新页面的URL列表通过API接口实时“推送”给百度,这相当于告诉百度:“喂,我这儿有新内容,快来抓取!”
主动推送的好处:
- 加快收录速度:最直接的好处,能让百度秒级发现你的新内容,大大缩短收录周期。
- 提高收录率:对于一些比较深或者不常被蜘蛛访问的页面,主动推送可以确保它们被百度看到,从而提高整体收录率。
- 优化SEO效果被快速收录,就能更早地参与关键词排名,抢占流量先机。
准备工作:获取百度推送接口的推送Token
在配置DedeCMS之前,你必须在百度搜索资源平台获取你的专属推送接口地址和Token。
- 登录百度搜索资源平台:https://ziyuan.baidu.com/
- 选择你的站点:在左侧菜单栏找到并点击“站点管理”,选择你要配置的网站。
- 找到链接提交:在左侧菜单栏的“站点属性”下,点击“链接提交”。
- 获取推送接口:在“链接提交”页面,你会看到多种提交方式,选择并展开 “API提交”。
- 复制Token:在这里你会看到一个类似
http://data.zz.baidu.com/urls?site=你的域名&token=你的密钥的链接。请务必复制这个完整的链接,其中的你的密钥就是你的推送Token,后面配置时会用到。
在DedeCMS中配置主动推送
配置的核心思路是:在文章发布或更新的瞬间,自动触发一个函数,将当前文章的URL通过API推送给百度。
这里我们主要介绍两种方法:推荐方法一(安全可靠) 和 方法二(简单直接)。

修改 article_add.php 文件(推荐)
这个方法是在文章成功保存到数据库后,立即执行推送逻辑,非常稳定。
操作步骤:
-
找到文件:通过FTP或主机管理面板,登录你的网站,找到并下载
/dede/article_add.php文件。(操作前请务必备份原文件!) -
修改文件:用代码编辑器(如 VS Code, Sublime Text, Notepad++)打开
article_add.php文件。
(图片来源网络,侵删) -
添加推送代码:在文件末尾,找到
//更新位置或者//返回成功信息之类的代码段,在?>之前,添加以下PHP代码。// ========================================================== // 百度主动推送功能 开始 // ========================================================== $baiduPushApi = 'http://data.zz.baidu.com/urls?site=你的域名&token=你的密钥'; // <-- 第1步:替换成你自己的API地址 $arcurl = $cfg_cmsurl.'/'.$articleurl; // 获取当前文章的完整URL // 使用curl推送 $ch = curl_init(); $options = array( CURLOPT_URL => $baiduPushApi, CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => $arcurl, CURLOPT_HTTPHEADER => array('Content-Type: text/plain'), ); curl_setopt_array($ch, $options); $result = curl_exec($ch); curl_close($ch); // 可以在这里记录推送日志,方便排查问题 // file_put_contents(dirname(__FILE__).'/baidu_push.log', date('Y-m-d H:i:s') . " - Pushed: " . $arcurl . " - Result: " . $result . "\n", FILE_APPEND); // ========================================================== // 百度主动推送功能 结束 // ==========================================================代码说明:
$baiduPushApi:务必将这里的值替换成你在百度资源平台复制的那个完整API链接。$arcurl:自动获取刚刚发布的文章的URL。curl:使用PHP的cURL库向百度API发送POST请求,推送URL。- 日志部分(被注释掉):如果你想记录每次推送的情况,可以取消注释这行代码,它会创建一个
baidu_push.log文件在article_add.php同级目录下,方便你检查是否成功推送。
-
上传文件:将修改好的
article_add.php文件上传回服务器的原位置,覆盖旧文件。 -
测试:登录DedeCMS后台,发布一篇新文章,发布成功后,可以去你的百度搜索资源平台的“收录与提交” -> “链接提交”页面,查看“实时推送”的数据,如果数据有变化,说明配置成功了!
修改 inc_archives_functions.php 文件(同时支持新增和更新)
这个方法修改的是文章处理的公共函数文件,可以实现“发布”和“更新”文章时都进行推送。
操作步骤:
-
找到文件:下载
/dede/inc_archives_functions.php文件。(操作前请务必备份原文件!) -
修改文件:打开
inc_archives_functions.php文件。 -
添加推送代码:在文件末尾,
?>之前,添加以下PHP代码。// ========================================================== // 百度主动推送功能函数 开始 // ========================================================== function baiduActivePush($arcurl) { $baiduPushApi = 'http://data.zz.baidu.com/urls?site=你的域名&token=你的密钥'; // <-- 第1步:替换成你自己的API地址 if (empty($arcurl)) { return false; } $ch = curl_init(); $options = array( CURLOPT_URL => $baiduPushApi, CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => $arcurl, CURLOPT_HTTPHEADER => array('Content-Type: text/plain'), ); curl_setopt_array($ch, $options); $result = curl_exec($ch); curl_close($ch); // file_put_contents(dirname(__FILE__).'/baidu_push_func.log', date('Y-m-d H:i:s') . " - Pushed: " . $arcurl . " - Result: " . $result . "\n", FILE_APPEND); return $result; } // ========================================================== // 百度主动推送功能函数 结束 // ========================================================== -
调用函数:
- 在“发布”文章时推送:在
inc_archives_functions.php文件中,找到InsertArchives()函数,在这个函数的最后(通常在return $arcid;之前),添加一行:// 发布文章后推送 baiduActivePush($cfg_cmsurl.'/'.$articleurl);
- 在“更新”文章时推送:在
inc_archives_functions.php文件中,找到UpdateArchives()函数,同样,在这个函数的最后,添加一行:// 更新文章后推送 baiduActivePush($cfg_cmsurl.'/'.$articleurl);
- 在“发布”文章时推送:在
-
上传文件:将修改好的
inc_archives_functions.php文件上传回服务器。 -
测试:分别测试发布一篇新文章和更新一篇旧文章,然后去百度资源平台查看推送数据。
验证与常见问题
-
如何验证是否成功?
- 方法一:在百度搜索资源平台的“链接提交” -> “实时推送”页面,查看推送成功条数。
- 方法二:如果你开启了日志功能,检查服务器上生成的日志文件(如
baidu_push.log),看里面是否有记录。 - 方法三:用
var_dump($result);在推送代码后打印出百度API返回的结果,百度成功返回{"success":123}这样的JSON字符串。
-
常见问题排查
- 问题:
cURL extension not loaded或function curl_init() not found- 原因:你的PHP环境没有开启cURL扩展。
- 解决:联系你的主机服务商,开启PHP的cURL功能。
- 问题:
file_put_contents failed to open stream: Permission denied- 原因:服务器上没有日志文件的写入权限。
- 解决:将日志文件所在的目录(如
dede/)权限设置为755或777(777有安全风险,请谨慎使用)。
- 问题:推送后百度资源平台没有数据。
- 原因:
- API地址或Token填写错误。
- 文件路径或代码语法错误。
- PHP版本过低,不支持某些语法。
- 解决:仔细检查代码,特别是API地址是否完整正确,可以尝试在代码中加入
echo $result;来打印返回结果,帮助判断。
- 原因:
- 问题:
补充:其他推送方式
除了主动推送,百度还支持其他两种方式,可以组合使用以达到最佳效果:
-
自动推送:在你的网站页面中嵌入一段JS代码,当用户访问页面时,自动将URL推送给百度,这需要修改你的网站模板文件(如
head.htm)。- 获取代码:在百度资源平台的“自动推送”页面可以拿到JS代码。
- 实现:将JS代码粘贴到所有模板页面的
<head>和</head>标签之间。
-
sitemap提交:生成一个包含你网站所有重要URL的XML文件(sitemap),然后提交给百度。
- DedeCMS有现成的sitemap生成插件,可以在后台一键生成并提交。
- 优点:适合一次性提交大量URL,特别是对于旧文章的收录。
主动推送(最快) + 自动推送(实时) + Sitemap(全面) 是最佳的SEO提交策略,对于DedeCMS,优先配置好主动推送,这是提升新内容收录效率最有效的一步。
