百度那个链接提交工具,每天API推送10条和Sitemap提交5000条,到底哪个更快让页面进索引?
做过站的人都有过这种经历:文章发了两周,site:域名一搜,啥也没有。到百度站长平台手动提交一条URL,第二天就出来了。这时候就会想——有没有办法让新页面批量自动提交,省得每次手动去点?百度那个链接提交工具到底几种方式,哪种是真的有用、哪种只是心理安慰?
四种提交方式,速度和门槛天差地别
| 提交方式 | 收录速度 | 每日配额 | 需要写代码? | 适合谁 |
| API主动推送 | 最快(分钟级) | 10条/天起步,优质站可提升 | 需要 | 技术站、日均发文少 |
| Sitemap提交 | 中等(小时级) | 5000条/sitemap文件 | 不需要 | 大量URL、批量更新 |
| 自动推送JS | 快(页面访问即推送) | 不占配额 | 一行JS即可 | 所有站,必备 |
| 手动提交 | 慢 | 无明确上限 | 不需要 | 临时救急 |
上面这个表格只是冰山一角。真正的问题是:这四种方式背后各自在发生什么?配额为什么会涨会降?API提交失败了怎么排查?站群怎么批量管理几十个站的推送?这些问题不搞明白,光知道"有个提交按钮"是不够的。
一、四种提交方式的底层逻辑,不是"都差不多"
很多人以为四种方式只是入口不同,底层都一样。完全不是。百度对四种方式的处理权重、抓取优先级、配额机制完全不同。
1. API主动推送:走"快速通道",但有配额门槛
API主动推送是目前百度给的最高优先级的提交通道。原理是你主动调用百度接口,把新页面的URL推过去,百度的爬虫调度系统会在极短时间内(通常几分钟到几十分钟)安排抓取。
但配额是最大的变量。新站默认每日只有10条的API推送配额。很多人一看到"10条"就觉得鸡肋——每天发几十篇文章的站,10条有什么用?
这里有个关键认知:配额不是固定的。百度会根据你提交链接的质量动态调整:
配额提升的逻辑

· 持续提交有收录价值的原创内容,配额会从10条涨到100条、1000条甚至更高
· 大量提交低质量、重复、采集内容的URL,配额可能不涨反降
· 配额是按站点维度计算的,站群里每个站独立配额
· 可以在API返回结果的 remain 字段看到当日剩余配额
API接口地址格式:http://data.zz.baidu.com/urls?site=你的域名&token=你的token
POST过去的数据就是一行一个URL的纯文本,非常简单。后面会给出完整的Python和PHP代码。
2. Sitemap提交:量大管饱,但被动
Sitemap是你告诉百度"我的站有这些页面",百度会定期来读取sitemap文件,然后按自己的节奏处理。单个sitemap文件最多5000条URL,可以提交多个sitemap。
Sitemap最大的优势是不占API配额,适合URL数量大的站。但问题是:百度读取sitemap的周期不固定,可能几小时、可能一天、也可能更久。而且sitemap里写了5000条,百度不一定全部抓取,它有自己的筛选逻辑。
一个容易被忽略的细节:sitemap里最好只放真正需要被收录的页面。不要把所有页面(包括标签页、作者页、分页)全扔进去。百度看到sitemap里一堆低质量URL,可能降低对你整个站点的抓取优先级。
3. 自动推送JS:最被低估的免费通道
这是百度提供的一段JS代码,嵌到页面里之后,任何用户访问这个页面时,这段JS就会自动把当前页面URL推送给百度。
<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>这段JS有四个很多人没注意到的特点:
不占任何配额
API配额、Sitemap配额都跟它没关系。理论上每天可以有无限次推送。
需要真实流量触发
没人访问的页面不会被推送。新站没流量时这个JS等于摆设。
推送的是"访问页",不是"新页"
同一个人访问同一页多次,JS会重复推送,但百度端会去重。
异步加载,不影响页面速度
JS是异步插入的,不会阻塞页面渲染,对用户体验零影响。
4. 手动提交:救急用的
在百度站长平台里一条一条填URL提交。适合临时测试某个页面能不能被收录、或者API配额用完了但有一条紧急内容需要推送。日常运营靠手动提交不现实。
二、四种方式不是四选一,是"四管齐下"
很多人都陷入一个误区:API推送和Sitemap选一个用就行了。实际上四种方式覆盖的是不同的环节,组合起来效果远好于单独用。
实操建议的组合策略:
日常标准配置(所有站都应该做):
· 页面模板里嵌入自动推送JS → 一劳永逸
· 每天发布新内容后,用API推送最新一批URL → 保证新内容最快被抓
· 每周更新一次Sitemap并重新提交 → 作为兜底覆盖
· 手动提交只在API配额不够或紧急情况用
这里有一个反常识的结论:自动推送JS是长期性价比最高的。一旦页面有了稳定流量,JS就会持续帮你向百度"刷存在感"。很多老站早就没在用API推送了,全靠JS自动推送,收录率一样很高。
三、API推送代码实操:Python和PHP两版
API推送的核心就是一段HTTP POST请求。接口地址、token、URL列表,三个要素凑齐就能跑。
Python版(适合服务器定时任务)
# baidu_push.pyimport requests# 配置区——替换成你自己的SITE_URL = "https://www.yoursite.com"TOKEN = "你的百度站长平台token"API_URL = f"http://data.zz.baidu.com/urls?site={SITE_URL}&token={TOKEN}"# URL列表——从数据库、sitemap或文件读取urls = ["https://www.yoursite.com/article-1.html","https://www.yoursite.com/article-2.html","https://www.yoursite.com/article-3.html",]headers = {"Content-Type": "text/plain"}body = "".join(urls)resp = requests.post(API_URL, data=body.encode("utf-8"), headers=headers)result = resp.json()print(f"成功推送: {result.get('success', 0)} 条")print(f"今日剩余配额: {result.get('remain', '未知')} 条")if "error" in result:print(f"错误信息: {result['error']} (code: {result.get('message', '')})")
PHP版(适合WordPress等PHP站)
// baidu_push.php$urls = array("https://www.yoursite.com/article-1.html","https://www.yoursite.com/article-2.html",);$api = "http://data.zz.baidu.com/urls?site=www.yoursite.com&token=你的token";$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $api);curl_setopt($ch, CURLOPT_POST, true);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_POSTFIELDS, implode("", $urls));curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: text/plain"));$result = json_decode(curl_exec($ch), true);curl_close($ch);echo "成功: " . $result['success'] . " 条, 剩余: " . $result['remain'] . " 条";
几个容易踩的坑
· Content-Type必须是 text/plain,不是 application/json
· URL一行一个,用 分隔,不要在行尾加空格
· site参数要跟百度站长平台里验证的域名完全一致(www和不带www是不同的)
· token不要泄露到前端代码里,放在服务端环境变量中
四、推送失败了怎么排查?常见返回码一张表说清楚
API推送最常见的坑不是代码写错,而是返回了错误但不知道什么意思。百度API的返回格式统一是JSON:
{"remain":999,"success":0,"error":401,"message":"token is not valid"}看 error 字段的值就能定位问题。下面把所有常见错误码整理在一张表里:
| error码 | 含义 | 原因 | 解决方法 |
| 401 | token无效 | token填错了、过期了、或者用了其他站点的token | 到百度站长平台重新复制token |
| 400 | 请求参数错误 | site参数与验证域名不一致、JSON格式错误、Content-Type不对 | 检查site是否与平台验证域名一致,确认Content-Type为text/plain |
| 403 | 无权限 | 站点未验证、或者推送的URL域名与验证域名不匹配 | 先完成站点验证,检查URL域名 |
| 404 | 接口地址错误 | 接口URL拼写错误、site参数格式不对 | 核对接口地址格式 |
| 500 | 服务器内部错误 | 百度端临时故障 | 等几分钟重试,连续多次500联系百度 |
| 0 | 推送成功 | success字段显示实际推送成功的条数 | 检查remain看剩余配额 |
除了返回码,还有几个高频问题:
not_same_site 错误
推送的URL域名和百度站长平台验证的域名不一致。比如平台验证的是 www.yoursite.com,你推送的是 yoursite.com(不带www)。解决:统一域名,或者在平台同时验证两个版本。
重复提交同一个URL
百度允许重复提交,但建议用数据库记录已推送的URL,避免每次都全量推送。可以用 last_push_time 字段标记每条URL上次推送时间,只推送24小时内未推过的。
success=0但无error
说明请求格式正确、token有效,但推送的URL全部被百度判定为不符合收录标准。检查这些URL是否能正常访问、内容是否原创、robots.txt是否屏蔽了百度蜘蛛。
五、站群怎么批量管几十个站的推送?
单站推送很简单,站群就麻烦了。50个站、每个站每天发5篇文章,每天就要处理250条URL。手动去每个站的百度平台提交是不可能的。
站群推送的核心思路:把每个站的token集中管理,用脚本轮询推送。
# batch_push.py — 站群批量推送import requestsimport json# 站点配置:域名 -> tokensites = {"site1.com": "token_xxxxx","site2.com": "token_yyyyy","site3.com": "token_zzzzz",# ... 继续添加}# 从数据库或文件读取每个站待推送的URLdef get_pending_urls(domain):# 这里替换成你自己的逻辑:从数据库读取该站24h内未推送的新URLreturn []for domain, token in sites.items():urls = get_pending_urls(domain)if not urls:continueapi = f"http://data.zz.baidu.com/urls?site=https://{domain}&token={token}"resp = requests.post(api, data="".join(urls).encode(),headers={"Content-Type": "text/plain"})result = resp.json()print(f"[{domain}] 成功: {result.get('success',0)}, 剩余配额: {result.get('remain','?')}")# 记录推送时间,避免重复推送# mark_as_pushed(urls)
把这个脚本放到crontab里,每小时跑一次,站群的推送就全自动化了。
WordPress站点的插件选择
如果你用的是WordPress,不需要手写代码。市面上几个主流推送插件:

| 插件/工具 | 自动推送 | 批量推送 | 支持站群 | 费用 |
| 百度搜索推送管理 | 是 | 是 | 否 | 免费 |
| Smart SEO Tool | 是 | 是 | 是 | 付费 |
| 自写脚本+cron | 是 | 是 | 是 | 免费 |
如果你在UC站点管理里已经集中管理了多个站点的token和数据,可以在UC后台加一个"一键批量推送"的按钮,调用上面那段批量推送脚本,不用切到每个站的百度后台。
定时任务怎么设?
推荐频率:
· 新内容发布后立即触发API推送(WordPress用publish钩子)
· 每6小时跑一次批量兜底推送(补推之前漏掉的URL)
· 每天凌晨更新一次Sitemap并提交
· 每周检查一次各站点的配额变化,配额下降的站要排查内容质量
六、推送工具不是万能药,真正决定收录速度的还有这几样
很多人把所有希望寄托在推送工具上,每天拼命推URL,但收录率就是上不去。这时候要退一步看——推送只是"告诉百度这里有新内容",百度来不来抓、抓了收不收,取决于你站本身的质量信号。
🔗
外链与引用
其他站引用你越多,百度越觉得你的站值得频繁抓取。新站没外链时,推送了也可能排很久的队。
📄
内容更新频率
稳定日更的站,百度会分配更高的抓取频次。三天打鱼两天晒网,抓取频率自然低。
⚡
页面加载速度
百度蜘蛛也有抓取预算。页面响应慢的站,蜘蛛可能抓几页就走了,不会深挖。
📋
内容原创度
采集站推一万条可能收不了几条。原创内容哪怕只推10条,收录率也很高。
🏗️
网站结构
扁平结构+清晰内链,蜘蛛能顺藤摸瓜。深度超过3层的页面很难被发现。
📊
站点历史信誉
老域名、有历史收录记录的站,百度抓取优先级天然高于全新域名。
说穿了,推送工具解决的是"让百度知道",而上面的六样解决的是"百度愿不愿意来"和"来了收不收"。两者缺一不可。
七、五个常见的错误认知
❌ "推送了就一定会收录"
推送只是通知,不是保证。百度会根据内容质量、站点信誉、抓取预算等因素决定是否收录。推送成功≠收录成功。
❌ "配额越多越好,拼命堆量"
配额是动态的。提交低质量URL会降低配额。质量>数量,先保证推的每条都有收录价值。
❌ "API推送比Sitemap快,所以只做API"
API确实最快,但配额有限。Sitemap作为兜底覆盖URL量大的场景。两种方式应该组合使用。
❌ "自动推送JS没用,因为新站没流量"
新站确实触发少,但它是免费的、不占配额的。一旦站做起来了,JS自动推送是长期最省心的方式。
❌ "每天把所有URL全推一遍"
百度API有去重机制,但大量重复提交浪费配额、还可能被判定为异常行为。只推送新URL或内容有更新的URL。
八、不止百度,必应和谷歌的推送也要顺手做了
如果你的站不只是面向百度流量,必应和谷歌的推送也不要漏掉。好在它们的API都比百度简单:
| 搜索引擎 | 推送方式 | 配额 | 接口地址 |
| 百度 | API推送 / Sitemap / JS自动推送 / 手动 | API 10条起,动态调整 | data.zz.baidu.com/urls |
| 必应 Bing | IndexNow API | 无明确限制 | www.bing.com/indexnow |
| 谷歌 Google | Indexing API(有限场景)/ Sitemap | Indexing API 200条/天 | indexing.googleapis.com |
必应的IndexNow是最简单的——POST一条URL到接口就完事,连token都不需要,API key注册即得。而且IndexNow是必应和Yandex共用的协议,推一次两个搜索引擎都能收到。
谷歌的Indexing API比较特殊,官方文档说它主要用于Job Posting和Broadcast Event这两种结构化数据类型的页面,普通网页用Sitemap就够了。但实际操作中很多人发现把普通页面包装一下也能推,只是谷歌可能不处理。谷歌最靠谱的方式还是高质量的Sitemap + 内部链接结构让蜘蛛自然发现。
九、最后一步:推送了之后怎么确认有没有用?
推送完不是就完事了,过24-48小时要到百度站长平台的索引量工具里看数据:
· 推送的URL是否出现在了索引量统计里
· 对比推送数量 vs 实际索引数量,算出收录转化率
· 收录率低于50%的站点,优先排查内容质量和网站技术问题
· 收录率持续下降的站点,可能被百度降权或进入沙盒期
链接提交工具看起来简单——就是往接口里POST一串URL。但真正用好它,需要理解四种方式的分工、配额的运作机制、错误排查的方法、以及推送和收录之间的因果关系。把API推送+自动推送JS+Sitemap三条通道都打通,再配合稳定更新的内容和健康的站内结构,收录速度就不会是瓶颈了。
如果你在UC后台管理着几十个站点,把批量推送脚本做成一个定时任务,每天自动跑一次。花半小时写脚本,省掉的是每天挨个站登录百度后台手动提交的一两个小时。
